天天看點

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

1、松下PLC使用COM0端口,RS232接線。電腦端使用USB轉RS232序列槽線。

硬體接線,RS232接線:

電腦端序列槽線:     PLC側COM0:

2 RXD 接收資料    SD 發送資料

3 TXD 發送資料    RD 接收資料

5 GND 信号地     SG 信号地

2、PLC側參數設定:

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

站号:1;

通訊模式:MODBUS RTU;

速率(波特率):9600;

資料長度:8位;

奇偶校驗:奇校驗;

停止位:1

3、八方彙序列槽調試軟體側設定:

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試
松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

通訊參數設定和PLC要一緻,裝置位址就是需要通訊的PLC的站号,這裡是01(PLC側 NO.410站号 1)。

4、八方彙調試神器有一點需要注意的地方:顯示的起始位址範圍要包含讀寫寄存器位址的範圍,否則,将會出現讀寫寄存器位址無法寫入位址的情況。如下圖:

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

圖中①中的位址範圍是從0開始,顯示連續的8個位址。②中的位址範圍是從0開始,讀寫1個位址。

那麼我就可以在②的讀寫寄存器位址裡輸入任意的0-7的數字,但不能超過7,超過7就會報錯。因為①中位址範圍最大就是7。

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

輸入7以内的數字,都可以正常輸入。

但是,當輸入7以上的數字時就會報錯。這一點對這個軟體需要特别注意。

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

如果需要更大的位址,隻需把①中的顯示範圍包含②中需要填的位址,就可以正常在②中輸入了。

5、在FP-XH的使用者手冊-通訊篇中,有關于PLC進行MODBUS通訊時的位址對照表

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

這張表裡包含了讀寫不同類型位址時需要使用的功能碼和對應位址。需要注意的是紅色框裡代碼就是MODBUS通訊時的功能碼,這裡是以10進制列出的,應用的時候注意轉換成16進制。例如:代碼16是DT多字寫入,用序列槽軟體發封包時,功能碼應轉換成16進制,也就是10,十進制的16=十六進制的10

6、MODBUS 功能碼及其含義

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

MODBUS RTU 錯誤應答的規定:

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試
松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

松下FP-XH PLC側響應規則

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

下面進入重點,各個功能和位址讀寫操作的應用例子

如:讀取PLC的Y6的狀态

發送:01 01 00 06 00 01 1D CB

接收:01 01 01 01 90 48

下圖是MODBUS RTU協定規定的封包資料格式

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

封包解讀:

發送資料格式解讀

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

圖檔中顯示出了發送資料各個碼占用的位數(每兩位代表1個位元組的資料長度=8bit),這裡都是16進制。如上圖,起始位址占用4個位。

起始碼:3.5個字元以上時間的間隔。

位址碼01:讀取站号為1裝置的資料。

功能碼01:讀的是線圈類型的資料。

起始位址00 06:讀取資料的起始位址是6,類型是Y點。為什麼是Y點,是因為上面的PLC位址對照表裡規定的,線圈中0000-06DF對應Y0-Y109F,看下圖紅色框裡。

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

讀取個數00 01:讀取資料的數量是1個。

校驗碼1D CB: CRC檢驗的值。

停止碼:3.5個字元以上時間的間隔。

接收資料格式解讀

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

圖檔中顯示出了接收資料各個碼占用的位數(每兩位代表1個位元組的資料長度=8bit),這裡都是16進制。如上圖,傳回資料占用2個位。

起始碼:3.5個字元以上時間的間隔。

位址碼01:傳回站号為1裝置的資料。

功能碼01:傳回的是線圈類型的資料。

讀取個數01:傳回資料的長度是1個位元組。(讀取個數這裡的數字代表傳回的資料長度,機關是位元組。1個位元組=8bit)。

傳回資料01:傳回的資料為H01,【因為傳回1個位元組的資料,是以這個資料存儲在低8位中,因為讀取資料的起始位址是Y6,傳回的資料=H01=B00000001,是以Y6=bit0=1】

