如何將GRM從其他儀器儀表讀回來的字分解成位 |
有的客戶那邊的儀器儀表是個(gè)性化定制的Modbus, 有可能把寄存器第一個(gè)字的某些位作為設(shè)備的狀態(tài)位(譬如位1=運(yùn)行/停止,位2=故障),然后另外一些位作為設(shè)備的控制位(譬如位3=啟動/停止), 由于不是標(biāo)準(zhǔn)的Modbus協(xié)議,有可能沒有做位讀寫的功能碼,或者位讀寫功能碼對應(yīng)的地址不是映射到相應(yīng)的寄存器地址上, 這時(shí)候就就只能通過讀寫寄存器的功能碼先把這個(gè)字關(guān)聯(lián)到GRM變量里,然后再通過GRM模塊的內(nèi)置函數(shù)來分解位。 具體步驟如下: 先在GRM開發(fā)環(huán)境GRMDeveloper的項(xiàng)目的數(shù)據(jù)字典里新建一個(gè)變量,假設(shè)為M1, 變量類型為整數(shù), 寄存器類型選“可讀寫字6x”, I/O數(shù)據(jù)類型為UINT16, 地址假設(shè)為1。這樣GRM模塊變量M1就跟儀器儀表的寄存器第一個(gè)字對應(yīng)起來了。 接下來可以針對狀態(tài)位,可以先建立三個(gè)GRM內(nèi)部變量(I/O設(shè)備選無),分別為“運(yùn)行_停止”,“故障位”,“AlwaysOn” ;其中變量"AlwaysOn"的初始值為1,保持選勾, 短信和網(wǎng)絡(luò)讀寫都不要勾選。 然后在事件控制里新建事件控制,觸發(fā)條件為“AlwaysOn”; 表達(dá)式為真,周期性觸發(fā);觸發(fā)周期可以設(shè)為1s; 事件執(zhí)行內(nèi)容為 “運(yùn)行_停止”=Bit(M1,1), "故障位"=Bit(M1,2). 這樣就可通過監(jiān)控GRM內(nèi)部變量 “運(yùn)行_停止”和“故障位” 來監(jiān)控設(shè)備的運(yùn)行狀態(tài)和故障狀態(tài)了。
后針對啟停控制,可以再建立一個(gè)GRM內(nèi)部變量 “啟停控制”,然后新建跟上面同樣的事件控制,只是表達(dá)式改為 M1=BitSet(M1,3,"啟?刂"),就可以通過短信或網(wǎng)頁遠(yuǎn)程改變變量"啟?刂" 來控制設(shè)備的啟停了。
如有任何問題 歡迎致電13311618031彭工,13764181243姚工 |