如题。想简洁程序,而不是连续重复调用FC处理。
问题补充:
修改了下,没问题。直接调用FC20会报错。SCL比STL好懂。
FUNCTION FC22 : 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
IF N>=1 THEN
FOR For_N:= 0 TO (N-1) BY 1 DO
IF WORD_TO_INT(MW[AI_Addr+For_N*2])>=0 THEN
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
图片说明:
最佳答案
FUNCTION FC21 : 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
IF N>=1 THEN
FOR For_N:= 0 TO (N-1) BY 1 DO
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] );
这句话报错,报错信息:Invalid data TYPE 。没有解决。
最佳答案作者回复:
你FC20的 IN1 和 Out1 定义的是什么数据类型?
SCL 调用的时候要数据类型相符的, 现在默认 IN1 和 Out1 是word数据类型
如果你是int 那需要转换
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc217379.html