校驗碼90 48: CRC檢驗的值。

停止碼:3.5個字元以上時間的間隔。

即我們讀取的1号站線圈類型,位址為Y6的線圈目前狀态為ON。

如果需要讀取Y300-Y309一共10個點狀态要怎麼發送封包?

發送:01 01 01 E0 00 0A BC 07

接收:01 01 02 A4 00 C3 3C

發送前,序列槽軟體位址設定,如下圖:

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

發送後封包,如下圖:

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

傳回結果,如下圖

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

PLC側資料狀态

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

序列槽軟體顯示狀态與PLC監控狀态一緻。

封包解讀:

發送資料格式解讀

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

圖檔中顯示出了發送資料各個碼占用的位數(每兩位代表1個位元組的資料長度=8bit,每4位代表1個字的資料長度),這裡都是16進制。

起始碼:3.5個字元以上時間的間隔。

位址碼01:讀取站号為1裝置的資料。

功能碼01:讀的是線圈類型的資料。

起始位址01 E0:讀取資料的起始位址是Y300,類型是Y點。為什麼是Y點,是因為下圖的PLC位址對照表裡規定的,線圈中0000-06DF對應Y0-Y109F,看下圖紅色框裡。【為什麼位址是01 E0,下面有詳細解釋位址對應的問題】(*注1)

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

讀取個數00 0A:讀取資料的數量是連續的10個,從Y300開始到Y30A。(這裡是16進制,HA=K10)

校驗碼BC 07: CRC檢驗的值。

停止碼:3.5個字元以上時間的間隔。

接收資料格式解讀

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

圖檔中顯示出了接收資料各個碼占用的位數(每兩位代表1個位元組的資料長度=8bit),這裡都是16進制。

起始碼:3.5個字元以上時間的間隔。

位址碼01:傳回站号為1裝置的資料。

功能碼01:傳回的是線圈類型的資料。

讀取個數02:傳回資料的長度是2個位元組(1個位元組=8bit,2個位元組=16bit=1個字)。

傳回資料1 A4:傳回的第一個資料是HA4。HA4=B10100100(H代表16進制,B代表2進制)

傳回資料2 00:傳回的第二個資料是H00。H00=B00000000

把傳回資料1和傳回資料2組合起來就是0000 0000 1010 0100(即bit2=Y302=1,bit5=Y305=1,bit7=Y307=1,這和上圖序列槽軟體中顯示是一樣的。)

MODBUS RTU 功能碼01, 傳回資料是按位元組處理的,1個字=2個位元組=16bit。上面傳回2個位元組,存放資料需要占用1個字,傳回資料1存放在低8位中,傳回資料2存放在高8位中。假如傳回4個位元組,資料存放需要占用2個字,傳回資料1存放在第一個字的低8位中,傳回資料2存放在第一個字的高8位中;傳回資料3存放在第二個字的低8位中,傳回資料4存放在第二個字的高8位中。當傳回更多資料時,按此規律遞推。是以我們處理接收到的資料時,需要把1個字的高8位和低8位進行互換,再重新組合成1個字,才能得到我們真正需要的資料,因為MODBUS RTU傳回資料協定格式就是低位在前高位在後,而一個正常的資料是高位在前低位在後,是以需要處理。例如上面接收到的資料(資料1和資料2合起來)為HA400=B1010 0100 0000 0000,很顯然這不是我們需要的資料。這是因為對于2進制來說左側是高位右側是低位,從左往右排就是從高位往低位排列。是以我們需要把1個字的高低位元組互換處理,得到的資料是H00A4=0000 0000 1010 0100這才是真實的資料。

校驗碼C3 3C: CRC檢驗的值。

停止碼:3.5個字元以上時間的間隔。

即我們讀取的1号站線圈類型,起始位址為Y300連續讀取10個資料,傳回的資料為HA400=B1010 0100 0000 0000。

(*注1)下面開始解釋位址對應的問題

