当前位置: 主页 > PLC控制

关于SCL编程的小问题

我根据帮助手册上将以下代码输入进去,可是编译的时候提示出现了三个错误,
错误提示1,LIMIT:=7;identifieralreadyexits
错误提示2,soRTbuffer:ARRAY[0..LIMIT]OFINT//INVAILIDCONSTANT
错误提示3,calcbuffer:ARRAY[0..LIMIT]OF//INVAILIDCONSTANT

我在想是不是因为LIMIT是关键字,因为当我把LIMIT改成LIMITE之后,就不再提示错误了。程序如下:

CONST
LIMIT:=7;//为什么一直提示这个是已经定义过的呢,是因为LIMIT是关键字吗?可是我是按照说明手册上的敲的代码呀?
END_CONST

VAR_IN_OUT
sortbuffer:ARRAY[0..LIMIT]OFINT;//这个为什么一直提示非法的常数呢?
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
(******************************************************************************************************************
part1sorting:Accordingtothe"bubblesort"method:SwappairsofvaluesuntilthemeASuredvaluebufferissorted.
*********************************************************************************************************************)
REPEAT
swap:=FALSE;
FORindex:=LIMITTO1BY-1DO
IFsortbuffer[index-1]>sortbuffer[index]
THENaux:=sortbuffer[index];
sortbuffer[index]:=sortbuffer[index-1];
sortbuffer[index-1]:=aux;
swap:=true;
END_IF;
END_FOR;
UNTILNOTswap
END_REPEAT;
(******************************************************************************************
Part2calculation:squarerootwithstandardfunctionSQRTandsquatingwithSQUAREfunction
******************************************************************************************)
FORindex:=0TOLIMITBY1DO
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编程的小问题关于SCL编程的小问题

最佳答案

scl中不允许动态定义数组,数组只能直接使用常数定义。
limit是关键字。为了测试你可以随便在后面加上几个字符。


不要迷信书,书也有错误的时候,一切以实际为准。

提问者对于答案的评价:
我在操作手册和参考书上两处地方都找到了类似的LIMIT,MAX,MIN定义声明,我不清楚是不是错误,如果并不是错误的话,我得再找找原因了。还是谢谢你的回答了。

  • 关注微信

猜你喜欢

微信公众号