加入收藏 在线留言 联系我们
关注微信
手机扫一扫 立刻联系商家
全国服务热线18475208684

西门子中国(授权)一级代理 西藏代理商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-20240603153813166

Modbus_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-20240603163841961

Modbus_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-20240603165440517

Modbus_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