问题补充:
修改了下,没问题。直接调用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
最佳答案
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那需要转换