劉繼志,白曉亮
(1.河北申科電力股份有限公司產品研發(fā)中心,保定 071000:2.河北大學,保定 071002)
MODBUS協(xié)議是Modicon公司(現(xiàn)在的施耐德電氣)于1979年發(fā)明的一種串行通信協(xié)議,最初是為解決可編程邏輯控制器(PLC)之間通信而制定的,現(xiàn)在在常用的控制器上都可以實現(xiàn)。MODBUS協(xié)議采用主從問答方式進行工作,允許一個主機與一個或者多個從機通訊,通過此協(xié)議,控制器相互之間、控制器經由網(wǎng)絡(如以太網(wǎng))和其他設備之間可以通信。不同廠商生產的控制設備通過MODBUS協(xié)議可以連成工業(yè)網(wǎng)絡,進行集中監(jiān)控。
MODBUS協(xié)議有兩種傳輸方式:ASCII和RTU。對于ASCII模式,一個字節(jié)的數(shù)據(jù),需要把高低4位分別轉換為ASCII碼傳輸;而RTU模式,是按16進制字符傳輸?shù)摹Mㄟ^比較可以看出,相對于ASCII模式,RTU模式表達同樣的信息需要的位數(shù)較少,在同樣的傳輸速率下能獲取更多的信息,可以提高通訊的效率。本文采用RTU傳輸模式,RTU模式的消息幀結構如表1所示。
表1 MODBUS幀結構
本設計采用了意法半導體的STM32系列微控制器,該控制器內核采用超低功率的ARMCortex-M3核心,具有高性能、低成本、低功耗的特點,同時集成了豐富出眾的外設系統(tǒng),具有集成度高和開發(fā)便捷的優(yōu)勢。系統(tǒng)硬件結構圖如圖1所示。
圖1 系統(tǒng)硬件結構圖
系統(tǒng)硬件包括stm32f103微控制器、485通信電路、時鐘電路、復位電路和電源電路等。stm32f103微控制器完成串口數(shù)據(jù)收發(fā)、數(shù)據(jù)幀的組包與解包、數(shù)據(jù)處理等,485通信電路部分采用了MAX483芯片,完成USART串口到485總線的轉換,通過高速光耦隔離芯片TLP2362和stm32f103微控制器的USART串口連接。
主程序首先完成外設的初始化,初始化完成后就等待串口中斷,MODBUS數(shù)據(jù)接收和發(fā)送都在串口中斷中調用相應的函數(shù)完成。初始化程序首先完成串口的初始化,包括打開串口時鐘、配置GPIO復用功能、波特率、數(shù)據(jù)位數(shù)、奇偶校驗和中斷配置等。然后進行定時器初始化,定時器的作用是完成幀結束的判斷,MODBUS規(guī)定,MODBUS每幀之間需要間隔3.5字符,串口發(fā)送的每個字節(jié)數(shù)據(jù)都包含1位起始位,8位數(shù)據(jù)位、1位奇偶校驗位、1位停止位,共11位。以波特率9600為例,就需要4毫秒多,在此用定時器定時4.5ms。最后配置MODBUS的從站號、初始化接收和發(fā)送緩沖區(qū)。
MODBUS發(fā)送數(shù)據(jù)程序響應主機的請求,通過串口中斷完成數(shù)據(jù)發(fā)送緩沖區(qū)數(shù)據(jù)的發(fā)送。MODBUS發(fā)送數(shù)據(jù)程序流程圖見圖2所示。
圖2 MODBUS發(fā)送數(shù)據(jù)程序流程圖
當串口接收數(shù)據(jù)后會觸發(fā)中斷,在中斷函數(shù)中判斷如果是接收到數(shù)據(jù)則調用MODBUS接收數(shù)據(jù)函數(shù)。MODBUS接收數(shù)據(jù)程序流程圖見圖3所示。
首先從串口緩沖區(qū)讀取接收到的字符,判斷當前是否處于消息處理中,如果處于消息處理中則直接退出,等待消息處理完成,如果沒有處于消息處理中,通過判斷和上個字符之間的間隔是否超4.5ms,確定是否為新一幀,如果是新的一幀且該字符等于本從站號,則初始化接收計數(shù)器,并把字符存放在接收緩沖區(qū)中,如果不是新的一幀,說明當前正在進行一幀的接收,則把字符直接放在接收緩沖區(qū)中。
圖3 MODBUS接收數(shù)據(jù)程序流程圖
從機在接收到主機發(fā)來的數(shù)據(jù)后,重新計算數(shù)據(jù)的CRC校驗,并和數(shù)據(jù)中的CRC進行比較,如果相等說明數(shù)據(jù)無誤,則讀取功能碼,根據(jù)不同功能碼調用相應的處理函數(shù);如果不相等說明數(shù)據(jù)有誤,調用誤差處理程序。
從機通過U轉485線和計算機相連,上位機通信測試軟件采用了MODBUSPoll,設置好串口參數(shù)即可。測試了02功能碼(輸入狀態(tài)寄存器)、04功能碼(輸入型寄存器)、05功能碼(控制寄存器)、06和16功能碼(配置參數(shù)寄存器),均能正常通信。
MODBUS廣泛應用于自動化控制行業(yè)中,已經成為工業(yè)領域通信協(xié)議的業(yè)界標準,并且現(xiàn)在是工業(yè)電子設備之間常用的連接方式。本文在STM32F103微控制器上實現(xiàn)了MODBUS的數(shù)據(jù)通信,并將其應用在低壓監(jiān)測設備中,并進行了實際測試和使用。