(2) 主站读取从站的MB4MB5存入主站的MB4MB5。
1、该案例有3个读写功能要完成,由于MODBUS通信某一时间只能有一条 MBUS_MSG 指令处于激活状态,因此需要轮询通信。
2、由于MBUS_MSG指令不能使用M存储器,因此需先在从站编写M区传送到V区程序,再通过通信把V区数据读入到主站,主站再编写V区传送到M区指令,完成从站的M区数据到主站的M区。
3、VD传送是4个字节,2个字
MB45先传送到时V区,才能实现通信
从站编写完程序后,注意要分配库存储器
从站起始地址是VW10,对应40001地址
完成后置位下一指令复位上通信标志
读完传到MW4,完成M区传送
通讯资料:
验证内容:令:CR60 PLC为主站,发送PLC体系时钟(8个字节的信息)给SR20从站;SR20从站发送一个双字的循环移位数据给主站,并由通讯数据VD100接纳输出到QD0。
在验证过程中从前出现一个过错,使MSG指令始终显示为6,表明从站无呼应。我验证时,由于衔接2台plc之间的3+、8-没有承认,形成接线过错,使MSG的error过错信息为6,查看后找到原因,重新接线后依然报警6。***后查看为控制程序不完整,主要原因是没有给MB0一个初始化操作,形成过错值没有得到有用的刷新。于是,在程序段1中参加初始化操作得到解决。
主站MSG指令主要了解Addr地址的使用,下面有描绘。
从站程序:从站通讯地址设置为1#
从站自VB31开端为读取主站VB11开端的8个字节主站体系时钟数据,指定VB31的开端地址是由Addr地址40011定义的,从站循环指令VD11运转成果,将由Mbus_init的Holdstart定义的开端地址发送和接纳。
Modbus通讯程序相对的难点是通讯映射的地址关系。
主站读取从站的数据,开端地址是根据从站Holdstart管脚定义的开端地址开端算,而不是指从站的V区物理地址。在验证程序中,从站的Mbus_init开端地址为VB11,那么,主站MSG指令的Addr 40001,应该是指从站的VB11地址。
同理,从站读取主站体系时钟,主站的MSG指令的Addr 40011,对应到从站的地址相当于偏移了10个字(偏移量10word + 11byte = 31byte) ,即为VB31开端的8个字节中寄存,Modbus通讯地址计算是40001开端的。
485 通讯口 和 CM 01 信号板有效。该指令库将设置通信口 工作在自由口模式下。
2. Modbus RTU 主站指令库使用了一些用户中断功能,编其他程序时不能在用户程序中 禁止中断。
RTU 主站初始化与控制子程序
必须保证每一扫描周期都被使能(使用 SM0.0)
信号板 。 主站等待从站响应的时间,以毫秒为单位,典型的设置值为 1000 毫秒
注意: 这个值必须设置足够大以保证从站有时间响应。 初始化完成,此位会自动置1。可以用该位启动 MBUS_MSG
2= 波特率选择非法
同一时刻只能有一个读写功能(即 MBUS_MSG)使能
完成位来激活,以保证所有读写指令循环进 行(见例程)。
1. 开关量输出和保持寄存器支持读和写功能
2. 开关量输入和模拟量输入只支持读功能
开关量输出 址:
通讯的数据个数(位或字的个数)
1. 如果是读指令,读回的数据放到这个数据区中
2. 如果是写指令,要写出的数据放到这个数据区中 读写功能完成位
3 = 接收超时(从站无响应)
7 = 响应错误(响应不是请求的操作)
101 = 从站不支持请求的功能
103 = 从站不支持此种数据类型
105 = 从站接受了信息,但是响应被延迟
106 = 从站忙,拒绝了该信息
号错误 从站掉电或不运行,网络故障都会造成主站 3 号错误
指令库需要一个286个字节的全局 V 存储区。
Instruction Library(指令库)需要分配库指令数据区(Library Memory)。库指令数据区是相应库的子程序和中断程序所要用到的变量存储空间。
如果在编程时不分配库指令数据区,编译时会产生许多相同的错误。 操作步骤:
1)在指令树的Project(项目)中,以鼠标右键单击Program
图4. “库存储器”按钮 2)在弹出的选项卡中设置库指令数据区,如图5所示:
图5. 缺省情况下是从VB0开始,但要保证该存储器使用地址范围与其他程序使用的地址不能有重 叠。按“建议地址”按钮也可以自动分配。
设置数据区,但要注意编程软件设置的数据区地址,只考虑到了其他一般寻 址,而未考虑到诸如Modbus数据保持寄存器区等的设置。应当确保不与其他任何已使用的数据区重 叠、冲突。不应重复按 “建议地址” 按钮,否则也会造成混乱。
30001 - 39999:输入数据寄存器(通常为模拟量输入)
协议库需要从站支持下列功能: 表 1. 需要从站支持的功能
Modbus 保持寄存器地址映射举例:
Modbus 数字量地址映射举例:
位地址(0xxxx 和 1xxxx)数据总是以字节为单位打包读写。第一个字节中的最低有效位对应 Modbus 地址的起始地址。如下图所示:
图6 . 数字量地址映射举例
为了更好地理解 Modbus 主站的编程,可参考下面的轮询例程。
2. 该例程仅访问一个从站,多个MBUS_MSG指令轮询执行,若访问不同的从站,可通 过改变从站地址来实现。
注意:此指令库/程序的作者和拥有者对于该软件的功能性和兼容性不负任何责任。使 用该软件的风险完全由用户自行承担。由于它是免费的,所以不提供任何担保,错误纠 正和热线支持,用户不必为此联系西门子技术支持与服务部门。