前言:随便写写记录哈,方便学习查找。(以下均为个人笔记会有错误,仔细甄别后使用)
绿色代表不重要需要使用再查看,
黄色代表比较实用
红色表示重点
持续更新中................
1.汇川EASY硬件系统组成
1.型号与铭牌说明*
*
*
*
*
*
*
*
*
*
*
*
*
双向输入,当前示意图输出为NPN漏型输出
*
*
*
*
*
*
*
特殊软元件
*
*
变量定义
*
IP变量定义使用
*
*
在TCP_Scoket 通信中 IP 支持使用 IP/DINT/POINT类型(详情见TCP_Socket通信章节)
如果使用Dint注意字排序方式
*
特定联合体的使用
特定联合体变量数据类型包括三种
*
*
*
如果di0 = 1000(32位)
*
指针的使用
*
建立指针
*
指针里面存放的是地址而不是数据
*
使用指针进行数据读写
*
*
当R0 =1 R1 =1
*
具体应用可以进行(一对一,一对多,多对多的数值赋值)
需求:把D1004的值,根据D0的设定,往100个连续的D元件D400-D499进行赋值。
如D0=0,将D1004的值给到D400;D0=1 ,则D1004的值给到D401
*
需求:把(D1006,D1007)的值,根据D0的设定,往100个连续的32位D元件D500-D699进行赋值。
如D0=0,值(D1006,D1007)的值给到(D500,D501);D0=1 ,则(D1006,D1007)的值给到(D502,D503)
*
需求:把M1002的状态,根据D0的设定,往100个连续的M元件M200-M299进行赋值。
如D0=0,M1002的值给到M200;D0=1 ,则M1002的值给到M201
*
数组
*
结构体
*
可以通过导入导出来快捷建表。包括昆仑通态触摸屏+汇川的触摸屏
TCP
*
TCP_Listen
*
字符串
*
*
变量绑定地址
自定义变量绑定软元件之后,掉电保持属性会跟随绑定的软元件变化。
*
2.AutoShop编程软件的使用
新建工程
*
-
启动与新建:打开AutoShop软件,在菜单栏选择“文件 > 新建工程”。
-
命名与保存:
-
在弹出的对话框中,输入清晰的工程名称。
-
为工程选择合适的保存路径。强烈建议为每个新工程创建一个独立的文件夹,以便管理。
-
-
选择PLC类型:在新建工程时,需要选择PLC类型(例如H3U、H5U等)。此选择必须与实际使用的PLC型号严格一致,否则可能导致程序无法下载或运行异常。
-
选择编程语言:通常可以选择梯形图或其他支持的。
-
确认创建:点击“确定”按钮完成创建。
*
-
选择通信端口:确保有一根Type-C的USB编程线/以太网线/网关。USB线通常用于初始设置和程序下载,而以太网线用于网络通信和在线监控。
-
IP地址设置:对于以太网通信,首先需要为PLC分配一个固定的IP地址。可以通过USB连接后,在AutoShop的“通讯设置”中搜索设备并修改IP
结构体
*
-
定义结构体:在应用程序下添加新的结构体,然后定义成员变量。
-
声明结构体变量:定义好结构体类型后,就可以像使用INT、BOOL这样的基本类型在变量表一样来声明变量了。
-
访问成员:使用“.”运算符来访问结构体内部的成员变量
软元件表

- 用于批量修改当前页面的数据类型
- 跳转功能,例如切换至D元件,输入1000,点击跳转或按Enter键,则页面自动跳转至D1000的位置。
- 修改数据值列和当前值列的显示格式。
- 可以添加注释

同步数据功能 — 将选择列的数据全部同步到菜单项选中的数据值列中,例如单击选择数据值1列的某个单元格右键选择同步到数据值2,则是将数据值1列的数据覆盖数据值2。

上载工程变量值与操作读取内存一致
将PLC的软元件变量值存入选择中的数据值中

*
*
可以配合汇川触摸屏使用导入变量快捷组态
功能块实例
FB块调用时需要实例化,当在主程序调用时自动生成
*
*
变量表


