SCL创建FB,希望在FB101中操作共享DB10数据块中的数组型数据,编译时出现变量未声明的报错,希望各位大神支招,小弟为初学SCL
还有一个问题:FB块的输入引脚接连DB地址时,在仿真模式下,为何在变量表里赋值就会报错,求解
程序如下:
DATA_BLOCK DB10
STRUCT
Temp:ARRAY[1..10]OF REAL;
END_STRUCT
BEGIN
END_DATA_BLOCK
FUNCTION_BLOCK FB101
VAR_TEMP
END_VAR
VAR
END_VAR
VAR_INPUT
ID:INT;
Real_in:REAL;
END_VAR
VAR_OUTPUT
Result: REAL;
END_VAR
IF ID<=10 THEN
Temp[ID]:=Real_in; //编译时报这里的"Temp"变量未声明错误,我创建DB10的时候不是已经声明过了么?求解
END_IF;
END_FUNCTION_BLOCK
问题补充:
“ IF ID<=10 THEN
Temp[ID]:=Real_in; //编译时报这里的"Temp"变量未声明错误,我创建DB10的时候不是已经声明过了么?求解
END_IF; ”
这部分我改为:
IF ID<=10 THEN
DB10.Temp[ID]:=Real_in;
END_IF;
编译没问题了..但我模拟的时候,报SF并且处于STOP,RUN不了,查CPU信息为写命令时区域长度错误
请大神们,给予帮忙
图片说明:
最佳答案
IF ID<=10 THEN
Temp[ID]:=Real_in; //编译时报这里的"Temp"变量未声明错误,我创建DB10的时候不是已经声明过了么?求解
END_IF;
----------------------------------------
这里你的写法不对,这么写是指fb本身创建的变量,如果需要调用外部全局db的数组,则可以写成DB10.TEMP[ID],而且最好给db10取个符号名(符号表中)
---------------------------------------------
所谓长度错误,就是cpu寻址错误,也就是找不到程序中要访问的地址,你的fb中定义ID参数的时候没有指定一个合理范围的初始值,或者调用的时候没有填一个正确的参数,你这段程序中,为了访问之前建的db10,id的范围应当在1-10,而你的id默认值没有指定,可能就为0了。
提问者对于答案的评价:
谢谢..
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc150024.html