本文章是一个项目系列文章的第五篇,如果你还不了解前面的内容,请参考
前面的文章,我们完成了温湿度和漏水传感器的安装和配置,并且在你现场实施调试的笔记本上通过监控箱中的串口服务器完成了数据获取。
接下来,我们开始对接现场的空调设备。
1 空调连接电路
机房选用的空调设备为VERTIV Liebert DME精密空调。此空调提供RS485接口的Modbus RTU或YDN23电总协议。
和之前的温湿度和漏水传感器不同,空调自己供电独立运行,所以只需要一根两芯屏蔽电缆就可以接入到我们控制箱中的串口服务器中。我们把空调直接对接上串口服务器的COM2 RS485口。打开机柜,找到控制板对应的J14-A,J14-B就是此空调的外接RS485接口。
2 空调Modbus协议资料和软件连接调试
2.1 配置接入、通道和设备
由于串口服务器COM2 RS485对应IP和端口是192.168.5.11:8002。我们只需要通过此地址配置接入即可。在配置之前,我们需要在空调的面板上查找空调出厂时的RS485通信波特率,我们可以通过面板选择并设置波特率为9600。另外,由于我们串口服务器单独使用一个独立的RS485口对接,总线上除了串口服务器作为Modbus主设备,空调地址使用缺省的1就行。
在项目管理主界面中,点击"Connectors",在菜单中选择“Tcp Client”,或者在"Tcp Client"分组上鼠标右键,选择"Add Connection",这都可以弹出一个Tcp Client接入编辑对话框,我们填写内容如下:
然后,我们在中间项目根it_room上鼠标右键,选择“New Channel” ,编辑新的通道ch2,并且选择驱动为Modbus RTU。
然后,我们点击echcom2右边的连接方框,不松开移动到ch2节点左边的连接方框,松开鼠标,建立ethcom2到ch2的关联。
接下来,我们新建空调设备。在ch2通道上鼠标右键, 选择“New Device”,填写设备Name=air,其他都可不填写:
点击air这个设备节点,右边选择[Tags]选项卡,我们就可以在里面点击"+Add Tag"按钮添加数据标签了——后续的标签数据编辑界面就不做此操作说明了,直接给你显示编辑内容。
由于空调设备比较复杂,我这边根据厂家的参数和我们的需要,选取典型的几个内部数据来使用,这些典型的标签数据涉及数据转换、支持写入控制和只读几种情况。
2.2 配置空调设备数据
这种专业的空调,内部控制很复杂,协议定义内部的数据非常多,光设备报警状态预留的数据空间就达到18个字,每个字16bit,每个bit对应一种报警状态。当然,我们不需要提取显示这么多数据。因为,这些报警参数大多数都是在复杂的工业环境下,配套外置了各种传感器才能达到的效果。而我们的机房环境非常好,只需要部分空调的运行参数即可。
2.2.1 空调运行状态
首先,我们需要通过40021这个地址判断空调是否运行,需要取这个值int16,然后通过判断转换为是否等于0的运行状态(bool)。
我们新增标签run_b,窗口如下(后续如果非特殊情况,就不展示编辑界面了):
其中:
Name=run_b Title=空调运行状态
Data type=int16 R/W=Read Only
Address=40021
Transfer=js Data type=bool
return $input==0;
可以看出,我们先取得这个地址的数据到int16,然后通过JS脚本判断是否==0,则返回bool的运行状态。
2.2.2 空调运行模式状态40023
这个数值里面的4个bit为分别对应“制冷”."加热","加湿","降湿",我们可以根据这个地址分别定义4个bool类型的标签mode_cold,mode_heating,mode_up_humidity,mode_down_humidity
其中,mode_cold编辑内容如下:
其中:
Name=mode_cold Title=模式-制冷
Data type=int16 R/W=Read Only
Address=40023
Transfer=js Data type=bool
return ($input & (1<<0)) > 0 ; //位运算
剩下mode_heating,mode_up_humidity,mode_down_humidity,分别为
Name=mode_heating Title=模式-加热
Data type=int16 R/W=Read Only
Address=40023
Transfer=js Data type=bool
return ($input & (1<<1)) > 0 ;
Name=mode_up_humidity Title=模式-加湿
Data type=int16 R/W=Read Only
Address=40023
Transfer=js Data type=bool
return ($input & (1<<2)) > 0 ;
Name=mode_down_humidity Title=模式-降湿
Data type=int16 R/W=Read Only
Address=40023
Transfer=js Data type=bool
return ($input & (1<<3)) > 0 ;
我们之所以分别定义4个bool数据标签,是为了后面使用的方便。
2.2.3 供电电压UA UB UC
空调使用三相电供电,并且支持三个相电压的监测。如下表对应的内部地址。并且Modbus返回原始值是实际值的10倍,我们需要先取int16值,然后转换除以10成float值
对应的标签编辑内容如下:
Name=ua Title=UA
Data type=int16 R/W=Read Only
Address=40024
Transfer=js Data type=float
return $input/10;
Name=ub Title=UB
Data type=int16 R/W=Read Only
Address=40025
Transfer=js Data type=float
return $input/10;
Name=uc Title=UC
Data type=int16 R/W=Read Only
Address=40026
Transfer=js Data type=float
return $input/10;
2.2.4 回风温湿度
这个空调支持多个回风温湿度,但我们机房由于简单,只有一路。所以新增一个回风温度和一个回风湿度。这个值和电压值一样,需要除10转换为浮点数:
Name=bk_temp1 Title=back templature1
Data type=int16 R/W=Read Only
Address=40031
Transfer=js Data type=float
return $input/10;
Name=bk_humidity1 Title=back humidity1
Data type=int16 R/W=Read Only
Address=40034
Transfer=js Data type=float
return $input/10;
2.2.5 开关机控制
这是一个读写数据标签,写入0x10表示开机,写入0x1F表示关机。
Name=start_stop Title=Start Stop
Data type=int16 R/W=Read/Write
Address=40101
2.2.6 远程温度设定
这也是个读写标签,但有特殊情况需要注意,因为读取的原始值除10才是我们需要的温度值,所以,反过来我们写入的温度浮点数也需要乘以10,之后才能写入到设备中。如下图,除了读取需要的transfer JS脚本,我们还需要写入时inverser JS脚本。
Name=temp_set Title=Templature Set
Data type=int16 R/W=Read Only
Address=400104
Transfer=js Data type=float
transfer js
return $input/10;
inverser JS
return $input*10;
2.3 完成之后的标签数据列表
我们机房的空调监控比较简单,监测如上的数据和控制也就够用了。
3 运行测试
先给控制箱通电,使得串口服务器启动。当然空调也需要通电。然后,你启动刚才的项目。如果一切正常,那么你会看到空调的数据都能显示正常。
此时,你可以在start_stop标签 Writer列的输入框中,写入0x10的十进制数16,然后点击右边写入小按钮,看看空调是否能启动。然后写入0x1F十进制数31,查看空调是否能停机。如果测试正常,说明我们在监控软件端已经能够远程控制空调运行和停止了。
对应标签temp_set,你也可以尝试写入温度值,然后到空调的面板进行查看是否写入成功。
至此,我们已经完成了对接空调的工作。下一篇文章我们将要对接每个监控柜的电流信号,这个稍微有点特殊:电流模块输出4-20mA信号,我们通过一个AD模块进行转换,形成Modbus输出的数字信号。