【SCL编程案例】Step7中使用ET200MP/SP PTP模块时Modbus RTU通讯程序

已锁定

W.M.J

  • 帖子

    145
  • 精华

    7
  • 被关注

    41

论坛等级:侠圣

注册时间:2016-11-15

黄金 黄金 如何晋级?

【SCL编程案例】Step7中使用ET200MP/SP PTP模块时Modbus RTU通讯程序

11161

13

2025-06-04 12:58:50

star star star star

    虽然博图软件已经成为西门子的主流编程工具,但是经典Step7在对S7-400和S7400H系统时还是不可或缺的编程软件。下面分享一份使用经典Step7编写的在使用ET200MP/SP PTP模块时使用Modbus RTU通讯协议进行轮询通讯的SCL程序。

    在做任何通讯时其实主要有两步:第一步是将数据怎么读过来或者写到对方去,第二步是解析数据。本例程主要解决第一步的问题。很多人用过Modbus网关,其中一种就是可以在网关中配置多条Modbus命令,将数据读到网关的指定缓冲区,或者将指定缓冲区的数据写给对方。使用本例程就像在使用一个Modbus网关一样方便,可以实现以下功能:

1.      使用标准的Modbus功能码,支持1、2、3、4、5、6、15、16(对于了解Modbus通讯协议的人不喜欢使用西门子Mode加地址格式的方式

2.      多命令自动轮询读写数据,可以在功能块引脚设置MinIdleTi让轮询不那么快

3.      对于WORD型数据(功能码3,4,6,16),将数据读/写到”BufferWordDB”接口指定的DB中,对于BOOL型数据(功能码1,2,5,15)将数据读/写到”BufferBoolDB”接口指定的DB中。分了两个不同类型的缓冲区主要是方便后续解析数据

4.      可以通过配置任务中的SetIntervalCycles,让不太紧急的任务不是每个轮询周期都执行

5.      可以通过配置任务中的SetSkipCycles,当任务执行错误时可以跳过几个轮询周期后才再次执行,放置错误任务一直影响正常任务

6.      通过配置ExecuteOneTime任务执行成功后自动复位JobEnable从而只需执行一次,再次需要执行时只需要设置JobEnable即可,通常针对“写”任务

7.      提供手动测试模式,即不自动轮询,手动触发任务列表中的指定任务

8.      掉站恢复时不用在OB86等中额外写程序

使用本例程时需要要用到3个DB,上面提到保存WORD数据的DB和保存BOOL类型数据的DB,数据类型可以定义成数组(推荐,后续再来解析)也可以和你实际读写的名称命名的离散变量;一个配置Modbus任务列表的DB,通常以ARRAY[1..xx] of “Udt_MdbsRtuJob”定义数据,然后在“Data view”视图下配置每条任务:


特别提醒一下DataBufferOffset,对于WORD数据,这个为要保存在DB中的偏移地址,对于BOOL数据类型,如果数据类型以ARRAY[0..xx] of BOOL定义,为数组索引号,如果其他格式以绝对地址比如DBX3.5换算为 offset = 3 x 8 + 5。

Modbus通讯库采用的是Modbus_rtu_V1_3,其中对于功能码5还有bug,希望西门子可以修复。

程序部分截图(太多,随便放几张):

LMdb_RTU_Master_V1.0.zip

Modbus_rtu_V1_3.zip




【SCL编程案例】Step7中使用ET200MP/SP PTP模块时Modbus RTU通讯程序 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54819条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。