• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      西門子CM PtP模塊Modbus RTU主站通信程序設(shè)計

      2022-07-26 13:55:52薛春陽尤麗靜陳炳秋冀衛(wèi)杰
      自動化與儀表 2022年7期
      關(guān)鍵詞:西門子調(diào)用串口

      薛春陽,尤麗靜,陳炳秋,冀衛(wèi)杰

      (北京和利時系統(tǒng)集成有限公司,北京 100176)

      Modbus RTU 作為一種開放高效的通信協(xié)議在眾多工業(yè)領(lǐng)域中的智能控制器以及智能儀表上已經(jīng)得到了廣泛的應(yīng)用,它成功解決了現(xiàn)場智能控制器以及工業(yè)儀表與PLC 之間數(shù)據(jù)交換的問題,這樣不僅節(jié)省了傳統(tǒng)的大量通信電纜,而且其數(shù)據(jù)傳輸可靠性也得到了大幅度提升[1]。隨著科技的不斷發(fā)展和進步,工業(yè)以太網(wǎng)以其低成本、高效率及一網(wǎng)到底的便捷性,正在逐步取代傳統(tǒng)工業(yè)總線,在工業(yè)自動化控制領(lǐng)域得到了迅速推廣和普及[2]。西門子ET200SP CM PtP 正是以太網(wǎng)結(jié)構(gòu)下的串口通信模塊,相比傳統(tǒng)總線結(jié)構(gòu)下的串口通信模塊,CM PtP的實現(xiàn)方法和資料還比較少,編程方法仍停留在基礎(chǔ)功能塊上,不滿足PLC 結(jié)構(gòu)化編程理念。

      本文結(jié)合城市軌道交通地鐵BAS(環(huán)境與設(shè)備監(jiān)控系統(tǒng))機電設(shè)備和西門子STEP7 編程環(huán)境特點,對西門子ET200SP 串口通信模塊CM PtP 的Modbus RTU 主站通信程序的設(shè)計開發(fā)進行重點研究,其開發(fā)后的程序組織結(jié)構(gòu)規(guī)范、清晰、簡明,通用性和可讀性強,更容易被閱讀者理解,有利于對常用功能進行標準化,將難化簡,更適合多人分工合作共同編寫的復雜項目,且易于查錯、修改和調(diào)試[3]。

      1 研究背景

      城市軌道交通BAS 是對地鐵建筑物內(nèi)的環(huán)境與空氣條件、通風、給排水、照明、乘客導向、自動扶梯及電梯、屏蔽門、防淹門等建筑設(shè)備和系統(tǒng)進行集中監(jiān)視、控制和管理的系統(tǒng),以確保設(shè)備處于安全、可靠、高效、節(jié)能的最佳運行狀態(tài)[4]。其中BAS 系統(tǒng)中有很多使用Modbus RTU 通信協(xié)議的設(shè)備,如隧道風機、空調(diào)機組、冷水機組、遠程水表、電保溫等。

      在項目實際應(yīng)用中,Modbus 通信部分相關(guān)的硬件配置如圖1所示。

      針對上述配置,Modbus 通信程序需設(shè)計為面向CM PtP 的通用程序塊,項目中每增加一個CM PtP的硬件,則在程序中增加一次對通用程序塊的調(diào)用,調(diào)用時只需修改塊的輸入?yún)?shù),而不必修改其內(nèi)部程序。

      2 設(shè)計思路

      西門子編程環(huán)境STEP7 提供了串口通信的基礎(chǔ)程序Modbus_Comm_Load 和Modbus_Master。其中Modbus_Comm 用于設(shè)置PtP 參數(shù),例如數(shù)據(jù)傳輸速率、奇偶校驗和數(shù)據(jù)流控制,Modbus_Master 用作Modbus 主站指令,與一個或更多的Modbus 從站設(shè)備進行通信。

      在西門子技術(shù)手冊《ET 200MP/ET 200SP 用于S7-300/400 分布式I/O 的PtP 通信指令》中有如下要求:①Modbus_Comm_Load 來完成將用于Modbus通信的每個通信端口的組態(tài)。必須為使用的每個端口分配唯一的Modbus_Comm_Load 背景數(shù)據(jù)塊。②對于該端口,可以使用一個或多個Modbus_Master的實例。但是,所有版本的Modbus_Master 都必須為該端口使用相同的背景數(shù)據(jù)塊。鑒于西門子手冊的要求,每個PtP 不允許使用多個Modbus_Comm_Load以及不能在同一時間調(diào)用多個Modbus_Master,故在程序中設(shè)計一個功能塊FB(Sub_ModbusRTU),該FB 以Modbus_Comm_Load 和Modbus_Master 為基礎(chǔ),能夠完成一次完整的發(fā)送查詢信息和接收響應(yīng)信息的過程,并且通過修改該FB 的輸入?yún)?shù)和觸發(fā)條件能夠完成下一次的通信。

      在實際應(yīng)用中,一個PtP 可以和多個對象通信,每個通信對象根據(jù)數(shù)據(jù)量的大小和數(shù)據(jù)寄存器地址的分布情況,可能需要多次通信才能讀回和寫出全部數(shù)據(jù),所以Sub_ModbusRTU 的功能是完成針對某個PtP 的全部通信過程,該過程需要調(diào)用一次或多次Modbus_Master 來實現(xiàn)??紤]到程序的通用性,Sub_ModbusRTU 應(yīng)該是一個模塊化的程序,模塊內(nèi)部的程序是固定不變的,當用于不同的PtP 時只需要修改輸入?yún)?shù)即可。

      在試驗對比梯形圖(LAD)、語句表(STL)、結(jié)構(gòu)化文本(SCL)三種編程語言之后,本文最終選擇了 結(jié)構(gòu)化文本(SCL)。結(jié)構(gòu)化文本(SCL)是用于SIMATIC S7 系列CPU 編程的類PASCAL 高級語言,特別適合復雜算法、數(shù)學函數(shù)、過程優(yōu)化、數(shù)據(jù)和配方管理等編程任務(wù)。

      3 詳細設(shè)計

      3.1 設(shè)計目標

      Sub_ModbusRTU 作為供編程者直接應(yīng)用的通用程序,設(shè)計目標如下:①該程序要設(shè)計和封裝為一個面向?qū)ο蟮淖映绦?,及每個PtP 模塊調(diào)用一次,并為其分配一個背景數(shù)據(jù)塊,當PtP 模塊改變時,僅需修改通信參數(shù)即可實現(xiàn)功能。②該程序支持Modbus 協(xié)議中的8 個常用的功能碼01,02,03,04,05,06,15,16。③由于PtP 在BAS 系統(tǒng)中作為Modbus RTU 主站使用,所以Sub_ModbusRTU 還要能夠與多個Modbus RTU 從站通信,本次設(shè)計為最多帶8 個從站。④Modbus 協(xié)議具有問答式的通信特點,其通信過程是由多個問答過程組成的,在對這些過程的調(diào)度上,Sub_ModbusRTU 還要設(shè)計靈活的觸發(fā)方式,即:事件觸發(fā),當前過程完成后,自動觸發(fā)下一個通信過程;輪詢方式,通過設(shè)置輪詢時間參數(shù),控制通信過程之間的時間間隔。

      3.2 接口參數(shù)

      Sub_ModbusRTU 程序的接口參數(shù)設(shè)計如下:

      輸入?yún)?shù):

      (1)LADDR:INT 型,在STEP7 中組態(tài)硬件時產(chǎn)生的CM PtP 模塊的地址。

      (2)InPar:ARRAY[0..7,0..5,0..6] OF INT,在程序中以InPar[k,x,y]的形式出現(xiàn),三位數(shù)組類型,其中“k”用來區(qū)分接在同一PtP 上的不同從站設(shè)備,一個PtP 模塊設(shè)計最多帶8 個不同的從站,“x”用來區(qū)分同一從站下的不同通信過程,每個從站設(shè)計最多6 個不同的通信過程,“y”包含7 個參數(shù),設(shè)置方法如下:

      InPar[k,x,0]——ModbusRTU 從站ID 號;

      InPar[k,x,1]——通訊模式選擇,該參數(shù)與西門子提供的Modbus_Master 的輸入?yún)?shù)MODE 一致;

      InPar[k,x,2]——Modbus 數(shù)據(jù)的存儲區(qū)域,標準Modbus 地址萬位上數(shù)字,例如40001,則取4設(shè)置;

      InPar[k,x,3]——Modbus 數(shù)據(jù)起始地址;

      InPar[k,x,4]——Modbus 數(shù)據(jù)長度;

      InPar[k,x,5]——目標數(shù)據(jù)所在的DB 塊編號;

      InPar[k,x,6]——目標數(shù)據(jù)所在的DB 塊內(nèi)的起始地址。

      (3)TimePoll:INT 型;每次通訊過程的輪詢時間(以100 ms 為最小單位)。TimePoll=10 時,表示每隔1000 ms 進行一次通訊;TimePoll=0 時,表示上一次通訊過程結(jié)束后觸發(fā)本次通訊。

      (4)PARITY:校驗方式,0 無校驗,1 奇校驗,2偶校驗。

      (5)DataChange:BOOL 型;此變量為True 時,執(zhí)行寫命令,否則只執(zhí)行讀命令。

      輸出參數(shù):①CommOK,BOOL 型;Modbus 從站通信狀態(tài),正常時為True,不正常時為False;②STATUS:WORD 型,錯誤代碼,該參數(shù)與西門子提供的Modbus_Master 的輸出參數(shù)STATUS 一致,在調(diào)試過程中遇到問題時可從西門子手冊中查找相關(guān)信息,判斷故障原因。

      3.3 編程要點

      Sub_ModbusRTU 程序的流程如圖2所示。

      圖2 串口通信程序設(shè)計流程Fig.2 Serial communication program design flow chart

      本程序核心思路是利用雙重循環(huán)依次完成每個從站設(shè)備的每個通信過程,外層循環(huán)以從站順序號為依據(jù),內(nèi)層循環(huán)以從站內(nèi)的通信過程順序號為依據(jù)。程序從第一個從站的第一個通信過程開始執(zhí)行,當執(zhí)行完第一個從站的最后一個通信過程后,接著執(zhí)行第二個從站的第一個通信過程,依次類推,當執(zhí)行完最后一個從站的最后一個通信過程后,重新開始第一個從站的第一個通信過程,只要程序被使能,便如此循環(huán)下去。

      具體的實現(xiàn)方法如下:

      本程序的亮點:①將RTU 從站的通信參數(shù)存儲在三維數(shù)組中,在數(shù)組的基礎(chǔ)上充分結(jié)合循環(huán)的程序結(jié)構(gòu)特點,實現(xiàn)對通信過程的組織調(diào)度。程序結(jié)構(gòu)清晰明了,同時也縮減了代碼的體積,使代碼更加優(yōu)化。②本程序在處理Modbus_Master 不同從站通信過程的時候使用了西門子ANY 指針的方法給Modbus_Master 的DATA_PTR 管腳賦值[5]。該方法可以將Modbus 數(shù)據(jù)傳送到不同設(shè)備的背景DB 塊的指定位置中,省去了數(shù)據(jù)處理的問題。③利用Modbus_Master 的輸出參數(shù)Done 和Error 以及Modbus_Comm_Load 的輸出參數(shù)Error 來判斷Modbus每從站的通信狀態(tài),并將錯誤代碼反饋輸出。④程序設(shè)置看門狗,用于程序第一次運行和模塊斷電后重新運行以及程序發(fā)生故障卡死時保障程序可靠性和穩(wěn)定性。⑤利用結(jié)構(gòu)化文本SCL 編程,可讀性以及可移植性更強,處理復雜數(shù)據(jù)更容易。

      4 實例調(diào)用

      Sub_ModbusRTU 將Modbus_Master 指令以及Modbus_Comm_Load 指令高效地整合在一起,使其直接作為通用子程序被調(diào)用,實現(xiàn)每個PtP 模塊只調(diào)用一次就可以實現(xiàn)全部功能。很適合地鐵BAS 這種通信設(shè)備數(shù)量多和種類多的大型機電項目PLC編程工作,Sub_ModbusRTU 的調(diào)用如圖3所示。

      圖3 通信程序塊Sub_ModbusRTUFig.3 Communication block Sub ModbusRTU

      每個CM PtP 模塊的Sub_ModbusRTU 輸入?yún)?shù),即InPar 的賦值直接采用在SCL 中編寫初始化功能函數(shù)FC1000(Initialize)的方式來實現(xiàn),輸入?yún)?shù)以每個CM PtP 模塊下每個Modbus 子站的每條讀寫命令為單位編寫設(shè)置,每個Modbus RTU 子站最多配置6 條讀寫命令,每條命令有7 個參數(shù)信息,分別對應(yīng)到Sub_ModbusRTU 的輸入?yún)?shù)InPar 中,編制方法簡單清晰,利于修改和調(diào)試維護,如圖4所示。

      每個CM PtP 模塊調(diào)用Sub_ModbusRTU 后集中放到FC1040(Com_Modbus_RTU)中,在地鐵車站中,一個典型的S7-400H 系統(tǒng)中會存在多個CM PtP模塊,因此在實例調(diào)用時,會把通信塊集中到一個功能塊,將程序分為功能塊調(diào)用和參數(shù)初始化設(shè)置兩部分,如圖5所示。

      5 結(jié)語

      本文的設(shè)計成果已成功應(yīng)用在深圳地鐵2 號線三期、深圳地鐵8 號線一期、成都地鐵5 號線、北京地鐵新機場線中,經(jīng)現(xiàn)場調(diào)試驗證,程序運行穩(wěn)定可靠,通信效果良好。程序Sub_ModbusRTU 是面向通信模塊硬件的通用程序,編程時可根據(jù)項目的實際需要靈活調(diào)用,其它行業(yè)的工控系統(tǒng)也可借鑒使用,具有較大的實際應(yīng)用價值。

      猜你喜歡
      西門子調(diào)用串口
      淺談AB PLC串口跟RFID傳感器的通訊應(yīng)用
      核電項目物項調(diào)用管理的應(yīng)用研究
      LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
      西門子重型燃機出海
      能源(2017年7期)2018-01-19 05:05:05
      基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
      USB接口的多串口數(shù)據(jù)并行接收方法探索
      基于藍牙串口適配器的GPS接收機與AutoCAD的實時無線通信
      地礦測繪(2015年3期)2015-12-22 06:27:26
      西門子亮相CIIF201
      基于并行控制的FPGA多串口拓展實現(xiàn)
      西門子 分布式I/O Simatic ET 200AL
      杭锦旗| 延川县| 梧州市| 客服| 潮安县| 平泉县| 陆河县| 襄城县| 永宁县| 米林县| 尤溪县| 青州市| 祥云县| 宁海县| 贵定县| 门头沟区| 滁州市| 黄平县| 保德县| 罗江县| 夹江县| 沙雅县| 木里| 青冈县| 当涂县| 光山县| 炎陵县| 隆昌县| 芷江| 辛集市| 庆城县| 疏勒县| 雷山县| 满城县| 泊头市| 喀什市| 西乌珠穆沁旗| 莲花县| 兴隆县| 喀喇| 恩平市|