可在变量表中监视本机的IP、MAC等信息。
| 参数路径 | 数据类型 | 描述 | 权限 |
|---|---|---|---|
| Ethernet.MACAddress | INT[3] | 物理地址(MAC地址) | 只读 |
| Ethernet.MACAddress[0] | INT | MAC地址第1部分 | 只读 |
| Ethernet.MACAddress[1] | INT | MAC地址第2部分 | 只读 |
| Ethernet.MACAddress[2] | INT | MAC地址第3部分 | 只读 |
| Ethernet.IPAddress | DINT | 本机IP地址 | 读写 |
| Ethernet.Mask | DINT | 子网掩码 | 读写 |
| Ethernet.Gateway | DINT | 网关 | 读写 |
| IPCommand | INT | IP命令 | 读写 |
_DateTime:RTC时钟如下表所示
| _DateTime.Second | INT | 秒 | [0, 60] (60为闰秒) | 只读 | D8013 |
| _DateTime.Minute | INT | 分 | [0, 59] | 只读 | D8014 |
| _DateTime.Hour | INT | 时 | [0, 23] | 只读 | D8015 |
| _DateTime.Day | INT | 日(月中的日期) | [1, 31] | 只读 | D8016 |
| _DateTime.Month | INT | 月份 | [1, 12] | 只读 | D8017 |
| _DateTime.Year | INT | 年份 | - | 只读 | D8018 |
| _DateTime.WeekDay | INT | 星期 | [0, 6] (0=星期日, 1=星期一) | 只读 | D8019 |
| _DateTime.YearDay | INT | 年累积日(从1月1日开始) | [0, 365] (0代表1月1日) | 只读 | 无 |
| _DateTime.Timestamp | DINT | 时间戳(从1970-01-01 00:00:00起的秒数) | - | 只读 | 无 |
TWR
该指令将指定时钟数据S (含年/月/日/时/分/秒/星期)的7个数据写入 PLC 的内置实时时钟数据 。
*
特殊辅助继电器(M点)功能表
| 元件地址 | 数据类型 | 功能描述 | 权限 | 类别 |
|---|---|---|---|---|
| M8000 | BOOL | 运行监视:PLC运行时始终为ON | 只读 | 状态 |
| M8001 | BOOL | 运行监视取反:M8000状态取反(PLC运行时为OFF) | 只读 | 状态 |
| M8002 | BOOL | 初始脉冲:用户程序开始运行的第一个扫描周期为ON | 只读 | 脉冲 |
| M8003 | BOOL | 初始脉冲取反:M8002状态取反(第一个扫描周期为OFF) | 只读 | 脉冲 |
| M8011 | BOOL | 10ms时钟:以10ms为周期(ON 5ms, OFF 5ms)的振荡时钟 | 只读 | 时钟 |
| M8012 | BOOL | 100ms时钟:以100ms为周期(ON 50ms, OFF 50ms)的振荡时钟 | 只读 | 时钟 |
| M8013 | BOOL | 1s时钟:以1s为周期(ON 0.5s, OFF 0.5s)的振荡时钟 | 只读 | 时钟 |
| M8014 | BOOL | 1min时钟:以1min为周期(ON 30s, OFF 30s)的振荡时钟 | 只读 | 时钟 |
*
程序块
*
右键可以设置看门狗与扫描周期时长
程序块中只有一个主程序,可以插入子程序与中断子程序
*
*
在程序执行过程中,当满足中断条件跳转到中断子程序中执行完毕后返回中断的位置继续执行,子程序是在CALL主动调用的
FB块

*
可以导出FB,导入其他项目的FB中或者库使用
FB初始值
FC函数
导出与FB一致不再赘述
配置
输入滤波

设置输入滤波时长
模块配置
*
可以添加扩展模块并且进行配置
比如GL20-1600END扩展模块
*
部件说明
*
接线
*
交叉引用表*
元件使用表 *
Trace

当我们的触发变量满足触发值的条件,就进行采样N个后后停止采样。

*


