电子发烧友网 > 接口/总线/驱动 > 正文

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

2020年03月30日 09:38 次阅读

一、系统结构

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

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

图 1 系统结构图

二、MCGS 工程框架

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

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

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

图 2 用户窗口

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

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

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

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

图 3 系统菜单

三、主要数据对象

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

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

为了使系统具备记录数据及浏览历史数据、错误数据和异常数据的能力,在实时数据库中建立了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 等)来连接到此服务器通过此服务器,来跟CAN-bus 网络进行数据的传输。

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

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

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

然后,在运行策略中新建一个名为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 是否相同,如果不同才将报文发出。

‘ 转换 Out_SendID 到字符型

if Out_SendID 《= 255 then

Out_SendID = Out_SendID + 1

else

Out_SendID = 0

endif

Out_CANData1 = !I2Hex(Out_SendID)

if !Len(Out_CANData1) 《》 2 then Out_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)

while Lenght 《 8

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) 《》 2 then Out_CANData1 = “0” + Out_CANData1

Out_CANData2 = Out_CANData2 + Out_CANData1

‘ 转换 Out_Data0 7 到字符型

Out_CANData1 = !I2Hex(Out_Data0)

if !Len(Out_CANData1) 《》 2 then Out_CANData1 = “0” + Out_CANData1

Out_CANData2 = Out_CANData2 + Out_CANData1

Out_CANData1 = !I2Hex(Out_Data1)

if !Len(Out_CANData1) 《》 2 then Out_CANData1 = “0” + Out_CANData1

Out_CANData2 = Out_CANData2 + Out_CANData1

Out_CANData1 = !I2Hex(Out_Data2)

if !Len(Out_CANData1) 《》 2 then Out_CANData1 = “0” + Out_CANData1

Out_CANData2 = Out_CANData2 + Out_CANData1

Out_CANData1 = !I2Hex(Out_Data3)

if !Len(Out_CANData1) 《》 2 then Out_CANData1 = “0” + Out_CANData1

Out_CANData2 = Out_CANData2 + Out_CANData1

Out_CANData1 = !I2Hex(Out_Data4)

if !Len(Out_CANData1) 《》 2 then Out_CANData1 = “0” + Out_CANData1

Out_CANData2 = Out_CANData2 + Out_CANData1

Out_CANData1 = !I2Hex(Out_Data5)

if !Len(Out_CANData1) 《》 2 then Out_CANData1 = “0” + Out_CANData1

Out_CANData2 = Out_CANData2 + Out_CANData1

Out_CANData1 = !I2Hex(Out_Data6)

if !Len(Out_CANData1) 《》 2 then Out_CANData1 = “0” + Out_CANData1

Out_CANData2 = Out_CANData2 + Out_CANData1

Out_CANData1 = !I2Hex(Out_Data7)

if !Len(Out_CANData1) 《》 2 then Out_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 个字节)组成。

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

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

Address :目标地址,表示节点地址,范围只能设定为0~125

TYPE :帧类型。见下表中的帧类型说明。

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

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

DLC: 每帧字节数(1~8)

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

Data :数据

在本系统中,数据中心要对各个房间的温/湿度进行监控并修各个房间的温/湿度SV 值,因此给各个控制室分配唯一的标志符;在下位机向上位机发送的数据报文中携带的数据是房间的温/湿度值;上位机向下位机发送的命令报文携带命令号及控制室的温/湿度SV 值。本系统的传输数据量较小,且MCGS 的采样周期本系统取5ms 相对下位机来说较长,因此,本系统选择使用单帧(点对点)类型帧。利用HiLon报文的特点,将7 位Address 分配给房间ID,每一个房间ID 对应一个Address ,地址0 保留。当数据方向是从节点到主节点时,8 字节数据的前4 字节用于传递房间温度,后4 字节用于传递房间湿度,当数据方向是主节点到从节点时,8字节数据的前4 字节作为命令ID,后4 字节用于传递命令参数(房间温/湿度SV值)。报文帧的格式如图1 所示。

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

对主节点到从节点的命令ID 的定义如下:

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

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

