我根据帮助手册上的将以下代码输入进去,可是编译的时候提示出现了三个错误,
错误提示1, LIMIT := 7;identifier already exits
错误提示2, sortbuffer : ARRAY [0..LIMIT] OF INT//INVAILID CONSTANT
错误提示3,calcbuffer : ARRAY [0..LIMIT] OF //INVAILID CONSTANT
我在想是不是因为LIMIT是关键字,因为当我把LIMIT改成LIMITE之后,就不再提示错误了。程序如下:
CONST
LIMIT := 7;//为什么一直提示这个是已经定义过的呢,是因为LIMIT是关键字吗?可是我是按照说明手册上的敲的代码呀?
END_CONST
VAR_IN_OUT
sortbuffer : ARRAY [0..LIMIT] OF INT;//这个为什么一直提示非法的常数呢?
END_VAR
VAR_OUTPUT
calcbuffer : ARRAY [0..LIMIT] OF //这个为什么一直提示非法的常数呢?
STRUCT
squareroot:INT;
square :INT;
END_STRUCT;
END_VAR
VAR_TEMP
swap : BOOL;
index,aux : INT;
valr,resultr: REAL;
END_VAR
BEGIN
(******************************************************************************************************************
part1 sorting:According to the "bubble sort" method:Swap pairs of values until the measured value buffer is sorted.
*********************************************************************************************************************)
REPEAT
swap:=FALSE;
FOR index:=LIMIT TO 1 BY -1 DO
IF sortbuffer[index-1]>sortbuffer[index]
THEN aux:=sortbuffer[index];
sortbuffer[index] :=sortbuffer[index-1];
sortbuffer[index-1]:=aux;
swap :=true;
END_IF;
END_FOR;
UNTIL NOT swap
END_REPEAT;
(******************************************************************************************
Part2 calculation:square root with standard function SQRT and squating with SQUARE function
******************************************************************************************)
FOR index:= 0 TO LIMIT BY 1 DO
valr :=INT_TO_REAL(sortbuffer[index]);
resultr:=SQRT(valr);
calcbuffer[index].squareroot:=REAL_TO_INT(resultr);
calcbuffer[index].square:=SQUARE(sortbuffer[index]);
END_FOR;
END_FUNCTION_BLOCK
问题补充:
我改了之后就可以通过编译了,所以我在想会不会是操作手册上说错了。截图如下。
图片说明:
最佳答案
scl中不允许动态定义数组,数组只能直接使用常数定义。
limit是关键字。为了测试你可以随便在后面加上几个字符。
不要迷信书,书也有错误的时候,一切以实际为准。
提问者对于答案的评价:
我在操作手册和参考书上两处地方都找到了类似的LIMIT,MAX,MIN定义声明,我不清楚是不是错误,如果并不是错误的话,我得再找找原因了。还是谢谢你的回答了。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc155387.html