*
*
实时采集Y0的数据变化
*
*
未满足前一直采集,满足Y1条件后再采集100个Y0数据后停止采集
*
Y2为1记录采集,Y2为0不记录采集
快捷键ALT+↑↓ 快捷调整软元件地址
Ctrl+Shift+V 批量复制
3.编程基础指令(梯形图)
3.1触点指令
| 指令助记符 | 功能说明 | 编程语言 |
|---|---|---|
| LD | 加载常开触点 | LD |
| LDI | 加载常闭触点 | LD |
| LDP | 取脉冲上升沿 | LD |
| LDF | 取脉冲下降沿 | LD |
| MEP | 运算结果上升沿脉冲化 | LD |
| MEF | 运算结果下降沿脉冲化 | LD |
| 指令助记符 | 功能说明 | 编程语言 |
|---|---|---|
| OUT | 驱动线圈 | LD |
| SET | 置位动作保存线圈指令 | LD |
| RST | 接点或缓存器清除 | LD |
| ZSET | 全部数据置位 | LD、LiteST |
| ZRST | 全部数据复位 | LD、LiteST |
| PLS | 脉冲上升沿检测线圈指令 | LD |
| PLF | 脉冲下降沿检测线圈指令 | LD |
| ALT | 交替输出 | LD |
| R_TRIG | 上升沿检测指令 | LD、LiteST |
| F_TRIG | 下降沿检测指令 | LD、LiteST |
| 指令助记符 | 功能说明 | 编程语言 |
|---|---|---|
| INV | 运算结果取反 | LD |
| 指令助记符 | 功能说明 | 编程语言 |
|---|---|---|
| CJ | 条件跳转指令 | LD |
| LBL | 标号指令 | LD |
| CALL | 子程序调用指令 | LD |
| SSRET | 子程序待条件返回 | LD |
| EI | 中断许可 | LD, LiteST |
| DI | 中断禁止 | LD, LiteST |
| WDT | 监视定时器复位指令 | LD |
| FOR | 循环范围开始指令 | LD |
| NEXT | 循环范围结束指令 |
LD |
条件跳转指令使用
*
WDT看门狗指令使用
*


| 指令助记符 | 功能说明 | 编程语言 |
|---|---|---|
| STL | 程序跳至副母线 | LD |
| RET | 程序返回主母线 | LD |
| OUTSTL | 输出程序跳至副母线 | LD |
| SETSTL | 置位程序跳至副母线 | LD |
| RSTSTL | 清除程序跳至副母线 | LD |

