西门⼦smart200以太⽹通讯协议祥龙
西门⼦smart200具体的通讯⽂档在⽹上或者官⽹我都没有到(哪位⼤仙有请给我留⾔发个感激不尽),本⼈是通过监听控制软件分析出其中的通讯协议。
连接是通过TCP/IP协议,我⼀般喜欢⽤Java写测试Socket。
通讯是依照字节流沟通,⼀下只是满⾜和PLC的握⼿以及对内存数据修改。
1、当通过socket连接PLC成功之后⾸先发送⼀下字节流我成为连接,就像打开⽹站⼀样(⾃⼰定义的)
private byte EntLink[]={0x03,0x00,0x00,0x16,0x11,
(byte) 0xE0,0x00,0x00,0x00,0x10,
0x00,(byte) 0xC1,0x02,0x01,0x01,
(byte) 0xC2,0x02,0x01,0x01,
(byte) 0xC0,0x01,0x0A};
2、这是第⼆次发送的数据具体我不太懂,我称为检测就像输⼊密码⼀样(⾃⼰定义)
private byte check[]={0x03,0x00,0x00,0x19,0x02,
(byte) 0xF0,(byte) 0x80,0x32,0x01,
q5报价及图片
0x00,0x00,(byte) 0xCC,(byte) 0xC1,
0x00,0x08,0x00,0x00,(byte) 0xF0,
0x00,0x00,0x01,0x00,0x01,0x03,(byte) 0xC0};
3、下⾯就是对内存操作的部分了,返回的是⼀个byte数组,传⼊不同的数值修改不同的地址数据,我只搞懂了⼀部分,⼜⼤神懂得还望留⾔告知。
public byte[] getWriteBs(int times,int bloak,byte bit){华晨金杯汽车
return new byte[]{
  0x03,
  0x00,
  0x00,
  0x25,
  0x02,
  (byte) 0xF0,
  (byte) 0x80,
  0x32,
  0x01,
  //次数标志位应该是四字节,我测试只⽤了两个⾃⼰
  0x00,
  0x00,
  //次数标志,这个标志是递增的。当PLC接收消息并处理成功会返回这个标志
  (byte)(times>> 8),
  (byte)times,大地鹰王
  0x00,
  0x0E,
  0x00,
  0x06,
  0x05,
  0x01,
湛江二手车
  0x12,
  0x0A,
  0x10,
  0x02,
  0x00,
  0x02,
  0x00,
  0x01,
  (byte) 0x84,//这个表⽰操作不同的区域:0x81-DI;0x82-DQ;0x83-M区;0x84-DR(V区)
  //写⼊地址应该是三位,测试我只⽤了两位。
  0x00,
  //写⼊地址,其实是偏移量
  (byte)((bloak*8)>>8),
  (byte)(bloak*8),
  0x00,
  0x04,
  //写⼊最⼤bit位
  0x00,
  //这个应该是你要写⼊的位数0x10⼗进制是⼗六也就是两个字节,每次写⼊⼀定是偶数字节
  0x10,
  //写⼊数值,如果是多个⼀次往后⾯排铁将军导航仪
  bit,
  0x00
  };
}
各位有时间,我在不从怎么读的。