西门子中国(授权)一级代理 西藏代理商PLC
| 更新时间 2024-12-01 08:00:00 价格 请来电询价 西门子变频器 西门子触摸屏 西门子伺服电机 西门子PLC 西门子直流调速器 西门子电缆 联系电话 13922889745 联系手机 18475208684 联系人 向小姐 立即询价 |
S7-1200 Modbus RTU 主站编程
在硬件组态部分,我们插入了两个485块,CB1241和CM1241,两者硬件组态有略微差别,但是编程一致,下面我们以CB1241(硬件标识符:269)为例分享,如何实现主站编程;步骤如下:
新建FC(一般通讯单独放一个FC,方便调试),并拖入Modbus_Comm_Load 指令和 Modbus_Master 指令,始下图:
image-20240603151559698为Modbus_Comm_Load配置参数
image-20240603153813166Modbus_Comm_Load 指令各参数意义如下表所示:
引脚
说明
REQ
上升沿触发
PORT
通信端口的硬件标识符(硬件组态中的标识符)
BAUD
波特率选择:3600,6000,12000,2400,4800,9600,19200,38400,57600,76800,115200
PARITY
奇偶检验选择:0-无;1-奇校验;2-偶校验
FLOW_CTRL
流控制选择:0-(默认值)无流控制
RTS_ON_DLY
RTS 延时选择:0-(默认值)
RTS_OFF_DLY
RTS 关断延时选择:0-(默认值)
RESP_TO
响应超时: 默认值 = 1000 ms。Modbus_Master 允许用于从站响应的时间(以毫秒为单位)。
MB_DB
对 Modbus_Master 或 Modbus_Slave 指令的背景数据块的引用。 MB_DB 参数必须与 Modbus_Master 或 Modbus_Slave 指令中的静态变量 MB_DB 参数相连。
DONE
如果上一个请求完成并且没有错误,DONE 位将变为 TRUE 并保持一个周期。
ERROR
如果上一个请求完成出错,则 ERROR 位将变为 TRUE 并保持一个周期。 STATUS 参数中的错误代码仅在 ERROR = TRUE 的周期内有效。
STATUS
端口组态错误代码(可在编程软件中按F1帮助查看)
注意:
Modbus_Comm_Load 指令不建议在启动组织块 OB100 中调用,建议在 OB1 中调用。其输入位“REQ”需使用上升沿触发,本例中该输入位采用 “FirstScan” 系统存储器位。
Modbus_Comm_Load 指令背景数据块中的静态变量 “MODE” 用于描述点对点模块的工作模式,有效的工作模式包括:
0 = 全双工 (RS232)
1 = 全双工 (RS422) 四线制模式(点对点)
2 = 全双工 (RS422) 四线制模式(多点主站)
3 = 全双工 (RS422) 四线制模式(多点从站)
4 = 半双工 (RS485) 二线制模式(常用)
image-20240603161553538配置Modbus_Master参数
image-20240603163841961Modbus_Master 指令各参数意义如下表所示:
引脚
说明
EN
使能端
REQ
TRUE = 请求向 Modbus 从站发送数据 ,建议采用上升沿触发
MB_ADDR
Modbus RTU 从站地址。默认地址范围:0 至 247;扩展地址范围:0 至 65535。值 0 被保留用于将消息广播到所有 Modbus 从站。
MODE
模式选择: 指定请求类型(读取或写入)(通常0为读取,1为写入)。
DATA_ADDR
从站中的起始地址:指定 Modbus 从站中将供访问的数据的起始地址。
DATA_LEN
数据长度:指定要在该请求中访问的位数或字数。
DATA_PTR
数据指针: 指向要进行数据写入或数据读取的 M 区或数据块地址。
DONE
完成位:上一请求已完成且没有出错后,DONE 位将保持为 TRUE 一个扫描周期时间。
BUSY
FALSE – Modbus_Master 无激活命令;TRUE – Modbus_Master 命令执行中
ERROR
如果上一个请求完成出错,则 ERROR 位将变为 TRUE 并保持一个周期。 STATUS 参数中的错误代码仅在 ERROR = TRUE 的周期内有效。
STATUS
端口组态错误代码(可在编程软件中按F1帮助查看)
注:
REQ上升沿有效,通常Modbus需要轮询程序,同一时间只能有1个通信请求;
Modbus_Master 指令的 “DATA_PTR” 参数用于指向要进行数据写入或数据读取的数据区域地址,该数据区域在指令 V3.0后 支持非优化(标准的)数据块,但一般建议使用指针方式填写,如上图中 P# DB200.DBX0.0 word 10表示,这样不容易出错,如果由于数据长度造成的报错,也可以很快找出来;
四S7-1200 Modbus RTU 从站编程CB1214从站编程步骤,同主站编程类似,区别在于主站编程调用主站程序,从站编程调用从站编程;但是第一步都是需要调用Modbus _Comm_Load指令,对串口进行初始化;从站编程步骤如下:
调用Modbus_Comm_load指令,并设置参数;可参考主站编程设置此处不在赘述(注意硬件标识符要与使用串口一致);
image-20240603165149041调用Modbus_Slave指令,并初始化Modbus从站地址,及数据存储区
image-20240603165440517Modbus_Slave 指令各参数意义如下表
引脚
说明
MB_ADDR
Modbus 从站的标准寻址: 标准寻址范围(1 到 247), 扩展寻址范围(0 到 65535)
MB_HOLD_REG
数据指针,指向 Modbus 保持寄存器的地址, Modbus 保持寄存器可以为 M 存储区或 DB 数据区。
NDR
可用的新数据:
DR
读取数据:
ERROR
如果上一个请求完成出错,则 ERROR 位将变为 TRUE 并保持一个周期。 如果执行因错误而终止,则 STATUS 参数中的错误代码仅在 ERROR = TRUE 的周期内有效。
STATUS
错误代码(可在编程软件中按F1帮助查看)
注:Modbus_Slave 指令的 “MB_HOLD_REG” 用于定义 CPU 的 Modbus 保持寄存器的数据区域地址,该数据区域在 指令V3.0后 支持非优化(标准的)数据块。但是,一般建议使用指针方式填写
Modbus RTU 从站数据区定义如下表:
地址区定义说明输出位Q0.0 开始输入位I0.0 开始
输入寄存器IW0 开始
保持寄存器由 MB_HOLD_REG 定义
例如:MB_HOLD_REG 为 P#M100.0 WORD 8,则 MW100 为 40001,MW102 为 40002,MW104 为 40003...MW114 为 40008
例如:MB_HOLD_REG 为 优化 DB 中 INT 数组[0..7],数组名为 “XXX”.AA,则 “XXX”.AA[0] 为 40001,“XXX”.AA[1] 为 40002,“XXX”.AA[2] 为 40003...“XXX”.AA[7] 为 40008
指针指向的第一个字为 40001,第二个字为 40002...
IW0 为地址 30001,IW2 为地址 30002,IW4 为地址 30003...
I0.0 为地址 10001,I0.1 为地址 10002,I0.7 为地址 10008,I1.0 为地址 10009...
Q0.0 为地址 1,Q0.1 为地址 2,Q0.7 为地址 8,Q1.0 为地址 9...
FALSE : 无新数据
TRUE :表示该指令已将 Modbus 主站接收到的数据存储在目标区域中。如果上一个请求完成并且没有错误,DR 位将变为 TRUE 并保持一个周期。
FALSE : 无新数据
TRUE : 表示新数据已由 Modbus 主站写入,如果上一个请求完成并且没有错误,NDR 位将变为 TRUE 并保持一个周期。
联系方式
- 电 话:13922889745
- 经理:向小姐
- 手 机:18475208684
- 微 信:18475208684