在S7-SCL中关于错误信息及警告的提示和技巧描述:此条目包含一些关于错误信息及警告的提示和技巧。解释了下面的信息:1.当将一个实数赋值给一个双字变量时,提示信息是“Invaliddatatype”2.在输出窗口中错误信息与程序行数不匹配3.信息:“TheFBisnotavailableortheinstancedeclarationismissing”4.信息:“Characterstringshavedifferentlengths”5.CPU信息:“STOPduetounknownOPcode”6.在编译UDT时提示“SyntaxerrorwithUNLINKED”7.在编译一个DB块时提示“Syntaxerrorwith2#1100_1100”8.到达交换区最大长度(64Kbytes)9.在CPU运行的时候出现消息:“16#8184”10.信息:“可测试的组件或实例已达最大数量”11.编译时错误信息:“Incorrectblock”下表提供了上述问题的原因及其补救方法:No.原因及解决办法1当将一个实数赋值给一个双字变量时,提示信息是“无效数据类型”注意只有当数据类型为BOOL,BYTE,WORD和DWORD时,才允许对DB块的绝对地址进行访问。图01举例说明一个数据类型何时必须要转换。图012在输出窗口中错误信息与程序行数不匹配当行数超过65535时,S7-SCL编译器再次从1开始计数。例如,一个编程错误出现在S7-SCL源程序的第65537行,后面的行数字将输出:F:Z00001errorxyzinsteadofF:Z65537errorxyz补救方法:双击S7-SCL编译器输出窗口中的错误信息,光标将跳到不正确的行。如果编程错误不在指定行中,可以使用菜单命令“EditGoToLine...”,然后输入“65536+显示错误数字”跳转至有错误声明的行。注意:建议减少S7-SCL源程序中的行数。然后编译源程序。3消息:“TheFBisnotavailableortheinstancedeclarationismissing”如果一个FC/FB/SFB/SFC块在程序中被调用,而这个程序块不在块程序文件夹中,也不能从库里复制,将会显示这条消息。补救方法:手动复制相关的程序块到块程序文件夹中,然后编译S7-SCL。4消息:“Characterstringshavedifferentlengths”在图02示例中包含FC1和FC2带有字符串变量name_1与name_2,当FC1被编译时,得到警告Characterstringshavedifferentlengths。在运行期间,在赋值的右侧(name_1)可能是一个比左侧所允许的STRING变量(name_2)具有更长长度的STRING字符串。补救方法:建议为左边的变量“name_2”声明一个长度为254字符的STRING字符串。如果编译具有这个声明的功能块FC2,上述警告将不会再出现。图02注意:如果增加STRING长度达到254字符,将会需要更大的本地装载存储空间。5CPU消息:“STOPduetounknownOPcode”如果在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时提示“SyntaxerrorwithUNLINKED”在S7-SCL中,如果一个UDT在用“UNLINKED”声明之前已标识,该UDT将不会被编译通过。“UNLINKED”属性不可用于UDT。随着提示“关于UNLINKED的句法错误”的错误消息,编译停止。该规则也应用于STL源程序声明。UDT通常不能被装载到S7CPU中,但总是存储于“离线”的S7用户程序中。背景对于数据块的情况,“UNLINKED”属性意味着DB块关联。在程序中非一体化的仅存储于装载存储器中不占据任何空间。“UNLINKED”属性在数据块头部声明(图03)图037在编译一个DB块时提示“Syntaxerrorwith2#1100_1100”在数据块中,如果给一个BYTE类型的变量赋值一个二进制数字作为初始值,当编译S7-SCL源程序时将出现“2#...的句法错误”的错误消息。例如:Var1:BYTE:=b#2#1100_1100;在S7-SCL中,数据块由STL编译器生成。如果在数据块的DB块准备部分和DB块赋值部分同时初始化变量,必须使用STL专用符号。因此,在Byte类型的变量的示例中,仅允许指定十六进制数作为初始值。S7-SCL符号(例如B#2#1100_1100)只能用于代码区,因为S7-SCL编译器在代码区被使用。补救方法:将二进制数改为十六进制数作为初始值,例如:Var1:BYTE:=b#16#cc;注意:S7-SCL符号在S7-SCL在线帮助下“Notationofconstants”(常量符号)中可用,且STL符号在STEP7在线帮助下“HelponSTLEnteringanddisplayingconstants”(STL帮助输入和显示常量)中可用。8到达交换区最大长度(64Kbytes)如果自动化设备的接口大小超限(64Kbytes)时会出现这条信息.每个单独元素的声明需要2个字节。当声明多重背景或者用户自定义数据类型(UDTs)时也会像结构类型(STRUCT)一样每个单独的结构占用2个字节。补救方法:按照下面的方法可以清除上面描述的情况。1.缩短变量名的长度为一个有效的最小值。2.删除不必要的声明事件。3.例如,通过声明一个BOOL类型的ARRAY使用ARRAY事件声明,而不是单独的命名每个位。4.如果1到3点都没有帮助,分割S7-SCL源程序为两个或更多的S7-SCL源。9在CPU运行的时候出现错误消息:16#8184当传输参数为ANY类型的块在STL中被调用的时候,STRING数据类型的参数可能不会被传送。这是一个系统属性。补救方法:如果您需要只在STL中传送STRING类型的参数,如果可以使用其它数据类型,可以用ARRAY或者STRUCT数据类型来代替STRING数据类型。10消息:“可测试的组件或实例已达最大数量”如果在S7-SCL源代码中通过“ToolsSettingsTab:Compiler”激活了“GenerateDebugInfo”选项,则上面所示的警告会在编译时出现。这意味着部分源代码不能查看,因此不能单步运行。这是由于S7-SCL的内部系统限制。如果编程时使用的结构包含多于254个组件,则在编译后的测试中只能察看到最前面的254个组件,其它的组件不能显示。11编译时错误信息“Incorrectblock”在S7-SCL的源文件中使用了GOTO声明,在声明的跳转标签部分没有键入分号(;)。补救方法:设置了跳转标签后,编译器期望后面有可执行的语句。如果在跳转标签后写入分号,编译器就可以识别到没有给该跳转标签分配语句。图04