(黑龍江省電力有限公司牡丹江水力發(fā)電總廠,黑龍江 牡丹江 157006)
淺析施奈德-昆騰?系列中浮點(diǎn)數(shù)的解析與上送
劉吉強(qiáng)
(黑龍江省電力有限公司牡丹江水力發(fā)電總廠,黑龍江 牡丹江 157006)
數(shù)據(jù)的采集和上送,是自動(dòng)控制的基礎(chǔ)。自動(dòng)化領(lǐng)域百家爭(zhēng)鳴的局面導(dǎo)致數(shù)據(jù)格式的定義有很大分歧,數(shù)制轉(zhuǎn)換就成為自動(dòng)控制編程的亮點(diǎn)。本文以發(fā)電廠母線的頻率采集上送為例,簡(jiǎn)述浮點(diǎn)數(shù)到word 變量的轉(zhuǎn)換與上送方法。
浮點(diǎn)數(shù);word變量 ;數(shù)制轉(zhuǎn)換
網(wǎng)絡(luò)環(huán)境:485菊花鏈路、MODBUS PLUSH網(wǎng)絡(luò)、以太網(wǎng)絡(luò).
PLC:Schneider - quantum ? 65160 .
編程軟件:UNITY PRO 4.1
上位機(jī):南瑞NC2000系統(tǒng).
nybus Modbus-TCP讀取數(shù)據(jù)部分與本文關(guān)聯(lián)不大,限于篇幅,不作詳述。從485菊花鏈路,以Anybus Modbus-TCP作為轉(zhuǎn)換媒介用MBPMSTR方法將DM6200 中的頻率值項(xiàng)對(duì)應(yīng)的浮點(diǎn)數(shù)以兩位word 值的方式 采集到 Schneider -quantum ? 65160 中的MBP_DM6200 數(shù)組中。
限于篇幅,恕不詳述。變量定義依據(jù)IEEE 754 標(biāo)準(zhǔn),將兩個(gè)word 中的浮點(diǎn)數(shù)還原、拆分為符號(hào)部分、階碼部分、整數(shù)部分和小數(shù)部分。
WORD_TO_BIT(MBP_DM6200[1],B IT[01],BIT[02],BIT[03],BIT[04],BIT[05],BIT[ 06],BIT[07],BIT[08],BIT[09],BIT[10],BIT[11] ,BIT[12],BIT[13],BIT[14],BIT[15],BIT[16]); WORD_TO_BIT(MBP_DM6200[2],BIT[17] ,BIT[18],BIT[19],BIT[20],BIT[21],BIT[22],BI T[23],BIT[24],BIT[25],BIT[26],BIT[27],BIT[2 8],BIT[29],BIT[30],BIT[31],BIT[32]);
(*2、符號(hào)處理 *)
IF BIT[32] THEN MARK:=-1 ELSE MARK:=-1 ;
(*3、階碼運(yùn)算:反移碼運(yùn)算)
DMMOVE_biased:=BIT_TO_WORD(BIT[24],BIT[25],BIT[26],BIT[27],BIT[28] ,BIT[29],BIT[30],BIT[31],0,0,0,0,0,0,0,0); D M M O V E:= W O R D_T O_U I N T(DMMOVE_NO)-127;
(*4、實(shí)值運(yùn)算: 把23位真實(shí)值提取出來(lái),補(bǔ)位,組成雙整形真實(shí)值,這里因?yàn)橹拔覀兌贾烙袀€(gè)固定的1給省略了,因此這里要給加上去。*)
DMINFACT_LOW :=MBP_ DM6200[1];DMINFACT_HIGH:= BIT_TO_WORD (BIT[17],BIT[18 ],BIT[19],BIT[20],BIT[21],DM200_ BIT[22],BIT[23],1,0,0,0,0,0,0,0,0);DMINFACT:= WORD_AS_DINT(DMINFACT_LOW,DMINFACT_ HIGH) ;
(*整 數(shù)*) DMINTPART := SHR (DMINFACT,23 - DMMOVE );
(*小數(shù)*) DMFIRST:= SHL(DMINFACT, DMMOVE + 9) ; (*清整數(shù)*)
(*小數(shù)實(shí)值表運(yùn)算,為防止機(jī)器取舍處理,我們將其放大100000000倍 *)
DMZHISHU:=100000000; COUNT_ J:=1; FOR COUNT_J:=1 TO 24 DO DMZH ISHU:=DMZHISHU/2;DMRECOARD[COU NT_J]:=DMZHISHU; END_FOR;
(*累 加 :Σ JUDGE *2- n *)DMSMALLPART:= 0; FOR COUNT_ K:=1TO23 DO DMTHIRD := SHL(DMFIRST,1); DMSECOND:= SHR(DMFIRST,31);
DMJUDGE := DINT_TO_BOOL(DMSECOND) XOR 1; IF DMJUDGE=0 THEN
DMSMALLPART:=DMSMALLPART+ DMRECOARD[COUNT_K]; END_IF;
DMFIRST :=DMTHIRD; END_FOR;
(*變 位 處 理: 為 小 數(shù)騰位,小數(shù)做還原處理.*)DMINTPART:=DMINTPART*100*MARK DMSMALLPART:=DMSMALLPART /1000000 ;
(*合并運(yùn)算*)
圖1 硬件概述.
D M S S 1:=D M I N T P A R T +DMSMALLPART ;DMSS:=DINT_TO_ WORD(DMSS1);
(*上送*)MBP_BUF34[1]:=DMSS;
(*上位機(jī)繼續(xù)處理*)因?yàn)樗蜕先サ膚ord因?yàn)榍笆鎏幚頃r(shí)擴(kuò)大100倍,故需在顯示時(shí)降兩位,南瑞的NC2000系統(tǒng)中是通過(guò)乘以A系數(shù)的方式修正顯示值的,我們將A系數(shù)定為0.01.
該方法經(jīng)過(guò)實(shí)地測(cè)試,證明有效。該方法適用于采樣要求較高的表計(jì)的數(shù)據(jù)采集轉(zhuǎn)換,可以使采集數(shù)據(jù)損失最小化,適于工控推廣。
[1]Schneider Electric ?. Unity Pro 操作手冊(cè)[G].718.
[2]SchneiderElectric?. DM6000SeriesDigital MetersUserManual. 09/2011.66.
[3]南京瑞利自動(dòng)化有限公司.NC2000操作手冊(cè)[G].4.257.
[4] IEEE.二進(jìn)制浮點(diǎn)數(shù)算術(shù)標(biāo)準(zhǔn)(IEEE 754 )[R].1.2.1.
TP31
:A