2017年7月18日 星期二

Modbus設定流程(PLC&外部設備)

本篇就MODBUS的設定來說明,
其他原理來類的,就請GOOGLE吧!
或參考這篇:MODBUS介紹

----正文開始-----
第一步:選定硬體通訊方式,RS232/RS485/MODBUS
第二步:設定通訊參數,通訊鮑率/位元數/
第三步:選擇要讀\寫的參數
正常應該完成了。

如果出問題:
第四步:檢查錯誤碼
第五步:用電腦來收/發的資料。
第六步:用示波器來量傳輸訊號。







==================
第一步:選定硬體通訊方式:
依外部裝置跟主控裝置,選定硬體通訊方式。

要注意的事:
RS232通訊只能一站。
RS485跟ETHERNET能多站。

例:
主站(PLC)硬體及接線腳位:COM2/RS485/PIN2 D+/PIN3 D-
從站(外部裝置):RS485/D+ D-

注:通訊方式一定要一致,不可RS232跟RS485通訊。

==============
第二步:設定通訊參數
相關通訊參數:

站號:(主站不需要)
通訊鮑率:9600/19200/38400
資料位元:7/8 位元
同位元檢查:O/E/N
停止位元:1/1.5/2
資料格式:ASCII/RTU (選擇RTU資料位元只能選8位元)

例:
主站(PLC):
通訊鮑率:9600
資料位元:8 位元
同位元檢查:O
停止位元:1
資料格式:RTU

從站(溫控器)
站號:1 (站號不可重覆)
通訊鮑率:9600
資料位元:8 位元
同位元檢查:O
停止位元:1
資料格式:RTU

*通訊參數要一致,不然無法通訊,最好將上敘參數記錄下來,一一設定。

=====================
第三步:選擇要讀\寫的參數
選定我們要讀取的參數,在手冊內查是否有對應的通訊位址:

下圖為台達溫控的手冊:
就在參數旁,直接顯示通訊位址,在紅線內也有提到通訊的功能碼03(重要)



如果是Modicom Format的位址呢?
Modicom Format就已經內含功能碼
4XXXX 是功能碼03,將該值減40001可以得到通訊位址
3XXXX 是功能碼04,將該值減30001可以得到通訊位址。(一般支援03功能碼較多04要另外設定)


參數要注意的地方:
**有些參數只能讀OR寫,如果對該參數執行錯誤的動作,會錯誤。或沒有回應。

====
一般來說到這邊就完成了,大部份不會有問題。
如果出問題了。
====
第四步:檢查錯誤碼
通訊錯誤,通常會回覆通訊錯誤碼。
一般來說:外部設備如果對通訊命令有問題。

1.會將功能碼的最高位元設"1"
例:
如果PLC發的是功能碼03
設備錯誤時,會回傳83,就表示通訊有問題。

2.會將錯誤碼,接在功能碼之後。
除了將功能碼最高位元設"1"
後面也會接錯誤碼,讓使用者方便查詢。
通常在手冊當中可以查到通訊錯誤碼。

*通訊錯誤碼,跟一般的錯誤碼不同,不可搞混。


=========
第五步:用電腦來收發出的資料。
如果PLC發出MODBUS指令,但沒有回傳。
通常是設定有問題,可以先將通訊參數全部確認一次。
有些參數修改,需要重新開關機。(**注意)

都確認過了,那就要用電腦來收PLC的資料,看PLC是否有真的將命令發出。

可以參考這影片:
Rs485檢測工具程式

除了可以收 PLC發出的資料外,
也可以模擬PLC發出的命令,對外部裝置通訊,看是否會回應。

如果電腦發出都不會回應,不是通訊設定有問題,就是通訊硬體錯了。

===========
第六步:用示波器來量傳輸訊號
如果前面的部份都正常,或是PC可以通訊,PLC無法通訊,
最後都可以用示波器來量波型。
MODBUS的指令,最底層,還是利用010101二進制碼在傳送,
所以利用示波器可以查到波型是否正常,有無被干擾。
或是訊號的衰減。

類似:
示波器抓通訊資料

10 則留言:

  1. 請教一下,若是想要在沒有MODBUS模組的PLC透過RS-485與具有MODBUS功能的裝置(如電錶)做通訊,應該要怎麼做呢?
    感謝回答!

    回覆刪除
    回覆
    1. Modbus是軟體的協議,
      所以硬體跟一般的232、485、ETHERNET並沒有不同。

      所以只要有232、485、ETHERNET埠,
      雖然有串列通訊指令,就可以達到MODBUS通訊功能了。

      MODBUS專用模組是做什麼用!?
      其實只是幫你處理,像是CRC檢查碼、LRC檢查碼,
      自動發送等等自動的功能。

      所以不用專用模組也可以。

      我自已本就用三菱非專用MODBUS模組,一般通訊埠,
      自已在PLC寫功能碼這些,
      就可以通訊了。

      刪除
    2. 原來如此!
      我也是使用三菱PLC目前嘗試不靠模組,直接用RS-485通訊。
      那請問有什麼通訊的例子可以供我參考嗎?
      我想試著寫,但在第一關設定通訊參數這邊就卡關不知道從何下手

      刪除
    3. 當初我在測試時的一些資料:
      串列通訊模組 QJ71C24
      https://vkinngworld.blogspot.tw/2014/09/qj71c24.html

      資料搬移的一些相關指令
      https://vkinngworld.blogspot.tw/2015/10/modbus-ascii.html?m=0

      刪除
  2. 用PLC不加通訊模組連接外部485的模組。
    要先分解資料串,並用相同的時脈,模擬485格式的資料串送出的時間及間隔。理論上是能達成的。但是還有寫接收的解碼。

    個人拙見

    回覆刪除
    回覆
    1. 如果不加通訊模組,不只是非modbus,是幾乎不太可能的。
      因為通訊的基本(最低)鮑率就4800bps(bit per sec)
      (再低就非標準了)
      代表每個output要有4800次變化,在目前的plc幾乎是不可能的。

      所以用通訊模組,來取代modbus模組是可行。
      用output(非通訊模組) 應該是不可能。需要更高速的上位。

      刪除
  3. 陳先生您好:
    想請問如果三菱的PLC(FX-3U)搭配左側外接模組485ADP-MB模組想與溫溼度感測器做RS-485通訊(已知感測器有485通訊功能),而廠商給我的是感測器的Modbus Protocol,而我一直收不到感測器的485訊號,是否感測器的為只需要另行解碼動作呢?

    回覆刪除
    回覆
    1. 1.感測器也是要設定的,站號、ASCII/RTU通訊速度、位元....
      2.把485ADP-MB設定跟感測器一樣。
      3.找出你要讀取資料的位址。例:0000H 或 40001
      4.感測器支援的功能碼Command Code,一般常用的是 03,但有的要用04
      5.利用ADPRW來讀取

      https://vkinngworld.blogspot.tw/2016/05/fx3u-485adp-mb-fx3modbus.html

      刪除
  4. 志豪大哥:
    我是岳霖,感謝你發這篇文章。
    "所以只要有232、485、ETHERNET埠,
    雖然有串列通訊指令,就可以達到MODBUS通訊功能了。"

    我想繼續追問這句話,因目前遇到設備(電空比例閥RS-232C),因不清楚是否有MODBUS,但是我若是PLC(RS-232)選擇FX3U-232-BD這款沒有MODBUS的應該也是能通訊?
    另外請問,(Slave)設備沒有MODBUS的狀況多嗎? 感覺應該不常見?!

    回覆刪除
    回覆
    1. 有rs232,沒有支援modbus的也有很多

      刪除