假如有多条MBUS_MSG/MB_MSG2 指令在不同时间运行,存储器里面分配地址需要每一条指令都要单独分配不同的地址,还是每一条指令可以分配同一地址。
MBUS_MSG/MB_MSG2的DataPtr帮助文件里面数据格式为DWORD,32位数据,如果我只写入一个字的话,假如DataPt里面为vb0,我只发送了一个16位数据,这时候vb2和vb3是否也被占用,毕竟上面写的DataPt数据格式为DWORD
最佳答案
1、
多个 MBUS_MSG、MBUS_MSG2 指令的 DataPt 一定指向不同的数据区,一般使用 V 存储区,这样与从站交互的数据是有一对一的对应关系的,不会产生混乱。
2、
DataPtr 脚是32位数据指针,请记住它是指针,这是一个数据交互存储区的起始地址,也就是存储单元的门牌号,从它开始的存储单元存放的是交互区的数据。
举例一:
比如要读从站1 40001 保持寄存器的一个整数存储到CPU 侧 VB100 开始的交互区,则MBUS_MSG 以下管脚取值为:
Slave 1 从站地址
RW 0 读写请求,0 = 读, 1 = 写
Addr 40001 从站保持寄存器地址
Count 1 数据个数,因为整型是一个字,所以这里填1
DataPtr &VB100,这里的 &VB100 就是数据指针,它是说从 VB100 开始的存储单元存储从1号从站读来的 40001 的整数,那它就是一个字的数据,你就要看VW100是什么值
举例二:
比如要读从站1 40001 保持寄存器的一个双整数存储到CPU 侧 VB100 开始的交互区,则MBUS_MSG 以下管脚取值为:
Slave 1 从站地址
RW 0 读写请求,0 = 读, 1 = 写
Addr 40001 从站保持寄存器地址
Count 2 数据个数,因为双整型数是两个字,所以这里填2。
DataPtr &VB100,这里的 &VB100 就是数据指针,它是说从 VB100 开始的存储单元存储从1号从站读来的 40001、40002 两个字组成的一个双整数,你就要看VD100是什么值
读取浮点数与读取双整数同理。看看间接寻址关于 & 符号的用法再结合 MODBUS RUT 主站指令要好理解一点。
3、
参考资料
MODBUS RTU
http://www.ad.siemens.com.cn/productportal/Prods/s7-200-smart-portal/200SmartTop/SmartSMS/020.html
S7-200 SMART 间接寻址
http://www.ad.siemens.com.cn/productportal/Prods/s7-200-smart-portal/200SmartTop/SmartSMS/070.html
提问者对于答案的评价:
谢谢,理解了
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc349246.html