微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于CAN-bus 总线的模拟空调温/湿度控制系统

基于CAN-bus 总线的模拟空调温/湿度控制系统

时间:07-11 来源:互联网 点击:

同样,在运行策略中新建一个名为ObjectToString的用户策略,新增一策略行并添加下面的脚本程序,用于将数值型对象转换到Out_CANData。在下面的程序中,Out_SendID进行自加是因为ZOPC_Server要判断写入的Out_SendID和上一次写入的Out_SendID是否相同,如果不同才将报文发出。

‘转换Out_SendID到字符型
ifOut_SendID=255then
Out_SendID=Out_SendID+1
else
Out_SendID=0
endif
Out_CANData1=!I2Hex(Out_SendID)
if!Len(Out_CANData1)>2thenOut_CANData1="0"+Out_CANData1
Out_CANData2=Out_CANData1
‘转换Out_Extern和Out_Remote到字符型
Out_CANData1=!I2Hex(Out_Extern)+!I2Hex(Out_Remote)
Out_CANData2=Out_CANData2+Out_CANData1
‘转换Out_ID到字符型
Out_CANData1=!I2Hex(Out_ID)
Lenght=!Len(Out_CANData1)
whileLenght8
Out_CANData1="0"+Out_CANData1
Lenght=!Len(Out_CANData1)
endwhile
Out_CANData2=Out_CANData2+Out_CANData1
‘转换Out_DataLen到字符型
Out_CANData1=!I2Hex(Out_DataLen)
if!Len(Out_CANData1)>2thenOut_CANData1="0"+Out_CANData1
Out_CANData2=Out_CANData2+Out_CANData1
‘转换Out_Data07到字符型
Out_CANData1=!I2Hex(Out_Data0)
if!Len(Out_CANData1)>2thenOut_CANData1="0"+Out_CANData1
Out_CANData2=Out_CANData2+Out_CANData1
Out_CANData1=!I2Hex(Out_Data1)
if!Len(Out_CANData1)>2thenOut_CANData1="0"+Out_CANData1
Out_CANData2=Out_CANData2+Out_CANData1
Out_CANData1=!I2Hex(Out_Data2)
if!Len(Out_CANData1)>2thenOut_CANData1="0"+Out_CANData1
Out_CANData2=Out_CANData2+Out_CANData1
Out_CANData1=!I2Hex(Out_Data3)
if!Len(Out_CANData1)>2thenOut_CANData1="0"+Out_CANData1
Out_CANData2=Out_CANData2+Out_CANData1
Out_CANData1=!I2Hex(Out_Data4)
if!Len(Out_CANData1)>2thenOut_CANData1="0"+Out_CANData1
Out_CANData2=Out_CANData2+Out_CANData1
Out_CANData1=!I2Hex(Out_Data5)
if!Len(Out_CANData1)>2thenOut_CANData1="0"+Out_CANData1
Out_CANData2=Out_CANData2+Out_CANData1
Out_CANData1=!I2Hex(Out_Data6)
if!Len(Out_CANData1)>2thenOut_CANData1="0"+Out_CANData1
Out_CANData2=Out_CANData2+Out_CANData1
Out_CANData1=!I2Hex(Out_Data7)
if!Len(Out_CANData1)>2thenOut_CANData1="0"+Out_CANData1
Out_CANData2=Out_CANData2+Out_CANData1

这样,以后要将In_CANData的数据提取到In_*变量中,只需在脚本中按!setstgy(StringToObject)就可以了。而要将Out_*数据合并到Out_CANData,可先调用!setstgy(ObjectToString),然后再把Out_CANData2的值赋给Out_CANData。

四、协议及报文格式

因为MCGS不便于编写复杂的脚本程序,所以传输协议的设计以简单为原则。本系统使用HiLon协议A。HiLon协议A是一个通用的协议,基于非对称型主从式网络结构,支持广播和点对点传送命令数据,命令数据包可长达256字节,非常适合用作本系统的通信协议HiLon协议以CAN2.0A帧结构为基础。下图是帧报文格式,一个CAN2.0A标准帧由11位ID、1位RTR、4位DLC、数据区(最多8个字节)组成。


图4HiLonA报文格式

DIR:方向位。方向位决定一半的优先级而剩余的优先级,由节点地址决定低地址优先级高。当方向位为“1”时,地址域是源节点地址(从节点到主节点),优先级由地址决定;当方向位为“0”时,地址域是目标节点地址(主节点到从节点),优先级由地址决定。从节点也可使用地址滤波技术从而减少需处理的网络信息量,因而能有效节省CAN节点控制器资源,提高控制器效率。

Address:目标地址,表示节点地址,范围只能设定为0~125
TYPE:帧类型。见下表中的帧类型说明。

表2HiLon帧类型

DLC:每帧字节数(1~8)
Index:索引字节。对于单帧数据,该字节表示传输数据的第一个字节;对于多帧数据,此字节表示索引字节,即此帧数据在数据包中的位置。
Data:数据

在本系统中,数据中心要对各个房间的温/湿度进行监控并修各个房间的温/湿度SV值,因此给各个控制室分配唯一的标志符;在下位机向上位机发送的数据报文中携带的数据是房间的温/湿度值;上位机向下位机发送的命令报文携带命令号及控制室的温/湿度SV值。本系统的传输数据量较小,且MCGS的采样周期本系统取5ms相对下位机来说较长,因此,本系统选择使用单帧(点对点)类型郑利用HiLon报文的特点,将7位Address分配给房间ID,每一个房间ID对应一个A

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top