顺序控制从STL开始已RET结束
3.4触点比较基本比较指令
| 指令助记符 | 功能说明 | 编程语言 |
|---|---|---|
| LD= | LD触点比较等于 | LD |
| LD> | LD触点比较大于 | LD |
| LD< | LD触点比较小于 | LD |
| LD<> | LD触点比较不等于 | LD |
| LD>= | LD触点比较大于等于 | LD |
| LD<= | LD触点比较小于等于 | LD |
逻辑运算触点指令
| 指令助记符 | 功能说明 | 编程语言 |
|---|---|---|
| LD& | LD逻辑与运算 | LD |
| LD| | LD逻辑或运算 | LD |
| LD^ | LD逻辑异或运算 | LD |
绝对值比较触点指令
| 指令助记符 | 功能说明 | 编程语言 |
|---|---|---|
| LDZ> | 绝对值>比较的状态触点[S1-S2]>[S3]时导通 | LD |
| LDZ>= | 绝对值>=比较的状态触点[S1-S2]≧[S3]时导通 | LD |
| LDZ< | 绝对值<比较的状态触点[S1-S2]<[S3]时导通 | LD |
| LDZ<= | 绝对值<=比较的状态触点[S1-S2]≦[S3]时导通 | LD |
| LDZ= | 绝对值=比较的状态触点[S1-S2]=[S3]时导通 | LD |
| LDZ<> | 绝对值<>比较的状态触点[S1-S2]≠[S3]时导通 | LD |
基本算术运算
| 指令助记符 | 功能说明 | 编程语言 |
|---|---|---|
| ADD | 二进制数据加法 | LD |
| SUB | 二进制数据减法 | LD |
| MUL | 二进制数据乘法 | LD |
| DIV | 二进制数据除法 | LD |
| MOD | 二进制除法求余 | LD、LiteST |
数据操作指令
| 指令助记符 | 功能说明 | 编程语言 |
|---|---|---|
| INC | 二进制数据加一 | LD |
| DEC | 二进制数据减一 | LD |
| WAND | 二进制数据逻辑与 | LD |
| WOR | 二进制数据逻辑或 | LD |
| WXOR | 二进制数据逻辑异或 | LD |
| NEG | 二进制数据求补 | LD |
| ENEG | 二进制浮点数符号取反 | LD |
NEG(二进制数据求补)
D0:求补前 2#1111 1111 1111 0100
求补后 2#0000 0000 0000 1100
在PLC中数据是以二进制补码储存的
高级数学运算指令
| 指令助记符 | 功能说明 | 编程语言 |
|---|---|---|
| EXP | 二进制浮点数据指数运算 | LD |
| LOGE | 二进制浮点数自然对数运算 | LD |
| LOG | 二进制浮点数以10为底的对数运算 | LD |
| ESQR | 二进制浮点开方运算 | LD |
| SQR | 二进制数据开方运算 | LD |
| POW | 浮点数幂运算指令 | LD |
位处理指令
| 指令助记符 | 功能说明 | 编程语言 |
|---|---|---|
| BLD | 字或双字位数据触点指令 | LD |
| BLDI | 字或双字位数据反触点指令 | LD |
| BOUT | 字或双字位数据输出指令 | LD |
| BSET | 字或双字位数据置位指令 | LD |
| BRST | 字或双字位数据复位指令 | LD |
BLD(字或双字位数据触点指令)
*
D100 16->2#1000
第一条指令判断D100的第三位是否为1.
第二条指令判断D100的第四位是否为1
BOUT(字或双字位数据输出指令)*
BSET(字或双字位数据置位指令)/BRST(字或双字位数据复位指令)*
| 指令助记符 | 功能说明 | 编程语言 |
|---|---|---|
| SIN | 浮点SIN运算指令 | LD |
| COS | 浮点COS运算指令 | LD |
| TAN | 浮点TAN运算指令 | LD |
| ASIN | 二进制浮点数ARCSIN运算 | LD |
| ACOS | 二进制浮点数ARCCOS运算 | LD |
| ATAN | 二进制浮点数ARCTAN运算 | LD |
| RAD | 二进制浮点数角度→弧度的转换 | LD |
| DEG | 二进制浮点数弧度→角度的转换 | LD |
| SINH | 二进制浮点数SINH运算 | LD |
| COSH | 二进制浮点数COSH运算 | LD |
| TANH | 二进制浮点数TANH运算 | LD |
| 指令助记符 | 功能说明 | 编程语言 |
|---|---|---|
| WSUM | 算出数据合计值 | LD |
| MEAN | 平均值计算 | LD |
| LIMIT | 上下限限位控制 | LD |
| BZAND | 死区控制 | LD |
| ZONE | 区域控制 | LD |
WSUM(算出数据合计值)地址1 地址2 个数N
从地址1连续n个数相加结果放入地址2
*
*
LIMIT(上下限限位控制) 下限 上限 判断值 输出值*
下限<=判断值<=上限,则输出判断值
判断值<下限,则输出下限
判断值>上限,则输出上限
BZAND(死区控制)
*
*
ZONE(区域控制)S1 S2 S3 D*
*
| 指令助记符 | 功能说明 | 编程语言 |
|---|---|---|
| INT | 二进制浮点→BIN整数的转换 | LD |
| BCD | 二进制数据转换BCD数据 | LD |
| BIN | BCD数据转换二进制数据 | LD |
| FLT | 二进制数据→二进制浮点数转换 | LD |
| EBCD | 二进制浮点→十进制浮点转换 | LD |
| EBIN | 十进制浮点→二进制浮点转换 | LD |
| DABIN | 10进制ASCII→BIN的转换 | LD |
| BINDA | BIN→10进制ASCII的转换 | LD |
| WTOB | 字节单位的数据分离 | LD |
| BITW | 位元伴随值给字元件 | LD |
| BTOW | 字节单位的数据结合 | LD |
| WBIT | 字元伴随值给位元件 | LD |
| WTODW | 16位字元件转换成32位字元件 | LD |
| DWTOW | 32位字元件转换成16位字元件 | LD |
| MCPY | 数据复制(内存拷贝、类型变换)指令 | LD |
| MSET | 数据设置(内存设置和复位)指令 | LD |
| UNI | 16位数据的4位结合 | LD |
| DIS | 16位数据的4位分离 | LD |
| ASCI | HEX→ASCII转换 | LD |
| HEX | ASCII→HEX转换 | LD |
| DECO | 数据解码 | LD |
| ENCO | 数据编码 | LD |
| SCALE_X | 缩放指令 | LD |
| NORM_X | 反缩放-标准化指令 | LD |
| ROUND | 取整/四舍五入 | LD |
| TRUNC | 截尾取整 | LD |
| CELL | 浮点数向上取整 | LD |
| FLOOR | 浮点数向下取整 | LD |
| 指令助记符 | 功能说明 | 编程语言 |
|---|---|---|
| MOV | 赋值传送 | LD |
| EMOV | 二进制浮点传送 | LD |
| SMOV | 移位传送 | LD |
| BMOV | 数据成批传送 | LD |
| FMOV | 数据一对多传送 | LD |
| CML | 数据取反传送 | LD |
| CMP | 数据比较 | LD |
| ECMP | 浮点比较指令 | LD |
| ZCP | 区域比较 | LD |
| EZCP | 浮点区域比较指令 | LD |
SMOV(移位传送)
*
*
*
D0 1234 从第四位开始连续二位 12-》赋值给D10 第三位与第二位
*
*
在bin模式下 将D0的高8位赋值给D10的的5-13位
*
BMOV(数据成批传送)
*
FMOV(数据一对多传送)
*
脉冲定时器(TPR)、接通延时定时器(TONR)、关断延时定时器(TOFR)和时间累加定时
器。
*
脉冲定时器 (TPR)

