S32-西门子1500PLCModbusTCP通讯

一个看似常规又不太常规的ModbusTCP通讯例子今天和各位看官来分享下。客户端是西门子1516CPU,服务器是一个第三方测温设备。

以上就是厂家给的乞丐版地址表,IP和端口号电话口头告知的。本来觉得这也是手拿把掐的事情。结果也是遇到了些许挫折。本着好记性不如烂笔头的原则,我们一起做一遍吧。

第一步,准备通讯要用的数据,我是建立了一个DB块。里面COM是通讯连接基本参数,数据类型按图示例选择。还建立了布尔量轮询位方便轮询控制。数据存储区当然也准备上。

第二步,打开每个通讯参数组。设置网络硬件标识符,指令ID号,IP和端口号。

第三步,编写程序。利用MB_CLIENT指令,填写对应管脚。基本功能就是从对方哪个地址读多少字到我们存储数据区。

第四步,编写轮询逻辑。原理就是一个指令触发的时候,等待它完成位上来,取消这个指令使能触发下一个指令。要考虑超时,但是个人不建议用错误位,我用的延时逻辑。

第五步,每个指令背景数据里有从站地址的设置。本例服务器有4个从站,所以对应指令要更改从站地址。如果只有一个,无需更改这里。

第六步,下载程序,触发轮询就能得到数据了。

各位看官看着是不是比较简单呢?那这个例子的需要注意事项又在哪里呢?听我唠一唠。本来在编程前,我已经用Modscan软件对每个从站都进行了读,都能读的通,验证了物理链路的可行性。后来在地址的填写这里绕了不少弯子。直接说结果,PLC指令一般默认0读1写,我用0读厂家的地址数据完全不对。后来看帮助文件,发现读指令还有一个104,最终成功。后来仔细对比发现有效地址是6位的,例如321501。而0代码又只有5位,5位以内数据完全对的上,但是不是有效数据区。改为104就可以对应Modscan的6位数有效地址,正常输入21501即可,得到了有效数据。

不觉明厉,欢迎各位见多识广的看官解释一下。

相关推荐
yaoh.wang9 小时前
力扣(LeetCode) 28: 找出字符串中第一个匹配项的下标 - 解法思
python·程序人生·算法·leetcode·面试·职场和发展·跳槽
yaoh.wang9 小时前
力扣(LeetCode) 35: 搜索插入位置 - 解法思路
程序人生·算法·leetcode·面试·职场和发展·跳槽·二分搜索
小哈里10 小时前
【情感】程序人生之理想主义的情感希冀(个人背景、兴趣爱好、爱情观、理想的另一半、期待什么样的生活等)
程序人生·职场和发展·生活·感情·家与生活
郝学胜-神的一滴12 小时前
OpenGL中的glDrawArrays函数详解:从基础到实践
开发语言·c++·程序人生·算法·游戏程序·图形渲染
yaoh.wang20 小时前
力扣(LeetCode) 13: 罗马数字转整数 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·跳槽
郝学胜-神的一滴1 天前
Python数据模型:深入解析及其对Python生态的影响
开发语言·网络·python·程序人生·性能优化
yaoh.wang1 天前
力扣(LeetCode) 14: 最长公共前缀 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·跳槽
yaoh.wang1 天前
力扣(LeetCode) 9: 回文数 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·跳槽
yuhaiqun19891 天前
新手练 C++ HTTP 服务实操:从 “拆请求头” 到 “发 HTML 响应”
c语言·c++·程序人生·http·html·学习方法·改行学it
小年糕是糕手1 天前
【C/C++刷题集】类和对象算法题(一)
数据结构·c++·程序人生·考研·算法·leetcode·改行学it