Delta ES3 Easy PLus
台达 DVP-ES3 PLC 技术参考手册 Version 2022.03
技术资料,仅供参考;由此引起的一切后果,概不负责,保留所有权利;
本文档依据官方 《DVP-ES3 系列程序手册》,《DVP-ES3 系列硬件及操作手冊》等相关整理完成,不能代替或部分代替官方的任何正式出版物,如产品宣传样本,产品目录,产品手册,随同产品、软件发布的说明性文档和在线帮助文件等等。在所有正式场合,一切应以官方的正式出版物为准。
本文档包括 Delta ES3 系列的使用、通信、技术工艺等的编程配置的详细步骤,并对用户经常,甚至是必然遇到的问题、疑问的解答,以及隐含着其他许多问题答案的叙述性文字,还有一些作者认为有助于读者理解、解决问题的背景知识。Delta PLC ES3 Easy Plus 力争做到精简实用,帮助技术人员快速上手,解决使用中的常见问题。
版本修订记录
V2022.03
- 创建该文档,确定基本框架
Delta PLC 官方网络资源
官方主页 产品导航 - PLC可编程控制器- (delta-china.com.cn)
官方下载中心 下载中心 - (delta-china.com.cn)
官方云课堂 台达云课堂 (delta-china.com.cn)
官方培训中心 培训中心 (delta-china.com.cn)
PLC 编程软件下载 ISPSoft 及 CommGR 等相关软件
HMI 编程软件下载 DOPSoft WPLSoft 等相关软件
DIAStudio 编程 DIAStudio
CodeSys 运动控制 CodeSys 相关软件
DVP 系列技术应用手册(程序篇) DVP-PLC 应用技术手冊 PDF (delta-china.com.cn)
ES3 硬件及程序手册等 ES3 相关手册
DVP-ES3 产品介绍
DVP-ES3 产品介绍
DVP-ES3 系列为台达 DVP 系列 PLC 高阶应用可编程控制器, CPU 最大支持256点输入输出以及最多8台模拟量模块,提供多样性的网络通讯选择,提供用户强大的网络功能,透过便利的软件设置,快速建立各式网络装置链接。
主要技术规格
- CPU 采用高速32 位处理器
- 主机点数:32 / 48 / 64 / 80
- 程序容量:64k steps
- 内置通讯端口: RS-485 * 2、Ethernet * 1、CANopen * 1
- 内置SD 卡插槽 (Micro SD)
- 最大IO点数: 256点(输入+输出)或8台模拟量模块
- 内置4组高速计数器,每组最高可支持200 kHz
- 内置4组(或8 点)高速200 kHz 定位输出
- 可搭配8 轴总线(CANopen)通讯型定位输出
- CPU 模块支持IEC61131-3 软件编程(LD、ST、SFC 及CFC)
应用领域
- 机械加工、射出成型机、包装机、精密纺织机、大型仓储管理、物流系统
应用环境
- 操作环境温度 0~55°C
- 储存环境温度 -40~70°C
- 操作环境湿度 5~95%,无结露
- 储存环境湿度 5~95%,无结露
- 工作环境 无腐蚀性气体存在
- 安装位置 控制箱内
- 污染等级 2
- 防护等级 IP20(非 UL 认证)
安规证书
- ES3 CPU 支持 IEC 61131-2、UL 61010-2-201,其他模块支持 IEC 61131-2、UL 508,具体证书请从官网下载 安规证书检索- 台达官网 (delta-china.com.cn)
编程及应用例程
DVP-ES3 订货号
CPU
代号 | 订货号 | 电气及输入输出点位 | 输出类型 |
---|---|---|---|
ES3_L32T | DVP32ES311T | 24VDC 16DI 16DQ | 晶体型(NPN)输出 |
ES3_32T | DVP32ES300T | 100~220VAC 16DI 16DQ | 晶体型(NPN)输出 |
ES3_32TR | DVP32ES300R | 100~220VAC 16DI 16DQ | 继电器(Relay)输出 |
ES3_48T | DVP48ES300T | 100~220VAC 24DI 24DQ | 晶体型(NPN)输出 |
ES3_48TR | DVP48ES300R | 100~220VAC 24DI 24DQ | 继电器(Relay)输出 |
ES3_64T | DVP64ES300T | 100~220VAC 32DI 32DQ | 晶体型(NPN)输出 |
ES3_64TR | DVP64ES300R | 100~220VAC 32DI 32DQ | 继电器(Relay)输出 |
ES3_80T | DVP80ES300T | 100~220VAC 40DI 40DQ | 晶体型(NPN)输出 |
ES3_80TR | DVP80ES300R | 100~220VAC 40DI 40DQ | 继电器(Relay)输出 |
数字量模块
代号 | 订货号 | 输入点位 | 输出类型及点位 |
---|---|---|---|
8DI | DVP08XM211N | 8 点输入 | |
4DI4DQR | DVP08XP211R | 4 点输入 | 4 点继电器输出 |
4DI4DQN | DVP08XP211T | 4 点输入 | 4 点晶体管(漏型)输出 |
8DQR | DVP08XN211R | 8 点继电器输出 | |
8DQN | DVP08XN211T | 8 点晶体管(漏型)输出 | |
16DI | DVP16XM211N | 16 点输入 | |
8DI8DQR | DVP16XP211R | 8 点输入 | 8 点继电器输出 |
8DI8DQN | DVP16XP211T | 8 点输入 | 8 点晶体管(漏型)输出 |
16DQR | DVP16XN211R | 16 点继电器输出 | |
16DQN | DVP16XN211T | 16 点晶体管(漏型)输出 | |
16DI8DQR | DVP24XP200R | 16 点输入 | 8 点继电器输出 |
16DI8DQN | DVP24XP200T | 16 点输入 | 8 点晶体管(漏型)输出 |
24DQR | DVP24XN200R | 24 点继电器输出 | |
24DQN | DVP24XN200T | 24 点晶体管(漏型)输出 | |
16DI16DQR | DVP32XP200R | 16 点输入 | 16 点继电器输出 |
16DI16DQN | DVP32XP200T | 16 点输入 | 16 点晶体管(漏型)输出 |
模拟量模块
代号 | 订货号 | 输入点位 | 输出类型及点位 |
---|---|---|---|
4AI | DVP04AD-E2 | 4点输入 | |
2AQ | DVP02DA-E2 | 2点输出 | |
4AQ | DVP04DA-E2 | 4点输出 | |
4AI2AQ | DVP06XA-E2 | 4点输入 | 2点输出 |
温度测量模块
代号 | 订货号 | 点位 | 类型 |
---|---|---|---|
4RTD | DVP04PT-E2 | 4 通道 | RTD |
6RTD | DVP06PT-E2 | 6 通道 | RTD |
4HJK | DVP04TC-E2 | 4 通道 | 热电偶 |
定位模块
代号 | 订货号 | 点位 | 类型 |
---|---|---|---|
2Z | DVP02PU-E2 | 2轴 | 2 轴运动控制;5~24VDC,1 组(A/B/Z 相)差动输入,硬件输入带宽最高 200KHz;24VDC,5mA,5 点输入,硬件输入带宽最高 1KHz;5VDC,2 轴(4 点)差动输出,最高输出频率 200KHz |
延长线模块
代号 | 订货号 | 点位 | 类型 |
---|---|---|---|
YCX | DVPAEXT01-E2 | - | DVP-ES2/ES3 系列 I/O 模块延长使用 |
技术规格及硬件接线
CPU
CPU 实物图
ES3系列 PLC 采用脱落式端子
220VAC 继电器输出型 PLC 接线
220VAC 晶体管 NPN 输出型 PLC 接线
24VDC 晶体管 NPN 输出型 PLC 接线
数字量模块
- 数字量输入DI:24VDC,5mA
- 继电器输出:250VAC,30VDC 以下,2A/点,5A/共点
- 晶体管输出:漏型,5 ~ 30VDC,0.5A/点,4A/共点
数字量输入模块
数字量输入既支持源型也支持漏型,需要根据多个外置传感器判定;具体参考《DVP-ES3 系列硬件及操作手册-2021/07/21版》 4.6节。
数字量输出模块 继电器输出
数字量输出模块 晶体管NPN输出
模拟量模块
- 模拟量输入:5V ~ +5V,-10 ~ +10V,-20mA ~ +20mA 为14 位分辨率;0/4~20mA 为13 位分辨率;
- 模拟量输出:10V~10V,0 ~ 20mA,4~20mA 均为14 位分辨率-
- 热电阻:Pt100、Pt1000、Ni100、Ni1000、0~300Ω、0~3000Ω,分辨率:0.1℃/0.1℉(16 位)
- 热电偶:J、K、R、S、T、E、N 或-80~+80mV;0.1℃/0.1℉(16 位转换器)
模拟量输入
模拟量输出模块
热电阻模块
热电偶模块
通讯接线
RS485接线
CAN总线
以太网接线
定位模块
编程
编程工具
编程软件 ISPSoft
ISPSoft 为台达新一代的可编程控制器(PLC)开发工具。采用 IEC 61131-3 的编程架构,支持六种编程语言以及丰富的应用指令集。除了具备基本的程序编辑功能之外,ISPSoft 还包含了许多的辅助工具,加上多语系的环境与亲切的使用界面,提供给用戶的将会是一个便利且高效的开发环境。
软件特色
-
采用国际标准 IEC 61131-3 的编程架构,并内建丰富的应用指令集。
-
支持六种语言,包括梯形图(LD)、顺序功能图(SFC)、功能块图(FBD)、结构化语言(ST),以及连续功能图(CFC)与 C 语言(C),且在一个项目中并不限定只可使用一种语言。具体PLC 不一定全部支持上述所有编程语言,支持哪些语言要视PLC而定。
-
提供许多的便利功能,如批注、书签、程序区段使能/失效、装置与符号管理、仿真器等。
-
支持多种联机操作,如在线监控、在线编辑、符号表监控、除错模式、PLC 操作/设置等。
-
提供多种密码及数据保护机制
-
支持新一代的通讯管理员 COMMGR
-
内建多种组态管理工具
- 硬件规划工具(HWCONFIG):用于对系统上的硬件架构进行组态与参数管理。
- 网络规划工具(NWCONFIG):用于管理及配置 PLC 系统的网络架构与数据交换机制。
- 储存卡工具(CARD Utility):透过管理向导与储存卡的操作,可对系统进行备份与还原。
-
针对运动控制提供各种解决方案,包括 PLCopen MC 功能块、G-Code 编辑器、E-CAM 编辑器、定位规划表等工具。
ISPSoft 系统需求
ISPSoft 目前版本是V3,可以从台达官方下载中文免费获取,参考官方资源链接。
支持的 PLC 及语言
ISPSoft 支持台达多款PLC设备,提供的功能也非常多,为了方便用户查询,这个章节将会介绍ISPSoft 对于 AS、AH5x0、AH5x1、AH560、AHxxEMC、DVP、DVPxxMC、AS5xx,这八种系列 PLC 机种所支持的功能做一个整理。
安装 ISPSoft
- 当计算机中已安装旧版的ISPSoft时,执行ISPSoft安装程序时,系统会自动检测有无安装旧的ISPSoft 版本,并提示要移除旧的 ISPSoft,移除完成之后会自动继续安装新的 ISPSoft。
- 从官网或官方渠道获取安装文件,运行文件包中的 Setup.exe, 一路回车,中间会安装必要运行库、驱动、和必备组件,然后安装完成。
卸载 ISPSoft
在开始菜单 找到 ISPSoft Uninstall,双击运行,待 ISPSoft 移除程序窗口出现后点选 是 确认动作后即可开始进行移除,等待后完成,卸载软件不会删除程序及档案
通讯管理 COMMGR
COMMGR 是台达电子的通讯管理工具,可以从台达官方下载中文免费获取。其主要的功能在于扮演台达软件与硬件之间的通讯桥梁,而通过 COMMGR 的管理,联机的工作亦将变得更为便利也更有效率。通常 COMMGR 会随 ISOSoft 自动安装,但也可以从官方网站下载独立版更新。
安装过程与 ISPSoft 相似,采取默认配置安装即可。 COMMGR 为独立于 ISPSoft 的工具软件,因此用户必须另外对其进行安装,而当计算机中已安装旧版的 COMMGR 时,执行 COMMGR 安装程序,系统会自动检测有无安装旧的 COMMGR 版本,并提示要移除旧的 COMMGR,移除完成后会自动继续安装新的 COMMGR。
ECAT Builder
EtherCAT联机组态设定软件,需要从官方下载中心免费获取,用于实现EtherCat网络组态及符号变量获取
CANOpen Builder
CANopen组态与运动控制设定软件,可能需要从官方下载中心免费获取,用于实现CANOpen网络组态及符号变量获取
程序架构
DVP-ES3 PLC 借助 IEC 61131-3 程序管理理念,通过程序组织单元 (Program Organization Unit, POU) 进行程序架构组织。POU 应当是用户程序中最小的、独立的软件单元。 IEC 61131-3 定义了三种类型的POU,按其功能的递增顺序依次为函数(Function,FUN)、功能块(Function Block,FB)和程序(Program, PROG),但DVP-ES3仅支持后两者。
- FUN(函数) ES3并不支持该特性 FUN是可以赋予参数但没有静态变量(没有记忆)的POU,当以相同的输入参数调用时,它总是生成相同的结果作为函数输出,例如算术运算指令。
- FB(功能块)ES3 支持 FB是可以赋予参数并具有静态变量(有记忆)的POU,当以相同的输入参数调用时,它的输出状态取决于其内部和外部变量的状态,它能记忆状态信息,例如定时器和计数器等。
- PROG(程序) PROG代表PLC用户的最高层,即程序,它能存取PLC的IO变量,这些IO变量必须在POU或其变量表中予以说明。
其调用结构如图所示,Prog 程序可以随意调用FB和FC,FB可以调用FB和FC类型函数,但是FC不支持调用FB。
工作管理
在上述组织下,可以通过项目管理区 | 工作(TASK) 为 Prog 分配任务,其任务主要为三种,
- 周期性:被指派至周期性的程序 Prog,其执行方式便是单纯的重复扫描,按多个周期性Task则顺序执行
- 定时中断:当定时中断工作的时间到达后,被分配至该定时中断工作的所有程序 Prog 便会依照排列顺序执行
- 条件中断:当中断条件成立时,如外部触发中断的某个接点被触发,被分配至该 TASK 的所有 Prog 便会依照排列顺序执行一遍
ES3 每个 Prog 仅可以分配到一种任务之下,一个任务可以分配到多个Prog,可以有不分配到TASK的Prog。
三种 TASK 任务调用优先级关系如下:条件中断 > 定时中断 > 周期性循环
功能块 FB
功能块FB是一种具有运算功能的程序组件,本身也属于 POU 的一种,但它无法自行运作,而是必须透过程序 POU 对它进行调用,并传递相关参数之后,才能执行功能块所定义的功能;而功能块在执行完毕后,也同样可将内部的运算结果再回传给上层 POU(调用者)所指定的装置或变量符号中。
列别 | 说明 |
---|---|
VAR | 仅供功能块内部运算用,且在运算结束后,变量符号的状态及数值会被保留下来。 |
VAR_INPUT | 用做功能块的输入端点,只读,传值 |
VAR_OUTPUT | 用做功能块的输出端点,只写,传值 |
VAR_IN_OUT | 功能块的反馈型端点,既可以读取也可以写入,ES3传值 |
当Prog或FB调用FB时,各个接口数据需要注意如下规则:
- 调用方的变量符号(P_VAR)与功能块端点(FB_VAR)的数据类型须完全一致
- 当有任何一方为 WORD 系列的数据类型时,另一方便允许是 WORD、INT、REAL 任一系列的数据类型,而满足此条件时,P_VAR 的数据长度便允许大于或等于 FB_VAR。
- 若 P_VAR(调用方)的数据类型为 STEP,则 FB_VAR(功能块)的数据类型可为 BOOL,此操作代表调用方的步进点状态将会在功能块的内部使用。
FB被Prog调用时,会生成实例,并被自动编号为P1,P2,……. 等背景块,为区别FB调用,FB实际调用必须指定背景块以区别不同调用过程。
数据区及寄存器
DVP-ES3 定义多种存储装置,用于访问输入输出IO及数据,其访问标识符和取值范围如下表所示
类型 | 识别标识符 | 数量 | 范围 | 备注 | 位访问 | 字访问 |
---|---|---|---|---|---|---|
数字量输入 | X | 256 | X0-X377 | X+8进制表示 | ok+F* | |
数字量输出 | Y | 256 | X0-X377 | Y+8进制表示 | ok+F* | |
辅助寄存器 | M | 8192 | M0-M8191 | M+10进制表示 | ok | |
特殊寄存器 | SM | 4096 | SM0-SM4095 | SM+10进制表示 | ok | |
一般标志 | S | 2048 | S0-S2047 | S+10进制表示 | ok | |
定时器 | T | 512 | T0-T511 | T+10进制表示 | ok | ok |
计数器 | C | 512 | C0-C511 | C+10进制表示 | ok | ok |
高速计数器 | HC | 256 | HC0-HC255 | HC+10进制表示 | ok | ok |
数据寄存器 | D | 30000 | D0~D29999 | D+10进制表示 | ok+F* | ok |
特殊数据寄存器 | SR | 2048 | SR0-SR2048 | SR+10进制表示 | ok | |
文件寄存器 | FR | 65536 | FR0~FR65535 | FR+10进制表示 | ok | |
变址寄存器 | E | 10 | E0-E9 | E+10进制表示 | ok |
F* 表示可以强制修改
ES3 各数据区属性
类型 | 识别标识符 | 读写属性 | 断电保持属性 | 保持范围 |
---|---|---|---|---|
数字量输入 | X | 一般只读,不建议写 | 不保持 | |
数字量输出 | Y | 一般只写,可读 | 不保持 | |
辅助寄存器 | M | 可读可写,不建议内部用,不建议非符号访问 | 部分保持 | M6000-M8191 |
特殊寄存器 | SM | 视情况而定 | 部分保持 | 系统管理 |
一般标志 | S | 可读可写,不建议内部用,不建议非符号访问 | 部分保持 | S512-S1023 |
定时器 | T | 配合定时器专用 | 不保持 | |
计数器 | C | 配合计数器专用 | 部分保持 | C448-C511 |
高速计数器 | HC | 配合高速计数器专用 | 部分保持 | HC128-HC255 |
数据寄存器 | D | 可读可写,数据存储区 | 部分保持 | D20000-D29999 |
特殊数据寄存器 | SR | 可读可写 | 部分保持 | 系统管理 |
文件寄存器 | FR | 可读可写 | 保持 | FR0-FR65535 |
变址寄存器 | E | 可读可写 | 不保持 |
PLC 程序运行过程
DVP-ES3 系统运行总是按照一个固定流程运行的,包括诊断、更新输入输出、执行程序等
编程基础
数据类型
基本数据类型
ES3 支持的数据类型包括如下的 7 种。
数据类型 | 数据长度 | 值范围 | 支持的数据区 |
---|---|---|---|
BOOL | 1个位 | 0,1 | 所有的位数据区 |
WORD | 16个位 | -32768 ~ 32767 | D/E |
DWORD | 32个位 | -2147483648 ~ 2147483647 | D/E |
INT | 16个位 | 0-16#FFFF | D |
DINT | 32个位 | 0-16#FFFF FFFF | D |
REAL | 32个位 | -3.4e+38~ -1.1e-38,0 ,1.1e-38~ 3.4e+38 | D |
STRING | 字符数向上取偶/2 * WORD | ASCII 字符 | D |
此外,还有两种Timer,Counter两种数据类型
数据类型 | 用途 | 支持的数据区 | 范围 |
---|---|---|---|
TIMER | 定时器格式,用来代表定时器装置 | T | 0-512 |
COUTER | 计数器格式,用来代表计数器装置。 | C | 0-512 |
数据字面量表示
当在PLC中输入常数时,必须按照数据类型对应的字面量格式输入,才会被PLC正确识别,并处理,基本字符串的字面量格式如下
- 十进制,也是PLC默认的数字类型,在需要数字的地方,直接输入数字,则会被PLC识别,标识符为K(不能输入K),如30,则直接输入30
- 十六进制数据,必须在十六进制数前面加 16#,如 K30 = 16#1E
- 浮点数,浮点数可以直接使用小数点数字表,标识符号为 F、DF,但不能输入F,DF,直接输入带有小数点的数字即可,如30.0
- 字符串,字符串的字面量,就是将需要赋值的字符串加上双引号""
- 时间字面量,DVP-ES3不存在时间字面量,时间计时器都是具有时间的寄存器,只要输入寄存器的倍数即可表示对应的时间
数组
DVP-ES3 数组与其他高级程序语言的数组概念几乎等同,即若干相同数据类型的组合。
其声明方法为 ARRAY_VAR := ARRAY [0..N] OF TYPE。 访问则通过 数组名[索引]
来访问对应下标的数组,索引值的内容必须由 0 开始,且不可大于或等于数组的大小。
声明数组类型的变量符号时,除了须指定数组元素的数据类型之外,亦须一并指定数组的大小,范围N为 1~2048;且在自行指定数组符号的启始地址时,须根据数组的数据类型而指定对应的装置,但须注意不可指定为 SR、SM、E、F…等装置。
ARRAY_0 := ARRAY [0..10] OF REAL, i int
则i的范围必须是0..9 不能小于0或大于9,否则会造成非法访问导致异常。
自定义数据类型
自定义数据类型 UDT,包括结构体、枚举、联合体。
- 结构体 STRUCT:结构体是由多个数据类型的成员组成,定义成员的数据类型,可为 BOOL、WORD、DWORD、INT、DINT、REAL、STRING、ARRAY 或另一 STRUCTURE 或 枚举。
结构体成员房访问,通过结构体+点+成员名。
|
|
-
枚举 ENUM:枚举类型就是有限状态的穷举的集合,其意义在于定义一组字符串别名以及对应的数值,便于帮助用户记忆。枚举类型不能做数组。
如果红绿灯表达可以如下。
|
|
- Union 联合体、共用体
ES3 联合体是一种特殊的数据类型,允许在相同的内存位置存储不同的数据类型。可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。联合体提供了一种使用相同的内存位置的有效方式。联合体的长度取决于最大的那个数据类型,然后其他数据类型执行末端对齐原则。
|
|
数据及IO寻址
DVP ES3 内存数据结构如下图所示,采用Little-endian byte swap 编码方式;
对于无符号整数:201993258 => 16#0C0A 2C2A;其内部存储结构(B0 B1 B2 B3): 2C 2A 0C 0A;
浮点数采用 IEEE754 的标准,占用两个字,如果涉及双精度转换单精度(合理范围转换),那么重要的就是将符号位和指数部分保留,尾数高位保留,低位截断。
直接寻址
ES3直接寻址包括符号寻址和绝对值寻址两种
- 符号寻址,即建立变量表通过符合变量来访问数据
- 绝对寻址,则直接在接口处填写绝对值地址,如D200,SM401等等
实际应用中,强烈建议使用符号寻址而非绝对寻址,符号寻址可以通过变量名称及定义得到待处理的变量类型、大小及其物理意义,避免各种奇怪的问题。
- 无法按照字、双字访问位装置,但可以借用 MOVB 指令(按照位移动指令);将多个位合并为一个字或者一个字复制到连续的多个位;
- 无法直接访问一个双字符号中的字,可以利用上述指令建立新的变量,或者通过共同体访问
- LD 常开指令无法使用符号的位访问,但可以使用装置位访问;但指令处均可以;(个人认为是个BUG)
间接寻址
- 通过变址寄存器访问
变量符号的变址寄存器修饰,格式:符号名称@变址寄存器,变址寄存器也可以是变址寄存器符号。如
定义:VAR_A WORD D100; OFFSET E0 = 3 , 则VAR_A@OFFSET-> D103
- 通过数组索引访问
定义数组后,通过数组名称[索引]来访问变量。 如 ARRAY_0 = ARRAY [10 ] OF BOOL; INDEX INT D0 = 3;
则ARRAY_0[INDEX] -> ARRAY_0[3] 的数据
数字量访问与输出
DVP-ES3 PLC 数字量访问非常直接简单,可以直接调用输入存储器种的数据,而更新存储器的任务交给PLC自动完成。
- 对于数字量输入通道,将PLC IO从零开始计数,一直到右侧的最后一个IO,按照从左到右的顺序,逐次排列
- 访问通道状态,则用 $XM_{8}$ ($M_8$表示进制数)
- 由于PLC及IO模块带的IO点位数,几乎都是8的倍数,那么确定DI,则需确定是系统上的第几组DI,然后X + 组号 + 组内编号访问
如果对访问实时性有要求,需要及时处理DI,则在正常访问符号前面+D,如DX23,则会程序执行器直接访问X23点状态
数字量输出同理
模拟量调用
DVP-ES3 将模拟量定义为特殊模块,其IO量无法直接从输入区获得,需要借助系统映射或指令
- 系统映射
ES3 主机连接特殊 I/O 模块时(不限于模拟量模块),寄存器 D9900 ~ D9999 将被占用,使用者可利用MOV 指令在程序中指定 D9900 ~ D9999 来获取通道数值,定义如下。
第1个IO | 第2个IO | 第3个IO | 第4个IO | 第5个IO | 第6个IO | 第7个IO | 第8个IO | |
---|---|---|---|---|---|---|---|---|
位置代码(供指令用) | D1320 | D1321 | D1322 | D1323 | D1324 | D1325 | D1326 | D1327 |
CH1信号值 | D9900 | D9910 | D9920 | D9930 | D9940 | D9950 | D9960 | D9970 |
CH2信号值 | D9901 | D9911 | D9921 | D9931 | D9941 | D9951 | D9961 | D9971 |
CH3信号值 | D9902 | D9912 | D9922 | D9932 | D9942 | D9952 | D9962 | D9972 |
CH4信号值 | D9903 | D9913 | D9923 | D9933 | D9943 | D9953 | D9963 | D9973 |
CH5信号值 | D9904 | D9914 | D9924 | D9934 | D9944 | D9954 | D9964 | D9974 |
CH6信号值 | D9905 | D9915 | D9925 | D9935 | D9945 | D9955 | D9965 | D9975 |
首先确定模拟量模块位置,然后根据模块位置及通道位置,确定当前信号值。如果是AO通道,那就是映射的通道输出值。
- 指令获取
ES3 有从特殊模块获取数值的两条指令,From、To 用于从特殊模块获取数值和写入数值,包括通道配置。每个特殊模块,都有自定义的控制寄存器 CR,From和To就是控制这些寄存器的,具体寄存器定义请参考各个模块手册。值得注意的是 上述通道映射值为 N次 (默认为10次)采样后的平均值,如果需要读取当前实时读取,请将平均次数设定为1.
- 模拟量输入模块值计算
DVP04AD 、 DVP06XA 模拟量输入通道,均支持关闭, ±10V,±5V,0-10V,0-5V,±20mA,0-20mA,4-20mA 8种模式,其中双向模式均为14bit精度,单向模式均为13bit精度,且其映射通道范围值均为 -32000 ~ 32000(双向模式),0 ~ 32000(单向模式)。
其转换公式为
传感器感知数值 = 传感器量程下限 + (通道输入值- 通道下限值) x (传感器量程上限 - 传感器量程下限 ) / (通道上限值 - 通道下限值)
对于双向输入的模拟量,则计算公式为: $$ V = R_L + [X-(-32000)]\times\frac{R_H-R_L}{32000-(-32000)} = R_L + (R_H-R_L) \times\frac{X+32000}{64000} $$ 对于单向输入的模拟量,则计算公式为: $$ V = R_L + X\times\frac{R_H-R_L}{32000-0} = R_L + (R_H-R_L) \times\frac{X}{32000} $$ 例:如果有一个有源温度传感器,量程为 -50~50 ℃,输出信号值为 -10V~10V,如果通道值当前为 17652,则当前温度计算如下 $$ t=-50+[50-(-50)]\times\frac{17652+32000}{64000} = 27.58 ^{\circ}C $$
如果有一个有源温度传感器,量程为 0~100 ℃,输出信号值为 4-20mA,如果通道值当前为 17652,则当前温度计算如下 $$ t = 0 + 100 \times \frac{17652}{32000} = 55.16 ^{\circ}C $$
- 模拟量输出计算
DVP02DA-E2、DVP04DA-E2、DVP06XA 模拟量输出模块,均支持 关闭、-10V~10V,0-20mA,4-20mA 4种工作模式,转换精度均为14bit。且其映射通道范围值均为 -32000 ~ 32000(双向模式),0 ~ 32000(单向模式)。
模拟量输出过程与模拟量输入过程刚好相逆,其转换公式为
通道输出值 = 通道下限值 + (拟执行输出值 - 执行下限值) x (通道上限值 - 通道下限值)/ (执行上限值 - 执行下限值)
对双向输出模拟量为 $$ O = -32000 + (Y-R_L)\times \frac{32000-(-32000)}{R_H-R_L}= \frac{64000}{R_H-R_L} \times (Y-R_L) -32000 $$ 单向输出模拟量为 $$ O = \frac{32000}{R_H-R_L} \times (Y-R_L) $$ 例:如果有一个调节阀 调节范围 0-100%,信号范围 4-20 mA,要控制阀门开度为25%,则通道赋值计算过程如下: $$ O = \frac{32000}{100-0}\times(25-0) = 8000 $$ 如果有一个双向转动的电机,被调节范围 -50~50Hz,信号范围为 -10~10V,要控制电机频率为 -35,则通道赋值计算过程如下 $$ O = \frac{64000}{50-(-50)}\times(-35-(-50))-32000 = -22400 $$
- 热电阻及热电偶计算
DVP04PT-E2,DVP06PT-E2 热电阻测量模块,支持 关闭、PT100(-180 ~ 800℃)、Ni100(-80 ~ 170 ℃)、PT1000(-180 ~ 800℃)、Ni1000(-80 ~ 170℃)、0-300Ω,0-3000Ω,JPt(-180 ~ 500℃)、Cu50(-50 ~ 150℃)、Cu100(-50 ~ 150℃),LG-Ni1000(-50 ~ 180℃) 共10种运行模式,其中后4种只有DVP06PT-E2支持,分辨率为0.1℃,通道值为实际温度值的10倍整数。
DVP04TC-E2 热电偶测量模块,支持关闭、 J-type (-100°C ~ 1150°C), K-type (-100°C ~ 1350°C), R-type (0°C ~ 1,750°C), S-type (0°C ~ 1,750°C), T-type (-150°C ~ 390°C), E-type (-150°C ~ 980°C), N-type (-150°C ~ 1,280°C), -80mV ~ +80mV 共8种模式,分辨率为0.1℃或0.18℉,通道值为实际温度值或电阻值或电压值的10倍整数。
温度计算公式为 $$ V = X / 10 $$
IO更新
当外界IO更新较快,循环周期比较长时,可以使用REF指令,在程序中实时访问外机IO.
- REF(D,N) D可选为 XM或YM,N必须为8的倍数或特定值
N输入值 | 装置 | REF动作说明 |
---|---|---|
N=8倍数 | Y0,X0 | 立即刷新IO数据 |
N=1 | 高速输出点 | 立即刷新脉冲位置 |
N=0 | 高速输出点 | 立即暂停该高速输出点、设定暂停输出标志,以及刷新当前位 |
- DHSRF 指令 刷新高速计数器
编程指令
DVP-ES3 包含很多指令,而且分布较为复杂,这里对常用指令及使用方法进行简单整理和说明。
基本指令及指令用法
LD AND OR 载入、串联、并联装置常开接点,LDI ANI ORI 载入、串联、并联装置常闭接点;支持接入装置包括常见的位装置X/Y/M/SM/S,以及T/C/HC/DX.N等装置
- 在任意指令区段(可以为任意指令符号上或红黑线框处),直接键盘输入指令(不须输入回车符等符号,而且必须以字母开头)及其指令参数。
|
|
- 新输入的指令的作用范围是以当前指令为参考的,如果是and 则并联在当前指令后面,否则作用在当前指令前面。
- 梯形图中,and 是并联一个常开点,or 是串联一个常开点,所有的分支都是基于此关系建立
- 用鼠标双击指令图标本身,可以选择同类常用指令 如常开、常闭、上升沿、下降沿就属于同一个类型的点
- 选中指令,直接点击回车,则是改变当前指令的作用参数,可以直接输入新的参数
如图 键入指令的顺序应当为
|
|
- 一般情况下,与16位指令功能相同的32位指令,在16位指令之前加D,则为32位指令,包括DWord和Real
- 一般情况下,与16位指令功能相同的字符串指令,在16位指令之前加$,则为字符串指令
- 有Pulse指令的,则会只有在上升沿时执行,在普通指令基础上,后面加P,则只有上升沿才会执行
- 注意:本篇指令大多数指令可应用程序块Prog和子程序FB中,但带有P的指令几乎都不可应用于FB,只能自定义上升沿触发器,执行不带P的指令。对于必须使用的上升沿和下降沿,台达给出专用替代指令。只能借助这些指令,产生需要上升沿和下降沿
FB中可不用指令 | 替代指令 |
---|---|
LDP ANDP ORP | PED APED OPED |
LDF ANDF ORF | NED AND ONED |
PLS PLF | 无 |
NP PN | FB_NP FB+PN |
MC MCR | 无 |
脉冲型指令(P指令) | 无,使用上述指令触发本身执行 |
赋值 MOVE/Set
DVP-ES3 赋值指令有很多,包括MOV MOVB BMOV NMOV SMOV OUT等
- MOV
最基本赋值指令,即将一个数据从 Source 复制到另一个位置 Destination,默认为16位版本,即仅能操作一个Word,DMOVE 则复制一个Dword,带P则 上升沿时有效,且带P的指令仅可以用于程序块,不支持功能块。如图所示。S和D能支持除位变量的所有装置。
MOV要求S和D必须是相同的数据类型,如果不相同(绝对地址其实不存在上述问题,如果是符号访问,则必须要相同),16数据到32位数据,请使用MMOV,系统会自动处理符号;32位数据到16位数据,请使用RMOV。
将多个连续数据的传送到对应位置的多个装置时,请使用BMOV,支持D,P;BMOV 的神奇变型NSFL、NSFR,左移动(向0靠近)右移动(向大数靠近)
将一个数据传送到多个位置,请使用NMOV,支持D,P
- MOVB
位复制指令,从 S (必须是位地址) 开始,复制N个位到D目的位地址()。支持P。仅支持位移动。
-
CML,高低位反转传送,输出到另一个字;支持D和P,
-
XCH,对于 S1, S2 数据进行交换,支持D和P,多个连续位置的交换,使用 BXCH
-
ZRST 零填充 区域清除 清除 D1、D2(包括D1D2在内)所有寄存器数值,归零。D1-D2必须类型相同,且D2指向大于D1。
-
DIS 拆分赋值,16 位数据的 4 位分组到4个寄存器
-
UNI 合并赋值,DIS 的反向操作,将4个4位组数据合并为连接为16 位数据
-
位赋值,位赋值包括 OUT SET RESET ALTP 四种
- OUT即为线圈,当前方能流高电平则输出ON,否则输出为OFF,两者必居其一。
- Set和Reset 类型相同,Set 当前方能流高电平则置位,否则不动作;Reset相反,高电平复位,否则不动作;
- 位反转,ALTP(D),每一次上升沿,D状态反转一次
-
ZSET 连续位赋值1
-
数据转换与赋值
-
FLT DFLT 将整数转换为浮点数
-
INT DINT 将浮点数转换位整数
-
MMOV 将16位整数转换为 32 位
-
RMOV 将32位整数转换为 16 位
-
NEG DNEG FNEG 对整数或浮点数取相反数
-
-
BCD 、BIN 二进制与BCD编码转换
-
BCD 指令 将 BIN 编码数字转为BCD,32 位编码转换用 DBCD。BIN 指令则相反
-
FBCD 二进浮点数转换为十进浮点数,FBIN 十进浮点数转换为二进浮点数
-
-
DTM 数据转换与搬移
比较与逻辑运算
比较运算
一般用LD+符号(>,>=,=,<,<=,<>)生成,32位使用DLD+符号,浮点数用 FLD+符号,绝对值比较 LDZ+符号,
所有比较都是S1与S2做比较
为了实现串并联关系,还可以使用如下变种:
AND+符号 DAND+符号 OR+符号 DOR+符号 对16、32位整数进行比较
FAND+符号 FOR+符号对浮点数比较,
ANDZ+符号 DANDZ+符号 ORZ+符号 DORZ+符号 对其绝对值做比较
位运算与位逻辑
-
上升沿,上升沿是一种状态,即该变量上一个周期是False,当前周期是True,则为上升沿
-
LDP, ANDP, ORP 载入、串联、并联上升沿继电器,支持 DX、X、Y、M、SM、S、T、C、HC、D 操作数,只需要添加检测的值。
-
PLS 检测上升沿,并生成一个周期为True的脉冲;
-
NP 线路上升沿检测,
-
-
下降沿,下降沿是一种状态,即该变量上一个周期是TRUE,当前周期是FALSE,则为下降沿
- LDF, ANDF,ORF 载入、串联、并联下降沿,支持 DX、X、Y、M、SM、S、T、C、HC、D 操作数,只需要添加检测的值
- PLF 检测下降沿,并生成一个周期为True的脉冲
- PN 线缆下降沿检测
- WAND DAND 按位与,LD& 、DLD& 、AND& 、DAND& 、OR& 、OR&指令可直接与母线连接使用,不等于0接通,否则不接通 【13B】
- WOR DOR 按位或,LD| 、 DLD|、AND| 、DAND|、OR| 、DOR| 指令可直接与母线连接使用,不等于0接通,否则不接通【13B】
- WXOR DXOR 按位异或,LD^ 、 DLD^ 、AND^ 、DAND^、OR^ 、DOR^ 指令可直接与母线连接使用,不等于0接通,否则不接通【13B】
- WINV DINV 按位取反,LD& 、 DLD& 、AND& 、DAND&指令可直接与母线连接使用 【13B】
- SUM 具有D、P版本,对指定寄存器内位为True的数量进行求和
- BON 具有D、P版本,判断 S 内容值的第 n 个位的状态,并将其状态存放到 D 指定位
- SFR 带D、P,向右移位,空位补零;
- SFL 带D、P,向左移位,空位补零;
- ROR 向右循环位移n位,带有D、P版本
- ROL 向左循环位移n位,带有D、P版本
- SWAP 按照Byte进行字内对调交换,支持D和P;16位指令,对上下8位进行交换;对32位指令,对各个字内进行交换;
数学计算
- 加法 + 、减法-、乘法*、除法/ ,32位整数用D+、D-、D*、D/,浮点数 F+、F-、F*、F/,均有带P的版本
值得注意:乘法*,除法/,的输出操作数都会占用双倍的输入操作数空间;两个16位乘法的输出结果是一个32位数;两个16位除法的输出结果是1个16位的商和一个16位的余数。32位整数与16位整数相同。
如果不需要上述隐式扩展数据类型转换,请用MUL16、MUL32,DIV16,DIV32 则输入输出空间相同,浮点数的F+、F-、F*、F/ 也不会造成隐藏扩展
-
INC DEC ,自加1,自减1,32位数前面加D
-
ABS 具有D、P 版本,对操作数取绝对值
-
仅支持浮点数的三角运算
FSIN FCOS FTAN FASIN FACOS FATAN FSINH FCOSH FTANH 均有带P版本,上述指令 S 所指定的来源可为弧度或角度,由标志 SM695 决定,当 SM695=OFF 时,指定为弧度模式,弧度值=角度×π/180;当 SM695=ON 时,指定为角度模式,角度值=弧度×180/π,角度范围:$0^{\circ}$ ≦角度值≦$360 ^{\circ}$ 。
FRAD 角度转弧度,FDEG弧度转角度
-
SQR DSQR 求整数平方根,只能精确到整数,FSQR求浮点数平方根
-
FEXPT 求e指数, FLOG求任意底数的对数,FLN求e对数,FPow 求任意指数
-
RAND 随机数,对给定上下限的S1,S2求随机数,
过滤统计排序
MAX MIN LIMIT SEL MUX
-
WSUM 具有D、P版本, FSUM,将 S~S+n-1 所指定寄存器内容值,以有号数十进制作相加,存放于 D 所指定的寄存器中。
-
MEAN 求平均值,具有D、P、F版本
将 S 起始之 n 个装置内容值相加后取平均值存入 D 中。如果计算中出现余数时,余数会被舍去。
- LIMIT 带有限定范围的输出
LIMIT(下限值,上限值,输入值,输出值),输出值被限定在上下限范围内。可用于D,P。仅用于16位指令
- BAND 输入死区判定,具有D、P版本
判定输入值S3,是否在下限S1和上限S2之间,是则返回0,否则输出偏差,偏差具有正负
- ZONE 输出死区判定,具有D、P版本
判定输入值S3为否位零,是则输出0;大于0时,输出 S3+S2;小于0则输出S3+S1
- SORT 排序 将特定序列按照某维度排序,带有D、P、F 版本 【非稳定排序】
SORT(起始地址S,待排序行m1,待排序列m2,排序参考列n,D输出结果区起始值),该指令输入数据为起始区S的 m1xm2个寄存器,输出占用空间与输入相同。注意数据填充规则为先行后列
- SER 多点查找,带有D,P
SER(S1,S2,N,=> D) S1 指定被比较起始寄存器,n 为被指定起始寄存器后的寄存器数量,S2 所指定的数据,以有号数十进制作比较,比较结果被存放于 D~D+4 寄存器当中,D 存放具有相等数值的数量,D+1是第一个相同值相对偏移,D+2 最后一个相等值的相对偏移,D+3 整个S1+N序列中最小值的编号,D+4 整个S1+N序列中最大值的编号
定时器
- RST 接点或寄存器清除
RST 会将D装置所有状态复位归零,包括计时器、计数器、线圈、接点、Word、Dword、HC、Real。
- TMR 16位定时器 100ms,TMRM 16位定时器 10ms, TMRH 16位定时器 1ms
S1提供一个定时器,S2 提供定时器设定值(32767);该定时默认为连续计量,即触发器信号丢失则重新开始计量,如果需要触发信号丢失后,连续计量,则需要定时器T前面加S,积分型计量
范例三,表示使用T5定时器,计量1000*1ms,后T5触点接通,如果在此期间M0转变为False,则等待M0 变成ON时,重新开始计算,直到达到1000ms;范例4,则会在M0接通时计量,M0断开时停止计量,但会保留T5已计量数值,知道1000ms,接通T5触点。
需要注意的是,当条件接点从 ON->OFF 时,T 计时值将自动归零;积分型 ST 定时器,若需清除计时值,请搭配使用 RST 指令;一般情况下,每个定时寄存器,只能用于1个TMRH或TMR。
- STMR 遇到下降沿,延迟 m 个 S 基准时间,输出D信号的关闭信号,D及D+3会被全部占用
请参考 10.01 ES3 功能装置
计数器
- CNT 16计数器
当 CNT 指令由 OFF->ON 执行,表示所指定的计数器线圈由失电→受电,则该计数器计数值加 1,当计数 到达所指定的数值(计数值=设定值),其 C 接点(BOOL)动作将为 ON。当计数到达之后,若再有计数脉冲输入,其接点及计数值均保持不变,若要重新计数或作清除的动作,请利用 RST 指令。
S1 为计数器编号,S2 为计数器设定值
字符串操作
- $MOV 字符串移动
$MOV 字符串传送专用,仅可以处理字符串,处理时会将 S 算子的字符串直接移到 D 算子内,并且结尾会自动补上结尾码(16#00)。
-
$LEN 计算字符串长度
-
字符串比较只有等于和不等于检查,LD$= LD$<> 两种
-
$+ 字符串拼接
-
$DEL 字符串删除
-
$INS 字符串插入
-
SPLIT 字符串拆分
-
MERGE 将两个字符串按照分隔符合并
-
字符串转换
- BINDA DBINDA :有号数十进制→ASCII 变换
- BINHA DBINHA :BIN 十六进制→十六进制 ASCII 变换
- BCDDA DBCDDA:BCD→ASCII 变换
- DABIN DDABIN:有号数十进制 ASCII→有号数十进制 BIN 变换
- HABIN DHABIN:十六进制 ASCII→十六进制 BIN 变换
- DABCD DDABCD:BCD ASCII→BCD 变换
- $FSTR :Float→String
- $FVAL:String→Float
-
字符串子串
- $RIGHT 从右边获取n字符串
- $LEFT 从左边获取n字符串
- $MIDR 从S1字符串,S2位置开始,获取S2+1个字
-
$Ser 字符串查找
-
$RPLC 字符串替换
时间运算(万年历)
- TRD 读取系统时间,并存放到D(D0~D+6,一共7个字, ARRAY [7] of WORD/INT),提供年、星期、月、日、时、分、秒数据,其读取的数据位于SR391到SR397当中,TRD 指令的功能就是让程序设计者直接将万年历当前时间读出至指定的 7 个寄存器当中。
SR391 只保存公元年份的后 2 位。星期是按照1-7表示周一到周日;时间为24小时制
- TWR 写入系统时间,并存到系统内部,写入位置必须为7个连续的字,写入需要上升沿触发,写入出错,SM0=ON
- T+ 时间加法,将操作数S1 和S2的时分秒进行相加,如果小时超过24小时,则溢出取24小时余数,并SM602 = 1
- T- 时间减法,将操作数S1 和S2的时分秒进行相减,减算结果若为负数时,借位标号 SM601=ON、该负数再加上 24 小时所得的结果显示 D 所指定的寄存器当中。
- Hour 小时计数并到达指定时间后导通,S为导通时间(h),D+0为当前测量小时数,D+1为未满1小时的秒数,D+2系统保留用,当输出装置导通后,定时器会继续计时。
- 时间比较,可以用TCMP和TZCP,但都局限于时间比较,无法比较日期
程序结构控制
- CJ 条件跳转,当程序执行到CJ时,跳转到预先定义的LABEL处,多个 CJ 指令可重复指定同一指定标签
JMP 无条件跳转指令- GOEND 跳转到END,条件成立时直接跳转到程序中的 END,类似于RETURN 功能块不支持
- FOR 循环回路起始,需要指定回路重复执行的次数S
- NEXT 循环回路结束,重复执行的程序即为For 到 Next 之间的程序段 ,如果没有遇到Break,则执行S次
- BREAK 强制结束 FOR-NEXT 循环,强制结束 FOR-NEXT 的循环,将尚未执行完的循环数存放到 D,并跳至最近 NEXT 指令的下一个指令执行。
通讯指令
- Modbus 通讯请参考Modbus通讯一章
- 以太网通讯请参考以太网通讯一章
- CANOpen 通讯请参考CANOpen一章
还有本文中未介绍到指令,请参考程序手册或ISPSoft软件帮助
结构化编程
结构化语言(Structured Text,ST)是一种类似 C 语言或 PASCAL 等高级语言的编程方式,其最大的特色在于整个程序是由许多的文字叙述所建构而成,而相较于指令列表(IL),ST 则具有较高的可读性,且可透过类似数学方程式的文法来表达一个复杂的表达式,因此对于一个需要进行繁复运算的程序来说,ST 是较适合此种应用场合的开发语言。
ST 程序结构
一般情况,按照从上到下,从左到右的顺序,逐次执行所有语句,直到遇到条件结构、循环结构。
条件结构
- IF
|
|
- CASE
|
|
整数表达式可为装置、变量符号或是任何表达式,但不可为常数,且其代表数值的数据类型必须为 INT(-32768 ~ 32767)或 DINT(-2147483648 ~ 2147483647)类型的整数,而若直接使用装置编号,如 D0,系统则会自动将该装置的内容值视为 INT 类型的数据;列表中的条件数值不可有重复且必须为整数,其范围则须视 CASE 关键词后的整数表达式类型,即 INT 类型为 -32768 ~ 32767,而 DINT 则是 -2147483648 ~ 2147483647。
当有不同的条件数值却执行相同的叙述句时,编辑时便可将其合并为一列。
(a) 若各条件为不连续数值,则各数值间须以逗号隔开,例如 1, 3, 5 : 子叙述句,而此例则代表当整数表达式的数值满足 1、3、5 中的任何一个时,系统便会执行同一个子叙述句。
(b) 若各条件数值是某个连续的区块,则编辑时可使用『 .. 』符号来表示条件数值的范围,例如 3..6 : 子叙述句 便代表当整数表达式的数值落在 3 到 6 的范围内(包含 3 与 6)时,系统便会执行同一个子叙述句。且当用『 .. 』符号表示条件数值时,左侧数值必须小于右侧,如 6..3 : 的范围叙述便是不合法的。
循环结构
- Repeat 循环直到满足条件
|
|
- while 循环知道条件不满足
|
|
X 装置的值必须在程序的扫描周期完成后才会被更新,因此若要以 X 装置的状态做为离开循环的条件时,请务必在结构内部加上 IO 更新指令的叙述句,或是在中断程序中更新 X 装置的值。
- FOR 确定循环,从起始值到终点值的固定循环
|
|
上述的起点值、终点值与递增量表达式可以是装置、变量符号、表达式或常数,且其代表数值的数据类型必须为 INT(-32768 ~ 32767)或 DINT(-2147483648 ~ 2147483647)类型的整数,而若直接使用装置编号,如 D0,系统则会自动将该装置的内容值视为 INT 类型的数据
当起点值小于终点值时,所设定的递增量便必须为负数,否则将会造成无限循环。
条件变量的数据类型亦必须是 INT 或 DINT,且当条件变量或装置在循环的程序当中有参与运算时,请小心避免因变更到它的值而造成无限循环。
实际运作时,系统会先将条件变量或装置的内容值加上递增量后,再判断是否可以离开循环,但若加上递增量之后的值会产生溢位时,程序便会因为离开的条件无法成立而造成无限循环。
RETURN 、EXIT
- 程序执行到任何带有return语句的地方,都会停止继续子函数,直接返回
- EXIT 在Repeat while for 循环中生效,遇到exit则退出循环
API调用结构
- API ( 操作数1,操作数2,操作数3,……,操作数N);
ST 程序中执行 API 指令时,本身并不须要指定 En 端点的状态,只要程序执行到该叙述句时,对应的 API 指令就会被执行。、
只要不破坏操作数与关键词的完整性,任何的换行都是被允许的。
在 ST 语法中的 API 应用指令也是一个叙述句,因此最后的结尾一样要加上分号『;』。
内部操作数的排列顺序不可变动,其顺序请参考各机种的指令手册。
API 应用指令并不支持回传值的功能,因此 M0 := CMP(D0, D10, M0); 的叙述句便是不合法的。
因在 ST 程序中的 API 应用指令无法操作 En 端点,因此若使用了定时器指令(TMR)时,请务必于程序中加入重置定时器的叙述句,如下例的行号 4,否则该定时器将无法归零。
FB 调用结构
调用FB时,实际为: 功能块实例名称(输入接口名称1 := 输入操作数1,输入接口名称 2 := 输入操作数2,……,输出接口名称 => 输出操作数1,输出接口名称2 => 输出操作数2,…..)
括号之前的名称应为功能块实例而非功能块定义,亦即应输入被宣告成功能块类型的变量符号名称。
输入侧端点所使用的指定符号为「:=」,而输出侧端点所使用的指定符号则是「=>」。
结构内的端点与操作数顺序必须依照功能块的定义,而不可任意变动,其顺序则为排除 En/Eno 端点后,先由上而下列出所有输入侧端点,其中 VAR_IN_OUT 类别的端点则被归类为输入侧;接着再由上而下列出所有输出侧的端点。
注释
|
|
运算符
功能
系统功能
系统时钟
DVP-ES3 PLC 内建有万年历时钟,断电可保持,保持时间随电池而定。系统时间的设定通过ISPSoft 菜单工具|万年历设置,可以查看PLC当前时间及计算机时间,支持自定义修改。
万年历数据存放在系统特殊寄存器 SR391-397中,支持读写,存储为年、星期、月、日、时、分、秒数据。除此以外,DVP-ES3还提供一些有用的时钟触发寄存器,方便编程。
特殊寄存器 | 寄存器含义 |
---|---|
SM400 | PLC RUN 为1,否则为0 |
SM401 | PLC RUN 为0,否则为1 |
SM402 | PLC RUN 的上升沿 |
SM403 | PLC RUN 的下降沿 |
SM404 | RUN时有效,10ms 时钟脉冲,5ms ON/5ms OFF |
SM405 | RUN时有效,100ms 时钟脉冲,50ms ON/50ms OFF |
SM406 | RUN时有效,200ms 时钟脉冲,100ms ON/100ms OFF |
SM407 | RUN时有效,1s 时钟脉冲,0.5s ON/0.5s OFF |
存储区
ES3 M、D、S、C、HC、D、FR 均支持停电保持功能,但是各个区储存范围受系统限制及配置影响,停电保持区的设定通过HWConfig 参数设定 | 一般设定 | 系统设置 | 装置元件范围设定 中,设定的范围必须是连续的区域
加密与保护
Delta DVP-ES3 加密保护,
- 项目密码
项目密码的主要功能在于保护整体的项目程序,若用户开启某个设有「项目密码」的项目后,当使用者欲开启该项目中的 POU 时,系统便会要求输入正确的密码之后才允许开启,且「项目密码」可设定输入的限制次数,当用户输入密码的错误次数超过最大限制时,该项目便会自动关闭。
- 程序识别码: 保护 PLC 运行程序,只有PLC识别码与项目识别码相同,才可以下载或上传。
- POU 密码
POU密码用于保护 Prog 和 FB 密码,被加密的POU密码如果没有密码,可以支持下载调用只有输入密码才可以被打开、查看、修改;但是需注意的是下载过程只会下载编译码,因此当程序被上载时,编译后的POU则不会被密码保护
- 子程序密码
子程序密码就是针对上述密码而设计的,通过 工具 | 程序设置 | 子程序密码设置(可能不支持)
扫描时间
DVP-ES3的扫描时间与程序容量及复杂度相关,当PLC的扫描时间过长,超过用户设定的看门狗时间,则会触发PLC故障停机。DVP-ES3默认扫描时间为200ms,可以在HWCONFIG工具 | 系统参数 | 设置扫描超时时间来修改(1-30000ms)。也可以通过启用固定扫描周期来实现最小扫描周期设定。
当PLC在运行中发生扫描超时,可以通过WDT指令来重置看门狗时间,以避免系统停机(不建议,最好确定正常的扫描周期,并配置)。
查看PLC当前的扫描周期,可以通过ISPSoft PLC主机 | 系统信息确定。
模拟仿真
安装COMMGR通讯管理软件后,则已安装PLC模拟仿真器,在通道选择时,选择相应的PLC-Simulator即可模拟实际的PLC运行,由于仿真器受限,通讯及IO访问并不能正常执行。
库
此版本掠过
PID 控制
DVP-ES3 PLC 集成 PID 控制指令,不仅体现在具有PIDE控制指令,同时在硬件温度模块DVP04PT/06PT/04TC上集成温度PID控制,可以方便调用。
PID算法介绍
PID 表示比例积分微分控制,是最为常见的通用闭环控制算法。PID 三项P(比例)、I(积分)、D(微分),不一定全部启用,可以有P控制,PI控制,PD控制,PID控制(对应比例系数为零即可)。PID的核心思想是抑制偏差,消除偏差。 $$ u = K_p \times e + K_i\times\int edt + K_d\times\frac{de}{dt} $$
$$ e = SV-PV $$
u 为PID输出,e为控制偏差,SV为目标设定值,PV为当前反馈值
$K_p$ 比例系数,主要作用抑制偏差,值越大抑制效果越明显,但太大容易导致系统振荡;应首先确定。
$K_i$ 积分系数,主要作用消除静态误差,数值太大容易导致系统超调、响应缓慢;应第二确定
$K_d$ 微分系统,主要增加响应速度,容易消除扰动,也容易造成系统振荡。最后确定
PID 算法针对线性、即时系统理论上可以实现良好的效果,实践时仍需要合理的 $K_p,K_i, K_d$ 数值才可以看到。对于非线性系统,则无论三项系数如果调节,其效果堪忧,尤其在非线性较大作用范围内。
PIDE 控制指令
PIDE 是一个复杂的控制指令。需要系数包括:
EN启用或关闭,PID_RUN 启动PID运算,SV目标设定值,PV被控目标当前反馈值
MV 输出值,无论任何状态,MV输出都在[MV_MIN, MVMAX]之间,MV_MAX 输出值(MV)饱和上限,MV_MIN 输出值(MV)饱和 下限
PID_MODE PID控制器控制模式,0,2 自动模式,1 整定模式
PID_MAN PID Auto/Manual 模式 ,当处于手动模式TRUE时,MV 值会依 MOUT 值输出;自动False,MV 值会依 PID 公式计算 后输出
MOUT_AUTO,MOUT 自动更新模式,TRUE:Auto,MOUT 的值会随着 MV 值改变。FALSE:Normal,MOUT 的值不会随着 MV 值改变。
CYCLE,采样时间,1-40000 ms,当指令用于时间中断时,主机会自动以时间中断的中断时间来计算PID,此时 CYCLE 的设定无效。
Kc_Kp 比例系数值;Ti_Ki 积分系数值;Td_Kd 微分系数值,Tf 时间常数
PID_EQ PID计算公式,TRUE:Dependent Formula,FALSE:Independent Formula ,默认False
PID_DE PID 微分项误差计算选择,TRUE:使用当前值PV的变化量来计算微分项的控制值,FALSE:使用偏差量E的变化量来计算微分项的控制值,默认False
PID_DIR PID 正反向,TRUE:正向动作(E=SV-PV)FALSE:反向动作(E=PV-SV)
ERR_DBW 偏差量(E)不作用范围,即控制死区
MOUT MV 手动值,配合 PID_MAN 模式使用,当 PID 设定在手动模式时,则输出值MV会依照手动设定值输出;也可以通过MOUT_AUTO实时将MV输出反馈到该值,则表示输出最后值
BIAS 前馈控制输出值
I_MV 误差累积值,会连续占用15 个 DWord 装置
PT/TC模块PID
硬件模块PID仅对温度控制考虑,可以通过From、To指令获取
O 表示为保持型;X 表示为非保持型;R 表示为可使用 FROM 指令读取数据;W 表示为可使用 TO 指令写入数据。
高速计数器
此版本掠过
运动控制
此版本掠过
通讯
Modbus 通讯
由于其免费、易用等特点,Modbus 是一种被广泛应用的工业通讯协议,Modbus一共有4个变种版本:
- Modbus RTU:二进制表示数据,主要用于串行通信。使用CRC循环冗余校验验证机制确保数据的可靠性。主从协议,一主多从
- Modbus ASCII:使用ASCII字符表示数据,主要用于串行通信。使用LRC 纵向冗余校验以验证数据可靠性。主从协议,一主多从
- Modbus TCP/UDP:是RTU应用与以太网的版本,去掉了协议校验,由TCP/IP协议保证
- Modbus Plus: 具有专利的令牌环网高速Modbus协议,可以多主多从
- Modbus RTU/ASCII over TCP/UDP:非官方版本,将ModbusRTU通讯帧直接封装到具有TCP/IP头的报文中。
Modbus 从站或服务端
台达系PLC均对Modbus协议有良好支持,也是官方默认支持的协议,用于PLC之间通讯和外部通讯。一般PLC本体均带有RS485/232接口,以实现Modbus通讯功能,并且在非主站端口提供Slave或Server通讯。
Modbus 主站或客户端
DVP ES3 支持2种模式的Modbus主站或客户端通讯:系统托管及自由编程。前者依托系统功能建立通讯,并将通讯结果映射到装置地址,只需要使用配置和熟悉的装置地址来读写需要的数据即可,由系统通过轮询的方式实现通讯,满足绝大多数应用需求,配置快捷方便;自由编程则需要自己手动建立Modbus通讯指令,进行对外访问,对编程者要求较高,高度自由,可实现自定义读写;
- 系统托管——通讯口数据交换区
通讯口数据交换区,采用的是系统托管或半托管方式,通过在数据交换区配置外部设备以及要通讯交换的数据空间映射地址,实现DVP-ES3 的Modbus通讯。在HWConfig中,数据交换区COM1,COM2,Ethernet。
不同端口通讯有自己的数据交换区,只有配置到指定端口下的数据交换区,通讯才可以在当前端口建立;每个通讯可以配置启动方式:
- 程控:通过SM寄存器控制通讯端口启停,COM1启用 SM750 COM2 SM682 Ethernet SM1167
- PLC执行:完全由系统控制通讯,并且在PLC运行时,启动通讯(建议)
- 永远执行:完全由系统控制通讯,并且不管PLC是否在运行,通讯都执行(一般不建议)
当选择后两种时,系统会根据配置顺序(包括读取和写入),按照通讯周期逐个收发,直到全部完成;然后重新开始;
命令配置:每个项目中可以配置2条指令,一条读一条写,以实现设备读写映射。启动表示启用该执行;通讯更新周期和超时时间以控制命令执行的周期和设备不响应时错误判定的时间,根据实际情况填写。远程站号即从站号地址;远程装置种类,如果是台达系列PLC,则可以获取对应的X、Y、M、D等特殊装置数据;对于一般Modbus设备,可以选择Standard Modbus Device。
每条指令的构成,必须满足Modbus协议规范要求,寄存器地址配置满足数据存放要求,Modbus规范要求篇幅较大,此处并不展开。
程控方式特殊寄存器功能表
- 自行编程
DVP-ES3 提供的 Modbus RTU/ASCII 读写指令有 COMDF,MODRWE
-
COMDF MODBUS 串口通讯格式配置指令,S1 通讯速率(100倍数):24 、48、96、196、384等;S2 通讯数据长度:7,8;S3 校验类型:0 无校验、1奇校验、2偶校验;S4 结束位长度:1,2;S5:0 ASCII模式,1RTU模式;D 通讯端口号:1 Com1,2 Com2;
-
MODRW,MODRWE:两者都是MODBUS读写指令,前者无法指定通讯接口,需要搭配特殊寄存器使用;推荐使用后者。S1 通讯端口编号,S2 从站地址; S3 Modbus功能码,S4 读写起始地址 ,S 数据存放地址, n 数据长度,支持的功能码包括16#01~06,16#0F,16#10;D:通讯指令完成通讯时,指定设定之通讯状态标志。此通讯状态标志将占用 3 个连续装置,且须由用户 自行清除,D 接收成功标志;D+1接收错误标志;D+2接收超时标志。该指令需要上升沿启动。
DVP-ES3 不提供 Modbus TCP 控制指令,只有MCONF指令,可以用来修改 Ethernet 数据交换区的内容,配合特殊寄存器读写Modbu TCP数据。具体参考手册MCONF API
Modbus 数据解析
标准Modbus协议采用大端模式(Big-endian)表示地址和数据项,即高位在前低位在后,字节小的地方(小地址)存放大数,字节大的地方(大地址)存放小数;而 DVP-ES3 采用带有交换的小端模式(Mid-Little Endian)表示地址和数据。当从外部获取一组数据解析发生问题时,建议参考修改。
举例如下,无符号整数 10#720894 => 16#0000AFFFE,则不同模式下存储结果如表格
10进制 | 720894 |
---|---|
16进制表示 | 000AFFFE |
A B C D | B0 B1 B2 B3 地址从低到高 |
大端编码ABCD | 000AFFFE |
小端编码DCBA | FEFF0A00 |
BADC | 0A00FEFF |
中达 CDAB | FFFE000A |
一个在线HEX转换工具如下:Online Hex Converter
CANOpen 通讯
此版本掠过
EtherCAT 通讯
此版本掠过
以太网通讯
此版本掠过
串口通讯
此版本掠过
OPC通讯
此版本掠过
HMI通讯
此版本掠过
附录
ES3功能装置
SM 特殊辅助继电器
SM特殊寄存器,其实PLC系统内部用的寄存器,用于获取系统状态,或者调用系统功能。每一个特殊辅助继电器均有其特定之功用,未定义的特殊标志请勿使用。常用的特殊继电器如下,其他请参考《DVP-ES3 系列程序手册》
SM | 功能说明 | FirstScan | Run | Stop | RW | 默认值 |
---|---|---|---|---|---|---|
SM9 | 系统错误 | 0 | 0 | R | 0 | |
SM10 | 扩展模块发生错误 | 0 | 0 | 0 | R | 0 |
SM22 | 清除错误记录 | 0 | 0 | 0 | RW | 0 |
SM96 | COM1 送信标志 | 0 | 0 | 0 | RW | 0 |
SM97 | COM2 送信标志 | 0 | 0 | 0 | RW | 0 |
SM98 | COM1 接收等待 | 0 | 0 | 0 | R | 0 |
SM99 | COM2 接收等待 | 0 | 0 | 0 | R | 0 |
SM100 | COM1 接收完毕 | 0 | 0 | 0 | RW | 0 |
SM101 | COM2 接收完毕 | 0 | 0 | 0 | RW | 0 |
SM102 | COM1 通讯指令接收数据错误 | 0 | 0 | 0 | RW | 0 |
SM103 | COM2 通讯指令接收数据错误 | 0 | 0 | 0 | RW | 0 |
SM104 | COM1 接收逾时标志 | 0 | 0 | 0 | RW | 0 |
SM105 | COM2 接收逾时标志 | 0 | 0 | 0 | RW | 0 |
SM106 | COM1 8/16 位处理模式选择,ON:8 位,OFF:16 位 | 0 | 0 | 0 | RW | 0 |
SM107 | COM2 8/16 位处理模式选择,ON:8 位,OFF:16 位 | 0 | 0 | 0 | RW | 0 |
SM203 | Run=>Stop 时,非停电保持区域全部清除一次 | 0 | 0 | 0 | RW | 0 |
SM204 | 非停电保持区域全部清除 | 0 | 0 | 0 | RW | 0 |
SM205 | 停电保持区域全部清除 | 0 | 0 | 0 | RW | 0 |
SM206 | 输出全部禁止 | 0 | 0 | 0 | RW | 0 |
SM209 | COM1 通讯协议变更用 | 0 | 0 | 0 | RW | 0 |
SM210 | COM1 ASCII/RTU 模式选择,ON 时为 RTU 模式 | 0 | 0 | 0 | RW | 0 |
SM211 | COM2 通讯协议变更用 | 0 | 0 | 0 | RW | 0 |
SM212 | COM2 ASCII/RTU 模式选择,ON 时为 RTU 模式 | 0 | 0 | 0 | RW | 0 |
SM215 | 启动 PLC RUN | 0 | 0 | 0 | RW | 0 |
SM218 | 万年历无法计时警告标志 | 0 | 0 | 0 | R | 0 |
SM219 | 万年历电池低电压标志 | 0 | 0 | 0 | R | 0 |
SM400 | PLC OnRun | 0 | 1 | 0 | R | 0 |
SM401 | PLC OnStop | 0 | 0 | 1 | R | 0 |
SM402 | 启始正向(RUN 的瞬间“ON”)脉冲 | 0 | 1 | 0 | R | 0 |
SM403 | 启始负向(RUN 的瞬间“OFF”)脉冲 | 0 | 0 | 1 | R | 0 |
SM404 | 10ms 时钟脉冲,5ms ON/5ms OFF | 0 | R | 0 | ||
SM405 | 100ms 时钟脉冲,50ms ON/50ms OFF | 0 | R | 0 | ||
SM406 | 200ms 时钟脉冲,100ms ON/100ms OFF | 0 | R | 0 | ||
SM407 | 1s 时钟脉冲,0.5s ON/0.5s OFF | 0 | R | 0 | ||
SM604 | SORT 排序指令工作模式设定(ON–降序排序,OFF–升 幂排序) | 0 | RW | 0 | ||
SM605 | SMOV 工作模式指定 | 0 | RW | 0 | ||
SM606 | 8/16 位工作模式选择 | 0 | RW | 0 | ||
SM1000 | 以太网络设定标志。ON 时,将 SR1000~SR1006 的数据 写入闪存。 | 0 | RW | 0 | ||
SM1001 | 以太网络联机状态 | 0 | R | 0 | ||
SM1090 | TCP 联机忙碌(Connection Busy) | 0 | R | 0 | ||
SM1091 | UDP 联机忙碌(Connection Busy) | 0 | R | 0 |
SR 特殊数据寄存器
每个特殊数据寄存器均有其特殊定义与用途,主要作为存放系统状态、错误信息、监视状态之用。特殊数据寄存器(SR),它的种类及功能如下所示。其他请参考《DVP-ES3 系列程序手册》
SR | 功能说明 | RW | 默认值 |
---|---|---|---|
SR201 | COM1 通讯站号 | RW | 1 |
SR202 | COM2 通讯站号 | RW | 1 |
SR209 | COM1 通讯协议 | RW | 16#0024 |
SR210 | COM1 通讯逾时时间(单位:ms),设定为 0 表不逾时 | RW | 0 |
SR212 | COM2 通讯协议 | RW | 16#0024 |
SR213 | COM2 通讯逾时时间(单位:ms),设定为 0 表不逾时 | RW | 0 |
SR217 | COM1 自定义鲍率数值(单位:100 bps) | RW | 96 |
SR218 | COM2 自定义鲍率数值(单位:100 bps) | RW | 96 |
SR220 | 万年历(RTC)年(公元)00~99(BCD) | R | |
SR221 | 万年历(RTC)月 01~12(BCD) | R | |
SR222 | 万年历(RTC)日 01~31(BCD) | R | |
SR223 | 万年历(RTC)时 00~23(BCD) | R | |
SR224 | 万年历(RTC)分 00~59(BCD) | R | |
SR225 | 万年历(RTC)秒 00~59(BCD) | R | |
SR226 | 万年历(RTC)星期 1~7 | R | |
SR391 | 万年历(RTC)年(公元)00~99(十进制) | R | |
SR392 | 万年历(RTC)月 01~12(十进制) | R | |
SR393 | 万年历(RTC)日 01~31(十进制) | R | |
SR394 | 万年历(RTC)时 00~23(十进制) | R | |
SR395 | 万年历(RTC)分 00~59(十进制) | R | |
SR396 | 万年历(RTC)秒 00~59(十进制) | R | |
SR397 | 万年历(RTC)星期 1~7 | R | |
SR407 | RUN 后,每秒加 1,重复计数由 0~32767 再由-32768~0 | RW | 0 |
SR408 | RUN 后,每完成一次扫描后加 1,重复计数由 0~32767 再由-32768~0 | RW | 0 |
SR1000 | 以太网络 IP 地址(32 位) | RW | |
SR1001 | 以太网络 IP 地址(32 位) | RW | |
SR1002 | 子网掩码 32 | RW | |
SR1003 | 子网掩码 32 | RW | |
SR1004 | 以太网络网关地址(32 位) | RW | |
SR1005 | 以太网络网关地址(32 位) | RW | |
SR1006 | TCP 保持连接时间(sec.) | RW | |
SR1009 | TCP 目前联机数 | R | |
SR1010 | TCP 重传时间(ms) | R | |
SR1011 | MODBUS/TCP Server 联机数 | R | |
SR1012 | MODBUS/TCP Client 联机数 | R | |
SR1013 | EtherNet/IP Adapter 联机数 | R | |
SR1014 | EtherNet/IP Scanner 联机数 | R | |
SR1015 | MODBUS/TCP Server 报文接收等待逾时时间(ms) | RW | |
SR1016 | MODBUS/TCP Client 成功建立联机后,延迟开始发送的 等待时间(ms)(0~1000) | RW | |
SR1312 | RTU-EN01 联机 1 通讯代码 | R | |
SR1313 | RTU-EN01 联机 2 通讯代码 | R | |
SR1314 | RTU-EN01 联机 3 通讯代码 | R | |
SR1315 | RTU-EN01 联机 4 通讯代码 | R |
定时器 T
编号 T0~T411 预设为一般型定时器,编号 T412~T511 默认为子程序型定时器。一般型定时器于 TMR 指令扫描时比较,适用于每次皆会扫描到 TMR 指令的状况。子程序型定时器则于END 指令被执行之后,由系统自行计时与比较,故建议设计于不能每次扫描都执行的 TMR 指令,但又需要持续计时与比较时间的应用。
- 100ms 定时器:TMR 指令所指定之 T 定时器以 100ms 为单位计时
- 10ms 定时器:TMRM 指令所指定之 T 定时器以 10ms 为单位计时
- 1ms 定时器:TMRH 指令所指定之 T 定时器以 1ms 为单位计时。
- 运算型 T 定时器为 ST0~ST511,但若要使用装置监控监看时,请监看 T0~T511。
- 一般定时器,在 TMR 指令执行时计时一次,在 TMR 指令执行时,若计时到达,则输出线圈导通。
当 M0=ON 时,定时器 T0 之当前值以 100ms 采上数计时,当定时器当前值=设定值 100 时,输出线圈 T0=ON。当 M0=OFF 或停电时,定时器 T0 之当前值清为 0,输出线圈 T0 变为 OFF。
- 累计型定时器 ST,累计型定时器在 TMR 指令执行时计时一次,在 TMR 指令执行时,若计时到达,则输出线圈导通。只要在装置T 之前加上一个 S,就会变成运算型定时器 ST 装置,表示目前的 T 变成运算型定时器,则条件接点 OFF 时运算型 T 的值不会被清除,条件接点=ON 的时候,T 由目前的值开始累积计时。
当 M0=ON 时,定时器 T250 之当前值以 100ms 采上数计时,当定时器当前值=设定值 100 时,输出线圈T250=ON。当计时中若 M0=OFF 或停电时,定时器 T250 暂停计时,当前值不变,待 M0 再 ON 时,继续计时,其当前值往上累加直到定时器当前值=设定值 100 时,输出线圈 T250=ON。
- 功能块或中断插入服务程序中若使用到定时器时,请使用定时器 T412~T511。功能块用定时器于 END 指令执行时计时一次,在 END 指令执行时,若定时器当前值等于设定值,则输出线圈导通。一般用之定时器,若是使用在功能块或中断插入中而该功能块不被执行时,定时器就无法正确的被计时。
计数器 C
一般计数器,计数脉冲输入信号由 OFF→ON 时,计数器产生计数,直到到达计数上限。计数到达设定值,接点导通并保持,RST 指令被执行时当前值归零,接点被复位成 OFF。
计数器之计数脉冲输入信号由 OFF→ON 时,计数器当前值等于设定值时输出线圈导通,设定值为十进制常数值,亦可使用数据寄存器 D 当成设定值。16 位计数器的设定范围:0~32,767,设定值可使用常数或使用数据寄存器 D 作为设定值可以是正负数。计数器当前值由 32,767 再往上累计时则变为 0。
当 M0=ON 时 RST 指令被执行,C0 的当前值归零,输出接点被复位为 OFF。接着 M0=OFF,结束清除。当 M1 由 OFF→ON 时,计数器之当前值将执行上数(加一)的动作。当计数器 C0 计数到达设定值 5 时,C0 接点导通,C0 当前值=设定值=5。之后的 M1 触发信号 C0 完全不接受,C0 当前值保持在 5 处。
高速计数器 HC
高速计数器为32 位计数器,其计数范围为:-2,147,483,648~2,147,483,647,
上下数计数器 HC0~HC63,当 DCNT 指令条件接点由 OFF→ON 时,其计数器的数值将依 SM621~SM684 的状态 OFF 执行上数(加一)的动作或状态 ON 下数(减一)的动作。
上数计数器 HC64~HC199,当 DCNT 指令条件接点由 OFF→ON 时,其计数器的数值将固定执行上数(加 一)的动作。
当 DCNT 指令 OFF 时,该计数器停止计数,但原有计数值不会被清除,可使用指令 RST 清除计数值及其 接点。
高速计数器比较计算等操作,需要配合 DHSCS DHSCR DHSZ DSPD 等指令配合使用,
变址寄存器 E
变址寄存器E是16位的数据寄存器,跟一般的寄存器一样可以被读、写,但主要功能是做变址寄存器使用,使用范围为E0~E9。ES3 系列支持 D0.1@E0 变址修饰,但不支持 D0@E1.1@E0 这类双层变址修饰。
- 当 M0=ON 时,E0=10,则 D0@E0=D(0+10)=D10,D1=D10。
- 当 M0=ON 时,E0=10,则计变址的计算方式为 D0.1@E0=D0.(1+10)=D0.11,因此 D0.11 会 ON。
- 若 E0=17,则计变址的计算方式为 D0.1@E0=D0.(1+17)=D1.2,因此 D1.2 会 ON。Bit 的部份 1@E0=(1+17)=18,但 Bit 的部份最大数为 15,因此 18 除 16=1 余 2,表示进位 1 并余 2,所以最后修饰的结果为 D(0+1).2=D1.2,则结果 D1.2 会 ON。
- 当 M0=ON 时,E0=10,M1@E0=M(1+10)=M11,则 M11=ON。
指针寄存器 PR
当功能块的变量类别声明为 VAR_IN_OUT,数据类型为 POINTER(指针)时,此变量将配置 PR 装置,PR 可以传入的装置为(X,Y,D)。每个功能块中可以声明的 PR 个数为 16 个:PR0 ~ PR15,或是使用位 PR0.0 ~ PR15.15。声明后的指令可以搭配E指令进行变址寻址。
定时器指针寄存器 TR
如果要在功能块中使用定时器时,必需在功能块中声明一个 TR 装置来并在调用功能块时传入 T 装置的指针;当功能块的变量类别声明为 VAR_IN_OUT,数据类型为 T_POINTER 时,此变量将配置 TR 装置,TR 可以传入的装置为(T)以及 ISPSoft 配置为定时器的变量。每个功能块中可以宣告 TR 的个数为 8 个:TR0~TR7。如果要在功能块中使用指令时,操作数区域中有支持装置 T,则必须使用 TR 指针寄存器来运算。
计数器指针寄存器 CR HCR
如果要在功能块中使用 16 位计数器时,必需在功能块中宣告一个 CR 装置,并在调用功能块时传入 C装置的指针。当功能块的变量类别声明为 VAR_IN_OUT,数据类型为 C_POINTER 时,此变量将配置 CR 装置,CR 可以传入的装置为(C)以及 ISPSoft 配置为计数器的变量。每个功能块中可以宣告 CR 的个数为 8 个:CR0~CR7。如果要在功能块中使用指令时,操作数区域中有支持装置 C,则必须使用 CR 指针寄存器来运算。
32 位计数器,与之相同
常用函数补充实现
双精度与单精度浮点数转换
IEEE754 单精度浮点数内存格式,偏移值+127
IEEE754 双精度浮点数内存格式,偏移值+1023
取值范围
转换方案:符号、指数、小数三部分
符号与小数部分复制即可;双精度指数【52-62,4-15】-1023 = 单精度指数【23-30,15-8】-127,存入新的数据范围
台达32位整数或浮点数与标准Modbus互转
Modbus ABCD 互转 台达 CDAB: DROR S1 16,适用于整数和浮点数.
比较与换算
- InRange
- OutRange
数学运算
- NORM
- SCALE
位运算
- Scatter
- Gather
- MoveBit
延迟接通或关断
TON TOF TF