菜鸟:
项目中用力控组态与200通信,几台PLC用MODBUS一起读到一台主站PLC,主站PLC在与上位机通信,为了节省点位,把控制位整合成一个双字通信,我想问的是读取到上位机中双字中的位与实际PLC中的位的对应关系。因为试过好几次,我脑子乱了。
比如传送一个数据为VD300,PLC中的位为V300.5,V301.2,V302.6,V303.7,那么在读取到上位机后,是怎样对应的呢?
说的高位在前低位在后,是不是vb303,vb302,vb301,vb300这个顺序呢?还是单个字vb301,vb300,vb303,vb302这个顺序?或者别的顺序?
新手,求帮助,谢谢
奇侠:
vd300=vb300+vb301+vb302+vb303,前面的是高位,后面的是低位,即vb300高于vb301高于vb302高于vb303
侠士:
搞个300里的地址,图片看起来更有感觉。
这个就是MD123,当然编程的时候*好不要用到MD123。
奇侠:
位:*小的存储单位,非0则1,表达两个状态。但是如果要表达更多状态怎么办?用字节。
字节:每8个位组成一个字节。这样一个字节可以表达2的8次方(256)个状态,大于256个状态怎么表示?那就用字。
字:2个字节组成一个字,有16个位。这样一个字可以表达2的16次方(65536)个状态,大于65536个状态怎么表示?那就用双字。
双字:2个字组成一个双字,有32个位。这样一个双字可以表达2的32次方(4294967296)个状态。
西门子表达比较特殊,就是低位高字节。例如一个32位组成的双字,其0-31位共32位用VD200表示的话,那么要表达0-15位组成的字,就是VW202;要表达16-31位组成的字,就是VW200;要表达0-7位组成的字节,就是VB203;要表达8-15位组成的字节,就是VB202;要表达16-23位组成的字节,就是VB201;要表达24-31位组成的字节,就是VB200。
菜鸟:
如果~要表达0-7位组成的字节,就是VB203;要表达8-15位组成的字节,就是VB202;要表达16-23位组成的字节,就是VB201;要表达24-31位组成的字节,就是VB200。那那些位要反过来么,比如V203.7在**位,V203.0*后一位?还是按照原来的V203.0**位,V203.7*后一位?
感觉 kayome 的跟你说的好像是相反的,不知道是不是我理解错了。
谢谢
侠士:
VD300=(V300.7-V300.0)+(V301.7-V301.0)+(V302.7-V302.0)+(V303.7-V303.0)
建议在变量表里面监控 VD300 和VB300 301 302 303
很直观