如果控制中心要修改房间的SV 值,首先发出查询房间温/湿度SV 值的命令,在收到房间温/湿度SV值后,在“修改控制室SV 值”窗口中显示SV 值(或在“修改风道温度/湿度表SV 值”窗口中显示),然后发出带有参数的修改房间温度SV 值命令报文,参数的内容就是要修改的SV 值。
下位机的验收码设置成ID10 为0,ID9~ID3 为房间ID,后3 位屏蔽。当总线上有发给该房间的报文时,并根据命令进行相应的操作。如果收到的是查询命令,下位机立即将房间的温/湿度数据发送到CAN 总线上。数据报文的ID 也是该房间的ID,以表示报文中的数据是该控制室的。如果是修改房间温/湿度SV 值命令,下位机就从命令参数取出SV 值并替换旧的SV 值。
上位机控制流程编写的具体步骤:
1. 在运行策略中新建一个名为“GetRoomTHV ”的用户策略,并添加3 个脚本程序,1 个退出策略行,如图:
其中,“查询房间温/湿度值”脚本如下:
‘ 发送控制室温/湿度查询命令
Out_Extern = 0
Out_Remote = 0
Out_ID = !BitLShift(RoomID, 3) + 0 ‘ 控制室ID + 单帧(点对点)
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)
‘ 发出命令
Out_CANData = Out_CANData2
‘ 等待命令发出
!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
“计算控制室的温度”的执行条件是!BitAnd(!BitRShift(In_ID, 3), 127) = RoomID 表达式的值为非0,脚本程序如下:
Byte0 = In_Data0
Byte1 = In_Data1
Byte2 = In_Data2
Byte3 = In_Data3
!setstgy(UniteFloat)
roomtemp = float
“计算控制室的湿度”的执行条件是!BitAnd(!BitRShift(In_ID, 3), 127) = RoomID 表达式的值为非0,脚本程序如下:
Byte0 = In_Data4
Byte1 = In_Data5
Byte2 = In_Data6
Byte3 = In_Data7
!setstgy(UniteFloat)
roomhum = float
2. 在运行策略中新建名为“查询各控制室温/湿度”的循环策略,循环时间为2000ms。 添加如下图所示的策略行。