本系统要监控的数据是各房间的温度和湿度及它们的SV 值。要将这些数据在总线上传输,必须将它们装入报文帧。为了使传输的数据只占用较小的空间而达到较高的精确度,在报文中每一种数值都分配了4 字节的空间,数据按IEEE-754 标准的float 数据类型的格式存储。这样,在下位机进行编程就比较方便。但是,上位机的处理程序是用类似VB 脚本的语言写的,数据对象的类型只有数值型、开关型和字符型三种,不能直接使用接收到的数据。因此,要对接收到的数据进行转换。

按IEEE-754 标准,一个浮点数用两个部分表示:尾数和2 的幂。例如:

尾数代表浮点上的数据二进制数。

二的幂代表指数。指数的保存形式是一个0 到255 的8 位值。指数的实际值是保存值0 到255 减去127,一个范围在127 到-128 之间的值。

尾数是一个24 位值(代表大约7 个十进制数),最高位(MSB) 通常是1, 因此,不保存。一个符号位表示浮点数是正或负。在尾数的左边有一个省略的二进制点和1。 这个数在浮点数的保存中经常省略。

浮点数保存的字节格式如下:

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

这里:

S 代表符号位,1 是负,0 是正。

E 幂,偏移127。

M 24 位的尾数(保存在23 位中)。

零是一个特定值,表示幂是0, 尾数是0。

在运行策略中新建一个名为SplitFloat 的用户策略,新增一策略行并添加以下脚本程序,用于将数值型对象float 转换到4 字节存储单元Byte0 Byte3:

‘ 计算浮点数的幂(二进制数小数点的位置)

exponent = 0

float1 = !abs(float)

while float1《》0

float1 = !BitRShift(float1, 1)

exponent = exponent + 1

endwhile

exponent = exponent - 1

‘ 计算浮点数的底数

manTIssa = !abs(float) * (!BitLShift(2, 23 - (exponent + 1))) - 8388608

exponent = exponent + 127

Byte0 = !BitRShift(exponent, 1)

if room1tempsv 《 0 then

Byte0 = !BitOr(Byte0, 128)

endif

Byte1 = !BitAnd(!BitOr(!BitRShift(manTIssa, 16), !BitLShift(exponent, 7)), 255)

Byte2 = !BitAnd(!BitRShift(mantissa, 8), 255)

Byte3 = !BitAnd(mantissa, 255)[page]

在运行策略中新建一个名为UniteFloat 的用户策略,新增一策略行并添加以下脚本程序,用于将4 字节存储单元Byte0 Byte3 转换到数值型对象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)))

五、实现

系统的控制中心采用定时查询的方法,每2 秒钟对各个房间的温度值和湿度值进行一次查询。查询时,组态软件先向实时数据库中的数据对象Out_CANData 写入查询房间温/湿度命令的报文。命令报文的房间ID 对应要查询的房间号,命令ID 为0x00000000,无命令参数。然后经过ZOPC_Server 将报文发到CAN总线上。在发送查询命令后控制中心将等待一段时间(这一段时间要大于MCGS 的最小采集周期),然后再从实时数据库中的数据对象In_CANData 读取数据并进行处理和显示。

如果控制中心要修改房间的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。 添加如下图所示的策略行。

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

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

RoomID = 1

“查询1 号控制室温/湿度”的脚本程序如下:

RoomID1 = RoomID

RoomID = RoomID + 1

if (roomtemp = 0) or (roomhum = 0) then

room1st = 1

ErrorTemp = roomtemp

ErrorHum = roomhum

!SaveData(ErrorSave) ‘ 记录通信错误

exit

endif

room1temp = roomtemp

room1hum = roomhum

if room1temp 》 room1tempsv then

room1st = 1

ErrorTemp = room1temp

ErrorHum = room1hum

!SaveData(exception) ‘ 记录温度异常

exit

else

room1st = 0

endif

其它策略行脚本程序与上类似。

所有的“策略调用”均调用GetRoomTHV 策略。

3. 在运行策略中新建一个名为“GetRoomSV” 的用户策略,其他步骤同1。

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

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

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

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 = 1

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)

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[page]

“计算控制室的温度SV” 的执行条件是!BitAnd(!BitRShift(In_ID, 3), 127) = RoomID 表达式的值为非0, 脚本程序如下:

Byte0 = In_Data0

Byte1 = In_Data1

Byte2 = In_Data2

Byte3 = In_Data3

!setstgy(UniteFloat)

roomtempsv = float

“计算控制室的湿度SV” 的执行条件是!BitAnd(!BitRShift(In_ID, 3), 127) = RoomID 表达式的值为非0, 脚本程序如下:

