目录
- CodeSYS平台ST语言编程
- IEC61131-3国际标准
- CodeSys平台简介
- PLC的执⾏过程
- 采样输⼊
- 执⾏阶段
- 输出刷新
- 其他阶段
- 扫描周期
- 输出滞后时间
- 任务的四种⽅式
- 看⻔狗功能
- 编程起步
- 运算符
- 数据类型
- 标准数据类型
- BOOL类型
- 整数型
- 字符串型
- 浮点数
- 时间类型
- 标准的扩展数据类型
- ⻓时间
- 宽字符串
- 引⽤REFERENCE
- 联合体
- 指针
- ⾃定义数据类型
- 数组
- 结构体
- 枚举
- 变量
- 全局变量
- 局部变量
- 变量的细分
- 函数
- 功能块
- 程序
- 逻辑指令
- IF判断指令
- CASE指令
- FOR循环
- WHILE 循环
- REPEAT循环
- CONTINUE语句
- EXIT语句
- JMP语句
- RETURN 指令
- 指令
- 沿指令
- 定时器
- 脉冲定时器 TP
- 通电延时定时器 TON
- 断电延时定时器 TOF
- 实时时钟 RTC
- 计数器指令
- 增计数器 CTU
- 减计数器 CTD
- 增/减双向计数器 CTUD
- 选择操作指令
- ⼆选⼀指令 SEL
- 取最⼤值 MAX
- 取最⼩值 MIN
- 限制值 LIMIT
- 多选⼀ MUX
- 位移指令
- 按位左移 SHL
- 按位右移 SHR
- 循环左移 ROL
- 循环右移 ROR
- 数学运算指令
- 绝对值 ABS
- 平⽅根 SQRT
- 指数函数 EXP
- ⾃然对数 LN
- 10 为底的对数 LOG
- 三⻆函数指令
- 地址运算指令
- SIZEOF 指令
- 地址操作符 ADR
- 位地址操作符 BITADR
- 数据类型转换指令
- BCD 码
- BOOL_TO_ 布尔类型转换
- BYTE_TO_ 字节类型转换
- IntegralData_TO_整数类型转换
- REAL_TO_实数类型转换
- TIME_TO_ 时间类型转换
- DATE_TO_ ⽇期类型转换指令
- DT_TO_⽇期时间类型转换
- TOD_TO_ 时间类型转换
- 取整 TRUNC
- 通讯⽅式
- EtherCAT配置
- EtherCAT运⾏机制
- ⽹络拓扑
- EIA-485(RS-485)
- Modbus
CodeSys实时核作⽤
执⾏过程包括三个阶段
- 采样输⼊
- 程序执⾏
- 输出刷新
采样输⼊
每⼀次扫描周期的开始,PLC都会检测输⼊设备(按钮,开关,IO模块)的状态,将状态写⼊输⼊映像寄存区。在程序执⾏阶段,PLC会从输⼊映像存储区内读取数据⽤于运算。输⼊的刷新只是存在于扫描开始的阶段,在扫描过程中即使是输出状态的改变,输⼊状态也不会发⽣改变(需要等待下⼀个扫描周期才会改变)。
执⾏阶段
该阶段PLC会从输⼊映像区或输出映像区内读取状态和数据,按照程序逻辑进⾏逻辑判断和运算,再将运算的结果存放到输出映像存储区相应的单元中。该阶段中只有输⼊映像区内的内容保持不变,其他映像存储区内的内容会随着程序运⾏发⽣改变。
输出刷新
PLC将输出映像区的状态和数据传送到输出点上,通过⼀定的⽅式隔离(如继电器)和功率放⼤(如三极管),来驱动外部负载。
其他阶段
完成内部诊断,通信,公共处理及输⼊输出服务等辅助任务。
扫描周期
重复上述的过程,没重复⼀次的时间就称为扫描周期。扫描周期⼀般为ms级别。
输出滞后时间
plc每个扫描周期的信号输出时间与硬件滤波和PLC输出电路相关,继电器型的PLC输出的滞后时间为10ms左右,晶体管的输出滞后时间为⼩于1ms
任务的四种⽅式
CodeSys平台中任务级别被分为32个级别,0位⾼优先级,31为最低优先级——任务级别越⼩优先级越⾼
通过固定的循环扫描⽅式,能保证PLC在⼀定循环时间内反复执⾏程序。即使程序的执⾏时间发⽣变化,也可以保持在⼀定的刷新间隔时间。如果程序执⾏的时间在固有的时间内,那么剩余的时间将做等待,如果应⽤中还有较低级别的任务未完成,那么则⽤剩余的等待时间来执⾏任务级别相对较低的任务
该⽅式也成为⾃由运⾏,程序已开始运⾏任务就会被处理,⼀个运⾏周期之后,任务将在下⼀次循环中重新启动。该⽅式不会收到PLC的扫描周期影响,确保每⼀次执⾏完程序的最后⼀条指令才会进⼊下⼀次扫描周期,否则PLC不会结束程序的扫描周期。程序每⼀次执⾏的时间都不⼀样,所以该⽅式不能保证程序的实时性。
该⽅式是由事件区域的变量的上升沿触发,开始执⾏。
该⽅式与事件类似,某个变量达到条件时候出发,与事件不通的是,当状态不满⾜时,则停⽌执⾏。
看⻔狗功能
它是控制器中硬件式的计时器,其功能是监控程序执⾏时候的异常和内部时钟发⽣的故障。当程序循环执⾏时死机或者进⼊死循环时候,看⻔狗将会使系统发出重置信号或者使当前程序停⽌执⾏。该功能主要⽤于实时性和安全等级较⾼的场景中。
如果循环的时间过⻓,超过看⻔狗设定的时间,CPU会检测出故障,终⽌程序的执⾏。
运算符
运算符优先级
- 如果在表达式中有若⼲个操作符,则操作符会按照约定的优先级顺序执⾏
- 先执⾏优先级⾼的操作符运算,再顺序执⾏优先级低的操作符运算。
- 如果在表达式中具有优先级相同的操作符,则这些操作符按照书写顺序从左⾄右执⾏
数据类型
标准数据类型
可以使⽤来计算变量的⻓度:
数据存储单位的转换
BOOL类型
布尔类型内存空间是8位,也就是1个字节,声明⼀个BOOL类型的变量,会开辟8位的内存空>>间,虽然它实际上只⽤ 1位(也就是最低位), 最低位是0,则为TRUE;最低位是1, 则为FALSE;存放8个布尔类型的数组,其所占空间为8*8=64个⽐特位=8个字节
整数型
没有⼩数点的数字称为整型。其中前缀:
U表示⽆符号整型,Unsigned S表示短整型,Short
D表示双整型,Double L表示⻓整型,Long
⽆符号整型和有符号整型区别在于⼆进制的最⾼位,⽆符号整型的空间全部存储数据本身,⽽有符号整型的最⾼位
存储着符号位。⽐如INT的存储范围是16位,最⾼位是符号位,所以能存储的范围是正整数⽐⽆符号整型存储的⼩⼀半 ,本身会存放正整数⽐⽆符号整型存储的⼩⼀半
⼦范围
⼦范围是⼀种⽤户⾃定义类型,该类型定义了某种数据类型的取值范围。其值的范围是基本数据类型的⼀个⼦集。如取值从 1 到 10 或从 100 到 1000 等,如果超过范围则会报错。
类型限定符
字符串型
字符串在CodeSys中如果没有指定String类型数据的⼤⼩,默认是分配80个字符给变量,实际在内存中占⽤的是[80+1]个字节,如果指定⼤⼩,则内存中占⽤[指定的⼤⼩+1]个字节。
如果⽤户指定了⻓度,那么存储字符超过指定的⻓度之外的字符,会被系统进⾏截断
字符串的转义
浮点数
浮点数,这⾥主要是⽤于处理含有⼩数的数值数据,实数类型包含了REAL 及 LREAL 这 2 种数据类型
时间类型
TIME时间
TIME_OF_DAY/TOD时刻
DATE⽇期
标准的扩展数据类型
有联合、⻓时间类型、双字节字符串、引⽤、指针。
⻓时间
与 TIME 类型不同的是:TIME 的⻓度为32 位且精度为毫秒,LTIME 的⻓度为 64 位且精度为纳秒
宽字符串
与字符串类型数据(ASCII)不同,这⼀数据类型由 Unicode 解码。 每个字符串占的存储空间为 2*N+2;
引⽤REFERENCE
引⽤是⼀个对象的别名。这个别名可以通过变量名读写。引⽤所指向的数据将被直接改变,因此引⽤的赋值和所指向的数据是相同的。设置引⽤的地址⽤⼀个特定的赋值操作完成。⼀个引⽤是否指向⼀个有效的数据(不等于 0),可以使⽤⼀个专⻔的操作符来检查,如下所示。 ⽤以下语法声明引⽤,语法格式如下。
示例程序代码:
通过专⽤指令
检查变量是否已经被正确引导。
具体⽤法如下:
联合体
指针
指针就是⼀个地址(指向某⼀段内存空间的起始位置)所谓指针变量,也就是保存了内存地址的变量,计算机中所
有的数据都必须放在内存中,不同类型的数据占⽤的字节数不⼀样,例如 int 占⽤ 4 个字节,char 占⽤ 1 个字节。
为了正确地访问这些数据,必须为每个字节都编上号码,就像⻔牌号、身份证号⼀样,每个字节的编号是唯⼀的,
根据编号可以准确地找到某个字节。
声明指针的语法如下:
类型可以为变量、程序、功能块、⽅法和函数的内存地址
通过在指针标识符后添加内容操作符“^”,可以取得指针所指地址的内容
指针只能存放1个字节⼤⼩的数据
指针+1只移动⼀个byte⼤⼩的内存地址
获取⾼低位的示例
⾃定义数据类型
数组
数组是有序的存储在连续空间中的相同类型的⼀组数据。数组有⼀维、⼆维和三维数组。数组变量从字边界开始,也就是说,起始地址为偶数 BYTE 地址。随后,每个结构元素以其声明时的顺序依次存储到内存中
⼆维数组可以看作是⼀个特殊的⼀维数组,它⾃身的元素可以理解为⼜是⼀个新的⼀维数组
声明数组的语法
示例程序代码:
数组的初始化
数组的赋值
数组索引越界
使⽤数组的下标对数组元素进⾏访问时,下标访问超出数组元素个数时发⽣数组索引越界异常
结构体
结构(struct)是由⼀系列具有相同类型或不同类型的数据构成的数据集合。结构体其最主要的作⽤就是封装。封装的好处就是可以再次利⽤。
结构变量从字边界开始,也就是说,起始地址为偶数字节地址。随后,每个结构元素以其声明时的顺序依次存储到内存中。
数据类型为 BOOL,BYTE 的结构元素从偶数字节开始存储,其他数据类型的数组元素从字地址开始存储。
示例程序代码:
结构体的嵌套
结构体内的元素称为结构体成员,结构体成员可以是基本类型或者是结构体,通过结构体名
. 成员名来访问
示例:
数组结构体
结构体数组与基本类型数组的数值型数组不同⽀持在于每个数组元素都是⼀个结构体类型的数据,它们都分别包括各个成员项。
枚举
枚举的概念 如果⼀种变量有⼏种可能的值,可以定义为枚举类型。所谓“枚举”是将变量的值⼀⼀列举出来,
变量的值只能在列举出来的值的范围内
枚举类型声明的语法如下:
示例代码:
变量
I:表示输⼊单元
Q:表示输出单元
M:表示存储区单元
数据⼤⼩前缀
X表示位,类型为BOOL
B表示字节,类型为BYTE
W表示字,类型为WORD
D表示双字,类型为DWORD
L表示⻓字,类型为LWORD
如果未显示指定,那么系统⾃动分配
全局变量
在POU之外定义的变量称为全局变量。对应⽤中所有单元都可⻅,同时也具备对外界访问交互的能⼒(需要在符号中对其公开读/写权限)。⽐如和上位机进⾏交互,和扫码枪进⾏交互。
局部变量
定义在POU或者功能块FBD或功能FC内部的变量,局部变量只能在当前的POU中进⾏访问,不同的POU中局部变量可以重名,且不会相互影响。
- 变量是⽤于存储数据,变量具有名称,类型和值
- 变量的值可以发⽣变化
- 变量在使⽤之前必须先声明变量,及指定变量的类型和名称
语法如下:
变量的赋值
变量的细分
本地变量、输⼊变量、输出变量、输⼊输出变量、临时变量、静态变量、配置变量
本地变量
在POU内部VAR和END_VAR之间的变量都为本地变量,不能被外部访问。
输⼊变量
在POU内部VAR_INPUT和END_VAR之间的变量都为输⼊变量,可以在调⽤位置给输⼊变量赋值。不可以在程序内部修改值
输出变量
在POU内部VAR_OUTPUT和END_VAR之间的变量都为输出变量。输出变量可以在调⽤时返回给调⽤者,调⽤者可以做进⼀步处理。可以被程序内部修改值
输⼊输出变量
在POU内部VAR_IN_OUT和END_VAR之间的变量都为输⼊输出变量。输⼊输出变量不仅可以传⼊被调⽤的POU内,并且可以在被调⽤的POU内部修改。实际上传递给被调⽤POU内的变量是调⽤者变量的引
⽤
临时变量
定义在VAR_TEMP和END_VAR之间的变量为临时变量,临时变量在每次调⽤时会进⾏初始化(复位)。
静态变量
不常⽤。定义在VAR_STAT和END_VAR之间的变量都为静态变量。静态变量在第⼀次调⽤时被初始化,在每次调⽤完此POU后,变量值依然保持下来。
配置变量
定义在VAR_CONFIG和END_VAR之间的变量都为配置变量。配置变量是直接变量,⼀般是映射到功能块定义的不确定地址直接变量。在功能块内可以定义⼀个不确定地址的变量,此变量的地址通过 来表示不确定的地址(任意的地址),然后添加⼀个配置变量表(通过添加全局变量表⽅式),把所有功能块实例中不确定地址变量添加到配置变量表中,在此变量表中把所有的不确定地址给明确下来,这样就可以集中管理所有功能块中不确定地址变量
常量
⼀些数值不变的参数,如定时器的时间、换算的⽐例等,这些数值不变的参数称为常量
函数
函数Function是特殊的POU它可以被赋予参数,但是没有静态变量的程序组织单元。输⼊相同的参数总能的到相同的返回值。它的⼀⼤特点是不能使⽤内部变量存储值,运⾏时未被分配内存空间的单元算法。其声明的语法:
函数的特点:
- 可以有多个输⼊参数,但是返回值只有⼀个,对于返回值没有限定,可以返回复杂的结构体类型。
- 函数不能在内部存储值
- 函数使⽤时候不需要实例化
- 函数内部不能使⽤FBD功能块,函数只能调⽤函数。
- 函数可以被重载和扩展
– 梯形图中EN和ENO是函数的输⼊使能和输出使能,输⼊使能为true时,函数才开始执⾏。 - 函数调⽤时必须传⼊参数,可以指定传⼊,也可以按照顺序
功能块
功能块中拥有⾃⼰的空间,可以存放⾃⼰的内部变量,程序执⾏时会被功能块的实例分配内存空间。可以理解为⾼级语⾔中的类,可以通过类实例化对象,不同的对象具有不同的属性。
功能块特点:
- 功能块内部的变量和输出变量可以使⽤关键字修饰,使变量具有保持性,输⼊变量只能在调⽤时候声明为保持性变量
- ⼀般不允许对输⼊变量进⾏赋值
- 功能块可以调⽤函数和其他的功能块
- 功能块中不允许将固定地址变量作为局部变量可以使⽤ 类型来代替 和类型的变量,减少内存空间的使⽤
- 功能块可以使⽤来继承,使⽤ 来调⽤⽗功能块的⽅法
- 功能块在调⽤时,允许不传⼊参数
掉电保持型变量
掉电保持型变量必须在全局变量表中定义,使⽤或来表示,语法如下:
掉电保持型变量对⽐表,❌表示恢复初始值,✅表示保留原值
逻辑指令
IF判断指令
示例代码:
CASE指令
示例代码:
FOR循环
WHILE 循环
REPEAT循环
CONTINUE语句
CONTINUE指令在FOR、WHILE和REPEAT循环中使⽤,⽤于提前结束本轮循环,并重新开始下⼀轮循环。
EXIT语句
JMP语句
JMP指令可⽤于⽆条件的跳转到指定标签处的代码⾏。 类似于CASE语句,JMP指令必须有⼀个跳转⽬标,也就是预定义的标签。到达JMP指令后,程会跳转到指定的标签处开始执⾏。这样的功能也可以通过WHILE 或 REPEAT循环来实现
语法代码:
RETURN 指令
RETURN 指令是返回指令,⽤于退出程序组织单元(POU),具体格式如下。
沿指令
包括
- 上升沿R_TRIG
- 下降沿指令 F_TRIG
边沿检测指令⽤来检测 BOOL 信号的上升沿 (信号由 0→1)和下降沿(信号由 1→0)的 变化
在每个扫描周期中把信号 状态和它在前⼀个扫描周期的状态进⾏⽐较,若 不同则表明有⼀个跳变沿。因此,前⼀个周期⾥ 的信号状态必须被存储,以便能和新的信号状态 相⽐较。
定时器
- 分为脉冲定时器 TP
- 通电延时定时器 TON
- 断电延时 定时器 TOF
- 实时时钟 RTC
脉冲定时器 、通电延时定时、 断电延时定时器 TOF的参数:
脉冲定时器 TP
功能:脉冲定时。
语法:在定时器的输⼊端 IN 从“0”变为“1”时,定时器则启动,⽆论定时器输⼊端 IN 如何变化,定时器的实际运⾏时间都是⽤户所定义的 PT 时间,在定时器运⾏时,其输出端 Q 的输出信号为“1”。
输出端 ET 为输出端 Q 提供定时时间。定时从 T#0s 开始,到设置的 PT 时间结束。当 PT 时间到时,ET 会保持定时时间直到 IN 变为“0”时。如果在达到 PT 定时时间之前输⼊ IN 已经变成“0”,输⼊ ET 编程 T#0s,PT 定时的时刻。复位该定时器,只需要设置 PT=T#0s 即可。
通电延时定时器 TON
断电延时定时器 TOF
功能:断电延时定时。
在定时器的输⼊端 IN 从“0”变为“1”时,定时器的 Q 输出信号为“1”,定时器的启动输⼊端变为“0”时,定时器则启动,只要当定时器在运⾏,其输出 Q ⼀直为“1”,当到达定时时间时,输出端 Q 复位,在到达定时时间之前,如果定时器的输⼊端返回为“1”,则定时器复位,输出端的 Q 输出信号保持为“1”。可参考图 6.x 中的 TOF 相关时序图。
输出端 ET 提供定时时间,延时从 T#0s 开始到设置的定时时间 PT 结束。当 PT 时间到时,ET将保持定时时间直到输⼊ IN 返回“1”为⽌。如果在达到 PT 定时时间之前,输⼊ IN 变为“1”,输出 ET ⽴即变为 T#0s。复位定时器,可以设置将 PT=T#0s。
实时时钟 RTC
标准定时器指令参数
计数器指令
标准功能库中提供了加、减计数功能块,系统提供了 CTU 加计数器、CTD 减计数器和 CTUD 加减计数器三个功能块
增计数器 CTU
当计数器输⼊端 CU 的信号从状态“0”变为状态“1”时,当前计算值加 1,并通过输出端CV 进⾏显示,第⼀次调⽤时(复位输⼊ RESET 信号状态为“0”),输⼊ PV 端的计数为默认值,当计数达到上限 32767 后,计数器将不会再增加,CU 也不会再起作⽤。
当复位输⼊端 RESET 的信号状态为“1”时,计数器的 CV 和 Q 都为“0”,只要输⼊端RESET 状态为“1”,上升沿对 CU 就不再起作⽤。当 CV 值⼤于或等于 PV 时,输出端 Q 为“1”。此时 CV 仍可继续累加,输出端 Q 继续为输出“1” 。
增量功能块。输⼊变量 CU 和复位 RESET 以及输出变量 Q 是布尔类型的,输⼊变量 PV 和输出变量 CV 是 WORD 类型。
减计数器 CTD
当减计数器输⼊端的 CD 信号从“0”变为状态“1”时,当前计数值减 1,并在输出端上 CV 显示当前值,第⼀次调⽤时(需要将加载输⼊端信号 LOAD 初始化,需要将其从“0”变为状态。
“1”,再变为状态“0”后功能块才能⽣效),输⼊ PV 端的计数为默认值,当计数达到 0 后,计数值将不在会减少,CD 也不再起作⽤。
增/减双向计数器 CTUD
当加计数输⼊端的 CU 信号从“0”变为状态“1”时,当前计数值加 1,并在输出 CV 上线时。当减计数输⼊端的 CD 的信号状态从“0”变为状态“1”时,当前计数值减 1,并在输出端 CV 上显示。如果两个输⼊端都是上升沿,当前计数值将保持不变。
当计数值达到上限值 32767 后,加计数输⼊端 CU 的上升沿不再起作⽤。因此即使加计数输⼊端 CU 出现上升沿,及数值也不会增加。同理,当计数值达到下极限值 0 后,减计数输⼊端 CD 也不会在其作⽤,因此,即使减计数输⼊端 CD 出现上升沿,计数值也不会减少。
当 CV 值⼤于或等于 PV 值时,输出 QU 为“1”。当 CV 值⼩于或等于 0 时,输出 QD 为“1”。
选择操作指令
⼆选⼀指令 SEL
功能:通过选择开关,在两个输⼊数据中选择⼀个作为输出,选择开关为 FALSE 时,输出为第⼀个输⼊数据,选择开关为 TRUE 时,输出为第⼆个数据。
语法:其⽂本化语⾔语法格式如下,
参数 G 必须是布尔变量。如果 G 是 FALSE,则返回值的结果是 IN0, 如果 G 是 TRUE ,则返回值的结果为 IN1。
取最⼤值 MAX
取最⼩值 MIN
限制值 LIMIT
语法:其⽂本化语⾔语法格式如下, IN, Min ,Max 以及返回值可以是任何数据类型
多选⼀ MUX
位移指令
按位左移 SHL
⽂本化语⾔语法格式如下:
按位右移 SHR
- 如果 n ⼤于数据类型宽度, BYTE, Word 和 DWORD 值将填为零。
- 如果使⽤带符号数据类型,则算术移位将按最⾼位补充数。
其⽂本化语⾔语法格式如下所示:
循环左移 ROL
其⽂本化语⾔语法格式如下所示,
循环右移 ROR
功能:对操作数进⾏按位循环右移,右边移出的位直接补充到左边最⾼位。
语法:允许的数据类型:BYTE、WORD、DWORD。
使⽤该指令可以将输⼊ IN 中的全部内容循环的逐位右移,空出的位⽤移出位的信号状态填充。
其⽂本化语⾔语法格式如下所示
数学运算指令
绝对值 ABS
其⽂本化语⾔语法格式如下所示
平⽅根 SQRT
其⽂本化语⾔语法格式如下所示
指数函数 EXP
其⽂本化语⾔语法格式如下所示
⾃然对数 LN
其⽂本化语⾔语法格式如下所示
10 为底的对数 LOG
其⽂本化语⾔语法格式如下所示
三⻆函数指令
语法:输⼊变量 IN 可以是 BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL、LREAL 和常数,但输出必须是 REAL 或 LREAL 类型。
其⽂本化语⾔语法格式如下所示
地址运算指令
SIZEOF 指令
功能:执⾏这个功能以确定给出的数据类型所需要的字节数量。
简单的说其作⽤就是返回⼀个对象或者类型所占的内存字节数。
语法:SIZEOF 的返回值的是⼀个⽆符号值,类型的返回值将会被⽤于查找变量 IN0 的⼤⼩,OUT 输出值的单位为字节,IN0 可以为任何数据类型。其⽂本化语⾔语法格式如下所示。
返回值类型:是隐式数据类型,它会根据实际数据值来决定。
其⽂本化语⾔语法格式如下所示
地址操作符 ADR
功能:取得输⼊变量的内存地址,并输出。该地址可以在程序内当作指针使⽤,也可以作为指针传递给函数。
语法:ADR 操作符其返回值为⼀个 DWORD 的地址变量,IN0 可以为任何数据类型。
返回值:ADR 的返回值仅是变量的内存地址。该内存地址可以存放的数据⻓度为 1 个 BYTE。
其⽂本化语⾔语法格式如下所示
位地址操作符 BITADR
功能:返回分配变量的位地址信息偏移量。 语法:BITADR 操作符其返回值为⼀个 DWORD 的地址变量,IN0 可以为任何数据类型。
其⽂本化语⾔语法格式如下所示
ADR 的返回值仅是变量的内存地址。该内存地址可以存放的数据⻓度为 1 个 BYTE。可以通过内容操作符“^” 提取对应地址中的内容注意偏移值取决于选项类型地址是否可以从⽬标系统中获得。
数据类型转换指令
BCD 码
BCD_TO_X
X_TO_BCD
BOOL_TO_ 布尔类型转换
输出为 BOOL 时:输⼊不等于 0 时,输出为 TRUE。输⼊等于 0 时,输出为 FALSE。
输出为 TIME 或 TOD 时:输⼊将以毫秒值进⾏转换。
输出为 DATE 或 DT 时 :输⼊将以秒值进⾏转换。
BYTE_TO_ 字节类型转换
IntegralData_TO_整数类型转换
输出为 BOOL 时:输⼊不等于 0 时,输出为 TRUE。输⼊等于 0 时,输出为 FALSE。
输出为 TIME 或 TOD 时:输⼊将以毫秒值进⾏转换。
输出为 DATE 或 DT 时 :输⼊将以秒值进⾏转换。
REAL_TO_实数类型转换
输出为 BOOL 时:输⼊不等于 0 时,输出为 TRUE。输⼊等于 0 时,输出为 FALSE。
输出为 TIME 或 TOD 时:输⼊将以毫秒值进⾏转换。
输出为 DATE 或 DT 时 :输⼊将以秒值进⾏转换。
REAL_TO_INT 四舍五⼊
TIME_TO_ 时间类型转换
DATE_TO_ ⽇期类型转换指令
DT_TO_⽇期时间类型转换
TOD_TO_ 时间类型转换
取整 TRUNC
功能:将数据截去⼩数部分,只保留整数部分
EtherCAT配置
EtherCAT是⼀种基于以太⽹的开放式⼯业现场技术,具有通信刷新周期短、同步抖动⼩、硬件成本低等特点,⽀持线型、树型、星型以及混合⽹络拓扑结构。EtherCAT从站必须使⽤专⽤的通信控制芯⽚(ESC),EtherCAT主站可以使⽤标准的以太⽹控制器。
EtherCAT 出⾊的性能使得系统配置时对 ⽹络调试的需求得以降低。⾼带宽可以将 其他的 TCP/IP 与控制数据同时传输。然⽽, EtherCAT 并不是基于 TCP/IP 的,因此⽆需使⽤ MAC 地址或 IP 地址,更不需要 IT 专家配 置交换机或路由器。
EtherCAT 将其报⽂嵌⼊到标准的以太⽹数据帧中(形成 EtherCAT 数据帧)。设备通过 帧类型 0x88A4 识别 EtherCAT 数据帧。
EtherCAT 采⽤分布式时钟(DC)的⽅式 同步节点。各个节点的时钟校准完全基于硬件。第⼀个具有分布时钟功能的从站设备的时间被周 期性地发布给系统中的其他设备。采⽤这样的机制,其它从站时钟可以根据参考时钟精确 地进⾏调整。整个系统的抖动远⼩于 1µs。
EtherCAT运⾏机制
EtherCAT 的关键⼯作原理在于其节点对以太⽹数据帧的处理:在数据帧向下游传输 的过程中,每个节点读取寻址到该节点的数据,并将它的数据写⼊数据帧。这种传输⽅ 式提⾼了带宽利⽤率,使得每个周期通常⽤ ⼀个数据帧就⾜以实现整个系统的数据刷 新,同时,⽹络⽆需使⽤交换机或集线器
⽹络拓扑
⼀个 EtherCAT ⽹ 络最多可⽀持 65,535 个设备,⽽不受在拓扑 结构中放置位置的限制:线型、总线型、树 型、星型——或任意组合。快速以太⽹物理层 允许两个设备最⼤间距 100 ⽶(330 英尺), 采⽤光纤则设备间距可以更远。EtherCAT 还 可以提供更⾼的拓扑灵性,如设备的热连接、热插拔,以及通过环⽹实现的线缆冗余。
EIA-485(RS-485)
EIA-485(过去叫做RS-485或者RS485[1])是⾪属于OSI模型物理层的电⽓特性规定为2线、半双⼯、平衡传输线多点通信的标准。是由电信⾏业协会(TIA)及电⼦⼯业联盟(EIA)联合发布的标准。实现此标准的数位通讯⽹可以在有电⼦杂讯的环境下进⾏⻓距离有效率的通讯。在线性多点总线的组态下,可以在⼀个⽹路上有多个接收器。因此适⽤在⼯业环境中。
EIA⼀开始将RS(Recommended Standard)做为标准的字⾸,不过后来为了便于识别标准的来源,已将RS改为EIA/TIA[2]。电⼦⼯业联盟(EIA)已结束运作,此标准⽬前是电信⾏业协会(TIA)维护,名称为TIA-485,但⼯程师及应⽤指南仍继续⽤RS-485来称呼此⼀协定。
EIA-485的电⽓特性和RS-232不⼀样。EIA-485使⽤缆线两端的电压差值来表示传递信号,不同的电压差分别标识为逻辑1及逻辑0。两端的电压差最⼩为0.2V以上时有效,任何不⼤于12V或者不⼩于-7V的差值对接受端都被认为是正确的。
EIA-485仅仅规定了接受端和发送端的电⽓特性。它没有规定或推荐任何数据协议。EIA-485可以应⽤于配置便宜的区域⽹和采⽤单机发送,多机接受通信链接,使⽤和EIA-422类似的差动双绞线。它提供⾼速的数据通信速率(10m时35Mbit/s;1200m时100kbit/s)。有⼀个有关EIA-485的经验法则,是⽐特率乘以线⻓(单位为⽶)的乘积⽆法超过108,因此 50 m的在线速度不会超过2 Mbit/s[3],在特定条件下,其数据通信速率可以到64 Mbit/s.。
典型的终接电阻以及偏置电阻线路。EIA-485标准没有标示终接电阻以及偏置电阻的阻值理想情况下EIA-485需要2 个终接电阻,其阻值要求等于传输电缆的特性阻抗(⼀般⽽⾔,双绞线会是120 ohms)。没有特性阻抗的话,当所有的设备都静⽌或者没有能量的时候就会产⽣噪声,⽽且线移需要双端的电压差。没有终接电阻的话,会使得较快速的发送端产⽣多个数据信号的边缘,这其中的⼀些是不正确的。之所以不能使⽤星型或者环型的拓扑结构是由于这些结构有不必要的反映,过低或者过⾼的终接电阻可以产⽣电磁⼲扰(EMI)。有时在⼀组⽹络在线。会加上上拉及接地电阻(偏置电阻),若通信在线没有任何设备时,上⾯的资料可以有失效安全的机制。这样可以让⽹络在线有固定的偏置电压,节点较不容易在没有任何节点发送资料时,将在线的噪声解读成实际的资料。若没有偏置电阻,通信线处于浮接的状态,在所有节点都未发送资料或未供电时,最容易受到噪声的影响。
Modbus
Modbus是⼀种串⾏通信协议,是Modicon公司(现在的施耐德电⽓ Schneider Electric)于1979年为使⽤可编程逻辑控制器(PLC)通信⽽发表。Modbus已经成为⼯业领域通信协议事实上的业界标准,并且现在是⼯业电⼦设备之间常⽤的连接⽅式Modbus允许多个 (⼤约240个) 设备连接在同⼀个⽹络上进⾏通信协议
对于通过TCP/IP(例如以太⽹)的连接,存在多个Modbus/TCP变种,这种⽅式不需要校验和计算。
对于所有的这三种通信协议在数据模型和功能调⽤上都是相同的,只有封装⽅式是不同的。
Modbus有⼀个扩展版本Modbus Plus(Modbus+或者MB+),不过此协议是Modicon专有的,和Modbus不同。它需要⼀个专⻔的协处理器来处理类似HDLC的⾼速令牌旋转。它使⽤1Mbit/s的双绞线,并且每个节点都有转换隔离设备,是⼀种采⽤转换/边缘触发⽽不是电压/⽔平触发的设备。连接Modbus Plus到计算机需要特别的接⼝,通常是⽀持ISA(SA85),PCI或者PCMCIA总线的板卡。
到此这篇plc1200ctu(plc1200ctu计数器)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/cjjbc/82059.html