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原廠,
他們也可以寫好一個協議,讓你載入在軟體內,就可以直接使用了。

2017年1月8日 星期日

HMI(人機介面)透過RS232(MODBUS)連結arduino


主要利用上一次arduino的程式,
再加上HMI來做讀、寫的動作,
透過RS232(MODBUS),
其中要注意的就是RS232的電壓準位不同。
arduino的RS232是TTL±5V
而HMI是±10V。
PLC常用也是±10V。

要特別注意,一般的USB轉RS232,有可能也是5V,
如果拿來連PLC就會相當的不穩定。