Byte0 = In_Data4

Byte1 = In_Data5

Byte2 = In_Data6

Byte3 = In_Data7

!setstgy(UniteFloat)

roomhumsv = float

4. 在运行策略中新建名为“查询房间1SV 值”的用户策略,添加如下图所示的3 个策略行。

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

“before” 策略行脚本程序如下:

!EnableStgy(查询各控制室温/湿度策略, 0)

RoomID = 1

“策略调用”调用GetRoomSV 策略。

“after” 策略行脚本程序如下:

room1tempsv = roomtempsv

!EnableStgy(查询各控制室温/湿度策略, 1)

5. 重复步骤4。 添加“查询房间2~6 SV 值”和“查询风道温/湿度表1~2 sv 值”策略,并由菜单“修改1~6 号房间SV 值”调用对应的策略。

6. 双击主控窗口中名为“修改一号房间SV 值”的菜单项,在菜单属性设置对话框的“菜单操作”页中添加执行运行策略块“查询房间1 SV 值”。

7. 重复步骤6, 添加其它房间的运行策略。

8. 在运行策略中建立一个名为“SetRoomTSV” 的用户策略,添加以下脚本程序:

float = roomtempsv

!setstgy(SplitFloat)

‘ 发送控制室温/湿度SV 设置命令

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 = 2

Out_Data4 = Byte0

Out_Data5 = Byte1

Out_Data6 = Byte2

Out_Data7 = Byte3

!setstgy(ObjectToString)

‘ 发出命令

Out_CANData = Out_CANData2

‘ 等待命令发出

!TimerReset(1, 0)

!TimerRun(1)

!TimerWaitFor(1, Delay)

!TimerStop(1)

9. 在运行策略中建立一个名为“调整房间1SV 值”的用户策略,并添加以下程序:

!EnableStgy(查询各控制室温/湿度策略, 0)

RoomID = 1

roomtempsv = room1tempsv

float = roomtempsv

!setstgy(SetRoomTSV)

!EnableStgy(查询各控制室温/湿度策略, 1)

10. 重复步骤9, 添加其它5 个控制室及风道的脚本程序。

11. 给“修改控制室1SV 值”窗口的“确认”按钮添加如下脚本:

if room1tempsv1《-10 or room1tempsv1》100 then

!setwindow(修改SV 值消息窗口,1)

else

room1tempsv=room1tempsv1

!setwindow(修改控制室1SV 值,3)

room1tempsv1=0

!setstgy(调整房间1SV 值)

endif

12. 重复步骤11, 添加其它窗口的脚本。

六 模拟控制室

本系统可用DP-668 实验仪模拟产生控制室数据。DP-668 实验仪具有模拟控制室温/湿度变化、自修改温/湿度SV 值以及报警等功能。其模拟温/湿度变化算法如下:

extern unsigned char code RoomID = 1; /* 房间 ID */

extern float RoomTemp = 0; /* 房间温度 */

extern float RoomHumi = 0; /* 房间湿度 */

。..

float code RoomTempTab[] = {

19.0, 19.2, 19.4, 19.6, 19.8,

20.0, 20.2, 20.4, 20.6, 20.8,

21.0, 21.2, 21.4, 21.6, 21.8,

21.8, 21.6, 21.4, 21.2, 21.0,

20.8, 20.6, 20.4, 20.2, 20.0,

19.8, 19.6, 19.4, 19.2, 19.0

};

float code RoomHumiTab[] = {

55.0, 55.5, 56.0, 56.5,

57.0, 57.5, 58.0, 58.5,

59.0, 59.5, 60.0, 60.5,

61.0, 61.5, 62.0, 62.5,

63.0, 63.5, 64.0, 64.5

};

void main(void)

unsigned int idata i, j;

。..

while (1)

/* 模拟温/湿度变化 */

RoomTemp = RoomTempTab[j % (sizeof (RoomTempTab)/sizeof(RoomTempTab[0]))];

RoomHumi = RoomHumiTab[j++ % (sizeof (RoomHumiTab)/sizeof(RoomHumiTab[0]))];

。..

本系统也可用任一款ZLGCAN 接口卡和PC 组成的系统来模拟产生控制室数据,基于ZLGCAN 通用函数接口编程,同样具有模拟控制室温/湿度变化、自修改温/湿度SV 值以及报警等功能。其模拟温/湿度变化算法(VC 示范)如下:

