macro_command main()
short AI[8],D1[8]
GetData(AI[0], "8AI", 3x, 0, 8) //读取[8AI]数据【3x,(4~20)mA】
D1[0] = (AI[0]-819)*125/819 //入口温度,【0-500】
D1[1] = (AI[1]-819)*125/819 //出口温度,【0-500】
D1[2] = (AI[2]-2457)*5000/819 //进风负压,【(-10~10)KPa】
D1[3] = (AI[3]-2457)*5000/819 //出风负压,【(-10~10)KPa】
D1[4] = (AI[4]-1023)*40/819 //压力,【(-0.1~1.5)MPa】
D1[5] = D1[2]-D1[3] //压差
// SetData(D1[0], "PLC", VW, 0, 5) //写数据到PLC VW0~VW5
SetData(D1[0], "HMI", LW, 100, 6) //数据保存HMI LW100~LW105
end macro_command
这是一段威纶通屏的宏程序,功能是读取8路模拟量模块中前5路的采集数据并转换成对应的温度、风压、压力值。
理论上【AI0-入口温度】【AI1-出口温度】【AI2-进风负压】【AI3-出风负压】【AI4-操作压力】。
但现场施工时,有可能这5路传感器的接线顺序会搞乱,不是一一对应。
*****************台达屏宏程序,使用变址寻址******************
#读8AI模块数据(2温、2风压、1压力)
BMOV($100, ({Link2}1@R-0), 8) //读取8AI数据,8路;保存到屏内存地址$100-$107。
#数据转换(2温、2风压、1压力)
$0 = *$150-819 (Signed) //*$150-*$154为变址寄存器,当中保存的数据就是$100-$107,
$1 = *$151-819 (Signed) //当现场接线不到应时,可以在不重新改正接线顺序的情况下,
$2 = *$152-2457 (Signed) //改变*$150-*$154内对应的数值就可以保证数据转换的正确。
$3 = *$153-2457 (Signed) //截图就是台达屏的画面
$4 = *$154-1023 (Signed)
#数据转换(2风压、2温、1压力、1压差)
$10 = $2*5000/819 (Signed)
$11 = $3*5000/819 (Signed)
$12 = $0*125/819 (Signed)
$13 = $1*125/819 (Signed)
$14 = $4*40/819 (Signed)
$15 = $10-$11 (Signed)
现在的问题是,威纶屏要怎样写宏程序,利用索引寄存器组态画面。