菜鸟:
FUNCTION FC11 : INT
VAR_INPUT
barcode1:STRING[5];
barcode2:STRING[5];
END_VAR
VAR_temp
x1:INT;
x2:INT;
END_VAR
BEGIN
x1:=STRING_TO_INT(barcode1); //编译不通过处
x2:=STRING_TO_INT(barcode2); //编译不通过处
IF x1<>0 AND x2<>0 AND x1<>x2 THEN
CASE x1 of
92:
FC11:=8;
07:
FC11:=1;
62:
FC11:=2;
ELSE
FC11:=0;
END_CASE;
END_IF;
END_FUNCTION
编译不通过,E:illegal parament assignment 怎么回事呢?谢谢大家了!问把收到的字符串转换成int。用SCL
侠圣:
1、记住:STRING变量使用前需初始化。例如:在声明变量时初始化(barcode1:STRING[5]:='wr';)
,或者可先声明变量(barcode1:STRING[5];),再赋值(barcode1:='wr';)
2、由于FC块不能在声明变量时初始化赋值,因此SCL编译时出错,所以可选用带背景DB的FB块。
3、如果确实需要选用FC块,则可以将STRING变量赋值放置在DB块或M存储区中调用。
游民:
FC或FB的I/O区域中复杂数据类型变量实际上是一个指针,所以要用临时变量转一下
改成下面这样就可以了
FUNCTION FC11 : INT
VAR_INPUT
barcode1:STRING[5];
barcode2:STRING[5];
END_VAR
VAR_temp
x1:INT;
x2:INT;
bt1:STRING[5];
bt2:STRING[5];
END_VAR
BEGIN
bt1 := barcode1;
bt2 := barcode2;
x1:=STRING_TO_INT(bt1);//编译不成功处
x2:=STRING_TO_INT(bt2);
IF x1<>0 AND x2<>0 AND x1<>x2 THEN
CASE x1 of
92:
FC11:=8;
07:
FC11:=1;
62:
FC11:=2;
ELSE
FC11:=0;
END_CASE;
END_IF;
END_FUNCTION
已编译成功。但
1.FC中的输入定义为复杂数据类型的话,不能在块中直接使用。请问什么为复杂数据类型?
奇侠:
什么为复杂数据类型?
请看STEP7的帮助的附录部分的数据类型和参数类型的介绍。
侠圣:
1、复杂数据类型(Complex Data Types)包括DATE_AND_TIME、STRING、ARRAY、STRUCT,这四种类型。
2、而STRING不正好属于复杂数据类型吗?所以我就没弄懂你这SCL编译是咋通过的!!
侠士:
楼主,我个人认为‘ELSE’应该是不能插入在‘CASE..OF...’与‘END_CASE’之间的。