float m_dwTemp[8];// 房间1 6 及风道1 2 的温度

float m_dwHumi[8];// 房间1 6 及风道1 2 的湿度

。..

static double i;

i += 0.1;

m_dwTemp[0] = (float)sin(i + 0.0) + 20;

m_dwTemp[1] = (float)sin(i + 0.1) + 20;

m_dwTemp[2] = (float)sin(i + 0.2) + 20;

m_dwTemp[3] = (float)sin(i + 0.3) + 20;

m_dwTemp[4] = (float)sin(i + 0.4) + 20;

m_dwTemp[5] = (float)sin(i + 0.5) + 20;

m_dwTemp[6] = (float)sin(i + 0.6) + 20;

m_dwTemp[7] = (float)sin(i + 0.7) + 20;

m_dwHumi[0] = (float)cos(i + 0.0) + 60;

m_dwHumi[1] = (float)cos(i + 0.1) + 60;

m_dwHumi[2] = (float)cos(i + 0.2) + 60;

m_dwHumi[3] = (float)cos(i + 0.3) + 60;

m_dwHumi[4] = (float)cos(i + 0.4) + 60;

m_dwHumi[5] = (float)cos(i + 0.5) + 60;

m_dwHumi[6] = (float)cos(i + 0.6) + 60;

m_dwHumi[7] = (float)cos(i + 0.7) + 60;

。..

责任编辑:gt

下载发烧友APP

打造属于您的人脉电子圈

关注电子发烧友微信

有趣有料的资讯及技术干货

关注发烧友课堂

锁定最新课程活动及技术直播

电子发烧友观察

一线报道 · 深度观察 · 最新资讯
收藏 人收藏
分享:

评论

相关推荐

第二期:J1939通信数据链路层(上)

主题简介及亮点:J1939通信是商用车,军工,船舰 ,农机,发电机,特种设备等上面的常用通信标准,这两年在新能源车上应用
发烧友学院发表于 2019-03-07 00:00 1874次阅读
第二期:J1939通信数据链路层(上)

利用CIF50-PB总线板卡实现现场总线与现场设...

为了使用户更好的了解该产品,我们以该系列板卡中的CIF 50-PB(PROFIBUS DP主站)产品....
发表于 2020-03-30 10:41 0次阅读
利用CIF50-PB总线板卡实现现场总线与现场设...

运用CAN232B转换器实现RS232/CAN网...

由于RS232通讯距离短(根据EAT/TAI-232标准,仅为15米),而且,只能进行点到点通讯,不....
发表于 2020-03-30 09:33 21次阅读
运用CAN232B转换器实现RS232/CAN网...

利用基金会现场总线技术对唐钢煤气焦化厂控制系统进...

唐钢煤气焦化厂化产车间仪表系统参数检测和控制采用的全部是模拟仪表,有些甚至为老式的II性仪表,存在着....
发表于 2020-03-30 09:26 21次阅读
利用基金会现场总线技术对唐钢煤气焦化厂控制系统进...

空调智能控制管理系统全面解析

提供给空调终端用户使用的,仅用来对空调机组进行本地(小区范围)监控用户只需在电脑上就可知道机组的运行....
发表于 2020-03-29 17:16 44次阅读
空调智能控制管理系统全面解析

基于ARM处理器和CPLD技术实现智能移动机器人...

该系统设计的轮式移动机器人机械导航结构采用四轮差速转向式的机械机构,前面两个轮是随动轮,起支撑作用,....
发表于 2020-03-29 10:44 75次阅读
基于ARM处理器和CPLD技术实现智能移动机器人...

基于仪器总线平台和传感器技术设计航天器动力学综合...

航天器动力学环境试验综合测试系统由硬件平台和软件系统这两大部分构成。硬件平台的选择,是由所采用的测试....
发表于 2020-03-29 10:11 46次阅读
基于仪器总线平台和传感器技术设计航天器动力学综合...

防爆空调的安装说明

一、防爆空调的供电应有专用线,在专用线路中应设有断路器或空气开关。供电导线、保险丝都应符合有关规定,....
发表于 2020-03-28 15:02 7次阅读
防爆空调的安装说明

基于工业以太网、PLC和总线技术实现转炉工业控制...

