回覆列表
  • 1 # 路在何方20210218

    報文的基本格式

    1.1 第1和第2個位元組是:固定報文頭03 00,這裡我們就用到三種報文: a.初始化 b. 讀 c.寫,都是這種格式;

    1.2 第3和第4個位元組是:整個報文的長度;

    其它部分就是各種報文的個性化處理了;

    下面分析大量報文的案例進行規律分析,為了便於對照,每種都用1200 和300 兩種對照demo顯示:

    2.初始化報文

    初始化報文分兩個互動:

    2.1 互動一

    西門子1200:

    PC發出報文 ( [A18]=0x01 =CPUSlot)

    03 00 00 16 11 E0 00 00 00 01 00 C1 02 01 00 C2 02 01 01(cpuslot) C0 01 09

    PLC回覆報文( B[10]=0x06 可能 是西門子的小型號 B[22]=0x01=CPUSlot)

    03 00 00 16 11 D0 00 01 00 06 00 C0 01 09 C1 02 01 00 C2 02 01 01 (cpuslot)

    西門子300:

    PC發出報文 ( A[18]=0x02 =CPUSlot)

    03 00 00 16 11 E0 00 00 00 01 00 C1 02 01 00 C2 02 01 02(cpuslot) C0 01 09

    PLC回覆報文 (B[10]=0x04 可能 是西門子的小型號 B[22]=0x0=CPUSlot)

    03 00 00 16 11 D0 00 01 00 04 00 C0 01 09 C1 02 01 00 C2 02 01 02

    opc 對 1200 和 300 不用配置的不同點,就一個地方:前者 CPUSlot = 1 ,後者CPUSlot = 2;

    所以可以摸索規律是:

    a.pc發起第一個初始化報文的時候,第18個位元組標識了CPUSlot ;

    b.plc回覆報文和讀取報文長度一樣都是22個位元組長度;

    c.plc回覆報文的最後一個位元組也是CPUSlot ,這個可以用來校驗;

    d. plc回覆的第10個位元組一個是06,一個是04,這個好像是小型號的區別;

    細節摸索下來:1200該位元組是06,314是04,315是03;咱寫程式的時候,就不要考慮這個來校驗了;

    2.2互動二

    PC發出報文

    03 00 00 19 02 F0 80 32 01 00 00 FF FF 00 08 00 00 F0 00 00 01 00 01 07 80

    PLC回覆報文

    03 00 00 1B 02 F0 80 32 03 00 00 FF FF 00 08 00 00 00 00 F0 00 00 01 00 01 00 F0

    第二個初始化報文互動,透過1200 和314,315的對比,發現居然完全沒有任何區別;

    所以我們可以把這個互動完全固話;

    到此,整個初始化處理就算結束了,正常在設計架構的時候,可以這麼實現:

    在ClentSocket的onConnect(即正常連線上)的瞬間,pc給plc發起第一個初始請求,得到回覆後(為了簡單,就僅僅判斷長度為22即可);

    立刻發起第二個固定的初始話請求,得到長度為24的報文後,就透過一個布林變數通知整個系統可以正常讀寫;

    3.讀操作

    讀demo1:

    西門子1200: 讀取DB10, count=17 ,offset=19

    PC發出報文

    (A[3]~A[4]=0x001F=31=讀取報文總長度, A[12]~A[13]=0x001C=序列號,A[24]~A[25]=0x0011=17=讀取請求count;

    A[26]~A[27]=0x000A=10=DB10, A[28]=0x84=讀取的資料型別為DB塊,A[29]~A[31]=0x000098=152=19*8=讀取偏移量offset(bit為單位) )

    03 00 00 1F 02 F0 80 32 01 00 00 00 1C 00 0E 00 00 04 01 12 0A 10 02 00 11 00 0A 84 00 00 98

    PLC回覆報文:

    (B[3]~B[4]=0x002A=42=回覆報文總長度, B[12]~B[13]=0x001C=序列號,B[16]~B[17]=0x0015=21=讀取請求count(17)+4

  • 中秋節和大豐收的關聯?
  • 孕期容易發脾氣怎麼辦?