回覆列表
  • 1 # 使用者782313117658

    Mobus應該說一種通訊協議,最初為美國modicon公司為其PLC產品定義的一個基於RS232/422/485的序列通訊協議,現在許多PLC、儀表等都支援這個協議。

    你在baidu搜尋“Mobus通訊協議”,就會出來很多這方面的內容了,一定有你需要的!!

    1、奇偶校驗

    使用者可以配置控制器是奇或偶校驗,或無校驗。這將決定了每個字元中的奇偶校驗位是如何設定的。

    如果指定了奇或偶校驗,“1”的位數將算到每個字元的位數中(ASCII模式7個數據位,RTU中8個數據位)。例如RTU字元幀中包含以下8個數據位:

    1 1 0 0 0 1 0 1

    整個“1”的數目是4個。如果便用了偶校驗,幀的奇偶校驗位將是0,便得整個“1”的個數仍是4個。如果便用了奇校驗,幀的奇偶校驗位將是1,便得整個“1”的個數是5個。

    如果沒有指定奇偶校驗位,傳輸時就沒有校驗位,也不進行校驗檢測。代替一附加的停止位填充至要傳輸的字元幀中。

    兩種傳輸模式中(ASCII或RTU),傳輸裝置以將Modbus訊息轉為有起點和終點的幀,這就允許接收的裝置在訊息起始處開始工作,讀地址分配資訊,判斷哪一個裝置被選中(廣播方式則傳給所有裝置),判知何時資訊已完成。部分的訊息也能偵測到並且錯誤能設定為返回結果。

    1、ASCII幀

    使用ASCII模式,訊息以冒號(:)字元(ASCII碼 3AH)開始,以回車換行符結束(ASCII碼 0DH,0AH)。

    其它域可以使用的傳輸字元是十六進位制的0...9,A...F。網路上的裝置不斷偵測“:”字元,當有一個冒號接收到時,每個裝置都解碼下個域(地址域)來判斷是否發給自己的。

    訊息中字元間傳送的時間間隔最長不能超過1秒,否則接收的裝置將認為傳輸錯誤。一個典型訊息幀如下所示:

    起始位 裝置地址 功能程式碼 資料 LRC校驗 結束符

    1個字元 2個字元 2個字元 n個字元 2個字元 2個字元

    圖2 ASCII訊息幀

    2、RTU幀

    使用RTU模式,訊息傳送至少要以3.5個字元時間的停頓間隔開始。在網路波特率下多樣的字元時間,這是最容易實現的(如下圖的T1-T2-T3-T4所示)。傳輸的第一個域是裝置地址。可以使用的傳輸字元是十六進位制的0...9,A...F。網路裝置不斷偵測網路匯流排,包括停頓間隔時間內。當第一個域(地址域)接收到,每個裝置都進行解碼以判斷是否發往自己的。在最後一個傳輸字元之後,一個至少3.5個字元時間的停頓標定了訊息的結束。一個新的訊息可在此停頓後開始。

    整個訊息幀必須作為一連續的流轉輸。如果在幀完成之前有超過1.5個字元時間的停頓時間,接收裝置將重新整理不完整的訊息並假定下一位元組是一個新訊息的地址域。同樣地,如果一個新訊息在小於3.5個字元時間內接著前個訊息開始,接收的裝置將認為它是前一訊息的延續。這將導致一個錯誤,因為在最後的CRC域的值不可能是正確的。一典型的訊息幀如下所示:

    起始位 裝置地址 功能程式碼 資料 CRC校驗 結束符

    T1-T2-T3-T4 8Bit 8Bit n個8Bit 16Bit T1-T2-T3-T4

    圖3 RTU訊息幀

    3、地址域

    訊息幀的地址域包含兩個字元(ASCII)或8Bit(RTU)。可能的從裝置地址是0...247 (十進位制)。單個裝置的地址範圍是1...247。主裝置透過將要聯絡的從裝置的地址放入訊息中的地址域來選通從裝置。當從裝置傳送迴應訊息時,它把自己的地址放入迴應的地址域中,以便主裝置知道是哪一個裝置作出迴應。

    地址0是用作廣播地址,以使所有的從裝置都能認識。當Modbus協議用於更高水準的網路,廣播可能不允許或以其它方式代替。

    4、如何處理功能域

    訊息幀中的功能程式碼域包含了兩個字元(ASCII)或8Bits(RTU)。可能的程式碼範圍是十進位制的1...255。當然,有些程式碼是適用於所有控制器,有此是應用於某種控制器,還有些保留以備後用。

    當訊息從主裝置發往從裝置時,功能程式碼域將告之從裝置需要執行哪些行為。例如去讀取輸入的開關狀態,讀一組暫存器的資料內容,讀從裝置的診斷狀態,允許調入、記錄、校驗在從裝置中的程式等。

    當從裝置迴應時,它使用功能程式碼域來指示是正常回應(無誤)還是有某種錯誤發生(稱作異議迴應)。對正常回應,從裝置僅迴應相應的功能程式碼。對異議迴應,從裝置返回一等同於正常程式碼的程式碼,但最重要的位置為邏輯1。

    例如:一從主裝置發往從裝置的訊息要求讀一組保持暫存器,將產生如下功能程式碼:

    0 0 0 0 0 0 1 1 (十六進位制03H)

    對正常回應,從裝置僅迴應同樣的功能程式碼。對異議迴應,它返回:

    1 0 0 0 0 0 1 1 (十六進位制83H)

    除功能程式碼因異議錯誤作了修改外,從裝置將一獨特的程式碼放到迴應訊息的資料域中,這能告訴主裝置發生了什麼錯誤。

    主裝置應用程式得到異議的迴應後,典型的處理過程是重發訊息,或者診斷髮給從裝置的訊息並報告給操作員。

    5、資料域

    資料域是由兩個十六進位制數集合構成的,範圍00...FF。根據網路傳輸模式,這可以是由一對ASCII字元組成或由一RTU字元組成。

    從主裝置發給從裝置訊息的資料域包含附加的資訊:從裝置必須用於進行執行由功能程式碼所定義的所為。這包括了象不連續的暫存器地址,要處理項的數目,域中實際資料位元組數。

    例如,如果主裝置需要從裝置讀取一組保持暫存器(功能程式碼03),資料域指定了起始暫存器以及要讀的暫存器數量。如果主裝置寫一組從裝置的暫存器(功能程式碼10十六進位制),資料域則指明瞭要寫的起始暫存器以及要寫的暫存器數量,資料域的資料位元組數,要寫入暫存器的資料。

    如果沒有錯誤發生,從從裝置返回的資料域包含請求的資料。如果有錯誤發生,此域包含一異議程式碼,主裝置應用程式可以用來判斷採取下一步行動。

    在某種訊息中資料域可以是不存在的(0長度)。例如,主裝置要求從裝置迴應通訊事件記錄(功能程式碼0B十六進位制),從裝置不需任何附加的資訊。

    6、錯誤檢測域

    標準的Modbus網路有兩種錯誤檢測方法。錯誤檢測域的內容視所選的檢測方法而定。

    ASCII

    當選用ASCII模式作字元幀,錯誤檢測域包含兩個ASCII字元。這是使用LRC(縱向冗長檢測)方法對訊息內容計算得出的,不包括開始的冒號符及回車換行符。LRC字元附加在回車換行符前面。

    RTU

    當選用RTU模式作字元幀,錯誤檢測域包含一16Bits值(用兩個8位的字元來實現)。錯誤檢測域的內容是透過對訊息內容進行迴圈冗長檢測方法得出的。CRC域附加在訊息的最後,新增時先是低位元組然後是高位元組。故CRC的高位位元組是傳送訊息的最後一個位元組。

  • 中秋節和大豐收的關聯?
  • 為什麼周雲逸和海瑞都是敢言直諫的諍臣,結局差別這麼大?