秦鹏珍
(山西机电职业技术学院,山西 长治 046011)
随着物联网技术的发展,物联网技术在人们的日常生活中也得到了广泛的应用,如智能家居、智能医疗、智能生产、智能环境、智能教学等[1]。山西作为能源大省、重工业基地,工业物联网的建设与完善尤显重要,而这方面的专业人才需求也非常紧迫。因此,为了能够有效适应山西工业市场人才需求,提高工业物联网建设专业技能人才的培养质量,本研究尝试设计与构建了一个符合真实应用场景的工业物联网实训项目——室内外温湿度的显示以及室内温湿度的自动控制,并将其应用到了实际的教学当中,获得了良好的教学效果。
在温湿度自动控制系统中需要准备的硬件模块如表1,主要包含温湿度传感器模块及其数据获取模块ADAM4017,负载风机、报警灯以及负载控制模块ADAM4150和继电器,此外还有电脑终端以及若干电线[2]。
本文采用的实验系统中温湿度传感器选择:室内采用新大陆型号为EL-FTW32的温湿度传感器,室外采用新大陆公司的RS-WS-DCB温湿度传感器。器件与器件之间的通信使用串口通信实现。
表1 模块的选取与模块的功能简介
考虑到新大陆有物联网仿真软件,本文功能验证方式为: 首先在新大陆物联网仿真软件进行虚拟仿真,验证通过之后再在硬件设备验证。硬件连线以及仿真电路图如图1所示。由于仿真元件没有风机,用风扇取代,补光灯用白炽灯取代。
图1 仿真电路界面
传感器型号不同,其传输波特率设置也各不相同[3],系统中采用ADAM4150控制执行元件并通过ADAM4017读取传感器数据,波特率选择9600bps,如果要通过RS485总线读取室外温湿度传感器数据,则需要将波特率选择为4800bps。
为了实现对温湿度传感器数据的读取以及对各负载的开关控制,编写代码时需要用到ADAM4150采集器各个端口的控制指令,以及ADAM4017数据读取指令,本采集系统中,ADAM4150 各通道开关命令如表2所示,ADAM4017读取传感器数据的命令为02 03 00 00 00 08 44 3F,通过对获取到的命令进行解析以及依据相关设备的量程等数据量计算得出温湿度传感器数值,若要实现对室外温度传感器的读取,则读取传感器数据命令为01 03 00 00 00 02 C4 0B。
表2 ADAM4150 各通道开关命令
本系统中在获取温湿度数据的同时将获取到的数据存储到相关数据表中,便于后续数据分析时使用。为了能够实现循环读取温湿度传感器数据,在系统中首先要实现线程代码的编写。ADAM4017类代码主要部分如下:
第一步:读取传感器数据
public void run(){
while (true){//因为数据的读取是永远进行着,所以这里循环采用条件永远为真。
SerialPortManager.sendToPort(Data.OpenPort,Data.ADAM4017Command);
SerialPortManager.addListener(Data.OpenPort, new SerialPortEventListener() {
@Override
public void serialEvent(SerialPortEvent serialPortEvent) {
switch (serialPortEvent.getEventType()) {
case SerialPortEvent.DATA_AVAILABLE:
byte[] res = SerialPortManager.readFromPort(Data.OpenPort);
String tempStr = ByteUtils.byteToHex(res[3]) + ByteUtils.byteToHex(res[4]);
double tempValue = Integer.parseInt(tempStr, 16);
}}}
第二步:依据传感器量程实现对读取到数据的转化
double temp =tempValue*70/65535-10;
String humiStr = ByteUtils.byteToHex(res[5]) + ByteUtils.byteToHex(res[6]);
double humiValue = Integer.parseInt(humiStr, 16);
double humi =humiValue*50/65535+50;
DecimalFormat df = new DecimalFormat("00.0");
第三步:将获取到的数据存储到数据表中
sql = "INSERT INTO S4017DATA (TEMP,HUMI) VALUES ("+temp+","+humi+")";
sqLiteJDBC.insert(sql);
第四步:依据获取到的实际温湿度值与临界温湿度值进行比较实现对系统的智能控制
if(temp<15){
SerialPortManager.sendToPort(Data.OpenPort,Data.DO3Open);
SerialPortManager.sendToPort(Data.OpenPort,Data.DO0Close);
}else if(temp>30){
SerialPortManager.sendToPort(Data.OpenPort,Data.DO0Open);
SerialPortManager.sendToPort(Data.OpenPort,Data.DO3Close);}
if(humi<30){
SerialPortManager.sendToPort(Data.OpenPort,Data.DO2Open);
SerialPortManager.sendToPort(Data.OpenPort,Data.DO1Close);
}else if(humi>60){
SerialPortManager.sendToPort(Data.OpenPort,Data.DO1Open);
SerialPortManager.sendToPort(Data.OpenPort,Data.DO2Close);}
室外温度传感器数据的读取和此类相近。
程序最终的执行结果如图2所示。为了便于学生理解,采用Java窗口展示为温湿度自动控制的数据。图3为本系统功能实现代码编写的总流程图。值得说明的是由于代码编写以及数据获取都采用的是新大陆仿真平台,传感器温湿度采用随机数据,仿真环境中的灯泡并不能真正实现加温的效果,风扇仿真中也得不到降温或除湿的效果。但是此虚拟仿真和真实的自动温湿度控制原理以及实现步骤是一样的,使用该代码在真实实训平台也一样能够实现对系统的智能控制,在真实的自动温湿度控制时是可以实现这个效果的。依据我们获取以及存储的温湿度数据,后期可以使用获取到的数据图、室内或者室外温湿度传感器历史变化曲线,依据此数据以及图形,相关人员就可时进行一定的数据分析,从而实现系统价值。
图2 温湿度自动控制的窗口数据
图3 代码的总流程图
基于Java的智能温湿度控制仿真实训项目作为工业物联网实训技能培训的典型案例之一,一方面可以强化学生的专业学习技能,提高专业人才培养质量;另一方面,还能为教师提供一定的科研资源,并以此为平台提高教师团队整体的科研水平和教学水平,为校企合作、产教融合的专业教学发展提供有力的保障。