新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于CAN-bus 总线的模拟空调温/湿度控制系统

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

作者:时间:2012-07-11来源:网络收藏

一、系统结构

本系统是一个室内空调温/湿度控制系统的模拟系统数据采集及控制中心通过总线定时采集各个房间的温/湿度数据,并对各个房间的温/湿度进行控制。系统的数据采集及控制中心由上位机的硬件即任一款ZLGCAN系列接口卡和PC构成,软件由组态软件MCGS和ZOPC_Server组成。控制室即下位机由DP-668实验仪和ZLGCAN系列接口卡中的PCI-9810接口卡模拟。

系统结构图
图1系统结构图

二、MCGS工程框架

本空调温/湿度控制系统需要对各个控制室及风道的温/湿度值进行监控,因此工程需要有实时显示和记录各控制室温/湿度值、修改房间温/湿度SV值、报警显示、报警显示浏览记录等功能、工程框架如下:

用户窗口:封面窗口、主控窗口、控制室窗口1~6、风道平面图、状态条、修改控制室1~6SV值、修改SV值消息窗口、风道电加热段消息窗口、修改风道温度表1~2SV值、修改风道湿度表1~2SV值、风道内三级加热报警窗口。

用户窗口
图2用户窗口

运行策略:启动策略、退出策略、循环策略、卡车运动策略、控制柜灯闪烁策略、显示控制室1~6策略、显示时间策略、主控窗口中提示块显示策略。

主菜单:用户登录、封面窗口、打开主控窗口、打开各控制室、风道平面图、修改SV值、历史记录、通信错误记录、温/湿度异常记录、退出系统

子菜单:第一~六控制室、修改一~六号房间、SV值修改风道温度、表1~2SV值、修改风道湿度表1~2SV值

系统菜单
图3系统菜单

三、主要数据对象

建立好一个空调温/湿度控制系统的MCGS工程后,实现上位机的主要任务就是建立组态工程与OPC设备的连接,实现上位机的主要任务就是建立组态工程与OPC设备的连接,并对采集到的数据进行处理和显示。在这个工程的实时数据库中,要进行显示、操作的数据对象如表1所示。由于风道的数据对象较多,为了统一管理,将风道当作两个房间节点来处理。这样,每个房间都只有1个温度值对象、1个湿度之对象、1个温度SV值对象和1个湿度SV值对象。

表1系统主要数据对象
系统主要数据对象

为了使系统具备记录数据及浏览历史数据、错误数据和异常数据的能力,在实时数据库中建立了save、ErrorSave和exception三个数据对象组。其中ErrorSave和exception的组对象成员有:RoomID1、ErrorTemp、ErrorHum、ErrorTempSV和ErrorHumSV,save的组成员对象如表1所示。在运行过程中,系统会定时保存save组对象到数据库。当通信产生错误和房间温/湿度异常时,系统会将ErrorSave和exception保存到数据库。

在此系统中的OPC设备使用的是ZOPC_Server服务器。ZOPC_Server是一个OPC服务器软件本软件,支持操作全系列的ZLGCAN系列接口卡,只要在一台PC机上插上ZLGCAN系列接口卡中的任何一种或几种,再运行本服务器软件,就可以使用任何一种支持OPC协议的客户端软件(比如组态软件:组态王KingView、昆仑通态MCGS和Intouch等)来连接到此服务器通过此服务器,来跟网络进行数据的传输。

本设计中,ZOPC_Server在数值存储模式下和字符串存储模式下提供的数据项都不能直接连接到实时数据库中的数据对象,因此必须编写脚本程序对数据进行处理。关于数据项存储模式,这里选用被推荐的字符串存储模式;但是,使用数值存储模式会更容易实现此系统。

在实时数据库添加字符型数据对象In_CANData和Out_CANData,字符数为30,将In_CANData和Out_CANData分别连接到OPC设备的输入通道和输出通道,In_CANData的读写属性为只读,Out_CANData的读写属性为只写。由于这两个数据对象是字符型的,不便于进行数据处理,所以应该先将它们转换为数值型对象。在MCGS脚本程序中,用户不能定义子程序、子函数和变量,而数据对象可以看作是脚本程序中的全局变量,在所有的程序段共用。这给编写较复杂的脚本程序带来不便。要进行类似子程序和子函数的操作,只能用先将要处理的数据放入全局变量,然后调用策略行中的脚本进行处理,最后将返回的数据放入全局变量的方法进行处理。在实时数据库加添以下数值型对象作为中间变量:

然后,在运行策略中新建一个名为StringToObject的用户策略,新增一策略行并添加以下脚本程序,用于将In_CANData转换到数值型对象:

In_Flag=!Hex2I(!mid(In_CANData,1,2))
In_Extern=!Hex2I(!mid(In_CANData,3,1))
In_Remote=!Hex2I(!mid(In_CANData,4,1))
In_ID=!Hex2I(!mid(In_CANData,5,8))
In_DataLen=!Hex2I(!mid(In_CANData,13,2))
In_Data0=!Hex2I(!mid(In_CANData,15,2))
In_Data1=!Hex2I(!mid(In_CANData,17,2))
In_Data2=!Hex2I(!mid(In_CANData,19,2))
In_Data3=!Hex2I(!mid(In_CANData,21,2))
In_Data4=!Hex2I(!mid(In_CANData,23,2))
In_Data5=!Hex2I(!mid(In_CANData,25,2))
In_Data6=!Hex2I(!mid(In_CANData,27,2))
In_Data7=!Hex2I(!mid(In_CANData,29,2))

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


上一页 1 2 3 4 下一页

评论


相关推荐

技术专区

关闭