iPhone内置微信红包免费课堂

?找回密码
?立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 14|回复: 1
打印 上一主题 下一主题

Modbus通讯编程实例

[复制链接]
  • TA的每日心情

    2019-5-18 22:38
  • 签到天数: 61 天

    [LV.6]常住居民II

    1593

    主题

    1746

    帖子

    9261

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    9261
    跳转到指定楼层
    楼主
    发表于 前天?21:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    Modbus通讯编程实例(一)

    最近单独在写Modbus和现场总线的介绍,都是一些思路性质的介绍,不涉及具体的实例,可能很多童鞋还是觉得不够具体,因为我现在不做具体的编程调试了,所以直接些实例很费劲。参考了一些网上的和施耐德电气内部的资料,写成以下的案例,用了一些其他人的劳动成果,如果原作者在意版权问题,请联系我,我尊重您的所有权。

    我的帖子里提过Modbus的功能码,常用的没几个,这里列出更多的(也不是全部):
    功能码(十进制)十六进制说明
    0101读线圈
    0202读离散量输入
    0303读保持寄存器
    0404读输入寄存器
    0505写单个线圈
    0606写单个寄存器
    0707读异常状态
    0808诊断
    110B获得事件计数器
    120C获得事件记录
    150F写多个线圈
    1610写多个寄存器
    1711报告从站ID
    2216屏蔽写寄存器
    2317读/写多个寄存器
    2418读FIFO队列

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

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

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

    在TWIDO中赋值如下:
    在RECP中第一个字为返回码
    第二个字为读取的数据


    Modbus通讯编程实例(二)

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

    在TWIDO中赋值如下
    在RECP中第一个字为返回码
    第二个字开始为读取的数据


    Modbus通讯编程实例(三)

    实例三:写单字(功能码06)
    其中在EMIS数组中第一个字,低字节为功能码06,高字节为从站要写入字的地址11
    第二个字,低字节为从站要写入字的地址11,高字节为主站写出字的地址90
    第三个字,低字节为主站写出字的地址90
    最后要在交换管理表的第四个字中定义这个报文字节的长度,为1个字节的功能码,2个字节的从站写入字地址,2个字节的主站写出字地址,所以长度为1+2+2=5

    在主站赋值如下
    在TWIDO中显示如下:


    Modbus通讯编程实例(四)

    实例四:写N字(功能码16)
    其中在EMIS数组中第一个字,低字节为功能码16,高字节为从站要写入字的起始地址20
    第二个字,低字节为从站要写入字的起始地址20,高字节为要写入字的长度3
    第三个字,低字节为要写入字的长度3,高字节为2倍的要写入字的长度
    第四个字~第六个字为主站写出字,高低字节顺序要相互转换
    最后要在交换管理表的第四个字中定义这个报文字节的长度,为1个字节的功能码,2个字节的从站写入字地址,2个字节的写入字的长度,1个2倍的要写入字的长度,6个字节的主站写出字,所以长度为1+2+2+1+6=12

    在主站赋值如下
    在TWIDO中显示如下
    另外注意刷新数据时,必须要把EN引脚断开一下才可以重新读取或写入。通过实验,把交换管理表的完成位(即GEST第一个字的最低位)放在EN引脚前不太好使,所以最好编个令牌循环指令。把令牌放在EN引脚前,当取得令牌时再读取或者写入。
    功能码05:

    iPhone内置微信红包免费课堂 www.gkket.com

    该用户从未签到

    0

    主题

    4

    帖子

    67

    积分

    注册会员

    Rank: 2

    积分
    67
    沙发
    发表于 前天?21:32 | 只看该作者
    我顶,我顶,我顶顶顶
    iPhone内置微信红包免费课堂 www.gkket.com
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|免责声明|本站介绍|iPhone内置微信红包免费课堂 ( 沪ICP备14007696号-3 )|网站地图

    GMT+8, 2019-9-19 08:01 , Processed in 0.038405 second(s), 34 queries .

    Powered by Discuz! X3.4

    ? 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表