西門子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,
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
  };
}

 

各位有時間,我在不從怎么讀的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM