在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于CAN-bus 總線的模擬空調(diào)溫/濕度控制系統(tǒng)

            基于CAN-bus 總線的模擬空調(diào)溫/濕度控制系統(tǒng)

            作者: 時(shí)間:2012-07-11 來源:網(wǎng)絡(luò) 收藏

            在運(yùn)行策略中新建一個(gè)名為UniteFloat的用戶策略,新增一策略行并添加以下腳本程序,用于將4字節(jié)存儲(chǔ)單元Byte0Byte3轉(zhuǎn)換到數(shù)值型對(duì)象float:

            mantissa=(!BitAnd(Byte0,128)+!BitAnd(Byte1,127))*65536+_
            (Byte2*256)+Byte3+8388608
            exponent=!BitOr(!BitLShift(Byte0,1),!BitRShift(Byte1,7))-127
            float=mantissa/(!BitLShift(2,23-(exponent+1)))

            五、實(shí)現(xiàn)

            系統(tǒng)的控制中心采用定時(shí)查詢的方法,每2秒鐘對(duì)各個(gè)房間的溫度值和濕度值進(jìn)行一次查詢。查詢時(shí),組態(tài)軟件先向?qū)崟r(shí)數(shù)據(jù)庫(kù)中的數(shù)據(jù)對(duì)象Out_CANData寫入查詢房間溫/濕度命令的報(bào)文。命令報(bào)文的房間ID對(duì)應(yīng)要查詢的房間號(hào),命令I(lǐng)D為0x00000000,無命令參數(shù)。然后經(jīng)過ZOPC_Server將報(bào)文發(fā)到CAN總線上。在發(fā)送查詢命令后控制中心將等待一段時(shí)間(這一段時(shí)間要大于MCGS的最小采集周期),然后再?gòu)膶?shí)時(shí)數(shù)據(jù)庫(kù)中的數(shù)據(jù)對(duì)象In_CANData讀取數(shù)據(jù)并進(jìn)行處理和顯示。

            如果控制中心要修改房間的SV值,首先發(fā)出查詢房間溫/濕度SV值的命令,在收到房間溫/濕度SV值后,在“修改控制室SV值”窗口中顯示SV值(或在“修改風(fēng)道溫度/濕度表SV值”窗口中顯示),然后發(fā)出帶有參數(shù)的修改房間溫度SV值命令報(bào)文,參數(shù)的內(nèi)容就是要修改的SV值。

            下位機(jī)的驗(yàn)收碼設(shè)置成ID10為0,ID9~I(xiàn)D3為房間ID,后3位屏蔽。當(dāng)總線上有發(fā)給該房間的報(bào)文時(shí),并根據(jù)命令進(jìn)行相應(yīng)的操作。如果收到的是查詢命令,下位機(jī)立即將房間的溫/濕度數(shù)據(jù)發(fā)送到CAN總線上。數(shù)據(jù)報(bào)文的ID也是該房間的ID,以表示報(bào)文中的數(shù)據(jù)是該控制室的。如果是修改房間溫/濕度SV值命令,下位機(jī)就從命令參數(shù)取出SV值并替換舊的SV值。

            上位機(jī)控制流程編寫的具體步驟:

            1.在運(yùn)行策略中新建一個(gè)名為“GetRoomTHV”的用戶策略,并添加3個(gè)腳本程序,1個(gè)退出策略行,如圖:

            GetRoomTHV策略
            圖7GetRoomTHV策略

            其中,“查詢房間溫/濕度值”腳本如下:

            ‘發(fā)送控制室溫/濕度查詢命令
            Out_Extern=0
            Out_Remote=0
            Out_ID=!BitLShift(RoomID,3)+0‘控制室ID+單幀(點(diǎn)對(duì)點(diǎn))
            Out_DataLen=8
            Out_Data0=0
            Out_Data1=0
            Out_Data2=0
            Out_Data3=0
            Out_Data4=0
            Out_Data5=0
            Out_Data6=0
            Out_Data7=0
            !setstgy(ObjectToString)
            ‘發(fā)出命令
            Out_CANData=Out_CANData2
            ‘等待命令發(fā)出
            !TimerReset(1,0)
            !TimerRun(1)
            !TimerWaitFor(1,Delay)
            !TimerStop(1)
            ‘接收控制室溫/濕度
            !setstgy(StringToObject)
            roomtemp=roomhum=0
            if(In_Extern>0)or(In_Remote>0)_
            or((!BitAnd(In_ID,1024)>1024)_
            and(!BitAnd(In_ID,7)>0))then
            In_ID=0
            exit
            endif

            “計(jì)算控制室的溫度”的執(zhí)行條件是!BitAnd(!BitRShift(In_ID,3),127)=RoomID表達(dá)式的值為非0,腳本程序如下:

            Byte0=In_Data0
            Byte1=In_Data1
            Byte2=In_Data2
            Byte3=In_Data3
            !setstgy(UniteFloat)
            roomtemp=float

            “計(jì)算控制室的濕度”的執(zhí)行條件是!BitAnd(!BitRShift(In_ID,3),127)=RoomID表達(dá)式的值為非0,腳本程序如下:

            Byte0=In_Data4
            Byte1=In_Data5
            Byte2=In_Data6
            Byte3=In_Data7
            !setstgy(UniteFloat)
            roomhum=float

            2.在運(yùn)行策略中新建名為“查詢各控制室溫/濕度”的循環(huán)策略,循環(huán)時(shí)間為2000ms。添加如下圖所示的策略行。

            查詢各控制室溫/濕度策略
            圖8查詢各控制室溫/濕度策略

            “初始化”的腳本程序如下:

            RoomID=1

            “查詢1號(hào)控制室溫/濕度”的腳本程序如下:

            RoomID1=RoomID
            RoomID=RoomID+1
            if(roomtemp=0)or(roomhum=0)then
            room1st=1
            ErrorTemp=roomtemp
            ErrorHum=roomhum
            !SaveData(ErrorSave)‘記錄通信錯(cuò)誤
            exit
            endif
            room1temp=roomtemp
            room1hum=roomhum
            ifroom1temp>room1tempsvthen
            room1st=1
            ErrorTemp=room1temp
            ErrorHum=room1hum
            !SaveData(exception)‘記錄溫度異常
            exit
            else
            room1st=0
            endif

            其它策略行腳本程序與上類似。

            所有的“策略調(diào)用”均調(diào)用GetRoomTHV策略。

            3.在運(yùn)行策略中新建一個(gè)名為“GetRoomSV”的用戶策略,其他步驟同1。

            GetRoomSV策略
            圖9GetRoomSV策略

            “查詢房間溫/濕度SV值”腳本如下:

            ‘發(fā)送控制室溫/濕度SV查詢命令
            Out_Extern=0
            Out_Remote=0
            Out_ID=!BitLShift(RoomID,3)+0‘控制室ID+單幀(點(diǎn)對(duì)點(diǎn))
            Out_DataLen=8
            Out_Data0=0
            Out_Data1=0
            Out_Data2=0
            Out_Data3=1
            Out_Data4=0
            Out_Data5=0
            Out_Data6=0
            Out_Data7=0
            !setstgy(ObjectToString)
            ‘發(fā)出命令
            Out_CANData=Out_CANData2
            ‘等待命令發(fā)出
            !TimerReset(1,0)
            !TimerRun(1)
            !TimerWaitFor(1,Delay)
            !TimerStop(1)
            ‘接收控制室溫/濕度
            !setstgy(StringToObject)
            if(In_Extern>0)or(In_Remote>0)_
            or((!BitAnd(In_ID,1024)>1024)_
            and(!BitAnd(In_ID,7)>0))then
            In_ID=0
            exit
            endif
            roomtemp=roomhum=0



            評(píng)論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