需要讀取資料的起始位址為Y300,為什麼發送封包時的起始位址為01E0?

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

上表我們看到Y0-Y109F對應的BUS上的資料(16進制)為0000-06DF,即Y0對應0000,Y109F對應06DF。按照此表規定的規則,那麼Y10對應0010,Y5F對應005F,Y90對應0090,Y9F對應009F;下面關鍵問題來了Y100對應多少?按照上面的規則我們很容易會說Y100對應0100,真是如此嗎?正确的答案是Y100對應00A0。是不是出乎你的意外?

這是因為松下PLC的X/Y/R位址是16進制非連續排列的。Y的位址排列為Y0-YF,Y10-Y1F......Y90-Y9F這一段Y0-Y9F是連續排列的。那麼按16進制排列9F後面的一個數應該是A0,但松下PLC的下一個起始位址是Y100,跳過了中間的一段(A0-FF)不是YA0!

繼續往下排列Y100-Y19F又是連續排列的,但是從Y200開始又跳過了中間的一段(1A0-1FF),變成了Y200-Y29F。下面是Y300-Y39F,Y400-Y49F.......

即松下PLC位址每遇到9F(H9F=10進制159)資料位址就會跳段改變,也就是說從起始位址每隔160個資料(0-159一共160個),就會改變位址起始編号。那麼按照此規則Y0-Y109F一共有多少個資料呢?答案:11*160=1760。這是因為,從Y0-Y109F,一共有11個位址段,每個位址段從對應的0開始到9F一共有160個資料,那麼總數就是11*160=1760。

而上表中給出的PLC的Y位址對應的BUS位址卻是連續排列的,從0000到06DF即十進制的0到1759,一共有1760個。把BUS位址和PLC位址一一對應起來,那麼Y300就對應BUS的01E0。這就是上面問題的答案。

BUS位址在對應區間内都是連續排列的。

下面附上幾張位址對應圖,以友善了解。

這是X位址的對應BUS位址表,規則同上面的解釋,圖中隻列出了部分資料。

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

這是Y位址的對應BUS位址表,規則同上面的解釋,圖中隻列出了部分資料。

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

這是R位址的對應BUS位址表,規則同上面的解釋,圖中隻列出了部分資料。

R位址對應的BUS位址是0800-27FF,這裡要特别注意

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

這是R位址的對應BUS位址表,規則同上面的解釋,圖中隻列出了部分資料。

R位址對應的BUS位址是0800-27FF,這裡要特别注意

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

9、讀單個R點,功能碼用H01,接收到的資料需要高低位元組互換。

發送:01 01 08 A0 00 01 FF 88

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

接收:01 01 01 01 90 48

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

接收封包中的讀取個數表示的是傳回的位元組數。如上圖01表示傳回1個位元組。

讀多個R點,功能碼用H01,接收到的資料需要高低位元組互換。

發送:01 01 08 A0 00 10 3F 84

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

接收:01 01 02 01 05 78 6F

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

接收封包中的讀取個數表示的是傳回的位元組數。如上圖02表示傳回2個位元組。

讀單個X點,功能碼用H02,接收到的資料需要高低位元組互換。

發送:01 02 00 0F 00 01 89 C9

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

接收:01 02 01 01 60 48

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

接收封包中的讀取個數表示的是傳回的位元組數。如上圖01表示傳回1個位元組。

讀多個X點,功能碼用H02,接收到的資料需要高低位元組互換。

發送:01 02 00 00 00 10 79 C6

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

接收:01 02 02 00 80 B8 18

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

接收封包中的讀取個數表示的是傳回的位元組數。如上圖02表示傳回2個位元組。

讀單個DT資料,功能碼用H03,注意:H03功能碼,傳回的資料不需要進行高低位元組互換,可以直接使用。每個傳回資料存放占用1個字。

發送:01 03 00 42 00 01 24 1E

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

接收:01 03 02 31 24 AD CF

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

H3124=K12580

接收封包中的讀取個數表示的是傳回的位元組數。如上圖02表示傳回2個位元組。