*
工作原理:
IN 0->1,定时器启动计时(不能重复驱动),Q状态位置1
当ET=PT即到达设定时间,Q状态位置0.如果IN=0,则ET值为0。IN=1,ET值保持。
如果R使能为1,当前值ET清零状态位Q置0
接通延时定时器 (TONR)
*
*
当IN状态位置1,定时器开始计时,如果ET=PT,状态位Q置1
如果IN状态位置0,当前值ET清零状态位Q置0
如果R使能有效,当前值ET清零状态位Q置0
关断延时定时器 (TOFR)
*
*
当IN使能为1,Q状态位置1,当前值清ET理
当IN使能1->0,定时器从零开始启动计时,如果当前值ET=PT,状态位置0


类似与TONR工作原理不再赘述
4.编程基础指令(ST)
*
*
*
*
*
*
*
*
*
*
*
*
*
| 指令类别 | 指令名称 | 功能说明 | 支持语言 |
|---|---|---|---|
| 数组指令 | AryMax / AryMin | 数组变量的最大值 / 最小值检索 | LiteST |
| ArySearch | 在一维数组中检索指定值 | LiteST | |
| SizeOfAry | 获取数组元素数量 | LiteST | |
| AryMove | 数组传送 | LiteST | |
| AryExchange | 数组数据交换 | LiteST | |
| CLEAR | 初始化变量 | LiteST | |
| AryAddV / ArySubV | 对数组的每个元素进行加法 / 减法运算 | LiteST | |
| ArySHL / ArySHR | 将数组整体左移 / 右移 N 个元素 | LiteST | |
| AryAnd | 数组逻辑与运算 | LiteST | |
| AryOr | 数组逻辑或运算 | LiteST | |
| AryXor | 数组逻辑异或运算 | LiteST | |
| AryXorN | 数组逻辑同或运算 | LiteST | |
| AryMean | 计算数组元素的平均值 | LiteST | |
| ArySD | 计算数组元素的标准差 | LiteST |
| 指令名称 | 功能说明 | 支持编程语言 |
|---|---|---|
| LEN | 检出字符串的长度 | LD、LiteST |
| INSETR | 字符串插入 | LiteST |
| RIGHT | 从字符串右侧开始取出 | LD、LiteST |
| LEFT | 从字符串左侧开始取出 | LD、LiteST |
| 指令名称 | 功能说明 | 支持编程语言 |
|---|---|---|
| ClearString | 清除字符串 | LiteST |
| CONCAT | 将输入两字符串连接并输出 | LiteST |
| DELETE | 将输入字符串中的指定位置指定长度字符串删除,输出处理后字符串 | LiteST |
| FIND | 检索目标字符串在输入源字符串中的位置 | LiteST |
| REPLACE | 字符串替换 | LiteST |
5.子程序
*
*


6.中断

*
*
*

