加入收藏 在線留言 聯系我們
        關注微信
        手機掃一掃 立刻聯系商家
        全國服務熱線13185520415
        公司新聞
        西門子S7-200 Smart偵聽ModbusRTU返回數據簡單測試
        發布時間: 2024-08-11 14:17 更新時間: 2024-11-22 08:00
        觀看西門子S7-200 Smart偵聽ModbusRTU返回數據簡單測試視頻

        之前看到有人提出一個問題:

        現有一套完整設備,觸摸屏+6只傳感器,屏和傳感器用RS485總線通信,采用ModbusRtu協議,但沒有屏的程序。這種情況,在不改變屏和傳感器的條件下,實現用一個PLC也能采集到6只傳感器的數據。剛好有點空,以此為引,測試一個簡單的邏輯。


        一,實現構想

        S7-200 Smart本體具有一個RS485接口,ModbusRTU的指令庫,也可以通過自由口協議進行編程。PLC的串口能發送和接收指令,如果把PLC串口接到總線上,打開端口,不發送數據,接收線路上的消息,對信息進行甄別,如果接收到來自傳感器的信息,通過消息數據串的協議格式,將有效數據提取出來。


        二,硬件和軟件的搭建

        首先,硬件上是支持的。通過雙絞線把PLC的RS485接口接到已經存在總線上就可以了,主要的工作在于軟件怎么實現。


        思路,Modbus-RTU消息幀起始和結束,是通過空閑線時間來分辨的,3.5個字符的空閑時間。假設通信格式為:起始位1,數據位8,校驗位1,停止位1,傳輸一個字符需11位,3.5個字符,總的位數等于3.5*11=38.5,在9.6k的波特率下,空閑時間約38.5/9600=4.0104167毫秒。剛好S7-200Smart有兩個定時器指令BITIM和CITIM,可以用來做毫秒級的時間間隔處理。自由口打開,接收字符,采用中斷8,即每接收一個字符就中斷一次。


        PLC上電運行時,進行一次BITIM,打開接收端口,

        1,接收到第一個字符

        2,中斷

        A,執行CITIM計算時間間隔,并重新執行BITIM記錄時間,并如果大于4秒(空閑線檢測),進入B,如果小于4毫秒,表示正在接收消息,若接收標志位1,進入C,若接收標志為0,表示信息錯誤,進入I;

        B,時間間隔大于4秒,上一步中接收的字符是第一個字符,接收標志位置1;

        C,把SMB2(接收到的字符)存放到緩沖區第一個字符,緩沖區數據個數自增1;

        D,如果數據個數=預設的數據長度,認為消息已經接收完成,判定接收完成,進入E,如果小于,表示信息沒有接收完,進入I;

        E,比較通信指令,一般Modbus-RTU讀寄存器指令為03H,如果接收到的第二個字符是03h,下一步進行CRC校驗計算,核對校驗字符;

        F,CRC校驗計算,核對校驗字符;

        G,核對成功,提取數據。否則進入H;

        H,復位接收標志位;

        I,中斷返回。

        3,回到第1步,繼續接收字符。


        三,編程測試

        測試條件根據現有條件布置,手上剛好有兩臺S7-200Smart,一臺作為Modbus-RTU服務器,使用Modbus從站指令庫。通信格式1位起始位,8位數據位,偶校驗,停止位默認1位,波特率9600,設備地址3;電腦作為客戶端,讀取服務器(從站)的數據,測試時,只讀了一個字的數據。


        1,用串口測試工具commix測試。OK


        2,用Modbus scan測試。OK


        程序:主程序


        中斷程序

        子程序 CRC校驗

        簡單測試,僅供探討,如有錯漏,請不吝指點!

        聯系方式

        • 電  話:13510737515
        • 聯系人:董海波
        • 手  機:13185520415
        • 微  信:13185520415