当前位置: 主页 > PLC控制

如何把一组数(如PIW512 到PIW688)依次送入写好取正函数(FC),处理后的数存入DB

如题。想简洁程序,而不是连续重复调用FC处理。

问题补充:
修改了下,没问题。直接调用FC20会报错。SCL比STL好懂。
FUNCTioNFC22:VOID
VAR_INPUT
AI_Addr:INT;//MW起始地址:722
DB_ID:INT;//DB块号:22
DB_Addr:INT;//转存DB块内起始地址:34
N:INT;//数量
END_VAR
VAR_Temp
For_N:INT;
END_VAR


IFN>=1THEN
FORFor_N:=0TO(N-1)BY1DO
IFWORD_TO_INT(MW[AI_Addr+For_N*2])>=0THEN
WORD_TO_BLOCK_DB(INT_TO_WORD(DB_ID)).DW[DB_Addr+For_N*2]:=MW[AI_Addr+For_N*2];
ELSE;
WORD_TO_BLOCK_DB(INT_TO_WORD(DB_ID)).DW[DB_Addr+For_N*2]:=0;
END_IF;
END_FOR;
END_IF;
END_FUNCTION

图片说明:

afc9c572d4f682cdfbeabec3b465809d如何把一组数(如PIW512 到PIW688)依次送入写好取正函数(FC),处理后的数存入DB

最佳答案

FUNCTIONFC21:VOID

VAR_INPUT
AI_Addr:INT;//PIW起始地址:722
DB_ID:INT;//DB块号:22
DB_Addr:INT;//转存DB块内起始地址:34
N:INT;//数量
END_VAR

VAR_Temp
For_N:INT;
END_VAR

IFN>=1THEN
FORFor_N:=0TO(N-1)BY1DO
FC20(In1:=PIW[AI_Addr+For_N*2],Out1:=WORD_TO_BLOCK_DB(INT_TO_WORD(DB_ID)).DW[DB_Addr+For_N*2]);
END_FOR;
END_IF;

END_FUNCTION

提问者对于答案评价:
FC20(In1:=PIW[AI_Addr+For_N*2],Out1:=WORD_TO_BLOCK_DB(INT_TO_WORD(DB_ID)).DW[DB_Addr+For_N*2]);
这句话报错,报错信息:InvaliddataTYPE。没有解决。

最佳答案作者回复:
你FC20的IN1和Out1定义的是什么数据类型?
SCL调用的时候要数据类型相符的,现在默认IN1和Out1是word数据类型
如果你是int那需要转换

  • 关注微信

猜你喜欢

微信公众号