我们在实际的过程控制项目中,模拟量的比重占用很大,用西门子自带的转换程序比较繁琐,故自己根据实际需求开发了模拟量输入、输出块,便与日后使用方便,接下来就看看这个块的开发过程,编程方式采用SCL,便于计算。
一、 模拟量输入块(AnIn):创建FB200,定义接口,如图:
程序中包含了高报警,高警告,低报警,低警告,一般上位机报警需要这个变量。极性选择,适合更广的应用领域。死区选择,方便滤波。
整体程序如图:
程序解读:模拟量的计算公式:
PV_Out=[(PV_In(Real)-K1)/(K2-K1)]*(PV_HighLimit-PV_LowLimit)+PV_LowLimit
计算公式相信大家都很熟悉,不做多余赘述。首先是判断输入的是否是常数,判断依据K1<=K2且低限<高限,然后做数据类型转换,即整数转为实数。
极性选择,其实单双极性就是对应的K1值的不同,即单极性K1=0.0,双极性K1=-27648.0;选择不同的K值代入计算公式。
平时也会遇到超过上下限的问题,在此做了限定,输入值超下限取下限制,输入值超上限取上限制。
错误的判断,分单双极性,判断依据一样,即单极性:如果低限>高限或者输入值大于27648或者输入值小于0;双极性:如果低限>高限或者输入值大于27648或者输入值小于-27648;
报警输出,结合死区宽度做了报警输出,便于上位机做报警使用。
二、模拟量输出块(AnOut):创建FB201,定义接口如图:
程序整体 如图所示,模拟量输出块比较简单,就是模拟量输入块反推过去,里面也涉及了极性选择,错误输出,这个比较简单,不多做说明。
以上就是我根据个人理解做的块,已经做成库文件,使用方便,如果有错误或不合理之处,欢迎大家批评指正,也欢迎大家多提建议,我再更新完善。