7.通信
TCP_Socket1.作为服务器
服务器必须等待客户端的连接请求,需要提供IP与端口号,当本机作为服务器时,使用TCP_Listen指令实现监听客户端连接请求的功能。
*
当执行之后,传递port失效,不能写入到Socket中,并且更改Socket也无效,记得一定是先确定好参数才执行监听。
*
Socket格式
*
指定监听的本机端口:不可以使用系统内部占用端口号(23、12939、12940)或Modbus-TCP服务器端口号(502)
*
处于监听状态的服务器当接收到客户端的连接请求后,需要通过TCP_Accept指令来建立与客
户端间的通信。
在成功建立通信后,通过多条TCP Accept指令可以实现同一本地端口与多个客户端建立通信连接??(未成功测试)
可以通过多条Listen+Accept实现多个TCP连接
注意Socket的不同
*
2.作为客户端
*
IPAddress:D500
*
当本机做为客户端,要与服务器进行通讯时,通过TCPConnect指令去连接服务器指定的端口
客户端通过TCP_Connect指令向服务器发出连接请求后,最多等待127秒,若服务器没有响应
则连接失败。
3.断开连接
*
在完成通信后,可以使用TCP Close指令来关闭连接、停止监听或终止正连接的套接字
4.发送接收
*
*
*
关于发送接收类型支持 BUFFER数组支持字节/整数
整数数组的接收方式
*
*
MODBUS_TCP协议介绍
运行在 TCP/IP 网络上,将 Modbus 协议封装在 TCP 数据包中,使用端口 502。
主从模式: 通信由主站(Master,如 SCADA 系统、HMI)发起,从站(Slave,如 PLC、传感器、仪表)响应。
寻址空间: Modbus 使用不同的“数据模型”来访问设备内的不同类型数据。
线圈(Coils):可读可写的位数据,通常表示开关量输出(DO)。地址范围:0区。
离散输入(Discrete Inputs):只读的位数据,通常表示开关量输入(DI)。地址范围:1区
输入寄存器(Input Registers):只读的字(16位)数据,通常表示模拟量输入(AI)。地址范围:3区
保持寄存器(Holding Registers): 可读可写的字(16位)数据,通常表示模拟量输出(AO)或设备配置参数。地址范围:4区。
Modbus TCP报文
Modbus TCP 的报文是在标准 Modbus PDU 的基础上,添加了一个特定的 MBAP 报文头。
MBAP 报文头+Modbus PDU组成了Modbus TCP 的报文
MBAP 报文头(7字节):
事务元标识符(2个字节)+协议标识符(2个字节)+长度(2个字节)+单元标识符(1个字节)
*
Modbus PDU(协议数据单元):
功能码(1字节)+数据(可变长度)
*
实例1:读取保持 寄存器 (功能码 0x03)
*
主站发送:000E 0000 0006 01 03 0000 0002
000E:事务元标识符主站生成
0000:Modbus_TCP固定为0000
0006:后面还有6个字节
01: 站号为01
03:功能码
0000:起始地址
0002:读取个数
从站回应:000E 0000 0007 01 03 04 0003 0000
04:4个字节
0003:读取内容1
0000:读取内容2
实例2:写多个保持寄存器(功能码 0x10)
主:0002 0000 0009 01 10 00C8 0002 04 ABCD EF01
00C8:地址
0002:写入2个字
04:4个字节
ABCD:写入内容1
EF01:写入内容2
从:0002 0000 0006 01 10 00C8 0002
作为TCP主站
*
*
*
*
*

STConncetOPT配置
*
*
*
作为TCP从站
只需要提供IP地址与端口号502
汇川EASY MODBUS地址映射
*
*
汇川EASY支持的功能码
*
读取D0 D1
*
读取X0-X7
*
通信资源
*
通信协议
*
RTU 帧格式
| 组成部分 | 长度 | 说明 | 示例(十六进制) |
|---|---|---|---|
| 起始间隔 | ≥ 3.5字符时间 | 帧与帧之间的静默区,由物理层实现 | - |
| 从站地址 | 1 Byte | 目标设备的地址(0-247) | 01 |
| 功能码 | 1 Byte | 指示要执行的操作(如03读,06写) | 03 |
| 数据域 | N Bytes | 请求或响应的具体数据 | 00 00 00 01 |
| CRC校验 | 2 Bytes | 循环冗余校验码(低位在前) | 84 0A |
| 结束间隔 | ≥ 3.5字符时间 | 帧结束的标志,由物理层实现 | - |
请求从站地址1读取保持寄存器40001和40002(起始地址0x0000,数量0x0002)。
完整的RTU请求帧为:01 03 00 00 00 02 C4 0B
-
01: 从站地址 -
03: 功能码(读保持寄存器) -
00 00: 起始地址高/低字节 -
00 02: 寄存器数量高/低字节 -
C4 0B: CRC校验码(计算自01 03 00 00 00 02)
ASCII 帧格式
| 组成部分 | 长度 | 说明 | 示例(ASCII字符) |
|---|---|---|---|
| 起始符 | 1字符 | 固定为冒号 : |
: |
| 从站地址 | 2字符 | 目标设备地址的十六进制ASCII表示 | "01" |
| 功能码 | 2字符 | 功能码的十六进制ASCII表示 | "03" |
| 数据域 | N*2字符 | 数据的十六进制ASCII表示 | "00000002" |
| LRC校验 | 2字符 | 纵向冗余校验码的十六进制ASCII表示 | "F4" |
| 结束符 | 2字符 | 固定为回车换行 CR LF |
CR LF |
与RTU示例相同的请求(从站1,读寄存器40001和40002)。
完整的ASCII请求帧为::010300000002F4CR LF
-
:: 起始符 -
01: 从站地址(ASCII字符 '0' '1') -
03: 功能码(ASCII字符 '0' '3') -
00000002: 数据(ASCII字符 '0''0''0''0''0''0''0''2') -
F4: LRC校验码(计算自01+03+00+00+00+02的二进制和,取反加一后转换为ASCII) -
CR LF: 结束符
MODBUS_RTU
RTU主站

