关于SCL编程的小问题

我根据帮助手册上的将以下代码输入进去,可是编译的时候提示出现了三个错误,
错误提示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编程的小问题   

最佳答案

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


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

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

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc155387.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年6月6日
下一篇 2017年6月6日

相关推荐

  • 脱机趋势 当前使用服务器

    各位高手,俺有2个问题想请教下:1、我备份了超过系统设定归档周期(超过3个月)的报警及趋势记录,如果脱机在自己的电脑上导入数据查看?2、如何判断当前成对的服务器中哪个是主用的服务器…

    SIMATIC PCS 7 2017年6月27日
  • 请教PCS7输入地址问题

    PCS7 V7.0 SP2,控制器冗余,在组态中发现,模拟量输入地址,默认是从IW512开始,实际应用中出现IW768以上的地址无法使用,在线监视输入量和地址栏…

    SIMATIC PCS 7 2017年6月24日
  • 全部编译FC块后,再到CFC块中编译提示FC块超出范围

    CHANG下载程序时报“FC块没有编译请先编译FC块”(82个错误),随便点开一个FC块编译,编译完成后 到CFC块中编译时报 FC块超出范围(2000多个错误…

    SIMATIC PCS 7 2017年5月29日
  • 对于未来的趋势,PTT加IEA的方式逐渐会被CMT加PAA的方式代替吗?

    从复制粘贴到一键生成 -以工程师视角来看待流程行业工程效率的变迁 课程编号:V2491 做DCS项目只是“体力活”?<br…. 点击这里,打开新窗口观看完整视频 该视频下…

    2021年7月5日
  • PCS7功能块解释

    请问,谁有PCS7常用功能块的中文解释?我初学PCS7,装的是英文版的,看功能块解释太麻烦。有谁有的麻烦帮忙给发一份,邮箱地址:fuqunsheng@hotmail.com&nbs…

    SIMATIC PCS 7 2017年8月15日
  • 6ES7 7KF02输入是12位的,为什么读取的数据不是12位的?

    6ES7 7KF02输入是12位的,为什么读取的数据不是12位的? 最佳答案 7KF02输入、输出都是对应 标称范围0-27648(0-6C00)。 …

    SIMATIC PCS 7 2017年7月26日
  • PCS7中自编电机块的使用问题

    自己编写的电机块正在使用中,对电机块修改后系统提示要完整下载程序,下载之后发现电机自己启动,阀门本来开着的自行关闭,本来关着的自行打开,这种状况很是危险,请问各位高手在什么情况下会…

    SIMATIC PCS 7 2017年11月1日
  • PCS7ES和OS之间通讯问题

    两个对等服务器,工程师站向操作员站拷贝WINCC画面是,提示错误为:“下载到目标系统时出错”。因为什么呢?在下载之前,在OS新建了共享文件夹,共享文件夹权限设为“完全控制”,“安全…

    SIMATIC PCS 7 2017年7月25日
  • 410-5H CPU指示灯问题

    请问MAINT指示灯和STOP指示灯同时亮了应该怎样把CPU切换到RUN模式 最佳答案 1、 MAINT维护请求—维护请求会导致诊断中断,调用OB82如果没有装载相应…

    SIMATIC PCS 7 2020年11月1日
  • 在PCS7系统中如何利用C脚本创建报警?

    场景描述:某供水公司在供水管网上安装了若干个测压点,测量各居民点的实时供水压力,通过PCS7系统对各测压点压力数据进行实时在线监控。当某一时间点监测到某测压点实时值偏离正常值时,报…

    SIMATIC PCS 7 2017年6月10日