讀多個DT資料,功能碼用H03,注意:H03功能碼,傳回的資料不需要進行高低位元組互換,可以直接使用。每個傳回資料存放占用1個字。

發送:01 03 00 42 00 0A 65 D9

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

接收:01 03 14 31 24 00 00 00 00 00 00 00 9F 00 00 00 00 01 AA 00 00 00 00 75 6A

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試
松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試
松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

傳回資料太多了,1張圖截不完,按順序看圖就好了。

接收封包中的讀取個數表示的是傳回的位元組數。如上圖14表示傳回20個位元組。(H14=K20)

單點寫Y點,功能碼用H05。正常時,接收的封包和發送的封包完全一樣。寫入的值為FF 00表示單個線圈置ON,這是規定的。

發送:01 05 02 80 FF 00 8C 6A

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

寫入的值為FF 00表示單個線圈置ON,這是規定的。

接收:01 05 02 80 FF 00 8C 6A

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

單點寫Y點,功能碼用H05。正常時,接收的封包和發送的封包完全一樣。寫入的值為00 00表示單個線圈置OFF,這是規定的。

發送:01 05 02 80 00 00 CD 9A

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

接收:01 05 02 80 00 00 CD 9A

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

如:需要把一個線圈置ON,在八方彙序列槽調試神器上要怎麼操作?

如下圖需要把Y400置1,具體操作流程如下:

1. 填入位址,Y400對應BUS 16進制位址0280,Y400是起始位=bit0位

2. 滑鼠左鍵單擊bit0位,bit0位的顯示狀态就會從OFF變為ON

3. 點選紅色框的發送

4.序列槽軟體自動生成封包,并把封包發送出去。

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

當需要把1個線圈置OFF時,隻需點選對應位,使其從ON變為OFF,再重複上面的步驟就可以了。

*注意2: 左上角選擇16進制時,顯示位址總個數/讀寫寄存器位址個數 在序列槽軟體上用10進制表示,發送和接收的封包都是用16進制處理的!這裡需要特别注意。

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

多點線圈寫Y點,功能碼用H0F。

發送:01 0F 02 80 00 10 02 FF FF DF 90

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

接收:01 0F 02 80 00 10 54 57

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

多點線圈寫Y點,功能碼用H0F。

發送:01 0F 02 80 00 11 03 00 00 00 9C 64

接收:01 0F 02 80 00 11 95 97

多點線圈寫Y點,功能碼用H0F。

發送:01 0F 0B 20 00 11 03 FF FF 01 4C 04

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

接收:01 0F 0B 20 00 11 96 29

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

單點DT寫入,功能碼用H06。

功能碼06,發送和接收封包一樣。

發送:01 06 05 A4 21 CB 91 22

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

接收:01 06 05 A4 21 CB 91 22

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

多點DT寫入,功能碼用H10。

發送:01 10 05 A4 00 03 06 00 3D 0A 35 00 6F 8E 24

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試
松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

上圖中的要寫入的個數代表寫入多少個字,如上圖0003代表寫入3個字=6個位元組。

接收:01 10 05 A4 00 03 C1 27

松下PLC做從站MODBUS RTU協定,八方彙序列槽調試神器調試

上圖中的寫入的個數代表寫入多少個字,如上圖0003代表寫入3個字

例如:在PLC的32位寄存器DT10中寫入值120000,要怎麼寫?

1、先把十進制轉成16進制,K120000=H0001D4C0。因為發送的時候資料是按字發送的,32位=2個字=4個位元組,不足4個位元組的高位補0。第一個字存放順序為D4 C0高位在前低位在後,第二個字存放順序為00 01高位在前低位在後。是以DT10中存放資料D4 C0,DT11中存放00 01。

2、發送多個字使用功能碼H10

3、發送封包:01 10 00 0A 00 02 04 D4 C0 00 01 8B DC

接收封包:01 10 00 0A 00 02 61 CA

繼續閱讀