首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >S7-1200写MODBUS RTU轮询(SCL语言)

S7-1200写MODBUS RTU轮询(SCL语言)

作者头像
剑指工控
发布2021-11-09 14:57:42
发布2021-11-09 14:57:42
14.8K0
举报
文章被收录于专栏:剑指工控剑指工控

JZGKCHINA

工控技术分享平台

上次出了简单教程之后读者反馈看不清楚,没有参考价值,重新写了一篇文章介绍MODBUS RTU轮询程序。

所需硬件:

S7-1200 PLC (CPU1215C DC/DC/DC) 一个,CB1241通讯板(RS485)一个,USB TO RS485光电隔离USB转换器 一个,PC一台。

所需软件:

TIA Portal V14 SP1,ModbusSlaveSetup rev 6.2.0 64Bit。

编程:

1. 组态:

2. 创建FB块(TP01),数据块(DATA1,非优化)

3. 数据块写入需要的变量:MB_RECEIVE结构组用来放置最终读回的值,MB_ADR数组用来放置MODBUS从站地址,MB_RECEDATA数组用来做数据缓冲区。

4. 在TP01(FB)中编程:此次编程使用MODBUS(RTU)和MODBUS两种方法,实际应用中选一套即可。

1. 在ststic变量中建立变量如下图:

两个通讯程序的区别:

2. 如果使用MB_MASTER方式编程:

//设定轮询的范围,最多读9个从站。也可将>9改成一个变量,那样

//就可以控制轮询的范围可伸缩。

//主站初始化:

//数据转存:这边已三个从站为例。实际可以写多个(例如9个)。

//从站号变量自加

然后在OB1中调用TP01就OK.

图中绿色部分采用MODBUS (RTU)编写,有兴趣的读者可以实验。会有疑问, 为什么REQ上升沿直接写入#AlwaysTRUE。这一点我也没有更好的解释。

不用REQ:=#AlwaysTRUE; 想 使 用 REQ := #Modbus_Comm_Load.DONE OR #Modbus_Comm_Load.ERROR;理论上貌似可以,实际使用中只读一次后 BUZY无限为TRUE;导致无法通讯。

3. 将写好的程序卸载进PLC,将CB1241通讯板(RS485)的引脚 RA(485-)RB(485+) 接入到USB转485控制器上。

打开MODBUS SALVE软件。

创建三个从站。地址是21 22 23

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 剑指工控 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档