信捷PLC C功能块编程经验
一. 在信捷官网下载的资料《XC系列可编程序控制器用户手册(特殊指令篇).pdf》中提到:“注意:XC2系列和XCM系列的寄存器D的地址并不连续,在使用时,请注意按以下地址定义:XC2系列:D0-D999写成W[0]-W[999];D4000-D4999写成W[1000]-W[1999];”但是实际使用中给功能块传D4000以后的参数地址,如果使用W[1000] -W[1999]作为功能块内部运算用地址,则下面GetLowest函数不能按预设想的运行。不论是使用D0-D999还是使用D4000-D4999范围内寄存器作为实参地址,都只有用W[0]~W[999]范围内的地址作为形参,程序才能按预期执行。
二. 下面009#句代码如果不写,则程序的运行也不能达到预期。原因分析如下:函数体内提到的地址,即与函数体外某一实参有关联的函数内形参,如果每次运行中没有定义具体的值,则函数体返回给实参地址时,函数体不清楚具体返回什么值,函数体就无法正常运行。
Comment:
筛选采集到的最低值。
W[0]: 前一次采集到的数据存放地址; W[2]: 后一次采集到的数据存放地址;
W[4]: 两次采集到的最小值的暂存地址; W[6]: 筛选到的最小数据存放地址;
001# Void GetLowest( WORD W, BIT B)
{
}
三. 下面这段数据累加或递减计算函数。在调试中发现,如果用D4000-D4999范围内寄存器作为实参地址,则函数体不按预期运行,只有使用D0-D999范围内寄存器作为实参地址,函数体才按预期的运行。具体原因不详,猜测是掉电保持性寄存器作为实参其可以迭代运算的属性不具备。
Comment:
判断并执行W[0]的值递增或递减。
W[0]: 接受外部传入的需要操作的数据; W[1]: 接收外部传入的递增运算的指令;
W[2]: 接收外部传入的递减运算的指令;
B[1]: 通知外部切换成递减运算; B[2]: 通知外部切换成递加运算;
001# Void AD_VALUE( WORD W, BIT B)
{
}