您现在所在的是:

施耐德电气论坛

回帖:2个,阅读:1724 [上一页] [1] [下一页]
5190
FreeTigerMan
文章数:555
年度积分:165
历史总积分:5190
品牌积分(施耐德):895
注册时间:2002/9/9
发站内信
发表于:2019/7/23 10:29:13
#0楼
Modbus通讯编程实例(一)
最近单独在写Modbus和现场总线的介绍,都是一些思路性质的介绍,不涉及具体的实例,可能很多童鞋还是觉得不够具体,因为我现在不做具体的编程调试了,所以直接些实例很费劲。参考了一些网上的和施耐德内部的资料,写成以下的案例,用了一些其他人的劳动成果,如果原作者在意版权问题,请联系我,我尊重您的所有权。
我的帖子里提过Modbus的功能码,常用的没几个,这里列出更多的(也不是全部):
功能码(十进制) 十六进制 说明
01 01 读线圈
02 02 读离散量输入
03 03 读保持寄存器
04 04 读输入寄存器
05 05 写单个线圈
06 06 写单个寄存器
07 07 读异常状态
08 08 诊断
11 0B 获得事件计数器
12 0C 获得事件记录
15 0F 写多个线圈
16 10 写多个寄存器
17 11 报告从站ID
22 16 屏蔽写寄存器
23 17 读/写多个寄存器
24 18 读FIFO队列



DATA_EXCH功能块是用于Premium和M340传输数据到另外一台设备,这个功能块支持Modbus所有的功能码。

DATA_EXCH用梯形图表示:

附件 m1.jpg

各个引脚定义
ADR为地址引脚,对于PREMIUM系列需要使用ADDR功能块连接
对于M340系列需要使用ADDM功能块连接。
TYPE为类型引脚,1为接受/发送,2为只接受,3为只发送。
EMIS为要发送表
RECP为接受表
GEST为交换管理表

实例一:读取N位(功能码01)
附件 m2.jpg

其中在EMIS数组中第一个字,低字节为功能码01,高字节为读取位的起始位1
第二个字,低字节为读取位的起始位1,高字节为读取位的长度5
第三个字,低字节为读取位的长度5
最后要在交换管理表的第四个字中定义这个报文字节的长度,为1个字节的功能码,2个字节的数据起始地址,2个字节的读取位的长度,所以长度为1+2+2=5

在TWIDO中赋值如下:

附件 m3.jpg

在RECP中第一个字为返回码
第二个字为读取的数据


附件 m4.jpg

实例二:读取N字(功能码03)

附件 m5.jpg

其中在EMIS数组中第一个字,低字节为功能码03,高字节为读取字的起始地址1
第二个字,低字节为读取字的起始地址1,高字节为读取字的长度6
第三个字,低字节为读取字的长度6
最后要在交换管理表的第四个字中定义这个报文字节的长度,为1个字节的功能码,2个字节的数据起始地址,2个字节的读取字的长度,所以长度为1+2+2=5

在TWIDO中赋值如下

附件 m6.jpg

在RECP中第一个字为返回码
第二个字开始为读取的数据

附件 m7.jpg



10912
yanli7234 版主
文章数:3035
年度积分:49
历史总积分:10912
品牌积分(施耐德):148
注册时间:2002/11/8
发站内信
2011论坛贡献奖
发表于:2019/7/24 16:45:17
#1楼
感谢科普。
国人当自强,共同努力,抵制日货。
27950
guanyumou 版主
文章数:10552
年度积分:1133
历史总积分:27950
品牌积分(施耐德):268
注册时间:2008/7/13
发站内信
2018论坛优秀版主
2018春节活动(三)
2017论坛优秀版主
2017国庆活动(二)
2017春节活动(三)
发表于:2019/7/26 0:00:41
#2楼
楼主这是要搞连载啊!真心不错的!
[此贴子已经被jint于2019/7/26 16:00:57编辑过]
基于各种组态软件\触摸屏\PLC\单片机\变频器Modbus TCP\RTU\ASCII通信编程服务,需要请直接
联系!腾讯扣扣149034219

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

46.8003