*


*
S1 — 端口号(端口号和串口对应,设定实际选择通信的串口号)默认为0
*

*
*

*
虽然不知道为什么但是端口设置位0,其他不能用
EtherNet/IP协议介绍

*
如果设备不存在,右键单击工具箱中的“EtherNet/IP Devices”节点,在弹出的菜单项中单击“导入
OPC UA
PROFINET
PROFINET 的设计目标是用标准的工业以太网,满足从工厂自动化到过程自动化所有领域的通信需求。它不仅仅是一种协议,更是一个完整的通信框架。
-
基于工业以太网:它使用标准的IEEE 802.3以太网技术,但针对工业环境进行了强化(如坚固的连接器、实时性、确定性)。
-
开放性:它是一个国际标准(IEC 61158 & 61784),不同厂商的设备可以实现互操作性。
-
实时性:这是PROFINET与普通办公以太网最根本的区别。它通过不同的通信通道来满足不同等级的实时需求。
-
拓扑灵活性:支持线型、星型、环型等多种网络拓扑,并支持集成的网络诊断功能。
MC
MC协议是三菱电机为其自动化产品(如PLC、运动控制器、机器人控制器等)设计的一套专有通信协议。它的主要目的是让外部设备(如上位机、HMI、SCADA系统、其他品牌的PLC等)能够与三菱的控制器进行数据交换。
MC协议的不同形式(框架与实现)
1. 串行通信框架(早期/基础)
-
基于RS-232或RS-485串行接口。
-
协议格式相对简单,但速度较慢。
-
例如,通过COM口直接连接FX系列的PLC。
2. 以太网框架(主流/常用)
-
基于TCP/IP或UDP/IP,运行在以太网上,速度更快,是现代应用的主流。
-
它本身又包含几种不同的通信方式:
-
MC二进制格式:这是最常用、最标准的格式。使用二进制的指令和响应,代码简洁,处理效率高。
-
MC ASCII格式:指令和响应都以ASCII字符(文本)形式表示。虽然可读性好(便于调试),但数据量是二进制的两倍,效率较低。
-
SLMP格式:这是三菱推出的统一协议框架,旨在为串行和以太网提供一致的通信体验。现在很多时候提到以太网MC协议,实际上就是指基于SLMP框架的通信。
-
3. 总线框架
-
基于MELSECNET/H或CC-Link等工业总线网络。
-
用于三菱产品内部的高速网络互联,通常不用于与上位机的直接通信。
FINS/TCP/UDP
FINS 是 Factory Interface Network Service 的缩写,它是欧姆龙为其自动化产品(如PLC、温度控制器、网络从站等)设计的一套专有通信协议。
-
网络透明性:程序员无需关心底层网络硬件的细节,使用相同的FINS指令即可跨网络通信。
-
强大的功能:支持读写I/O存储器、操作模式控制、文件操作、时钟操作等多种功能。
-
基于命令/响应:采用典型的“主站请求,从站响应”的工作模式。
8.运动控制
9.具体案例/方法
1.队列入队
*
出队
*


返回顶部
刷新页面
下到页底