Modbus通信協(xié)議教程
《Modbus通信協(xié)議教程》由會員分享,可在線閱讀,更多相關《Modbus通信協(xié)議教程(41頁珍藏版)》請在裝配圖網(wǎng)上搜索。
Modbus 通信協(xié)議 一 Modbus 協(xié)議簡介 Modbus 協(xié)議是應用于電子控制器上的一種通用語言 通過此協(xié)議 控制器相互之間 控制器經(jīng)由網(wǎng)絡 例如以太網(wǎng) 和其它設備之間可以通信 它已經(jīng)成為一通用工業(yè)標準 有了它 不同廠商生產(chǎn)的控制設備可以連成工業(yè)網(wǎng)絡 進行集中監(jiān)控 此協(xié)議定義了一個控制器能認識使用的消息結構 而不管它們是經(jīng)過何種網(wǎng)絡進行通 信的 它描述了一控制器請求訪問其它設備的過程 如果回應來自其它設備的請求 以及 怎樣偵測錯誤并記錄 它制定了消息域格局和內容的公共格式 當在一 Modbus 網(wǎng)絡上通信時 此協(xié)議決定了每個控制器須要知道它們的設備地址 識別按地址發(fā)來的消息 決定要產(chǎn)生何種行動 如果需要回應 控制器將生成反饋信息并 用 Modbus 協(xié)議發(fā)出 在其它網(wǎng)絡上 包含了 Modbus 協(xié)議的消息轉換為在此網(wǎng)絡上使用 的幀或包結構 這種轉換也擴展了根據(jù)具體的網(wǎng)絡解決節(jié)地址 路由路徑及錯誤檢測的方 法 1 在 Modbus 網(wǎng)絡上轉輸 標準的 Modbus 口是使用一 RS 232C 兼容串行接口 它定義了連接口的針腳 電纜 信號位 傳輸波特率 奇偶校驗 控制器能直接或經(jīng)由 Modem 組網(wǎng) 控制器通信使用主 從技術 即僅一設備 主設備 能初始化傳輸 查詢 其它 設備 從設備 根據(jù)主設備查詢提供的數(shù)據(jù)作出相應反應 典型的主設備 主機和可編程 儀表 典型的從設備 可編程控制器 主設備可單獨和從設備通信 也能以廣播方式和所有從設備通信 如果單獨通信 從設備返回一消息作為回應 如果是以廣播方式查詢的 則不作任何回應 Modbus 協(xié)議建 立了主設備查詢的格式 設備 或廣播 地址 功能代碼 所有要發(fā)送的數(shù)據(jù) 一錯誤檢 測域 從設備回應消息也由 Modbus 協(xié)議構成 包括確認要行動的域 任何要返回的數(shù)據(jù) 和一錯誤檢測域 如果在消息接收過程中發(fā)生一錯誤 或從設備不能執(zhí)行其命令 從設備 將建立一錯誤消息并把它作為回應發(fā)送出去 2 在其它類型網(wǎng)絡上轉輸 在其它網(wǎng)絡上 控制器使用對等技術通信 故任何控制都能初始和其它控制器的通 信 這樣在單獨的通信過程中 控制器既可作為主設備也可作為從設備 提供的多個內部 通道可允許同時發(fā)生的傳輸進程 在消息位 Modbus 協(xié)議仍提供了主 從原則 盡管網(wǎng)絡通信方法是 對等 如果一 控制器發(fā)送一消息 它只是作為主設備 并期望從從設備得到回應 同樣 當控制器接收 到一消息 它將建立一從設備回應格式并返回給發(fā)送的控制器 3 查詢 回應周期 1 查詢 查詢消息中的功能代碼告之被選中的從設備要執(zhí)行何種功能 數(shù)據(jù)段包含了從設備 要執(zhí)行功能的任何附加信息 例如功能代碼 03 是要求從設備讀保持寄存器并返回它們的內 容 數(shù)據(jù)段必須包含要告之從設備的信息 從何寄存器開始讀及要讀的寄存器數(shù)量 錯誤 檢測域為從設備提供了一種驗證消息內容是否正確的方法 2 回應 如果從設備產(chǎn)生一正常的回應 在回應消息中的功能代碼是在查詢消息中的功能代 碼的回應 數(shù)據(jù)段包括了從設備收集的數(shù)據(jù) 象寄存器值或狀態(tài) 如果有錯誤發(fā)生 功能 代碼將被修改以用于指出回應消息是錯誤的 同時數(shù)據(jù)段包含了描述此錯誤信息的代碼 錯誤檢測域允許主設備確認消息內容是否可用 二 兩種傳輸方式 控制器能設置為兩種傳輸模式 ASCII 或 RTU 中的任何一種在標準的 Modbus 網(wǎng) 絡通信 用戶選擇想要的模式 包括串口通信參數(shù) 波特率 校驗方式等 在配置每個 控制器的時候 在一個 Modbus 網(wǎng)絡上的所有設備都必須選擇相同的傳輸模式和串口參數(shù) ASCII 模式 地址 功能代碼 數(shù)據(jù)數(shù)量 數(shù)據(jù) 1 數(shù)據(jù)n LRC 高字節(jié) LRC 低字節(jié) 回車 換行 RTU 模式 地址 功能代碼 數(shù)據(jù)數(shù)量 數(shù)據(jù) 1 數(shù)據(jù) n CRC 低字節(jié) CRC 高字節(jié) 所選的 ASCII 或 RTU 方式僅適用于標準的 Modbus 網(wǎng)絡 它定義了在這些網(wǎng)絡上連 續(xù)傳輸?shù)南⒍蔚拿恳晃?以及決定怎樣將信息打包成消息域和如何解碼 在其它網(wǎng)絡上 象 MAP 和 Modbus Plus Modbus 消息被轉成與串行傳輸無關的幀 1 ASCII 模式 當控制器設為在 Modbus 網(wǎng)絡上以 ASCII 美國標準信息交換代碼 模式通信 在消 息中的每個 8Bit 字節(jié)都作為兩個 ASCII 字符發(fā)送 這種方式的主要優(yōu)點是字符發(fā)送的時間 間隔可達到 1 秒而不產(chǎn)生錯誤 代碼系統(tǒng) 十六進制 ASCII 字符 0 9 A F 消息中的每個 ASCII 字符都是一個十六進制字符組成 每個字節(jié)的位 1 個起始位 7 個數(shù)據(jù)位 最小的有效位先發(fā)送 1 個奇偶校驗位 無校驗則無 1 個停止位 有校驗時 2 個 Bit 無校驗時 錯誤檢測域 LRC 縱向冗長檢測 2 RTU 模式 當控制器設為在 Modbus 網(wǎng)絡上以 RTU 遠程終端單元 模式通信 在消息中的每 個 8Bit 字節(jié)包含兩個 4Bit 的十六進制字符 這種方式的主要優(yōu)點是 在同樣的波特率下 可比 ASCII 方式傳送更多的數(shù)據(jù) 代碼系統(tǒng) 8 位二進制 十六進制數(shù) 0 9 A F 消息中的每個 8 位域都是一個兩個十六進制字符組成 每個字節(jié)的位 1 個起始位 8 個數(shù)據(jù)位 最小的有效位先發(fā)送 1 個奇偶校驗位 無校驗則無 1 個停止位 有校驗時 2 個 Bit 無校驗時 錯誤檢測域 CRC 循環(huán)冗長檢測 三 Modbus 消息幀 兩種傳輸模式中 ASCII 或 RTU 傳輸設備以將 Modbus 消息轉為有起點和終點 的幀 這就允許接收的設備在消息起始處開始工作 讀地址分配信息 判斷哪一個設備被 選中 廣播方式則傳給所有設備 判知何時信息已完成 部分的消息也能偵測到并且錯 誤能設置為返回結果 1 ASCII 幀 使用 ASCII 模式 消息以冒號 字符 ASCII 碼 3AH 開始 以回車換行符結束 ASCII 碼 0DH 0AH 其它域可以使用的傳輸字符是十六進制的 0 9 A F 網(wǎng)絡上的設備不斷偵測 字符 當有一個冒號接收到時 每個設備都解碼下個域 地址域 來判斷是否發(fā)給自己的 消息中字符間發(fā)送的時間間隔最長不能超過 1 秒 否則接收的設備將認為傳輸錯誤 一個典型消息幀如下所示 起始位 設備地址 功能代碼 數(shù)據(jù) LRC 校驗 結束符 1 個字符 2 個字符 2 個字符 n 個字符 2 個字符 2 個字符 圖 2 ASCII 消息幀 2 RTU 幀 使用 RTU 模式 消息發(fā)送至少要以 3 5 個字符時間的停頓間隔開始 在網(wǎng)絡波特率 下多樣的字符時間 這是最容易實現(xiàn)的 如下圖的 T1 T2 T3 T4 所示 傳輸?shù)牡谝粋€域是 設備地址 可以使用的傳輸字符是十六進制的 0 9 A F 網(wǎng)絡設備不斷偵測網(wǎng)絡總線 包 括停頓間隔時間內 當?shù)谝粋€域 地址域 接收到 每個設備都進行解碼以判斷是否發(fā)往 自己的 在最后一個傳輸字符之后 一個至少 3 5 個字符時間的停頓標定了消息的結束 一個新的消息可在此停頓后開始 整個消息幀必須作為一連續(xù)的流轉輸 如果在幀完成之前有超過 1 5 個字符時間的停 頓時間 接收設備將刷新不完整的消息并假定下一字節(jié)是一個新消息的地址域 同樣地 如果一個新消息在小于 3 5 個字符時間內接著前個消息開始 接收的設備將認為它是前一 消息的延續(xù) 這將導致一個錯誤 因為在最后的 CRC 域的值不可能是正確的 一典型的消 息幀如下所示 起始位 設備地址 功能代碼 數(shù)據(jù) CRC 校驗 結束符 T1 T2 T3 T4 8Bit 8Bit n 個 8Bit 16Bit T1 T2 T3 T4 圖 3 RTU 消息幀 3 地址域 消息幀的地址域包含兩個字符 ASCII 或 8Bit RTU 可能的從設備地址是 0 247 十進制 單個設備的地址范圍是 1 247 主設備通過將要聯(lián)絡的從設備的地址放 入消息中的地址域來選通從設備 當從設備發(fā)送回應消息時 它把自己的地址放入回應的 地址域中 以便主設備知道是哪一個設備作出回應 地址 0 是用作廣播地址 以使所有的從設備都能認識 當 Modbus 協(xié)議用于更高水準 的網(wǎng)絡 廣播可能不允許或以其它方式代替 4 如何處理功能域 消息幀中的功能代碼域包含了兩個字符 ASCII 或 8Bits RTU 可能的代碼范 圍是十進制的 1 255 當然 有些代碼是適用于所有控制器 有此是應用于某種控制器 還有些保留以備后用 當消息從主設備發(fā)往從設備時 功能代碼域將告之從設備需要執(zhí)行哪些行為 例如 去讀取輸入的開關狀態(tài) 讀一組寄存器的數(shù)據(jù)內容 讀從設備的診斷狀態(tài) 允許調入 記 錄 校驗在從設備中的程序等 當從設備回應時 它使用功能代碼域來指示是正常回應 無誤 還是有某種錯誤發(fā)生 稱作異議回應 對正?;貞?從設備僅回應相應的功能代碼 對異議回應 從設備返 回一等同于正常代碼的代碼 但最重要的位置為邏輯 1 例如 一從主設備發(fā)往從設備的消息要求讀一組保持寄存器 將產(chǎn)生如下功能代碼 0 0 0 0 0 0 1 1 十六進制 03H 對正常回應 從設備僅回應同樣的功能代碼 對異議回應 它返回 1 0 0 0 0 0 1 1 十六進制 83H 除功能代碼因異議錯誤作了修改外 從設備將一獨特的代碼放到回應消息的數(shù)據(jù)域 中 這能告訴主設備發(fā)生了什么錯誤 主設備應用程序得到異議的回應后 典型的處理過程是重發(fā)消息 或者診斷發(fā)給從 設備的消息并報告給操作員 5 數(shù)據(jù)域 數(shù)據(jù)域是由兩個十六進制數(shù)集合構成的 范圍 00 FF 根據(jù)網(wǎng)絡傳輸模式 這可以 是由一對 ASCII 字符組成或由一 RTU 字符組成 從主設備發(fā)給從設備消息的數(shù)據(jù)域包含附加的信息 從設備必須用于進行執(zhí)行由功 能代碼所定義的所為 這包括了象不連續(xù)的寄存器地址 要處理項的數(shù)目 域中實際數(shù)據(jù) 字節(jié)數(shù) 例如 如果主設備需要從設備讀取一組保持寄存器 功能代碼 03 數(shù)據(jù)域指定了 起始寄存器以及要讀的寄存器數(shù)量 如果主設備寫一組從設備的寄存器 功能代碼 10 十六 進制 數(shù)據(jù)域則指明了要寫的起始寄存器以及要寫的寄存器數(shù)量 數(shù)據(jù)域的數(shù)據(jù)字節(jié)數(shù) 要寫入寄存器的數(shù)據(jù) 如果沒有錯誤發(fā)生 從從設備返回的數(shù)據(jù)域包含請求的數(shù)據(jù) 如果有錯誤發(fā)生 此 域包含一異議代碼 主設備應用程序可以用來判斷采取下一步行動 在某種消息中數(shù)據(jù)域可以是不存在的 0 長度 例如 主設備要求從設備回應通信 事件記錄 功能代碼 0B 十六進制 從設備不需任何附加的信息 6 錯誤檢測域 標準的 Modbus 網(wǎng)絡有兩種錯誤檢測方法 錯誤檢測域的內容視所選的檢測方法而定 ASCII 當選用 ASCII 模式作字符幀 錯誤檢測域包含兩個 ASCII 字符 這是使用 LRC 縱 向冗長檢測 方法對消息內容計算得出的 不包括開始的冒號符及回車換行符 LRC 字符 附加在回車換行符前面 RTU 當選用 RTU 模式作字符幀 錯誤檢測域包含一 16Bits 值 用兩個 8 位的字符來實現(xiàn) 錯誤檢測域的內容是通過對消息內容進行循環(huán)冗長檢測方法得出的 CRC 域附加在消息的 最后 添加時先是低字節(jié)然后是高字節(jié) 故 CRC 的高位字節(jié)是發(fā)送消息的最后一個字節(jié) 7 字符的連續(xù)傳輸 當消息在標準的 Modbus 系列網(wǎng)絡傳輸時 每個字符或字節(jié)以如下方式發(fā)送 從左到 右 最低有效位 最高有效位 使用 ASCII 字符幀時 位的序列是 有奇偶校驗 啟始 位 1 2 3 4 5 6 7 奇偶 位 停止 位 無奇偶校驗 啟始 位 1 2 3 4 5 6 7 停止 位 停止 位 圖 4 位順序 ASCII 使用 RTU 字符幀時 位的序列是 有奇偶校驗 啟始位 1 2 3 4 5 6 7 8 奇偶位 停止位 無奇偶校驗 啟始 位 1 2 3 4 5 6 7 8 停止位 停止 位 圖 4 位順序 RTU 四 錯誤檢測方法 標準的 Modbus 串行網(wǎng)絡采用兩種錯誤檢測方法 奇偶校驗對每個字符都可用 幀檢 測 LRC 或 CRC 應用于整個消息 它們都是在消息發(fā)送前由主設備產(chǎn)生的 從設備在接 收過程中檢測每個字符和整個消息幀 用戶要給主設備配置一預先定義的超時時間間隔 這個時間間隔要足夠長 以使任 何從設備都能作為正常反應 如果從設備測到一傳輸錯誤 消息將不會接收 也不會向主 設備作出回應 這樣超時事件將觸發(fā)主設備來處理錯誤 發(fā)往不存在的從設備的地址也會 產(chǎn)生超時 1 奇偶校驗 用戶可以配置控制器是奇或偶校驗 或無校驗 這將決定了每個字符中的奇偶校驗 位是如何設置的 如果指定了奇或偶校驗 1 的位數(shù)將算到每個字符的位數(shù)中 ASCII 模式 7 個數(shù)據(jù) 位 RTU 中 8 個數(shù)據(jù)位 例如 RTU 字符幀中包含以下 8 個數(shù)據(jù)位 1 1 0 0 0 1 0 1 整個 1 的數(shù)目是 4 個 如果便用了偶校驗 幀的奇偶校驗位將是 0 便得整個 1 的 個數(shù)仍是 4 個 如果便用了奇校驗 幀的奇偶校驗位將是 1 便得整個 1 的個數(shù)是 5 個 如果沒有指定奇偶校驗位 傳輸時就沒有校驗位 也不進行校驗檢測 代替一附加 的停止位填充至要傳輸?shù)淖址麕?2 LRC 檢測 使用 ASCII 模式 消息包括了一基于 LRC 方法的錯誤檢測域 LRC 域檢測了消息域 中除開始的冒號及結束的回車換行號外的內容 LRC 域是一個包含一個 8 位二進制值的字節(jié) LRC 值由傳輸設備來計算并放到消息 幀中 接收設備在接收消息的過程中計算 LRC 并將它和接收到消息中 LRC 域中的值比 較 如果兩值不等 說明有錯誤 LRC 方法是將消息中的 8Bit 的字節(jié)連續(xù)累加 丟棄了進位 LRC 簡單函數(shù)如下 static unsigned char LRC auchMsg usDataLen unsigned char auchMsg 要進行計算的消息 unsigned short usDataLen LRC 要處理的字節(jié)的數(shù)量 unsigned char uchLRC 0 LRC 字節(jié)初始化 while usDataLen 傳送消息 uchLRC auchMsg 累加 return unsigned char char uchLRC 3 CRC 檢測 使用 RTU 模式 消息包括了一基于 CRC 方法的錯誤檢測域 CRC 域檢測了整個消 息的內容 CRC 域是兩個字節(jié) 包含一 16 位的二進制值 它由傳輸設備計算后加入到消息中 接收設備重新計算收到消息的 CRC 并與接收到的 CRC 域中的值比較 如果兩值不同 則有誤 CRC 是先調入一值是全 1 的 16 位寄存器 然后調用一過程將消息中連續(xù)的 8 位字 節(jié)各當前寄存器中的值進行處理 僅每個字符中的 8Bit 數(shù)據(jù)對 CRC 有效 起始位和停止 位以及奇偶校驗位均無效 CRC 產(chǎn)生過程中 每個 8 位字符都單獨和寄存器內容相或 OR 結果向最低有效 位方向移動 最高有效位以 0 填充 LSB 被提取出來檢測 如果 LSB 為 1 寄存器單獨和 預置的值或一下 如果 LSB 為 0 則不進行 整個過程要重復 8 次 在最后一位 第 8 位 完成后 下一個 8 位字節(jié)又單獨和寄存器的當前值相或 最終寄存器中的值 是消息中所 有的字節(jié)都執(zhí)行之后的 CRC 值 CRC 添加到消息中時 低字節(jié)先加入 然后高字節(jié) CRC 簡單函數(shù)如下 unsigned short CRC16 puchMsg usDataLen unsigned char puchMsg 要進行 CRC 校驗的消息 unsigned short usDataLen 消息中字節(jié)數(shù) unsigned char uchCRCHi 0 xFF 高 CRC 字節(jié)初始化 unsigned char uchCRCLo 0 xFF 低 CRC 字節(jié)初始化 unsigned uIndex CRC 循環(huán)中的索引 while usDataLen 傳輸消息緩沖區(qū) uIndex uchCRCHi puchMsgg 計算 CRC uchCRCHi uchCRCLo auchCRCHi uIndex uchCRCLo auchCRCLo uIndex return uchCRCHi 8 uchCRCLo CRC 高位字節(jié)值表 static unsigned char auchCRCHi 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 CRC 低位字節(jié)值表 static char auchCRCLo 0 x00 0 xC0 0 xC1 0 x01 0 xC3 0 x03 0 x02 0 xC2 0 xC6 0 x06 0 x07 0 xC7 0 x05 0 xC5 0 xC4 0 x04 0 xCC 0 x0C 0 x0D 0 xCD 0 x0F 0 xCF 0 xCE 0 x0E 0 x0A 0 xCA 0 xCB 0 x0B 0 xC9 0 x09 0 x08 0 xC8 0 xD8 0 x18 0 x19 0 xD9 0 x1B 0 xDB 0 xDA 0 x1A 0 x1E 0 xDE 0 xDF 0 x1F 0 xDD 0 x1D 0 x1C 0 xDC 0 x14 0 xD4 0 xD5 0 x15 0 xD7 0 x17 0 x16 0 xD6 0 xD2 0 x12 0 x13 0 xD3 0 x11 0 xD1 0 xD0 0 x10 0 xF0 0 x30 0 x31 0 xF1 0 x33 0 xF3 0 xF2 0 x32 0 x36 0 xF6 0 xF7 0 x37 0 xF5 0 x35 0 x34 0 xF4 0 x3C 0 xFC 0 xFD 0 x3D 0 xFF 0 x3F 0 x3E 0 xFE 0 xFA 0 x3A 0 x3B 0 xFB 0 x39 0 xF9 0 xF8 0 x38 0 x28 0 xE8 0 xE9 0 x29 0 xEB 0 x2B 0 x2A 0 xEA 0 xEE 0 x2E 0 x2F 0 xEF 0 x2D 0 xED 0 xEC 0 x2C 0 xE4 0 x24 0 x25 0 xE5 0 x27 0 xE7 0 xE6 0 x26 0 x22 0 xE2 0 xE3 0 x23 0 xE1 0 x21 0 x20 0 xE0 0 xA0 0 x60 0 x61 0 xA1 0 x63 0 xA3 0 xA2 0 x62 0 x66 0 xA6 0 xA7 0 x67 0 xA5 0 x65 0 x64 0 xA4 0 x6C 0 xAC 0 xAD 0 x6D 0 xAF 0 x6F 0 x6E 0 xAE 0 xAA 0 x6A 0 x6B 0 xAB 0 x69 0 xA9 0 xA8 0 x68 0 x78 0 xB8 0 xB9 0 x79 0 xBB 0 x7B 0 x7A 0 xBA 0 xBE 0 x7E 0 x7F 0 xBF 0 x7D 0 xBD 0 xBC 0 x7C 0 xB4 0 x74 0 x75 0 xB5 0 x77 0 xB7 0 xB6 0 x76 0 x72 0 xB2 0 xB3 0 x73 0 xB1 0 x71 0 x70 0 xB0 0 x50 0 x90 0 x91 0 x51 0 x93 0 x53 0 x52 0 x92 0 x96 0 x56 0 x57 0 x97 0 x55 0 x95 0 x94 0 x54 0 x9C 0 x5C 0 x5D 0 x9D 0 x5F 0 x9F 0 x9E 0 x5E 0 x5A 0 x9A 0 x9B 0 x5B 0 x99 0 x59 0 x58 0 x98 0 x88 0 x48 0 x49 0 x89 0 x4B 0 x8B 0 x8A 0 x4A 0 x4E 0 x8E 0 x8F 0 x4F 0 x8D 0 x4D 0 x4C 0 x8C 0 x44 0 x84 0 x85 0 x45 0 x87 0 x47 0 x46 0 x86 0 x82 0 x42 0 x43 0 x83 0 x41 0 x81 0 x80 0 x40 RS 232 RS 422 與 RS 485 標準及應用 一 RS 232 RS 422 與 RS 485 的由來 RS 232 RS 422 與 RS 485 都是串行數(shù)據(jù)接口標準 最初都是由電子工業(yè)協(xié)會 EIA 制訂并發(fā)布的 RS 232 在 1962 年發(fā)布 命名為 EIA 232 E 作為工業(yè)標準 以保 證不同廠家產(chǎn)品之間的兼容 RS 422 由 RS 232 發(fā)展而來 它是為彌補 RS 232 之不足而提 出的 為改進 RS 232 通信距離短 速率低的缺點 RS 422 定義了一種平衡通信接口 將 傳輸速率提高到 10Mb s 傳輸距離延長到 4000 英尺 速率低于 100kb s 時 并允許在一 條平衡總線上連接最多 10 個接收器 RS 422 是一種單機發(fā)送 多機接收的單向 平衡傳 輸規(guī)范 被命名為 TIA EIA 422 A 標準 為擴展應用范圍 EIA 又于 1983 年在 RS 422 基 礎上制定了 RS 485 標準 增加了多點 雙向通信能力 即允許多個發(fā)送器連接到同一條 總線上 同時增加了發(fā)送器的驅動能力和沖突保護特性 擴展了總線共模范圍 后命名為 TIA EIA 485 A 標準 由于 EIA 提出的建議標準都是以 RS 作為前綴 所以在通訊工業(yè)領 域 仍然習慣將上述標準以 RS 作前綴稱謂 RS 232 RS 422 與 RS 485 標準只對接口的電氣特性做出規(guī)定 而不涉及接插件 電纜或協(xié)議 在此基礎上用戶可以建立自己的高層通信協(xié)議 因此在視頻界的應用 許多 廠家都建立了一套高層通信協(xié)議 或公開或廠家獨家使用 如錄像機廠家中的 Sony 與松 下對錄像機的 RS 422 控制協(xié)議是有差異的 視頻服務器上的控制協(xié)議則更多了 如 Louth Odetis 協(xié)議是公開的 而 ProLINK 則是基于 Profile 上的 二 RS 232 串行接口標準 目前 RS 232 是 PC 機與通信工業(yè)中應用最廣泛的一種串行接口 RS 232 被定義為一 種在低速率串行通訊中增加通訊距離的單端標準 RS 232 采取不平衡傳輸方式 即所謂單 端通訊 圖 1 收 發(fā)端的數(shù)據(jù)信號是相對于信號地 如從 DTE 設備發(fā)出的數(shù)據(jù)在使用 DB25 連接 器時是 2 腳相對 7 腳 信號地 的電平 DB25 各引腳定義參見圖 1 典型的 RS 232 信號 在正負電平之間擺動 在發(fā)送數(shù)據(jù)時 發(fā)送端驅動器輸出正電平在 5 15V 負電平在 5 15V 電平 當無數(shù)據(jù)傳輸時 線上為 TTL 從開始傳送數(shù)據(jù)到結束 線上電平從 TTL 電平到 RS 232 電平再返回 TTL 電平 接收器典型的工作電平在 3 12V 與 3 12V 由 于發(fā)送電平與接收電平的差僅為 2V 至 3V 左右 所以其共模抑制能力差 再加上雙絞線上 的分布電容 其傳送距離最大為約 15 米 最高速率為 20kb s RS 232 是為點對點 即只 用一對收 發(fā)設備 通訊而設計的 其驅動器負載為 3 7k 所以 RS 232 適合本地設備 之間的通信 其有關電氣參數(shù)參見表 1 規(guī)定 RS232 RS422 R485 工作方式 單端 差分 差分 節(jié)點數(shù) 1 收 1 發(fā) 1 發(fā) 10 收 1 發(fā) 32 收 最大傳輸電纜長度 50 英尺 400 英尺 400 英尺 最大傳輸速率 20Kb S 10Mb s 10Mb s 最大驅動輸出電壓 25V 0 25V 6V 7V 12V 驅動器輸出信號電平 負載最小值 負載 5V 15V 2 0V 1 5V 驅動器輸出信號電平 空載最大值 空載 25V 6V 6V 驅動器負載阻抗 3K 7K 100 54 擺率 最大值 30V s N A N A 接收器輸入電壓范圍 15V 10V 10V 7V 12V 接收器輸入門限 3V 200mV 200mV 接收器輸入電阻 3K 7K 4K 最小 12K 驅動器共模電壓 3V 3V 1V 3V 接收器共模電壓 7V 7V 7V 12V 表 1 三 RS 422 與 RS 485 串行接口標準 1 平衡傳輸 RS 422 RS 485 與 RS 232 不一樣 數(shù)據(jù)信號采用差分傳輸方式 也稱作平衡傳輸 它使用一對雙絞線 將其中一線定義為 A 另一線定義為 B 如圖 2 圖 2 通常情況下 發(fā)送驅動器 A B 之間的正電平在 2 6V 是一個邏輯狀態(tài) 負電平 在 2 6V 是另一個邏輯狀態(tài) 另有一個信號地 C 在 RS 485 中還有一 使能 端 而在 RS 422 中這是可用可不用的 使能 端是用于控制發(fā)送驅動器與傳輸線的切斷與連接 當 使能 端起作用時 發(fā)送驅動器處于高阻狀態(tài) 稱作 第三態(tài) 即它是有別于邏輯 1 與 0 的第三態(tài) 接收器也作與發(fā)送端相對的規(guī)定 收 發(fā)端通過平衡雙絞線將 AA 與 BB 對應相連 當在收端 AB 之間有大于 200mV 的電平時 輸出正邏輯電平 小于 200mV 時 輸出負邏 輯電平 接收器接收平衡線上的電平范圍通常在 200mV 至 6V 之間 參見圖 3 圖 3 2 RS 422 電氣規(guī)定 RS 422 標準全稱是 平衡電壓數(shù)字接口電路的電氣特性 它定義了接口電路的特性 圖 5 是典型的 RS 422 四線接口 實際上還有一根信號地線 共 5 根線 圖 4 是其 DB9 連 接器引腳定義 由于接收器采用高輸入阻抗和發(fā)送驅動器比 RS232 更強的驅動能力 故允 許在相同傳輸線上連接多個接收節(jié)點 最多可接 10 個節(jié)點 即一個主設備 Master 其 余為從設備 Salve 從設備之間不能通信 所以 RS 422 支持點對多的雙向通信 接收 器輸入阻抗為 4k 故發(fā)端最大負載能力是 10 4k 100 終接電阻 RS 422 四線接口由 于采用單獨的發(fā)送和接收通道 因此不必控制數(shù)據(jù)方向 各裝置之間任何必須的信號交換 均可以按軟件方式 XON XOFF 握手 或硬件方式 一對單獨的雙絞線 圖 4 圖 5 RS 422 的最大傳輸距離為 4000 英尺 約 1219 米 最大傳輸速率為 10Mb s 其平 衡雙絞線的長度與傳輸速率成反比 在 100kb s 速率以下 才可能達到最大傳輸距離 只 有在很短的距離下才能獲得最高速率傳輸 一般 100 米長的雙絞線上所能獲得的最大傳輸 速率僅為 1Mb s RS 422 需要一終接電阻 要求其阻值約等于傳輸電纜的特性阻抗 在矩距離傳輸時 可不需終接電阻 即一般在 300 米以下不需終接電阻 終接電阻接在傳輸電纜的最遠端 RS 422 有關電氣參數(shù)見表 1 3 RS 485 電氣規(guī)定 由于 RS 485 是從 RS 422 基礎上發(fā)展而來的 所以 RS 485 許多電氣規(guī)定與 RS 422 相仿 如都采用平衡傳輸方式 都需要在傳輸線上接終接電阻等 RS 485 可以采用二線與 四線方式 二線制可實現(xiàn)真正的多點雙向通信 參見圖 6 而采用四線連接時 與 RS 422 一樣只能實現(xiàn)點對多的通信 即只能有一個主 Master 設備 其余為從設備 但它比 RS 422 有改進 無論四線還是二線連接方式總 線上可多接到 32 個設備 參見圖 7 圖 6 圖 7 RS 485 與 RS 422 的不同還在于其共模輸出電壓是不同的 RS 485 是 7V 至 12V 之 間 而 RS 422 在 7V 至 7V 之間 RS 485 接收器最小輸入阻抗為 12k 劍 鳵 S 422 是 4k 健 舊峽梢運礡 S 485 滿足所有 RS 422 的規(guī)范 所以 RS 485 的驅動器可以用在 RS 422 網(wǎng)絡中應用 RS 485 有關電氣規(guī)定參見表 1 RS 485 與 RS 422 一樣 其最大傳輸距離約為 1219 米 最大傳輸速率為 10Mb s 平 衡雙絞線的長度與傳輸速率成反比 在 100kb s 速率以下 才可能使用規(guī)定最長的電纜長 度 只有在很短的距離下才能獲得最高速率傳輸 一般 100 米長雙絞線最大傳輸速率僅為 1Mb s RS 485 需要 2 個終接電阻 其阻值要求等于傳輸電纜的特性阻抗 在矩距離傳輸時可 不需終接電阻 即一般在 300 米以下不需終接電阻 終接電阻接在傳輸總線的兩端 四 RS 422 與 RS 485 的網(wǎng)絡安裝注意要點 RS 422 可支持 10 個節(jié)點 RS 485 支持 32 個節(jié)點 因此多節(jié)點構成網(wǎng)絡 網(wǎng)絡拓撲 一般采用終端匹配的總線型結構 不支持環(huán)形或星形網(wǎng)絡 在構建網(wǎng)絡時 應注意如下幾 點 1 采用一條雙絞線電纜作總線 將各個節(jié)點串接起來 從總線到每個節(jié)點的引出線 長度應盡量短 以便使引出線中的反射信號對總線信號的影響最低 圖 8 所示為實際應用 中常見的一些錯誤連接方式 a c e 和正確的連接方式 b d f a c e 這三種網(wǎng) 絡連接盡管不正確 在短距離 低速率仍可能正常工作 但隨著通信距離的延長或通信速 率的提高 其不良影響會越來越嚴重 主要原因是信號在各支路末端反射后與原信號疊加 會造成信號質量下降 2 應注意總線特性阻抗的連續(xù)性 在阻抗不連續(xù)點就會發(fā)生信號的反射 下列幾種 情況易產(chǎn)生這種不連續(xù)性 總線的不同區(qū)段采用了不同電纜 或某一段總線上有過多收發(fā) 器緊靠在一起安裝 再者是過長的分支線引出到總線 總之 應該提供一條單一 連續(xù)的信號通道作為總線 圖 8 五 RS 422 與 RS 485 傳輸線上匹配的一些說明 對 RS 422 與 RS 485 總線網(wǎng)絡一般要使用終接電阻進行匹配 但在短距離與低速率 下可以不用考慮終端匹配 那么在什么情況下不用考慮匹配呢 理論上 在每個接收數(shù)據(jù) 信號的中點進行采樣時 只要反射信號在開始采樣時衰減到足夠低就可以不考慮匹配 但 這在實際上難以掌握 美國 MAXIM 公司有篇文章提到一條經(jīng)驗性的原則可以用來判斷在 什么樣的數(shù)據(jù)速率和電纜長度時需要進行匹配 當信號的轉換時間 上升或下降時間 超 過電信號沿總線單向傳輸所需時間的 3 倍以上時就可以不加匹配 例如具有限斜率特性的 RS 485 接口 MAX483 輸出信號的上升或下降時間最小為 250ns 典型雙絞線上的信號傳輸 速率約為 0 2m ns 24AWG PVC 電纜 那么只要數(shù)據(jù)速率在 250kb s 以內 電纜長度不 超過 16 米 采用 MAX483 作為 RS 485 接口時就可以不加終端匹配 一般終端匹配采用終接電阻方法 前文已有提及 RS 422 在總線電纜的遠端并接電 阻 RS 485 則應在總線電纜的開始和末端都需并接終接電阻 終接電阻一般在 RS 422 網(wǎng) 絡中取 100 在 RS 485 網(wǎng)絡中取 120 相當于電纜特性阻抗的電阻 因為大多數(shù)雙絞線 電纜特性阻抗大約在 100 120 這種匹配方法簡單有效 但有一個缺點 匹配電阻要消 耗較大功率 對于功耗限制比較嚴格的系統(tǒng)不太適合 另外一種比較省電的匹配方式是 RC 匹配 如圖 9 利用一只電容 C 隔斷直流成分可 以節(jié)省大部分功率 但電容 C 的取值是個難點 需要在功耗和匹配質量間進行折衷 還有一種采用二極管的匹配方法 如圖 10 這種方案雖未實現(xiàn)真正的 匹配 但它 利用二極管的鉗位作用能迅速削弱反射信號 達到改善信號質量的目的 節(jié)能效果顯著 圖 9 圖 10 六 RS 422 與 RS 485 的接地問題 電子系統(tǒng)接地是很重要的 但常常被忽視 接地處理不當往往會導致電子系統(tǒng)不能 穩(wěn)定工作甚至危及系統(tǒng)安全 RS 422 與 RS 485 傳輸網(wǎng)絡的接地同樣也是很重要的 因為 接地系統(tǒng)不合理會影響整個網(wǎng)絡的穩(wěn)定性 尤其是在工作環(huán)境比較惡劣和傳輸距離較遠的 情況下 對于接地的要求更為嚴格 否則接口損壞率較高 很多情況下 連接 RS 422 RS 485 通信鏈路時只是簡單地用一對雙絞線將各個接口的 A B 端連接起來 而 忽略了信號地的連接 這種連接方法在許多場合是能正常工作的 但卻埋下了很大的隱患 這有下面二個原因 1 共模干擾問題 正如前文已述 RS 422 與 RS 485 接口均采用差分方式傳輸信號方 式 并不需要相對于某個參照點來檢測信號 系統(tǒng)只需檢測兩線之間的電位差就可以了 但人們往往忽視了收發(fā)器有一定的共模電壓范圍 如 RS 422 共模電壓范圍為 7 7V 而 RS 485 收發(fā)器共模電壓范圍為 7 12V 只有滿足上述條件 整個網(wǎng)絡才能正常工作 當 網(wǎng)絡線路中共模電壓超出此范圍時就會影響通信的穩(wěn)定可靠 甚至損壞接口 以圖 11 為例 當發(fā)送驅動器 A 向接收器 B 發(fā)送數(shù)據(jù)時 發(fā)送驅動器 A 的輸出共模電壓為 VOS 由于兩 個系統(tǒng)具有各自獨立的接地系統(tǒng) 存在著地電位差 VGPD 那么 接收器輸入端的共模電 壓 VCM 就會達到 VCM VOS VGPD RS 422 與 RS 485 標準均規(guī)定 VOS 3V 但 VGPD 可能會有很大幅度 十幾伏甚至數(shù)十伏 并可能伴有強干擾信號 致使接收器共模輸入 VCM 超出正常范圍 并在傳輸線路上產(chǎn)生干擾電流 輕則影響正常通信 重則損壞通信接 口電路 圖 11 2 EMI 問題 發(fā)送驅動器輸出信號中的共模部分需要一個返回通路 如沒有一 個低阻的返回通道 信號地 就會以輻射的形式返回源端 整個總線就會像一個巨大的 天線向外輻射電磁波 由于上述原因 RS 422 RS 485 盡管采用差分平衡傳輸方式 但對整個 RS 422 或 RS 485 網(wǎng)絡 必須有一條低阻的信號地 一條低阻的信號地將兩個接口的工作地連接起來 使共模干擾電壓 VGPD 被短路 這條信號地可以是額外的一條線 非屏蔽雙絞線 或者 是屏蔽雙絞線的屏蔽層 這是最通常的接地方法 值得注意的是 這種做法僅對高阻型共模干擾有效 由于干擾源內阻大 短接后不 會形成很大的接地環(huán)路電流 對于通信不會有很大影響 當共模干擾源內阻較低時 會在 接地線上形成較大的環(huán)路電流 影響正常通信 筆者認為 可以采取以下三種措施 1 如果干擾源內阻不是非常小 可以在接地線上加限流電阻以限制干擾電流 接地電阻的增加可能會使共模電壓升高 但只要控制在適當?shù)姆秶鷥染筒粫绊懻Mㄐ?2 采用浮地技術 隔斷接地環(huán)路 這是較常用也是十分有效的一種方法 當共 模干擾內阻很小時上述方法已不能奏效 此時可以考慮將引入干擾的節(jié)點 例如處于惡劣 的工作環(huán)境的現(xiàn)場設備 浮置起來 也就是系統(tǒng)的電路地與機殼或大地隔離 這樣就隔 斷了接地環(huán)路 不會形成很大的環(huán)路電流 3 采用隔離接口 有些情況下 出于安全或其它方面的考慮 電路地必須與機 殼或大地相連 不能懸浮 這時可以采用隔離接口來隔斷接地回路 但是仍然應該有一條 地線將隔離側的公共端與其它接口的工作地相連 參見圖 12 圖 12 七 RS 422 與 RS 485 的網(wǎng)絡失效保護 RS 422 與 RS 485 標準都規(guī)定了接收器門限為 200mV 這樣規(guī)定能夠提供比較高的 噪聲抑制能力 如前文所述 當接收器 A 電平比 B 電平高 200mV 以上時 輸出為正邏輯 反之 則輸出為負邏輯 但由于第三態(tài)的存在 即在主機在發(fā)端發(fā)完一個信息數(shù)據(jù)后 將 總線置于第三態(tài) 即總線空閑時沒有任何信號驅動總線 使 AB 之間的電壓在 200 200mV 直至趨于 0V 這帶來了一個問題 接收器輸出狀態(tài)不確定 如果接收機的 輸出為 0V 網(wǎng)絡中從機將把其解釋為一個新的啟動位 并試圖讀取后續(xù)字節(jié) 由于永遠不 會有停止位 產(chǎn)生一個幀錯誤結果 不再有設備請求總線 網(wǎng)絡陷于癱瘓狀態(tài) 除上述所 述的總線空閑會造成兩線電壓差低于 200mV 的情況外 開路或短路時也會出現(xiàn)這種情況 故應采取一定的措施避免接收器處于不確定狀態(tài) 圖 13 通常是在總線上加偏置 當總線空閑或開路時 利用偏置電阻將總線偏置在一個確 定的狀態(tài) 差分電壓 200mV 如圖 13 將 A 上拉到地 B 下拉到 5V 電阻的典型值 是 1k 具體數(shù)值隨電纜的電容變化而變化 上述方法是比較經(jīng)典的方法 但它仍然不能解決總線短路時的問題 有些廠家將接 收門限移到 200mV 50mV 可解決這個問題 例如 Maxim 公司的 MAX3080 系列 RS 485 接口 不僅省去了外部偏置電阻 而且解決了總線短路情況下的失效保護問題 八 RS 422 與 RS 485 的瞬態(tài)保護 前文提到的信號接地措施 只對低頻率的共模干擾有保護作用 對于頻率很高的瞬 態(tài)干擾就無能為力了 由于傳輸線對高頻信號而言就是相當于電感 因此對于高頻瞬態(tài)干 擾 接地線實際等同于開路 這樣的瞬態(tài)干擾雖然持續(xù)時間短暫 但可能會有成百上千伏 的電壓 實際應用環(huán)境下還是存在高頻瞬態(tài)干擾的可能 一般在切換大功率感性負載如電機 變壓器 繼電器等或閃電過程中都會產(chǎn)生幅度很高的瞬態(tài)干擾 如果不加以適當防護就會 損壞 RS 422 或 RS 485 通信接口 對于這種瞬態(tài)干擾可以采用隔離或旁路的方法加以防護 1 隔離保護方法 這種方案實際上將瞬態(tài)高壓轉移到隔離接口中的電隔離層上 由 于隔離層的高絕緣電阻 不會產(chǎn)生損害性的浪涌電流 起到保護接口的作用 通常采用高 頻變壓器 光耦等元件實現(xiàn)接口的電氣隔離 已有器件廠商將所有這些元件集成在一片 IC 中 使用起來非常簡便 如 Maxim 公司的 MAX1480 MAX1490 隔離電壓可達 2500V 這種方案的優(yōu)點是可以承受高電壓 持續(xù)時間較長的瞬態(tài)干擾 實現(xiàn)起來也比較容易 缺 點是成本較高 2 旁路保護方法 這種方案利用瞬態(tài)抑制元件 如 TVS MOV 氣體放電管等 將危害性的瞬態(tài)能量旁路到大地 優(yōu)點是成本較低 缺點是保護能力有限 只能保護一定 能量以內的瞬態(tài)干擾 持續(xù)時間不能很長 而且需要有一條良好的連接大地的通道 實現(xiàn) 起來比較困難 實際應用中是將上述兩種方案結合起來靈活加以運用 如圖 14 在這種方 法中 隔離接口對大幅度瞬態(tài)干擾進行隔離 旁路元件則保護隔離接口不被過高的瞬態(tài)電 壓擊穿 MODBUS 通訊協(xié)議及編程 ModBus 通訊協(xié)議分為 RTU 協(xié)議和 ASCII 協(xié)議 我公司的多種儀表都采用 ModBus RTU 通訊協(xié)議 如 CH2000 智能電力監(jiān)測儀 CH2000M 電力參數(shù)采集模塊 巡檢表 數(shù) 顯表 光柱數(shù)顯表等 下面就 ModBus RTU 協(xié)議簡要介紹如下 一 通訊協(xié)議 一 通訊傳送方式 通訊傳送分為獨立的信息頭 和發(fā)送的編碼數(shù)據(jù) 以下的通訊傳送方式定義也與 MODBUS RTU 通訊規(guī)約相兼容 編 碼 8 位二進制 起始位 1 位 數(shù)據(jù)位 8 位 奇偶校驗位 1 位 偶校驗位 停止位 1 位 錯誤校檢 CRC 冗余循環(huán)碼 初始結構 4 字節(jié)的時間 地址碼 1 字節(jié) 功能碼 1 字節(jié) 數(shù)據(jù)區(qū) N 字節(jié) 錯誤校檢 16 位 CRC 碼 結束結構 4 字節(jié)的時間 地址碼 地址碼為通訊傳送的第一個字節(jié) 這個字節(jié)表明由用戶設定地址碼的從機將 接收由主機發(fā)送來的信息 并且每個從機都有具有唯一的地址碼 并且響應回送均以各自 的地址碼開始 主機發(fā)送的地址碼表明將發(fā)送到的從機地址 而從機發(fā)送的地址碼表明回 送的從機地址 功能碼 通訊傳送的第二個字節(jié) ModBus 通訊規(guī)約定義功能號為 1 到 127 本儀表只 利用其中的一部分功能碼 作為主機請求發(fā)送 通過功能碼告訴從機執(zhí)行什么動作 作為 從機響應 從機發(fā)送的功能碼與從主機發(fā)送來的功能碼一樣 并表明從機已響應主機進行 操作 如果從機發(fā)送的功能碼的最高位為 比如功能碼大與此同時 127 則表明從機沒有 響應操作或發(fā)送出錯 數(shù)據(jù)區(qū) 數(shù)據(jù)區(qū)是根據(jù)不同的功能碼而不同 數(shù)據(jù)區(qū)可以是實際數(shù)值 設置點 主機 發(fā)送給從機或從機發(fā)送給主機的地址 CRC 碼 二字節(jié)的錯誤檢測碼 二 通訊規(guī)約 當通訊命令發(fā)送至儀器時 符合相應地址碼的設備接通訊命令 并除去地址碼 讀取 信息 如果沒有出錯 則執(zhí)行相應的任務 然后把執(zhí)行結果返送給發(fā)送者 返送的信息中 包括地址碼 執(zhí)行動作的功能碼 執(zhí)行動作后結果的數(shù)據(jù)以及錯誤校驗碼 如果出錯就不 發(fā)送任何信息 1 信息幀結構 地址碼 功能碼 數(shù)據(jù)區(qū) 錯誤校驗碼 8 位 8 位 N 8 位 16 位 地址碼 地址碼是信息幀的第一字節(jié) 8 位 從 0 到 255 這個字節(jié)表明由用戶設置地 址的從機將接收由主機發(fā)送來的信息 每個從機都必須有唯一的地址碼 并且只有符合地 址碼的從機才能響應回送 當從機回送信息時 相當?shù)牡刂反a表明該信息來自于何處 功能碼 主機發(fā)送的功能碼告訴從機執(zhí)行什么任務 表 1 1 列出的功能碼都有具體的 含義及操作 代碼 含義 操作 03 讀取數(shù)據(jù) 讀取當前寄存器內一個或多個二進制值 06 重置單一寄存器 把設置的二進制值寫入單一寄存器 數(shù)據(jù)區(qū) 數(shù)據(jù)區(qū)包含需要從機執(zhí)行什么動作或由從機采集的返送信息 這些信息可以 是數(shù)值 參考地址等等 例如 功能碼告訴從機讀取寄存器的值 則數(shù)據(jù)區(qū)必需包含要讀 取寄存器的起始地址及讀取長度 對于不同的從機 地址和數(shù)據(jù)信息都不相同 錯誤校驗碼 主機或從機可用校驗碼進行判別接收信息是否出錯 有時 由于電子噪 聲或其它一些干擾 信息在傳輸過程中會發(fā)生細微的變化 錯誤校驗碼保證了主機或從機 對在傳送過程中出錯的信息不起作用 這樣增加了系統(tǒng)的安全和效率 錯誤校驗采用 CRC 16 校驗方法 注 信息幀的格式都基本相同 地址碼 功能碼 數(shù)據(jù)區(qū)和錯誤校驗碼 2 錯誤校驗 冗余循環(huán)碼 CRC 包含 2 個字節(jié) 即 16 位二進制 CRC 碼由發(fā)送設備計算 放置 于發(fā)送信息的尾部 接收信息的設備再重新計算接收到信息的 CRC 碼 比較計算得到的 CRC 碼是否與接收到的相符 如果兩者不相符 則表明出錯 CRC 碼的計算方法是 先預置 16 位寄存器全為 1 再逐步把每 8 位數(shù)據(jù)信息進行處理 在進行 CRC 碼計算時只用 8 位數(shù)據(jù)位 起始位及停止位 如有奇偶校驗位的話也包括奇偶 校驗位 都不參與 CRC 碼計算 在計算 CRC 碼時 8 位數(shù)據(jù)與寄存器的數(shù)據(jù)相異或 得到的結果向低位移一字節(jié) 用 0 填補最高位 再檢查最低位 如果最低位為 1 把寄存器的內容與預置數(shù)相異或 如 果最低位為 0 不進行異或運算 這個過程一直重復 8 次 第 8 次移位后 下一個 8 位再與現(xiàn)在寄存器的內容相相異或 這個過程與以上一樣重復 8 次 當所有的數(shù)據(jù)信息處理完后 最后寄存器的內容即為 CRC 碼值 CRC 碼中的數(shù)據(jù)發(fā)送 接收時低字節(jié)在前 計算 CRC 碼的步驟為 預置 16 位寄存器為十六進制 FFFF 即全為 1 稱此寄存器為 CRC 寄存器 把第一個 8 位數(shù)據(jù)與 16 位 CRC 寄存器的低位相異或 把結果放于 CRC 寄存器 把寄存器的內容右移一位 朝低位 用 0 填補最高位 檢查最低位 如果最低位為 0 重復第 3 步 再次移位 如果最低位為 1 CRC 寄存器與多項式 A001 1010 0000 0000 0001 進行異或 重復步驟 3 和 4 直到右移 8 次 這樣整個 8 位數(shù)據(jù)全部進行了處理 重復步驟 2 到步驟 5 進行下一個 8 位數(shù)據(jù)的處理 最后得到的 CRC 寄存器即為 CRC 碼 3 功能碼 03 讀取點和返回值 儀表采用 Modbus RTU 通訊規(guī)約 利用通訊命令 可以進行讀取點 保持寄存器 或 返回值 輸入寄存器 的操作 保持和輸入寄存器都是 16 位 2 字節(jié) 值 并且高位在前 這樣用于儀表的讀取點和返回值都是 2 字節(jié) 一次最多可讀取寄存器數(shù)是 60 由于一些可 編程控制器不用功能碼 03 所以功能碼 03 被用作讀取點和返回值 從機響應的命令格式 是從機地址 功能碼 數(shù)據(jù)區(qū)及 CRC 碼 數(shù)據(jù)區(qū)中的寄存器數(shù)據(jù)都是每兩個字節(jié)高字節(jié)在 前 4 功能碼 06 單點保存 主機利用這條命令把單點數(shù)據(jù)保存到儀表的存儲器 從機也用這個功能碼向主機返送 信息 二 編程舉例 下面是一個用 VC 編寫的 ModBus RTU 通訊的例子 一 通訊口設置 DCB dcb hCom CreateFile COM1 GENERIC READ GENERIC WRITE 0 NULL OPEN EXISTING 0 NULL if hCom INVALID HANDLE VALUE MessageBox createfile error error BOOL error SetupComm hCom 1024 1024 if error MessageBox setupcomm error error GetCommState hCom if error MessageBox- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- Modbus 通信協(xié)議 教程
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學習交流,未經(jīng)上傳用戶書面授權,請勿作他用。
鏈接地址:http://m.appdesigncorp.com/p-9290230.html