露点和湿球温度计算在工业领域的应用方法研究
扫描二维码
随时随地手机看文章
引言
目前所能买到的小型气象站都不具备露点温度和湿球温度的测量功能,湿球温度目前只能通过计算得到:露点温度可以通过露点仪测得,但是常用的露点仪测量误差依然在士2℃,而且成本极高,往往一套露点仪的成本可以用来购买5套以上的小型气象站。
出于成本考量,计划用计算的方式来直接获取露点温度和湿球温度,通过大量方法对比,摸索出精度结果较高的计算方法。
因为计算露点温度和湿球温度的最终目的是使DCS系统能联控相应设备达到最佳能耗使用率,计算过程不能影响DCS系统的正常运行,所以最后决定用独立的PLC完成计算,以通信的方式把结果发送给DCS。
1计算方法及精度对比
1.1露点温度计算方法
经过仿真比选后,最终推荐使用以下公式计算露点温度:
式中(RH为相对湿度(0~1):T为干球温度(℃):Td为露点温度(℃)。
变量相对湿度RH和干球温度7可通过气象站直接获取,可以一步到位地计算出露点温度。
1.2湿球温度计算方法
已知同一点的恰值是相同的,因此可以以恰值为突破口计算湿球温度。
恰值计算公式如下:
式中:ew为饱和水汽压(Pa):i为干空气恰值(kJ/kg):d为含湿量(g/kg)。
将公式(4)代入公式(3)可得:
由公式(5)可以看出,只需要得到饱和水汽压的数据即可计算出恰值。
饱和水汽压的计算,国家气象局目前推荐使用马格努斯(Magnus)算法,在利用Goff-Grattch公式[2]修正后:
湿球温度可以理解为恰值不变而相对湿度达到100%时的温度,因此可以将公式(5)和公式(6)修正为:
式中:Tw为湿球温度(℃):I为湿空气恰值(kJ/kg)。
因为恰值不变,所以可以把公式(5)计算得到的干空气恰值套入到公式(7)中推算出湿球温度。
但是这类直接计算的方法对于计算机而言,实现难度偏大。
考虑到一般情况下湿球温度与干球温度相差幅度相对较小,因此可以把干球温度作为基准值代入公式(8)和公式(7)得到第一个湿空气恰值I,然后与计算好的干空气恰值i进行比较。如果I<0.99i,则湿球温度增加0.01℃后再计算:如果I>1.01i,则湿球温度减小0.01℃后再计算:直到湿空气恰值I与干空气恰值i的误差小于0.5%。
1.3精度对比
将上述思路用Python编程在计算机中预演,湿度从10%到95%按5%递进,温度从-20@到50℃按5℃递进,计划得到270组计算数据。
湿球温度计算时可能存在临界情况,导致计算陷入死循环,为避免该现象,考虑到该温度范围下温度最多累加7000次,辅助字节统计循环次数,当循环次数超过7000次时退出循环。
将该270组计算数据与恰湿图在线计算器数据进行对比后,得到如表1所示结果。
湿球温度偏差全部小于0.5℃。
所有偏差大于2℃的露点温度都在干球温度小于10℃且相对湿度小于15%时出现,最大偏差为2.84℃,但是所有结果仍然满足一般的电介法露点仪和电传感器式露点仪误差在±3℃的精度要求。
2应用实现
因为公司所使用的小型PLc均为s7-1200型产品,为维护方便,计算媒介选择为s7-1212c型PLc,在博途V16环境下进行编程。
DCS运行环境为ABB的Ac800M。
2.1定义PLC内部存储
定义一个int变量用作故障代码存储。
创立一个用以远传的DB数据块,用于存放以下数据:
(1)来自气象站的有效数据,例如噪声、风速、干球温度、相对湿度等:
(2)本次程序执行得到的露点温度和湿球温度:
(3)故障代码:
(4)一定数量的空的变量。
将(1)~(3)的数据按照变量类型整理,方便DCS解码:第(4)类数据变量放在最后,防止通信异常。
2.2建立PLC与气象站的通信
西门子s7-1200系列PLc提供通信板cB1241和通信模块cM1241两种Modbus485通信硬件。从以往应用结果来看,如果从站设备与PLc距离较远,通信板的信号中断概率会高于通信模块,因此在通信距离较长时,硬件选择上优先考虑使用通信模块。如果通信出错,作为最高优先级将故障代码置为1。
如表2所示,波特率设置主要和传输距离有关,以下给出在综合环境下稳定的经验选择方法。
如果传输长度超过推荐长度,实际应用时断线概率会增加,建议增加485放大器。如果总线要穿过动力桥架,建议在总线始端增加485光电隔离。
本次应用实际放线长度达到了160m,因此硬件配置如下:波特率4800(Bd/s)、无校验位、8位数据位和1个停止位。Modbus485是RTU通信的一种,1帧数据在上述配置中包含1个起始位、8个数据位和1个停止位,共占用10bit。
气象数据在利用Modbus485通信时会把数据放大一定倍数后,以int变量的格式存放到保持寄存器,单个保持寄存器需要占用2帧数据。本次应用的气象站可以实时监测噪声、风速、干球温度和相对湿度这四组数据,但并没有连续放入保持寄存器中,而是跨越了10个保持寄存器,其中有6个存放了空数据,总共占用20帧数据。
通信报文请求时会按照"设备地址+功能码+起始寄存器地址+寄存器数量+校验码"的格式发送,占用8帧数据80bit:报文回复按照"设备地址+功能码+字节数+数据+校验码"的格式返回,占用25帧数据250bit。结合波特率换算[3],单次通信耗时68.75ms。
2.3编制运算程序
建立一个专用Fc块,将Python上的编程思路写入,功能块在Modbus485通信完成后执行。
在博途中不具备幂次方运算功能,因此还需要把公式(6)调整为:
因为应用在工业领域,所以编程还要结合以下要求:参考当地历史天气情况,限定湿度与温度范围。本次应用点在杭州,结合历史天气后把湿度设置在2%~100%,温度设置在-20~45℃。为了减小PLc运行负担,结合温度范围把Fc块内的初始运算值从干球温度调整为12.5℃,即温度中间值,单次循环次数限定到3250次。当数据不在设置范围,则认为监测数据有误,作为
第二优先级故障,湿度有误则将故障代码置为11,温度有误则将故障代码置为12,均出错则将故障代码置为13。当出现温度小于10℃且湿度小于15%情况时,将100写入故障代码,用以提醒露点偏差较大。
2.4建立PLC与DCS的通信
在PLC端建立ModbusTCP从站远传DB块数据,在FC块执行完成后执行。
在DCS端建立ModbusTCP主站,考虑到运存负担和气象变化速率,可以设置为每5s读取一次从站数据,且接收数据长度刚好为有效数据长度。
Modbus主站中通信端口配置为502,从站通信端口号为避免与其他通信协议的冲突,建议设置到2000以上。
从站传输字节长度必须大于有效数据字节长度,且小于总的DB块内的数据长度,否则会出现通信失败的情况。
目前工业应用中,以太网已经普遍采用千兆网线,因其实际数据量小,传输时间可以忽略不计。
2.5PLC端看门狗设置
对于西门子s7-1200型PLC而言,看门狗时长一般为150ms,在湿球温度计算时,因为执行次数较多很容易超时导致运行时停机,所以还需加大看门狗时长。
首先屏蔽掉通信程序,将看门狗时间调整到最大值避免仿真错误,下装配置和程序到PLCsIM上仿真运行,手动赋予温度与湿度值,直到其出现循环次数达到3251的情况。观察此时程序的运行时间A。PLC看门狗时间推荐按以下要求配置:
(1)看门狗时间>运行时间A+Modbus485通信时长:
(2)看门狗时间<运行时间A+Modbus485通信时长+100ms:
(3)最好为100ms的整数倍。
确定好看门狗时间后,将硬件配置下装程序到PLC中。
2.6DCS端数据处理
在DCS端把与PLC的通信中断和故障代码1、11、12、13作为二级报警,把故障代码100作为三级报警,分别配置报警声音和报警描述,出现二级报警后应立即把联控程序维持在最后运行状态,避免系统动荡。同时,建立其他气象数据的报警上下限,用于判断现场的传感器故障。调试时人为激发报警测试功能是否正常。
气象站的数据按照说明直接整除即可。
露点温度和湿球温度属于rea1型变量,占用了两个保持寄存器,需要在DCS端按以下方法得到实际结果:
(1)将高字节与低字节转换成DINT变量:
(2)将高字节结果乘以35536后与低字节相加,把得到的结果转成Dword变量:
(3)将Dword变量转换成rea1变量。
数据处理完成后在所需位置建立气象站画面,对每一个数据添加历史曲线以供查阅。
3结语
该应用方法实际成本不到一套露点仪的一半,目前应用已超过5个月,在应用过程中尚未发现任何问题。但露点温度只有在较高湿度和较高温度条件下才能保证数据准确,后续还需要寻找出低温低湿的可靠计算方法对其进行分段计算。