基于物联网技术的远程多通道分时气体采样装置设计研究

作者: 唐慧锋

基于物联网技术的远程多通道分时气体采样装置设计研究0

摘要:该文结合远程在线多通道环境气体采样仪设计开发项目实例,论述了基于物联网技术与PLC控制技术为核心的远程多通道分时气体采样装置的设计,通过优化通道设计,利用PLC的定时器实现多个通道分时采样,无线通信模块实现无线远程控制继电器的开合来触发PLC。本装置解决了人工现场看守气体采样及有毒有害气体环境下气体采样问题。

关键词:分时采样装置;多通道采样;远程控制;PLC控制;气体采样

中图分类号:TP311      文献标识码:A

文章编号:1009-3044(2022)18-0100-03

开放科学(资源服务)标识码(OSID):

目前国内对工业生产、汽车尾气排放、燃烧物等污染源的监测主要分两类在线监测与手工监测。在线监测对于复杂成分气体分析难度较大,有时候还需要手工采样气体样品到实验室进一步分析[1]。针对手工监测我们国家也有相关的规范及标准,比如《HJ 194-2017 环境空气质量手工监测技术规范》《GB37822-2019 挥发性有机物无组织排放控制标准》,这些规范及标准中都提到使用直接采样法采集瞬时样品,1小时内等时间间隔采集3-4个样品。

等时间间隔的采样,对样品数据分析有很大的帮助。目前相关标准中是一个通道的采样装置,一个小时内采集3-4个样品,一个气体样品采样结束后,手工换上新的气体采样袋,然后定时采样,需要人工值守在旁边,直到采样结束。对于长期从事污染源采样的工作人员滞留污染源时间长对健康不利,同时工作效率不高,时间间隔误差。本文讨论基于物联网技术的远程多通道分时气体采样装置相对于传统一个通道的气体采样装置,具有安全、高效等时间间隔等优点的气体采样装置。

1 系统结构

基于物联网技术的远程多通道分时气体采样装置分为下位机与上位机,如图1:

上位机是由服务器和客户端组成,客户端与服务器建立连接后,客服端可以读取服务器相关数据,知道GPRS模块是否通电,以及用于控制PLC电源的继电器P1是否闭合,触发PLC工作的继电器P2是否闭合。下位机的GPRS无线数传通信模块开发板通电情况下,客户端通过修改服务器的相关数据,可以控制PLC电源的继电器P1是开或闭合,触发PLC工作的继电器P2开或闭合。

本文介绍的是2通道设计,大于2通道的设计可以根据本文介绍的原理扩展。

采样装置的硬件部分由PLC控制器带触摸屏一体机、GPRS无线数传通信模块开发板,继电器2个、电磁阀2个、泵1个、电池模块输出12V与24V两种电压值、真空采样箱2个、气体采样袋2个等组成。

下位机的GPRS模块通电后与服务器建立连接,将用于控制PLC电源的继电器P1是否闭合,触发PLC程序工作的继电器P2是否闭合,这两个继电器的状态信息反馈给服务器。控制PLC电源的继电器闭合,PLC通电,触发PLC程序工作的继电器P2闭合,PLC按照设置的时间序列进行工作。电源模块24V电源供给PlC,12V供给GPRS模块与泵及控制气路的电磁阀。

2 装置硬件设计

2.1 物联网通信模块

GPRS通信技术是一项基于TCP/IP协议的无线通信传输技术,GPRS具有传输速度快,按照数据流量计费,本系统只是传输几个开关量,数量量很小,按照流量计费可以使得系统流量费用非常经济[2-4]。一般GPRS模块与MCU控制器串口通信,控制器控制继电器或外设,GPRS模块与服务器建立连接。本文选用GPRS无线数传通信模块开发板 ,该开发板应用于物联网终端产品设计时,无须外挂MCU控制器,开发板带有GPIO引脚用于控制继电器,通过直接使用GPRS无线数传通信模块开发板厂家提供的SDK开发包或脚本语言,调用API函数与服务器建立连接,根据通信模块下位机收到服务器发来的指令,来设置pio.P0_4与pio.P0_5来控制状态,继而达到控制继电器P1或P2的开与合[2]。图2是pio.P0_4控制继电器P1。

2.2 负压箱设计

2.2.1 负压箱设计

负压箱采用密封性能比较好的长方体塑料箱,塑料箱带上盖,箱体侧面装两个接口,其中一个接口装上单向阀门,气源的气体可以进入负压箱体里面的气体采样袋;该接口的外部通过硅胶软管或聚四氟乙烯管延伸到气源,接口另一头在箱体内,用硅胶软管或聚四氟乙烯连接单向阀门进气端,单向阀门的出气端,通过硅胶软管或聚四氟乙烯接到气体采样袋阀门进气咀上。另一个接口是里外直通的,接口外部通过硅胶软管或聚四氟乙烯连接到采样装置的通道一或通道二;为了保护泵,可以在这个气路管中间上安装一个过滤吸附装置,比如活性炭过滤,吸附空气中水汽、颗粒物、腐蚀性气体等。

2.2.2 负压箱采样工作原理