马钢第三炼钢厂4#转炉工程采用了当今世界上先进的现场总线控制系统,即西门子公司的PCS7控制系统。其....
发表于 2020-03-28 10:58 74次阅读
基于工业以太网、PLC和总线技术实现转炉工业控制...

采用INTERBUS总线技术实现港口自动喷洒作业...

随着控制、计算机、通信、网络的技术的发展,信息的交换领域迅速覆盖从工厂的现场设备层到控制、管理等各个....
发表于 2020-03-28 10:52 47次阅读
采用INTERBUS总线技术实现港口自动喷洒作业...

采用现场总线和PLC器件实现板坯连铸机电气自动控...

板坯连铸机电气基础自动化控制系统是保证连铸机正常生产的关键系统,相对其它系统而言,对于系统硬件的可靠....
发表于 2020-03-28 10:41 63次阅读
采用现场总线和PLC器件实现板坯连铸机电气自动控...

基于ControlLogix结构体系的供水行业自...

此系统是珠海广昌泵站的自动化控制系统,广昌泵站是为解决珠海市及澳门咸期供水而新建的一个泵站,其日供源....
发表于 2020-03-28 10:34 66次阅读
基于ControlLogix结构体系的供水行业自...

基于ControlLogix和NetLinx总线...

大豆分离蛋白的生产工艺复杂、质量控制要求严格。我国现有的绝大部分大豆分离蛋白生产线工艺设备落后,生产....
发表于 2020-03-28 10:24 48次阅读
基于ControlLogix和NetLinx总线...

通过测试集成收发器性能实现对CAN数据总线系统的...

有了测试装置和评价标准之后,就可以进行CAN数据总线系统EMC的评价了。下面以单线CAN为例说明CA....
发表于 2020-03-28 10:13 174次阅读
通过测试集成收发器性能实现对CAN数据总线系统的...

基于西门子PROFIBUS和AS–i总线技术实现...

面对日益激烈的国际能源市场竞争,在石化企业安全事故频发的背景下,迫切要求油库提高效率、加快周转,加强....
发表于 2020-03-28 10:00 67次阅读
基于西门子PROFIBUS和AS–i总线技术实现...

存储器的选片及总线的概念

存储器的选片及总线的概念 存储器的送入每个单元的八根线是用从什么地方来的呢? 它就是从计算机上接过来....
发表于 2020-03-27 16:28 33次阅读
存储器的选片及总线的概念

美国奥法特空军将接收一套洲际弹道导弹发射控制系统...

ALCS是一种非常独特的核武器系统,如果地面的发射控制中心被摧毁,该系统为美国军方提供了一种从飞机上....
发表于 2020-03-27 10:57 38次阅读
美国奥法特空军将接收一套洲际弹道导弹发射控制系统...

采用CC-Link解决隧道掘进设备自动控制系统的...

飞机、导弹、宇宙飞船等“上天”装备对自动控制系统的要求是众所周知的,而隧道掘进设备对自动控制系统的要....
发表于 2020-03-27 10:06 71次阅读
采用CC-Link解决隧道掘进设备自动控制系统的...

软水处理系统的硬件组成、特点及PROFIBUS-...

多年来,PROFIBUS风靡全球,成功地应用于制造业、楼宇、过程控制和电站自动化,PROFIBUS产....
发表于 2020-03-27 09:52 52次阅读
软水处理系统的硬件组成、特点及PROFIBUS-...

采用现场总线技术的NETWORK-6000+控制...

NETWORK-6000+分散控制系统,其分散处理单元(DPU)T940X的CPU采用Pentium....
发表于 2020-03-27 09:29 50次阅读
采用现场总线技术的NETWORK-6000+控制...

CAN-bus总线信号传输延迟的主要原因及处理方...

在一些行业中,对实时性要求很高,例如CAN通信在轨道交通制动系统中的应用,如果CAN-bus总线通讯....
发表于 2020-03-26 15:55 221次阅读
CAN-bus总线信号传输延迟的主要原因及处理方...

互联互通一卡通

在控制系统中,所谓的“语言”被称为“协议”,是系统中的设备之间进行指令和信息传递时,采用的数据格式等....
发表于 2020-03-26 10:57 225次阅读
互联互通一卡通

基于现场总线技术对连铸机的网络结构和自动化系统进...

