2017年1月25日 星期三

Modicom Format 是什麼?Modbus 位址?

在很多設備的MODBUS資料裡,除了16進制的位址外。
還有Modicom Format的位址?

如下圖:

上圖中有說明Holding Register所以可以得知,功能碼是03

在這沒有標功能碼,但其中Modicom Format就已經隱藏功能碼在其中了。

4XXXX 是功能碼03
3XXXX 是功能碼04

可以查MODBUS的協議當中有寫到:

----


---


===
在實際應用時,也是可以這樣使用。
如台達人機,有不同的MODBUS協議

其中Modbus RTU / ASCII Hex Address (Master)
就是直接寫入16進制的位址,並透過RW、R  不同的代號,來區分功能碼03 或04

另外也有Modbus nW RTU / ASCII (Master)
都是用相同的W來當代號,但就是透過位址(Modicom Format )來區分是功能碼03或04

所以簡單來說,Modicom Format 就是已經內含功能碼的位址了!!
除了自已要了解外,也可以選擇有支援Modicom Format 的處理裝置,也可以直接Modicom Format 輸入在裝置當中。
如:台達人機就是有含此功能。

Modicom Format 是什麼?Modbus 位址?
http://www.plcnc.info/forum.php?mod=viewthread&tid=2324&fromuid=1
(出處: PLC+CNC)


2017年1月19日 星期四

arduino MODBUS 測試



arduino的MODBUS通訊功能

為什麼要測arduino呢?
在「創客」及「物聯網」的風潮下,
有非常多的傳感器,
反而是創客常用的工具,
在工控反而沒有見到,
也引發這次測試的原因。

本次一樣是利用PC來發送命令做測試。
arduino當MODBUS的從站

2017年1月15日 星期日

PLC透過RS232(Modbus)跟Arduiono連線

今天測試的是
PLC透過RS232(Modbus)跟Arduiono連線。

首先兩端的RS232的電壓不同,
所以還是要透過轉接板(RS232轉TTL)
上集HMI連結Arduino有使用過。

再利用PLC編輯器,自動產生通訊程式的功能,
簡單的設定,就可以完成通訊的程式了。

2017年1月11日 星期三

支援Modbus 不代表全Modbus功能

在這現在工業4.0 的風潮下,通訊已經變成一個很重要的功能。
而在工業自動化領域,在現有的通訊方式,就屬於Modbus最為普遍了。
像PLC 通訊口,大多就都有支援,但很多都是空著浪費,在未來拿來做資料收集,可以達到不增加費用,又達到資料收集的效用了。
而Modbus的規範,其實有很多的功能(碼)。如下圖:



而現在支援的Modbus裝置,大多只支援部份的功能碼。如下:03H 讀06H 寫入一個暫存器資料10H 寫入多個暫存器資料以上三個功能碼是最多裝置支援。
在實際使用時,還是要注意各裝置的手冊說明:





2017年1月9日 星期一

HMI(人機介面)沒有的通訊協議,該怎麼使用?

HMI(人機介面)在工控(自動化業)常使用,
當成操作介面在使用。
所以HMI為了對應眾多廠牌的PLC、或設備,
通常會把各家的協議寫好,放在軟體內。
如下圖:可以選定你的控制器是什麼。

就可以輕鬆的連結控制器了。

但如果HMI廠商沒有寫的協議該怎麼辨呢?

所以今天就是要來教各位,並解開通訊協議的問題。
1.首先我們選定台達DVP PLC的協議,並抓出通訊碼來分析。
1.1控制器機型,先選DVP PLC,通訊PORT選RS485(圖中沒擷取到)


1.2 選一個數值顯示,並讀取D1


1.3電腦透過USB轉RS485,來接到HMI的RS485,並打開軟體來收集。
會得到以下的圖

HMI會一直送出:(因為沒有實際接PLC,所以HMI會重覆發送)
3A 30 31 30 33 31 30 30 31 30 30 30 31 45 41 0D 0A
雖然跟我們之前介紹的MODBUS RTU不同,
但其實這就是MODBUS ASCII的通訊碼:


ASCII 開頭碼=03
結束字元=0D 0A
16進制 與ASCII碼對應表:

所以
3A 30 31 30 33 31 30 30 31 30 30 30 31 45 41 0D 0A
可以解讀為:
3A      =開頭碼
30 31  =站號=01
30 33  =功能碼=03
31 30 30 31=位址=1001
30 30 30 31=資料量=0001
45 41    = LRC檢查碼  <<這不是RTU的CRC!!
0D 0A  =結束碼

接下來,來看PLC的手冊 MODBUS位址1001是什麼,

我們查到手冊1001裝置通訊位址就是D1,
跟我們HMI設定該數值要顯示的D1是一致的。
=====================================
2.利MODBUS來複制讀取 PLC D1的數值
HMI通訊設定為ASCII Hex Address(Mater)  <<因為剛剛是讀到ASCII值

設定一個讀取數值的位址=1001,
然後再透過USB轉RS485,來讀取HMI發送的值,
會發現,跟剛剛選擇DVP PLC發送的值是一樣的。

===================
3.差別
當HMI選擇DVP PLC  跟 ASCII Hex Address(Mater)的差別在那裡?

DVP PLC,可以很直覺得選擇要讀取D值
ASCII Hex Address(Mater) 需要自已去查手冊,才知道D1是位址1001,然後再填入。

所以協議,就是方便的讓使用者可以直覺的操作,不必再去麻煩的查表。
如果PLC 有 X Y Z,就直覺使用,而不是填入難記的位址。

註:當然不是所有的PLC都是MODBUS!也有其他通訊格式。

4.如果HMI協議內沒有寫,我要通訊的設備怎麼辨?
就自已查手冊,看是否有支援MODBUS...等通訊格式,再查通訊位址,
還是可以使用的,只是比較麻煩。

當然也可以回覆給HMI原廠,將手冊、通訊資料給HMI原廠,
他們也可以寫好一個協議,讓你載入在軟體內,就可以直接使用了。