当气体采样袋阀门打开状态下,盖上负压箱上盖,通道抽气,负压箱形成负压,为了使得箱体内压力平衡,气源的气体通过管路流到袋子里面。单向阀门作用是气源的气体一旦进入气体采样袋里面,气体样品就一直留在气体采样袋中,等待人工开箱取出气体采样袋样品气体。通过这个原理实现了气体采样袋气体样品取样。工作人员只要打开箱体上盖,关上气体采样袋上面的阀门,拔下连到气体采样袋阀门气咀的管子,然后重新换上新的气体采样袋,可以继续下次的气体样品采样。

2.3 多通道设计

2.3.1 多通道并行设计

多通道设计是实现多通道分时气体采样装置的核心装置,本系统主要是泵吸气方式来采集气体样品,2个气路分别连接到外部的负压箱,为了两个负压箱单独工作,设备里面的内部气路需要并行设计,从泵抽气管分出两个并行气路,在每个气路上设置一个电磁气阀,电磁阀的进气端与外部的负压箱相连,电磁阀的出气端与泵分出的气路相连。

2.3.2 多通道并行设计控制过程

当电磁气阀开的状态,泵工作,那么这一气路通,泵可以抽到该气路相连的负压箱里面的气体,使得负压箱形成真空度,从而使得负压箱里面的气体采样袋吸到箱外面的气源气体。采样时间到,电磁阀门关闭,泵停止工作,气体采样袋采集到这段时间段的气体量。等待间隔一定时间,可以启动第二个通道进行相同的采样。

2.3.3 多通道并行设计优点

并行设计的好处是每个并行气路是单独工作,可以做到一个通道工作,泵的吸气能力都集中到这个通道上,其他通道气路是处于中断状态。从这个原理上来说,同样一个泵,2个通道的装置与20个通道的装置,随着通道数量的增加,泵的处理能力还是一样的,不受通道数量的增加而减弱。这种并行设计对以后装置通道数量的扩充非常有利;通道与通道间是独立分开可以实现分时采样获得的不同时间点气体样品,只要事先将每个通道的负压箱及气体采样袋按照要求放好,设置每个通道的采样时间,每个通道间的间隔时间,中间时间不需要手工去处理,比如取下已经采样好的气体采样袋,然后换上新的气体采样袋,人工值守旁边看着时间等着气体采样,再取下已经采样好的,准备再换新的气体采样袋。

2.3.4 通道并行设计与单通道相比的优势

相对于一个通道的采样装置,要做到间隔时间比较短的采样工作,是没有办法实现的,取下已经采集好的气体采样袋,然后再换上新的气体采样袋,每次都要打开负压箱及拔插气体采样袋的需要时间。多通道设计从原理上说通道与通道的时间间隔是由程序控制,时间间隔可以做到非小,比如秒级的时间间隔。

3 软件设计

3.1 通信模块设计

调用GPRS无线数传通信模块开发板自带的SDK开发包或者厂家提供的脚本语言,编写下位机程序。服务器端可以用Vc++开发环境,用C语言调用windows自带的SDK包winsock编写服务器软件,数据可以存到access 数据库或者用数据文件直接存储数据。客户端可以直接用C、Perl语言编写CGI程序直接读取服务器里面的数据文件,web界面作为登录界面[3-5]。客户端也可以是微信小程序作为客服端与服务器端通过HTTP协议建立通信。可以利用微信的API函数建立WebSocket连接,wx.connectSocket(),wx.onSocketOpen(),wx.sendSocketMessage(),wx.closeSocket()通过这四个函数,可以与服务器先建立连接、打开连接、向服务器发送消息、然后关闭连接。下面的代码是在luat开发模式的lua脚本编写的通信模块下位机客户端部分程序,继电器P1与继电器P2分别由pio.P0_4与pio.P0_5来控制,首先通过pio.pin.setdir()pio.pin.setval()设置pio.P0_4与pio.P0_5的输出方向及电平,通过socket通信,Socket.isReady()来判断SOCKET是否有可用,如果socket有用则创建一个socketclient=socket.tcp(),然后通过Socketclient:connect(ipaddress,port)建立连接,连接成功后一直循环接收服务器的数据,然后把数据又发送给服务器,直到接收数据不成功,跳出循环,Socketclient:close()断开socket连接。程序里面接收到data数据为open1就设置pio.P0_4为高电平,继电器P1闭合;接收到data是close1设置pio.P0_4为低电平,继电器P1断开,下面是lua脚本代码关于socket的通信代码:

pio.pin.setdir(pio,OUTPUT,pio.P0_4)

pio.pin.setdir(pio,OUTPUT,pio.P0_5)

pio.pin.setval(0,pio.P0_4)

pio.pin.setval(0,pio.P0_5)

Local result, data

If Socket.isReady() then

Local socketclient=socket.tcp();

If Socketclient:connect(ipaddress,port) then

While true do

result,data=socketclient.recv(1000)

If result then

If data==open1 then

pio.pin,setval(1,pio.p0_4)

result=socketclient.send(data)

elseif data==close1

pio.pin,setval(0,pio.p0_4)

result=socketclient.send(data)

elseif data==open2

pio.pin,setval(1,pio.p0_5)

result=socketclient.send(data)

elseif data==close2

pio.pin,setval(0,pio.p0_5)

result=socketclient.send(data)

end

else

log.info("接收数据不成功",data)

break

end

end

else

log.info("socketconnect不成功",“连接不成功"

end

上一篇 点击页面呼出菜单 下一篇