近年来,钢铁行业竞争日渐激烈,而企业只有不断进行技术改造,提高产品质量,降低生产成本,才能获得进一步....
发表于 2020-03-26 10:24 75次阅读
基于现场总线技术对连铸机的网络结构和自动化系统进...

格力自研“光储空调直流化关键技术研究及应用”获2...

3月25日,在2019年度广东省科技创新大会上,格力电器自主研发的“光储空调直流化关键技术研究及应用....
发表于 2020-03-26 10:14 214次阅读
格力自研“光储空调直流化关键技术研究及应用”获2...

使用WAGO总线和世纪星组态软件实现污水处理监控...

大型污水处理厂各个反应池之间距离较远,而工程师要及时了解各个环节的电机运行情况和阀门的开关情况、处理....
发表于 2020-03-26 09:58 64次阅读
使用WAGO总线和世纪星组态软件实现污水处理监控...

CC-Link现场网络实现印刷机控制系统的设计

在全面审视上述要求之后,选择什么样的电控系统和现场总线,还应该比较它们的性能价格比,以及实现通信的方....
发表于 2020-03-26 09:30 38次阅读
CC-Link现场网络实现印刷机控制系统的设计

空调扇制热需要加水吗_空调扇和空调哪个好

本文首先分析了空调扇制热是否需要加水,其次介绍了空调扇和空调的对比,最后介绍了空调扇的选购方法。
发表于 2020-03-25 14:37 42次阅读
空调扇制热需要加水吗_空调扇和空调哪个好

现场总线技术的结构、特点及在化工行业中的应用研究

