如果控制中心要修改房间的SV 值,首先发出查询房间温/湿度SV 值的命令,在收到房间温/湿度SV值后,在“修改控制室SV 值”窗口中显示SV 值(或在“修改风道温度/湿度表SV 值”窗口中显示),然后发出带有参数的修改房间温度SV 值命令报文,参数的内容就是要修改的SV 值。

下位机的验收码设置成ID10 为0,ID9~ID3 为房间ID,后3 位屏蔽。当总线上有发给该房间的报文时,并根据命令进行相应的操作。如果收到的是查询命令,下位机立即将房间的温/湿度数据发送到CAN 总线上。数据报文的ID 也是该房间的ID,以表示报文中的数据是该控制室的。如果是修改房间温/湿度SV 值命令,下位机就从命令参数取出SV 值并替换旧的SV 值。

上位机控制流程编写的具体步骤:

1. 在运行策略中新建一个名为“GetRoomTHV ”的用户策略,并添加3 个脚本程序,1 个退出策略行,如图:

通过CAN-bus总线对室内空调的温/湿度模拟系统进行控制

其中,“查询房间温/湿度值”脚本如下:

‘ 发送控制室温/湿度查询命令

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。 添加如下图所示的策略行。