1、不需要在端口界面上进行硬件组态,指令中集成了Port_Config、Send_Config、Receive_Config,通信指令的输入脚就可以进行端口组态。
2、指令的错误代码更加规范。
3、增加MBrtuMastrer1500Manual说明块
4、除例程外,还制做了项目库、全局库
一、 概述
本文描述的程序文件可以在西门子CM PtP RS422/485 BA 6ES7540-1AB00-0AA0通信模块实现MODBUS RTU 主站通信。
本程序特点:
1. 实现MODBUS RTU 功能号1、2、3、4、5、6、15、16。
2. 支持单台CPU下多台通信模块,一台通信模块使用一套程序,互不干扰。
3. 可单条或多条 轮询指令 离线,即从站掉电,可手动让其离线,减少轮询时间。
4. 可控制每条指令间的时间间隔。
5. 程序量再大也不必担心CPU扫描时间,因为未运行的指令会跳过。
6. 每条指令单独返回错误信息。
7. 不必担心程序块和数据块多,支持多重背景。
8. 程序组态直观,简单,方便,灵活。
9. 指令内集成端口配置指令,发送和接收配置指令,外部只需简单参数即可。
10. 在冗余系统上使用通过。
二、 硬件网络施工
关于通信网络施工,尽量选择西门子485紫皮电缆,你胡弄网络,网络就胡弄你,所以质量可靠的硬件是保证通信正常的前提。若通信线路过长,请使用RS485中继器,但请不要西门子RS485中继器,因为不支持MODBUS通信。具体接线方式请查阅相关资料。
CM PtP RS422/485 BA接线图:下表显示了 CM PtP RS422/485 BA 前面板上 15 针 sub-D 型插槽的针脚分配。
三、 程序说明及使用方法
-
您得到的程序如图:
这是由TIA V16归档后文件,打开TIA V16后,打开此文件,会提示新建文件夹,恢复后会看到项目已经打开。
2. 程序工作原理
3. 程序块功能说明:
MBrtuMaster1500PointerDB1:用户数据块。非优化数据块。可以是单个数据块,也可以是多个数据块。从站返回的数据保存在这个数据里,向从站写入的数据也在这个数据块里。
MBrtuMaster1500BufferDB1:缓冲区数据块。非优化数据块一个缓冲区数据块对应一个串口。将要发送的数据在这里进行校验操作,接收回的数据同样在这里校验操作。
MBrtuMaster1500Msg:主站轮询指令功能块。可以单个块运行,也可以多个块轮流运行。根据输入参数决定把哪些用户数据放入缓冲区数据块,再将从站返回数据放回用户数据块。注意:同一时刻只允许一个主站轮询指令工作,否同返回9006错误。
MBrtuMaster1500Crtl:主站通信控制功能块。一个通信控制功能块对应一个串口。主要功能为发送和接收与从站的通信的报文。
4. 功能块参数说明
MBrtuMaster1500Crtl
名称 | 类型 | 数据类型 | 说明 | 允许值,说明 |
iCpuHWID | Input | HW_SUBMODULE | CPU硬件标识符 设备组态》CPU》系统常数》名称:Local类型:Hw_SubModule的硬件标识符 | |
iProt | Input | HW_SUBMODULE | 通信模块硬件标识符 设备组态》通信模块》系统常数》硬件标识符 | |
iBaud | Input | UInt |
端口数据传输速率 |
1 = 300 bps, 2 = 600 bps, 3 = 1200 bps, 4 = 2400 bps, 5 = 4800 bps, 6 = 9600 bps, |
iParity | Input | UInt | 端口的奇偶校验 |
1 = 无奇偶校验,2 = 偶校验, 3 = 奇校验, 4 = 传号校验, 5 = 空号校验, 6 = 任意 |
iSendTime | Input | Time | 发送前定时时间 | 值可以很大,但没有必要 |
iRcvTimeOut | Input | Time | 接收信息超时时间 | 值可以很大,但没有必要 |
iBufferDBNumber | Input | UDInt | MODBUS缓冲区数据块号 | 如:UDINT#3000 |
iBuffer | Input | Variant | MODBUS缓冲区指针 | 如:"MBrtuMaster1500BufferDB1".Buffer |
qLicense | Output | Bool | 授权 | |
qDone | Output | Bool | 初始化完成标志位 | 指令完成后,一直为真 |
qWorkingSlave | Output | UInt | 正在与从站通信的从站地址 | 可能值为1到247 |
qWortConfigStatus | Output | Word | 组态PtP端口状态 | 详见Port_Config指令帮助 |
qSendConfigStatus | Output | Word | 组态PtP发送方状态 | 详见Send_Config指令帮助 |
qReceiveConfigStatus | Output | Word | 组态PtP接收方状态 | 详见Receive_Config指令帮助 |
MBrtuMaster1500Msg
名称 | 类型 | 数据类型 | 说明 | 允许值,说明 |
iInstructionActive | Input | Bool | 真为激活指令,假为不激活指令 | |
iNewRequest | Input | Bool | 读写请求位 | 每一个新的读写请求必须使用脉冲触发 |
iSlave | Input | USInt | 从站地址 | 1到247 |
iReadWrite | Input | USInt | 0=读,1=写 |
1. 开关量输出和保持寄存器支持读和写功能 2. 开关量输入和模拟量输入只支持读功能 |
iAddress | Input | USInt | 读写从站的数据地址 |
选择读写的数据类型 00001 至 0xxxx - 开关量输出 10001 至 1xxxx - 开关量输入 30001 至 3xxxx - 模拟量输入 40001 至 4xxxx - 保持寄存器 400001 至 465535 - 保持寄存器 |
iCount | Input | UInt | 数据个数 |
通讯的数据个数(位或字的个数) Modbus主站可读/写的***大数据量为120个字(是指每一个 MBrtuMasterMsg 指令) |
iBufferDBNumber | Input | UDInt | MODBUS缓冲区数据块号 | 如:UDINT#3000 |
iPointerDBNumber | Input | UDInt | MODBUS读写数据块号 | 如:UDINT#2000 |
iPointerByte | Input | UInt | 用户数据块字节地址 |
1. 如果是读指令,读回的数据放到数据区这个字节开始的区域中 2. 如果是写指令,要写出的数据从这个字节开始的数据区取出 |
qDone | Output | Bool | 完成位 | 此位为脉冲信号,需要保持信号,用户自行加起保停程序,完成位为启动,读写请求位为停止即可。 |
qBusy | Output | Bool | 指令工作中 | BUSY = 1:作业尚未完成。BUSY = 0:作业完成 |
qError | Output | Word | 通信错误 |
错误规范 0000 命令完成没有错误 7000 指令未执行 7001 指令开始工作 9003 接收超时 9004 输入参数错误 9005 Modbus未激活 9006 忙 其它指令在工作 9007 功能号不符 9008 CRC校验错误 9009 本指令未启用 900A 发送错误 900B 发送超时 900C 接收错误 900D 接收的数据长度与预计长度不符 900E 签名错误 91XX 从站返回的错误 |
qSendStatus | Output | Word | 发送指令状态及错误 | 见发送指令规范 |
qRevStatus | Output | Word | 接收指令状态及错误 | 发接收指令规范 |
MBrtuMaster1500BufferDB1
非优化数据块。缓冲区数据块是一个400(不可小于400)个字节数据块,可以复制,可改符号,可改***地址
MBrtuMaster1500PointerDB1
非优化数据块用户数据块用户可自行定义,无要求。
五、 程序注意
符号地址和***地址都可更改。
当功能号为5时,用户数据块的字节地址的第0位有效。
当功能号为1,2,15时,用户数据块的字节地址的从第0位开始有效。
程序无法在仿真器内工作。
六、 程序高级应用
1.当有多台从站执行相同操作时,如读取相同数据寄存器。这时可将指令的完成位连接到读写请求位,将从站地址和用户数据块字节号做成变量,使用完成位改变这两个变量,就可以实现单指令轮询多主站。
2.当用通信控制设备启停等操作时,或多从站时快速刷新单个从站数据时,要求响应时间快一些,而有些程序没有这方面考虑。本程序在应对此方面可以将单一轮询指令的激活位置真,其它指令置假(用上升沿,仅一个扫描即可),这时不管其它指令在什么状态都会将串口使用权让出,优先让激活的指令运行。
新增特点:
1、不需要在端口界面上进行硬件组态,指令中集成了Port_Config、Send_Config、Receive_Config,通信指令的输入脚就可以进行端口组态。
2、指令的错误代码更加规范。
3、增加MBrtuMastrer1500Manual说明块
4、除例程外,还制做了项目库、全局库
一、 概述
本文描述的程序文件可以在西门子CM PtP RS422/485 BA 6ES7540-1AB00-0AA0通信模块实现MODBUS RTU 主站通信。
本程序特点:
1. 实现MODBUS RTU 功能号1、2、3、4、5、6、15、16。
2. 支持单台CPU下多台通信模块,一台通信模块使用一套程序,互不干扰。
3. 可单条或多条 轮询指令 离线,即从站掉电,可手动让其离线,减少轮询时间。
4. 可控制每条指令间的时间间隔。
5. 程序量再大也不必担心CPU扫描时间,因为未运行的指令会跳过。
6. 每条指令单独返回错误信息。
7. 不必担心程序块和数据块多,支持多重背景。
8. 程序组态直观,简单,方便,灵活。
9. 指令内集成端口配置指令,发送和接收配置指令,外部只需简单参数即可。
10. 在冗余系统上使用通过。
二、 硬件网络施工
关于通信网络施工,尽量选择西门子485紫皮电缆,你胡弄网络,网络就胡弄你,所以质量可靠的硬件是保证通信正常的前提。若通信线路过长,请使用RS485中继器,但请不要西门子RS485中继器,因为不支持MODBUS通信。具体接线方式请查阅相关资料。
CM PtP RS422/485 BA接线图:下表显示了 CM PtP RS422/485 BA 前面板上 15 针 sub-D 型插槽的针脚分配。
三、 程序说明及使用方法
-
您得到的程序如图:
这是由TIA V16归档后文件,打开TIA V16后,打开此文件,会提示新建文件夹,恢复后会看到项目已经打开。
2. 程序工作原理
3. 程序块功能说明:
MBrtuMaster1500PointerDB1:用户数据块。非优化数据块。可以是单个数据块,也可以是多个数据块。从站返回的数据保存在这个数据里,向从站写入的数据也在这个数据块里。
MBrtuMaster1500BufferDB1:缓冲区数据块。非优化数据块一个缓冲区数据块对应一个串口。将要发送的数据在这里进行校验操作,接收回的数据同样在这里校验操作。
MBrtuMaster1500Msg:主站轮询指令功能块。可以单个块运行,也可以多个块轮流运行。根据输入参数决定把哪些用户数据放入缓冲区数据块,再将从站返回数据放回用户数据块。注意:同一时刻只允许一个主站轮询指令工作,否同返回9006错误。
MBrtuMaster1500Crtl:主站通信控制功能块。一个通信控制功能块对应一个串口。主要功能为发送和接收与从站的通信的报文。
4. 功能块参数说明
MBrtuMaster1500Crtl
名称 | 类型 | 数据类型 | 说明 | 允许值,说明 |
iCpuHWID | Input | HW_SUBMODULE | CPU硬件标识符 设备组态》CPU》系统常数》名称:Local类型:Hw_SubModule的硬件标识符 | |
iProt | Input | HW_SUBMODULE | 通信模块硬件标识符 设备组态》通信模块》系统常数》硬件标识符 | |
iBaud | Input | UInt |
端口数据传输速率 |
1 = 300 bps, 2 = 600 bps, 3 = 1200 bps, 4 = 2400 bps, 5 = 4800 bps, 6 = 9600 bps, |
iParity | Input | UInt | 端口的奇偶校验 |
1 = 无奇偶校验,2 = 偶校验, 3 = 奇校验, 4 = 传号校验, 5 = 空号校验, 6 = 任意 |
iSendTime | Input | Time | 发送前定时时间 | 值可以很大,但没有必要 |
iRcvTimeOut | Input | Time | 接收信息超时时间 | 值可以很大,但没有必要 |
iBufferDBNumber | Input | UDInt | MODBUS缓冲区数据块号 | 如:UDINT#3000 |
iBuffer | Input | Variant | MODBUS缓冲区指针 | 如:"MBrtuMaster1500BufferDB1".Buffer |
qLicense | Output | Bool | 授权 | |
qDone | Output | Bool | 初始化完成标志位 | 指令完成后,一直为真 |
qWorkingSlave | Output | UInt | 正在与从站通信的从站地址 | 可能值为1到247 |
qWortConfigStatus | Output | Word | 组态PtP端口状态 | 详见Port_Config指令帮助 |
qSendConfigStatus | Output | Word | 组态PtP发送方状态 | 详见Send_Config指令帮助 |
qReceiveConfigStatus | Output | Word | 组态PtP接收方状态 | 详见Receive_Config指令帮助 |
MBrtuMaster1500Msg
名称 | 类型 | 数据类型 | 说明 | 允许值,说明 |
iInstructionActive | Input | Bool | 真为激活指令,假为不激活指令 | |
iNewRequest | Input | Bool | 读写请求位 | 每一个新的读写请求必须使用脉冲触发 |
iSlave | Input | USInt | 从站地址 | 1到247 |
iReadWrite | Input | USInt | 0=读,1=写 |
1. 开关量输出和保持寄存器支持读和写功能 2. 开关量输入和模拟量输入只支持读功能 |
iAddress | Input | USInt | 读写从站的数据地址 |
选择读写的数据类型 00001 至 0xxxx - 开关量输出 10001 至 1xxxx - 开关量输入 30001 至 3xxxx - 模拟量输入 40001 至 4xxxx - 保持寄存器 400001 至 465535 - 保持寄存器 |
iCount | Input | UInt | 数据个数 |
通讯的数据个数(位或字的个数) Modbus主站可读/写的***大数据量为120个字(是指每一个 MBrtuMasterMsg 指令) |
iBufferDBNumber | Input | UDInt | MODBUS缓冲区数据块号 | 如:UDINT#3000 |
iPointerDBNumber | Input | UDInt | MODBUS读写数据块号 | 如:UDINT#2000 |
iPointerByte | Input | UInt | 用户数据块字节地址 |
1. 如果是读指令,读回的数据放到数据区这个字节开始的区域中 2. 如果是写指令,要写出的数据从这个字节开始的数据区取出 |
qDone | Output | Bool | 完成位 | 此位为脉冲信号,需要保持信号,用户自行加起保停程序,完成位为启动,读写请求位为停止即可。 |
qBusy | Output | Bool | 指令工作中 | BUSY = 1:作业尚未完成。BUSY = 0:作业完成 |
qError | Output | Word | 通信错误 |
错误规范 0000 命令完成没有错误 7000 指令未执行 7001 指令开始工作 9003 接收超时 9004 输入参数错误 9005 Modbus未激活 9006 忙 其它指令在工作 9007 功能号不符 9008 CRC校验错误 9009 本指令未启用 900A 发送错误 900B 发送超时 900C 接收错误 900D 接收的数据长度与预计长度不符 900E 签名错误 91XX 从站返回的错误 |
qSendStatus | Output | Word | 发送指令状态及错误 | 见发送指令规范 |
qRevStatus | Output | Word | 接收指令状态及错误 | 发接收指令规范 |
MBrtuMaster1500BufferDB1
非优化数据块。缓冲区数据块是一个400(不可小于400)个字节数据块,可以复制,可改符号,可改***地址
MBrtuMaster1500PointerDB1
非优化数据块用户数据块用户可自行定义,无要求。
五、 程序注意
符号地址和***地址都可更改。
当功能号为5时,用户数据块的字节地址的第0位有效。
当功能号为1,2,15时,用户数据块的字节地址的从第0位开始有效。
程序无法在仿真器内工作。
六、 程序高级应用
1.当有多台从站执行相同操作时,如读取相同数据寄存器。这时可将指令的完成位连接到读写请求位,将从站地址和用户数据块字节号做成变量,使用完成位改变这两个变量,就可以实现单指令轮询多主站。
2.当用通信控制设备启停等操作时,或多从站时快速刷新单个从站数据时,要求响应时间快一些,而有些程序没有这方面考虑。本程序在应对此方面可以将单一轮询指令的激活位置真,其它指令置假(用上升沿,仅一个扫描即可),这时不管其它指令在什么状态都会将串口使用权让出,优先让激活的指令运行。