plc200MBUS的起始V区起始地址40001 那么默认vb100是不是就是40001 那么vb200 vw200分别又是多少啊?库的存储区又该如何分配使用建议地址还是自己手动分配?分配的地址第一个是不是就是40001?有没有这方面的资料给我点,谢谢
问题补充:
图中数据指针使用的是字节vb100,而传送数据时为什么要用字vw100,数据传输到vw100不是vb101先得到数据吗?我库的存储区分配使用建议地址起始地址是vb102不影响吗?
图片说明:
最佳答案
1、plc200MBUS的起始V区起始地址40001 那么默认vb100是不是就是40001 那么vb200 vw200分别又是多少啊?
从你附图中,plc200 是 MODBUS RTU 主站,它没有保持寄存器,你的变频器是从站,它是有保持寄存器的。
2、库的存储区又该如何分配使用建议地址还是自己手动分配?分配的地址第一个是不是就是40001?
可以自动分配,也可以手动分配,但是建议自动分配;手动分配时一定注意库存储区是以字节为单位计算的一片连续V区,这个区是MODBUS指令使用的专用区,不能与你写的程序中使用的存储区有任何重叠,能做到这一点,你可以手动分配库存储区。
3、补充问题要从下面说起。
Modbus RTU 主站读写子程序MBUS_MSG
Addr 脚:
读写从站的数据地址,40001 至 4xxxx – 对应的就是变频器的保持寄存器(指令要求必须为十进制)。
你变频器控制字就是MODBUS RTU 的保持寄存器,变频器手册上说明的偏移地址是 2000H(十六进制),转换成十进制是 8192,这个值最前面加上前缀数字 4,则为 48192,采用上偏移1个地址后,寄存器的地址为 48193,你是十六进制表示的地值,所以要将48193转换为十六进制,那么就是 16#BC41,这就是你左边附图中这个值的由来。转换可以用PC 操作系统自带的计算器来验证。可参考网友sunkey1的附图。
Count 脚:
数据个数,是以字为单位的;你是只写一个控制字,来启停变频,你的值是1,这是对的。
DataPtr脚:
数据指针,如果是写指令,要写出的数据放到这个数据区中。
注意这是个存储区指针,多大是由Count 脚来决定的,&VB100就是你要写的控制字的起始地。
因为是个字而不是字节,综合你的应用,是将1 个控制字写到变频器的保持寄存器 48193(十进制),这个控制字就是一个16位的二进制码,必须用字传送指令 MOV_W写在VW100中。
正如你所附右图中,当I0。1或者M20。0接通的上升沿,程序传送16#12H值到VW100中,则当扫描调用左图所附MBUS_MSG指令时,就将 VW100中的控制字值(16位的字)发送到了变频器的 2000H(上偏移后为十进制的48193),变频器得到这个值就正转启动了。停止和反转与此类同。
参考资料,上面的网友提供的已经很好了。
提问者对于答案的评价:
谢谢各位的解答!现在对这个通讯协议有了更深的了解。
最佳答案作者回复:
共同提高,共同学习,其乐无穷。
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc367374.html