在 S7-SCL 中关于错误信息及警告的提示和技巧

描述:
此条目包含一些关于错误信息及警告的提示和技巧。解释了下面的信息:n

  1. 当将一个实数赋值给一个双字变量时,提示信息是“Invalid data type”
  2. 在输出窗口中错误信息与程序行数不匹配
  3. 信息:“The FB is not available or the instance declaration is missing”
  4. 信息:“Character strings have different lengths”
  5. CPU 信息:“STOP due to unknown OP code”
  6. 在编译 UDT 时提示“Syntax error with UNLINKED”
  7. 在编译一个 DB 块时提示“Syntax error with 2#1100_1100”
  8. 到达交换区最大长度 (64 Kbytes)
  9. 在 CPU 运行的时候出现消息:“16#8184”
  10. 信息:“可测试的组件或实例已达最大数量”
  11. 编译时错误信息: “Incorrect block”

下表提供了上述问题的原因及其补救方法:
n

No. 原因及解决办法
1 当将一个实数赋值给一个双字变量时,提示信息是“无效数据类型”
注意只有当数据类型为 BOOL,BYTE,WORD 和 DWORD 时,才允许对 DB 块的绝对地址进行访问。 n

图 01 举例说明一个数据类型何时必须要转换。n

在 S7-SCL 中关于错误信息及警告的提示和技巧
图 01

2在输出窗口中错误信息与程序行数不匹配
当行数超过 65535 时,S7-SCL 编译器再次从 1 开始计数。例如,一个编程错误出现在 S7-SCL 源程序的第 65537 行,后面的行数字将输出: n

  • "F: Z 00001 error xyz" instead of "F: Z 65537 error xyz"

补救方法:
双击S7-SCL 编译器输出窗口中的错误信息,光标将跳到不正确的行。如果编程错误不在指定行中,可以使用菜单命令“Edit > Go To > Line ... ”,然后输入“65536 + 显示错误数字”跳转至有错误声明的行。n

注意:
建议减少 S7-SCL 源程序中的行数。然后编译源程序。

3消息:“The FB is not available or the instance declaration is missing”
如果一个 FC/FB/SFB/SFC 块在程序中被调用,而这个程序块不在块程序文件夹中,也不能从库里复制,将会显示这条消息。 n

补救方法:
手动复制相关的程序块到块程序文件夹中,然后编译 S7-SCL。

4消息:“Character strings have different lengths”
在图 02 示例中包含 FC1 和 FC2 带有字符串变量 "name_1" 与 "name_2", 当 FC1 被编译时,得到警告 "Character strings have different lengths"。在运行期间,在赋值的右侧("name_1")可能是一个比左侧所允许的 STRING 变量 ("name_2") 具有更长长度的 STRING 字符串。 n

补救方法:
建议为左边的变量“name_2”声明一个长度为254 字符的 STRING 字符串。如果编译具有这个声明的功能块 FC2 ,上述警告将不会再出现。n

在 S7-SCL 中关于错误信息及警告的提示和技巧
图 02n

注意:
如果增加 STRING 长度达到 254 字符,将会需要更大的本地装载存储空间。

5CPU 消息:“STOP due to unknown OP code”
如果在 S7-SCL 中使用转换功能“WORD_TO_BLOCK_DB(...)”,并且编辑以下语句时将会显示这条 CPU 消息。 n

  • Display := WORD_TO_INT(BYTE_TO_WORD (WORD_TO_BLOCK_DB (DBNo).DB[DBIndex]));

补救方法:
建议用以下两条声明语句替代上面所给的语句:n

  • tmp := WORD_TO_BLOCK_DB (DBNo).DB[DBIndex];n
  • 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 用户程序中。 n

背景
对于数据块的情况,“UNLINKED” 属性意味着 DB 块关联。n

  • 在程序中非一体化的n
  • 仅存储于装载存储器中n
  • 不占据任何空间。

“UNLINKED” 属性在数据块头部声明(图 03)n

在 S7-SCL 中关于错误信息及警告的提示和技巧
图 03

7在编译一个 DB 块时提示“Syntax error with 2#1100_1100”
在数据块中,如果给一个 BYTE 类型的变量赋值一个二进制数字作为初始值,当编译 S7-SCL 源程序时将出现“2#...的句法错误”的错误消息。例如: n

  • Var1: BYTE:= b#2#1100_1100;

在 S7-SCL 中,数据块由 STL 编译器生成。如果在数据块的 DB 块准备部分和 DB 块赋值部分同时初始化变量,必须使用 STL 专用符号。因此,在 Byte 类型的变量的示例中,仅允许指定十六进制数作为初始值。S7-SCL 符号(例如 B#2#1100_1100)只能用于代码区,因为 S7-SCL 编译器在代码区被使用。n

补救方法:
将二进制数改为十六进制数作为初始值,例如:n

  • Var1: BYTE:= b#16#cc;

注意:

  • S7-SCL 符号在 S7-SCL 在线帮助下“Notation of constants”(常量符号)中可用,且n
  • STL 符号在 STEP 7 在线帮助下“Help on STL > Entering and displaying constants”(STL 帮助 > 输入和显示常量)中可用。
8 到达交换区最大长度 (64 Kbytes)
如果自动化设备的接口大小超限(64 Kbytes)时会出现这条信息.每个单独元素的声明需要 2 个字节。当声明多重背景或者用户自定义数据类型(UDTs)时也会像结构类型(STRUCT)一样每个单独的结构占用 2 个字节。 n

补救方法:
按照下面的方法可以清除上面描述的情况。n

  1. 缩短变量名的长度为一个有效的最小值。n
  2. 删除不必要的声明事件。n
  3. 例如,通过声明一个 BOOL 类型的 ARRAY 使用 ARRAY 事件声明,而不是单独的命名每个位。n
  4. 如果 1 到 3 点都没有帮助,分割 S7-SCL 源程序为两个或更多的 S7-SCL 源。
9 在 CPU 运行的时候出现错误消息: "16#8184"
当传输参数为 ANY类型的块在 STL 中被调用的时候,STRING数据类型的参数可能不会被传送。这是一个系统属性。 n

补救方法:
如果您需要只在 STL 中传送 STRING 类型的参数,如果可以使用其它数据类型,可以用 ARRAY 或者 STRUCT 数据类型来代替 STRING 数据类型。

10消息:“可测试的组件或实例已达最大数量
如果在S7-SCL 源代码中通过“Tools > Settings > Tab: Compiler”激活了“Generate Debug Info”选项,则上面所示的警告会在编译时出现。这意味着部分源代码不能查看,因此不能单步运行。这是由于S7-SCL的内部系统限制。如果编程时使用的结构包含多于254个组件,则在编译后的测试中只能察看到最前面的254个组件,其它的组件不能显示。
11编译时错误信息“Incorrect block”
在 S7-SCL 的源文件中使用了GOTO声明,在声明的跳转标签部分没有键入分号(;)。 n

补救方法:
设置了跳转标签后,编译器期望后面有可执行的语句。如果在跳转标签后写入分号,编译器就可以识别到没有给该跳转标签分配语句。n

在 S7-SCL 中关于错误信息及警告的提示和技巧
图 04

关键字:
编译程序的消息,编译程序的错误,编译错误

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年11月5日 下午12:03
下一篇 2021年4月12日 上午12:00

相关推荐

发表回复

登录后才能评论