在 S7-SCL 中关于错误信息及警告的提示和技巧 描述: 此条目包含一些关于错误信息及警告的提示和技巧。解释了下面的信息: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 当将一个实数赋值给一个双字变量时,提示信息是“Invalid data type” 在输出窗口中错误信息与程序行数不匹配 信息:“The FB is not available or the instance declaration is missing” 信息:“Character strings have different lengths” CPU 信息:“STOP due to unknown OP code” 在编译 UDT 时提示“Syntax error with UNLINKED” 在编译一个 DB 块时提示“Syntax error with 2#1100_1100” 到达交换区最大长度 (64 Kbytes) 在 CPU 运行的时候出现消息:“16#8184” 信息:“可测试的组件或实例已达最大数量” 编译时错误信息: “Incorrect block” 下表提供了上述问题的原因及其补救方法: No. 原因及解决办法 1 当将一个实数赋值给一个双字变量时,提示信息是“无效数据类型” 注意只有当数据类型为 BOOL,BYTE,WORD 和 DWORD 时,才允许对 DB 块的绝对地址进行访问。 图 01 举例说明一个数据类型何时必须要转换。 图 01 2 在输出窗口中错误信息与程序行数不匹配 当行数超过 65535 时,S7-SCL 编译器再次从 1 开始计数。例如,一个编程错误出现在 S7-SCL 源程序的第 65537 行,后面的行数字将输出: ? \补救方法: 双击 S7-SCL 编译器输出窗口中的错误信息,光标将跳到不正确的行。如果编程错误不在指定行中,可以使用菜单命令“Edit > Go To > Line ... ”,然后输入“65536 + 显示错误数字”跳转至有错误声明的行。 注意: 建议减少 S7-SCL 源程序中的行数。然后编译源程序。 3 消息:“The FB is not available or the instance declaration is missing” 如果一个 FC/FB/SFB/SFC 块在程序中被调用,而这个程序块不在块程序文件夹中,也不能从库里复制,将会显示这条消息。 补救方法: 手动复制相关的程序块到块程序文件夹中,然后编译 S7-SCL。 4 消息:“Character strings have different lengths” 在图 02 示例中包含 FC1 和 FC2 带有字符串变量 \与 \当 FC1 被编译时,得到警告\different lengths\。在运行期间,在赋值的右侧(\可能是一个比左侧所允许的 STRING 变量 (\具有更长长度的 STRING 字符串。 补救方法: 建议为左边的变量“name_2”声明一个长度为 254 字符的 STRING 字符串。如果编译具有这个声明的功能块 FC2 ,上述警告将不会再出现。 图 02 注意: 如果增加 STRING 长度达到 254 字符,将会需要更大的本地装载存储空间。 5 CPU 消息:“STOP due to unknown OP code” 如果在 S7-SCL 中使用转换功能“WORD_TO_BLOCK_DB(...)”,并且编辑以下语句时将会显示这条 CPU 消息。 ? Display := WORD_TO_INT(BYTE_TO_WORD (WORD_TO_BLOCK_DB (DBNo).DB[DBIndex])); 补救方法: 建议用以下两条声明语句替代上面所给的语句: ? ? tmp := WORD_TO_BLOCK_DB (DBNo).DB[DBIndex]; Display := WORD_TO_INT (BYTE_TO_WORD (tmp)); 上面的消息将不会再出现,并且 CPU 也不会进入 STOP 模式。 6 在编译 UDT 时提示“Syntax error with UNLINKED” 在 S7-SCL 中,如果一个 UDT 在用“UNLINKED”声明之前已标识,该 UDT 将不会被编译通过。“UNLINKED”属性不可用于 UDT。随着提示“关于 UNLINKED 的句法错误”的错误消息,编译停止。该规则也应用于 STL 源程序声明。UDT 通常不能被装载到 S7 CPU 中,但总是存储于“离线”的 S7 用户程序中。 背景 对于数据块的情况,“UNLINKED” 属性意味着 DB 块关联。 ? ? ? 在程序中非一体化的 仅存储于装载存储器中 不占据任何空间。 “UNLINKED” 属性在数据块头部声明(图 03) 图 03 7 在编译一个 DB 块时提示“Syntax error with 2#1100_1100” 在数据块中,如果给一个 BYTE 类型的变量赋值一个二进制数字作为初始值,当编译 S7-SCL 源程序时将出现“2#...的句法错误”的错误消息。例如: ? Var1: BYTE:= b#2#1100_1100;