随着电力行业的技术进步,化工行业自动化水平日益提高,国内各大化工厂纷纷将配电自动化系统纳入DCS(集....
发表于 2020-03-25 10:18 76次阅读
现场总线技术的结构、特点及在化工行业中的应用研究

PROFIBUS - DP总线通信原理、组成及实...

我公司600m3 高炉自动控制系统中,由槽下上料系统、高炉本体、热风、布袋四个站点组成,炉顶配有意大....
发表于 2020-03-25 10:05 69次阅读
PROFIBUS - DP总线通信原理、组成及实...

i2c总线怎么传输?

你好,我有2个pic微芯片,在一张图片中我使用了3个变量:“variable1”,“variable2”和“variable3”。我想把它们通...
发表于 2020-03-25 09:08 20次阅读
i2c总线怎么传输?

维谛技术推出SDC3智慧双循环节能空调,具有五大...

阳春三月,暖阳高照。现在,在全国上下的共同努力下,新冠肺炎疫情已经得到了有效控制,各地企业也纷纷按下....
发表于 2020-03-24 16:25 310次阅读
维谛技术推出SDC3智慧双循环节能空调,具有五大...

采用TMS320F2812总线接口通过MCP25...

CAN(Controller Area Network)即控制器局域网络总线,是德国Bosch公司在....
发表于 2020-03-24 10:53 63次阅读
采用TMS320F2812总线接口通过MCP25...

profibus-dp总线技术在工业电气自动化领...

实验证明,基于profibus-dp的zj40d钻机电传动系统能够可靠工作,各部分均能按照设计要求工....
发表于 2020-03-24 09:50 93次阅读
profibus-dp总线技术在工业电气自动化领...

采用s7-315-2dp plc处理器和总线技术...

设备控制系统网络结构参见图1。profibus-dp网络是网络集成的最底层,主要是连接现场设备,如分....
发表于 2020-03-24 09:29 43次阅读
采用s7-315-2dp plc处理器和总线技术...

PROFIBUS协议在大直缝铣边机的电气控制系统...

由我公司生产研制的大直缝铣边机是石油天然气管道制造行业中大口径直缝焊管生产线(JCOE)上的关键设备....
发表于 2020-03-24 09:21 47次阅读
PROFIBUS协议在大直缝铣边机的电气控制系统...

市场数据:空调高端竞争白热化,两大日系品牌双双挤...

3月18日,中怡康发布第11周高端空调市场数据。其中1.5万以上卡萨帝份额50.43%,三菱电机份额....
发表于 2020-03-22 11:06 185次阅读
市场数据:空调高端竞争白热化,两大日系品牌双双挤...

数据:高端家电品类继续看涨,三大品牌角逐高端市场

日前,中怡康公布2020年第11周家电行业数据显示,冰箱、洗衣机、空调、热水器等9大品类均出现不同程....
发表于 2020-03-22 10:45 196次阅读
数据:高端家电品类继续看涨,三大品牌角逐高端市场

通过单片机来设计自由摆的平板控制系统

本文采用角度传感器,运算放大器,AD转换器采集平板变化信息,通过单片机,产生脉冲信号,控制电机模块驱....
发表于 2020-03-21 15:06 370次阅读
通过单片机来设计自由摆的平板控制系统

我国发布了首个带新风功能的房间空气调节器团体标准

当下,新风空调契合刚性消费需求,已经成为最具增长力的品类。中怡康1-11周数据显示:线下空调市场新风....
发表于 2020-03-21 11:34 463次阅读
我国发布了首个带新风功能的房间空气调节器团体标准

devicenet总线技术在工业现场底层控制系统...

经过改造升级后,系统的自动化控制性能要得到很大的提高,而且系统可靠、故障率低、维护方便,能有效降低停....
发表于 2020-03-21 10:49 72次阅读
devicenet总线技术在工业现场底层控制系统...

基于Profibus-DP总线与SPC3协议芯片...

现场总线是一种应用于生产现场,在现场设备(仪表)之间、现场设备控制室内的自动控制装置(系统)之间实现....
发表于 2020-03-21 10:20 93次阅读
基于Profibus-DP总线与SPC3协议芯片...

ABB FBP总线适配器智能电机控制器中和PLC...

在诸多的总线标准中,各种总线都称是标准的,但在市场竞争不能划地为界的行业或领域,各种总线都互相渗透。....
发表于 2020-03-21 10:15 108次阅读
ABB FBP总线适配器智能电机控制器中和PLC...

基于controlnet总线技术实现冷站控制系统...

opc服务器是数据的供应方,负责为 opc客户端提供所需的数据;opc客户端是数据的使用方,opc服....
发表于 2020-03-21 09:59 86次阅读
基于controlnet总线技术实现冷站控制系统...

EMIFA总线怎么读取ad7656数据?

[tr]     我用的TL138-EVM-A3的开发板,只跑dsp核,J2接口上连接的是TL7656-A1。   &nb...
发表于 2020-03-19 11:32 110次阅读
EMIFA总线怎么读取ad7656数据?

基于RS485总线的温度监控系统有什么优点?

RS一485总线由于平衡差分传输的特性,具有抗干扰能力强,传输距离远、有较强的级连的能力。能实现多站远距离通信...
发表于 2020-03-19 07:19 79次阅读
基于RS485总线的温度监控系统有什么优点?

MCC Lin Driver 2.2从站的问题

我有一个关于MCC Lin Driver 2.2从机的问题:目标系统:PIC18F14K22(作为Lin从机)开发工具:MAPLAB...
发表于 2020-03-17 10:29 42次阅读
MCC Lin Driver 2.2从站的问题

实时协议转换系统怎么设计?

近年来,ГOCT18977、1553B和ARINC429已成为我军机载设备间、飞机与导弹间数据通信所广泛采用的总线标准。这种...
发表于 2020-03-16 06:25 87次阅读
实时协议转换系统怎么设计?

分布式控制系统的组成是什么?

由多台计算机分别控制生产过程中多个控制回路,同时又可集中获取数据、集中管理和集中控制的自动控制系统 。分布式控制...
发表于 2020-03-13 09:02 85次阅读
分布式控制系统的组成是什么?

怎么知道CAN总线模型能产生多少信号?

想知道,如果有人能告诉我,我怎么知道这个CAN总线模型能产生多少信号(量)?翻译德语一直是一项艰巨的任务,此外...
发表于 2020-03-05 10:06 65次阅读
怎么知道CAN总线模型能产生多少信号?

不同厂家的488线应用到不同设备上,能通用吗?驱动一样吗?

不同厂家的488线应用到不同设备上,能通用吗?驱动一样吗? ...
发表于 2020-03-04 10:58 267次阅读
不同厂家的488线应用到不同设备上,能通用吗?驱动一样吗?

ETA702通讯驱动模块的特点

ETA702 通讯驱动模块应用手册
发表于 2020-03-02 08:21 201次阅读
ETA702通讯驱动模块的特点

永磁同步电机常用计算公式(电机研发人员整理)

永磁同步电机常用计算公式(电机研发人员整理) ...
发表于 2020-01-09 22:49 1340次阅读
永磁同步电机常用计算公式(电机研发人员整理)