4PLC的CE认证
1.关于S7-200 SMART PLC CE认证的内容?“S7-200 SMART 自动化系统满足下列 EC 指令的要求和安全相关目标,并符合欧盟官公报中发布的可编程控制器的统一欧洲标准 (EN)。
● EC 指令 2006/95/EC(低压指令)“设计用于特定电压限值内的电气设备”
– EN 61131-2:可编程控制器 — 设备要求和测试
● EC 指令 2004/108/EC(EMC 指令)“电磁兼容性”
– 辐射标准 EN 61000-6-4:AI:工业环境
– 抗扰度标准 EN 61000-6-2:工业环境”
2.什么是CE认证?为什么要CE认证?
CE认证代表欧洲统一(CONFORMITE EUROPEENNE)认证。产品取得“CE”标志表明产品符合欧盟《技术协调与标准化新方法》指令的基本要求,这是欧盟法律对产品提出的一种强制性要求。无论产品的产地是否在欧盟,只要想在欧盟市场自由流通,就必须取得CE认证,然而“CE”认证标志是一种安全认证标志而非质量合格标志。
3.什么是EEC、EC、EN?
European Economic Community(EEC):欧洲经济委员会
1957年3月25日,法国、德国、意大利、荷兰、比利时和卢森堡,在罗马签订了《建立欧洲经济共同体条约》,该条约于1958年1月1日生效,标志着欧洲经济共同体的正式诞生。EEA里面的负责制定法规的最高行政部门是欧洲经济委员会EEC, 所以欧洲经济委员会制定的指令结尾是EEC。如70/156/EEC:1970年EEC第156号指令。
EC (European Commission):欧洲委员会
1993年11月1日,《马斯特里赫特条约》正式生效,欧盟正式诞生。欧盟委员会(European Commission),是欧洲联盟起草法令的机构。所以欧盟委员会制定的指令结尾是EC。如2004/108/EC:2004年EC第108号指令。
EN(欧盟标准) :欧盟的国家标准类似我国国家标准GB。无辐射标准 EN 61000-6-4、抗扰度标准 EN 61000-6-2等。
高级工程师必备‖详解西门子SCL语言编程附案例,赶紧收藏
第一:S7-SCL简介
S7-SCL(Structured Control Language 结构化控制语言) 具有以下特点:
是一种类似于PASCAL的高级编程语言,符合国际标准IEC 61131-3PLCopen基础级认证适用于 SIMATIC S7-300 (推荐用于CPU314以上CPU), S7-400, C7 and WinACS7-SCL 为 PLC 做了优化处理,它不仅仅具有 PLC 典型的元素(例如 输入/输出,定时器,计数器,符号表),而且具有高级语言的特性, 例如:循环、选择、分支、数组、高级函数
S7-SCL 其非常适合于如下任务:
复杂运算功能
复杂数学函数
数据管理
过程优化
第二:S7-SCL 与 STL
S7-SCL 可以编译成 STL, 虽然其代码量相对于 STL 编程有所增加,但我们更关心的是程序结构和程序的总体效率。类似于计算机行业的发展,汇编语言已经被舍弃,取而代之的是 C/C++等高级语言。S7-SCL 对工程设计人员要求较高,需要其具有一定的计算机高级语言的知识和编程技巧。
第三:S7-SCL 的安装与使用:
STEP7 标准版并不包括 S7-SCL 软件包及授权,需单独购买,STEP7 Professional 版包括了S7-SCL 的软件包及授权,安装即可。在 S7 程序中,S7-SCL 块可以与其它 STEP7 编程语言生成的块互相调用。S7-SCL 生成的块也可以作为库文件被其它语言引用。由于 S7-SCL 程序由 ASCII 文本构成,所以它非常容易被导入或导出。
第四:S7-SCL 软件兼容性
不同 S7-SCL 软件版本与 STEP7 及操作系统之间的兼容性:图中的 X 表示兼容,- 表示不兼容
仅仅 S7-SCL V5.1+SP1或以后版本支持
仅仅 S7-SCL V5.1+SP1或以后版本支持
仅仅 S7-SCL V5.1+SP1或以后版本支持
第五:S7-SCL 简单示例
在下面的例子中,编写一个完成软件滤波程序的 FB1, 程序每调用一次 FB1, 其采集一个新的过程变量,存储在 FIFO 堆栈中,共 10 个周期的采样值,超过 10 个周期的采样值将被舍弃。程序将此 10 个采样值中的最大最小值找出,并计算出除去最大值及最小值之后的平均值。
平均值(滤波输出)=(10 个采样值之和-最大值-最小值)/8 平均值(非滤波输出)=转换后的实时采样值
新建项目,插入 SCL Source
双击,SCLSource 打开 SCL 环境,并使用 FB 模板
更改 FB编号
使用参数模板
编辑 FB参数
使用调用功能块向导
调用 FC105
由于在 SCL中调用了 FC105, 还需在 SIMATIC Manager 将 FC105 添加到项目中
FC105 复制到当前项目中
FB1 参数定义
FC105调用
下面的程序中使用了判断条件,在此使用 IF 模板
使用 IF, FOR-NEXT等高级语言的方式,很容易就可编写出滤波程序
在菜单 Option-Customize中选择生成调试信息
在菜单的 File-Compile编译没有错误后,就可以生成 FB1 了,在 OB35 中可以调用 FB1,下载整个项目后监控 OB35:
输出参数 SCALED_VAL 为实时的采样值
输出参数 SCALED_FILTED 为滤波后的采样值
假设OB35的执行周期为T, 如果某时刻采样值发生变化,那么此数值将不同于以前的多个采样值,此数值可能被认定为最大值或最小值,而最大值或最小值将被忽略,这样就实现了滤波的效果。当采样值发生变化,并维持了大于等于2T的时间,此时的输入值的两次采样值会被滤掉一个采样值,而另一个采样值将参与平均值的运算。
可以在高级语言界面下监控 FB1
至此,一个简单的 S7-SCL 程序示例就结束了,本文中仅是对其非常简单的作了介绍。任何编程语言都有其复杂性,并非一朝一夕就可掌握。
第六:S7-SCL 常见问题
问题:S7-SCL 支持哪些 STEP7 块,与其它语言有什么关系?
解答:S7-SCL 支持如下 STEP7 的块:OB,FC,FB,DB,UDT。在 S7 程序中,S7-SCL 块可以与其它STEP7 编程语言生成的块互相调用。S7-SCL 可以被编译成 STL, S7-SCL 生成的块也可以作为库文件被其它语言引用。由于 S7-SCL 程序由 ASCII 文本构成,所以它非常容易被导入或导出。
问题:如何规范地的开发一个 S7-SCL 程序?
解答:开发一个 S7-SCL 程序,应当遵循如下流程:
规划需要的块类型,即程序的整体结构。如:是否仅仅一个 FC就可满足要求,还是需要生成其它 OB, FB 等
规划子任务(FB,FC等等)
定义各个子任务的之间输入/输出接口
定义各个子任务在原文件中的顺序及调用关系
定义符号表
编译检查
下载调试
问题:如何加密我的 S7-SCL 程序?
解答:S7-SCL 程序加密与 STL 程序加密方法几乎一样,用户可以在程序中加入关键字:
KNOW_HOW_PROTECT,再进行编译即可,下图中的 FC1 在编译后,即出现了加锁保护的图标 。注意:提供给最终用户的项目中应当删除 S7-SCL 源代码,否则用户在双击加密的块后(例如下图中的 FC1),依然可以关联打开 S7-SCL 源代码。
问题:为什么双击打开 S7-SCL 类型的程序后,显示的格式却是 STL 格式?
解答:S7-SCL 程序编译后生成的执行代码实际上为 STL 格式,如下图中的 FC1, 虽然其标示为 SCL格式,但如果用户将 Source 目录中的 FC1 的源文件删除后,再双击打开 FC1 后,显示的将为 STL 格式。
注意:提供给最终用户的项目中如果删除 S7-SCL 源代码,用户将只能看到 STL 格式的程序,稍微复杂些的 S7-SCL 程序在 STL 格式下几乎是无法阅读的。此方法类似于加密的效果。
问题:什么是 OK Flag?
解答:在 S7-SCL 程序中,OK 是一个布尔类型的特殊本地变量。它用来显示块执行是否正确。
OK 标志的使用与 STL 编程中对于 FC/FB 的 ENO 处理(STL 是用状态字的 BR 位来保存状态)非常相似。在程序的开始,可以将 OK 标志赋值为 TURE ,如果程序执行有错误(例如 0 作为除数),则当程序退出时,用户通过程序将 OK 标志改写为 FALSE ,此数值将被存储在输出参数 ENO 当中。OK 标志是一个系统变量,不需要定义,如果用户希望在程序中使用此标志,可以在 S7-SCL 编程菜单 Options>Customize>Compiler 中,应当选择 Set OK flag. 项。否则 ENO 将无法被评估。
OK 标志使用的例子:
OK:= TRUE;
Division:= 1 / IN;
IF OK THEN // 除法操作正常
;// 此处可以添加在除法操作正常情况下,其它的用户程序
ELSE //除法操作不正常;// : END_IF;
问题:在 STL 中可以读取一个组织块的信息 (例如 OB1 中的循环时间),在 S7-SCL 中是否存在同样的可能?
解答:STEP7 中的任意 OB 块在生成之后,其内部都自动生成一些特有的临时变量,例如 OB1 中的变量 OB1_PREV_CYCLE 即为 CPU 上个扫描周期所用的时间。在 S7-SCL 编辑器中,通过“Insert > Block Template > OB”创建一个 OB 模板。在缺省情况下,此模板的临时变量区域将创建一个 ARRAY OF BYTE 类型的临时变量。此区域与 OB 块的临时变量区域是相对应的,但由于没有变量名称标识,并且数据类型也不相同,所以用户使用起来非常不方便。如果用户想要使用S7-SCL 格式的 OB 块内的特有变量,请按下列步骤进行:
1.在路径STEP7 的安装路径 \Step7\S7DATA\S7wiz 下,包含所有 OB 块的 STL 格式模板, 可以使用写字板打开这些模板 (例如 awl), 并复制相应变量定义。
2.创建一个新的 S7-SCL源文件并插入刚才复制的变量定义。
3.调整 S7-SCL源文件中的语法结构
4.在这个程序的开始部分,可以设置 "Title" 和"Version" , 例如 Title=' ' 和 Version= '0.1'
5.在 BEGIN语句后面插入一个分号,至此,即完成格式修改。
另外,也可以打开本文中的 S7-SCL 例子目录中的 OB_Templ 项目,其中包括了 44 个 S7-SCL 源文件格式的组织块。
问题:如何理解 FC/SFC 的输出参数 RET_VAL(返回值)?
解答:对于此问题,如果读者对 PASCAL 语言或者高级编程语言非常熟悉,可能此问题就非常容易解释。许多 SFC (系统功能) 都有输出参数 RET_VAL (返回值) ,它提供一个可供评估的错误代码。STEP 7 在线帮助中提供有更多关于系统功能和输出参数 RET_VAL 的信息。通过在 SIMATIC 管理器中选中 SFC 然后按“F1”键可以获取相关的在线帮助信息。
同样,一个 FC 也可以返回一个结果,下面给出了一些例子,说明了如何在 S7-SCL 中调用带有返回值 (RET_VAL) 的功能 (FC 或 SFC)。
定义 FC1, 函数类型为 INT (返回值)
调用一个系统功能 (SFC24):当调用系统功能 SFC 24“TEST_DB”(测试数据块) 时,得到关于 CPU主内存中一个数据块的信息。SFC24 确定指定 DB 的数据字节数,并检查该 DB 是否受到写保护。
选定 DB 所包含的数据字节数通过参数“DB_LENGTH”输出,参数“WRITE_PROT”包含关于选定 DB 的写保护 ID 的信息 (FALSE 表示没有写保护)。
问题:在 S7-SCL 程序中,PLC 中的地址标识与 STL/LAD 中的地址标识有何区别,使用中有何注意事项?
解答:在 S7-SCL 程序中,PLC 中的地址标识与 STL/LAD 中的地址标识基本相同,方便了编程人员快速掌握 S7-SCL 语言。下图为 PLC 中的 S7-SCL 程序地址标识格式:
图中一些格式有些特殊,实际上,下面的格式在 S7-SCL 中都是正确的。
DB1.D0.0:=DB1.DBX0.1;
DB1.DB1:=DB1.DBB1;
DB1.DW2:=DB1.DBW2;
DB1.DD4:=DB1.DBD4;
QX0.0:=Q0.0;
IX0.0:=I0.0;
MX0.0:=M0.0;
所以说,在一般情况下,编程人员依旧可以 STL 的标识方式用于 S7-SCL。
注意:如果数据块编号及地址都使用了间接寻址方式,则必须使用 S7-SCL 特定的标识方式,例如
如下语句:
STATUS_1:=WORD_TO_BLOCK (INDEX).DW [COUNTER]; (此格式正确)
STATUS_1:=WORD_TO_BLOCK (INDEX).DBW [COUNTER]; (此格式错误)
S7-SCL 中的 PLC 地址格式
x 可以为 0 至 65535 之间的数字(绝对地址)
y 可以为 0 至 7 之间的数字(位地址)
对于其它 FB,OB,DB, T,C 等等的标识格式,S7-SCL 格式基本与 STL 格式相同,此处不做说明。
问题:为什么用户人工输入的程序在编译时经常提示语法错误?
解答:S7-SCL 程序和所有的高级语言一样,有着自己特定的语法,而很多编程人员容易在人工输入程序时忽视语法格式,这样就造成编译错误。因此强烈建议编程人员使用 S7-SCL 的模板向导。
在菜单 Insert 中,提供了 Block Call, Block Template, Control Structure, 三个向导,用户可以通过使用此向导,提高输入效率。例如在下图中指出了两个常见错误,用户如果使用向导,就不容易出错误:
S7-SCL 常见的录入格式错误
问题:如何对 S7-SCL 程序中的数据块及静态变量初始化?
解答:S7-SCL 程序中对数据块及静态变量初始化和 STL 语言格式类似,下面的程序列出了正确格式:
DAT1 : REAL := 100.5; A1 : INT := 10 ;
A2 : STRING[6] := 'FACTOR';
A3 : ARRAY[1..12] OF REAL := 0.0, 10(100.0), 1.0;
问题:什么是“AT ”指令,如何使用?
解答: AT 指令是 S7-SCL 中特有的一个指令,初学者可能会忽略此指令,或者对其理解不够深刻。AT 指令在 S7-SCL 中有着非常重要的地位,很多应用程序都必须使用此指令。下面将对此指令进行详细讲解。
AT 指令可以使用户能够以不同的数据类型来访问一个已经声明的变量。此指令类似于高
级编程语言中的“继承”概念。此指令有如下特点:
特点一:定义仅在块内有效,在接口参数中不出现
特点二:在块中可以使用其它数据类型的视图
特点三:它只是让另外一些变量继承了某个变量的特性,仅仅数据类型是新的,其它特性相同。
下面将通过具体程序对以上三个特点进行说明,首先定义 UDT100,UDT200,大小都为 12 个字节, 但结构不同。UDT100 包括一个 DATE_AND_TIME 数据类型(8 个字节),还包括一个实数(4 个字节);UDT200 包括 6 个字(12 个字节);在 FC2 定义输入参数 Buffer, Frame1,Frame2:
特点一:定义仅在块内有效,在接口参数中不出现。块内定以的输入参数有 3 个,但仅在块内有效,在接口参数仅出现 Buffer 输入参数
AT 指令特点说明(a)
AT 指 令 特 点 说 明 (b)
AT 指令应用例子 1:在 STL 中,用户如果希望取得 MB0 的某一位的数值是非常容易的,例如第 3 位,直接寻址 M0.2 就可以了。而在 S7-SCL 中,由于其具备高级语言的特点,所以定义的变量的绝对地址一般是不显现的。因此在 STL 中简单的操作,在 S7-SCL 中却复杂起来。但是通过使用AT 指令即可解决这个问题。下图中的例子中,当输入的某个字节,其输出依次为此字节的 8 个位。
AT 指令应用例子 2:在 S7-SCL 中,ANY 数据类型的使用,经常会伴随着 AT 指令的使用,下面的例子演示了如何拆分改写 ANY 数据类型中的内容。程序执行结果相当于:
CALL "BLKMOV"
SRCBLK :=P#DB1.DBX 0.0 BYTE 10 RET_VAL:=MW0
DSTBLK :=P#DB1.DBX 0.0 BYTE 10
AT 指令在使用当中,还有如下注意事项:
AT指令用于对某个变量进行其它数据类型的声明时,必须放在此变量的声明语句后面
AT指令生成的变量不可以初始化
AT指令用于对某个变量其它数据类型的声明时,占用内存大小要小于等于此变量的长度
AT指令用于对某个变量其它数据类型的声明时,如下的组合是允许的
AT 指令使用限制
AT 指令用于 ANY 类型在 VAR_OUT 中是不允许的
Elementary (基本数据类型包括) :BOOL, BYTE, WORD, DWORD, INT, DINT, DATE, TIME, S5TIME, CHAR
Complex (复杂数据类型包括) :ARRAY, STRUCT, DATE_AND_TIME, STRING
问题:S7-SCL 程序中如何使用多重背景?
解答:S7-SCL 程序中可以使用多重背景,下面的程序列出了正确格式,声明完成后,在程序中即可调用:
Supply1 : FB10; //将 Supply1 定义为 FB10 类型
Supply2,Supply3,Supply4 : FB100; //将 Supply2,Supply3,Supply4 定义为 FB100 类型
问题:如何在 S7-SCL 程序中实现数据块间接寻址?
解答:S7-SCL 程序中对数据块间接寻址提供了良好的支持,编程也很简单。下面的程序列出了正确格式:
STATUS_1:= DB11.DW[COUNTER]; //字节间接寻址
STATUS_2:= DB12.DX[WNO, BITNO]; //位间接寻址,用户改变 WNO,BITNO 数值即可STATUS_1:= Database1.DW[COUNTER]; // Database1 为 DB 类型的本地变量STATUS_2:= Database2.DX[WNO, BITNO];
STATUS_1:= WORD_TO_BLOCK_DB(INDEX).DW[COUNTER];
//INDEX 被定义为 BLOCK_DB 数据类型,COUNTER 为整数数据类型,这样可以实现/数据块编号, 字节地址同时间接寻址,此功能是一种功能很强间接寻址方式。
//以下是数据块直接寻址方式格式,仅供参考。
STATUSBYTE :=DB101.DB10; //字节直接寻址格式
STATUS_3 :=DB30.D1.1; //位直接寻址格式
MEASVAL :=DB25.DW20; //字直接寻址格式STATUSBYTE :=Status_data.DB10;
STATUS_3 :="New data".D1.1;
MEASVAL :=Measdata.DW20;
STATUS_1 :=WORD_TO_BLOCK_DB (INDEX).DW10;
问题:在 S7-SCL 程序中调用 FC/FB 与在 STL/LAD 中调用 FB/FC 有何区别?
解答:在 STL/LAD 程序中调用 FB 可以不把参数填写完整,但在 S7-SCL 程序中调用 FB 时,必须把FB 参数填写完整;对于FC 的调用S7-SCL 与STL/LAD 区别不大。强烈建议编程人员使用S7-SCL 的模板向导调用 FB。下图的程序说明了两者的区别:
问题:为了将 S7-SCL 中的位数据类型(BYTE, WORD 或 DWORD)转换到“REAL”数据类型时, 需要使用哪种数据类型转换程序?
解答:为了将 S7-SCL 中的位数据类型(BYTE, WORD 或 DWORD)转换到数字数据类型“REAL”时,需要使用以下指令:
从 BYTE 到REAL:“DINT_TO_REAL(DWORD_TO_DINT(BYTE_TO_DWORD(value))”
从 WORD到 REAL:
“DINT_TO_REAL(DWORD_TO_DINT(WORD_TO_DWORD(value))”
从 DWORD到 REAL:
“DINT_TO_REAL(DWORD_TO_DINT(value))”
注意事项:用户在将 BYTE, WORD 或 DWORD 数据类型转换到 “REAL” 数据类型时,S7-SCL 中常见的错误可以参考下例:
从 WORD 到 REAL:“DWORD_TO_REAL(WORD_TO_DWORD(value))”(错误程序)。
如果执行了这一转换,会得到错误的结果。
原因:DINT_TO_REAL 函数将把源数据转换并按照 IEEE REAL 的格式存储到目的变量,而
DWORD_TO_REAL 仅仅是从源数据拷贝位串至目的变量。
因此,为了获得正确的“ REAL ”数,必须总是通过中间步骤“ DWORD_TO_DINT ”和“DINT_TO_REAL”实现。
问题:在 S7-SCL 中如何区分某个变量名是本地变量,还是符号名?
解答:S7-SCL 中本地变量与符号名的引用有如下区别:
如果引用中只有变量名,则此变量为本地变量,如:Motor_Status:=Motor_1
如果引用中变量名称上包括“”,则此变量为符号名,如:Motor_Status:=“Motor_1”
问题:如何访问一个字符串中的单个字符?
解答:对于字符串中的单个字符,使用如下的访问格式,是错误的:
MB10 := str[5] 这样的表达式无法实现将字符串的第 5 个字符送至 MB10 中。方法:可以使用 IEC 函数 MID 来得到字符串的某个部分,例子如下:
VAR
str : STRING[20];
END_VAR
MB10:=CHAR_TO_BYTE(STRING_TO_CHAR(MID(IN:=str,L:=1,P:=5)));
问题:如何在访问结构时优化运行时间?
解答:如果需要多次访问一个结构,可在 S7-SCL 代码中也创建一个同样类型的临时变量来优化运行时间。用户可在临时变量声明中生成此变量,并在程序中多次使用它。假设用户希望完成如下操作:
DB4.Field.Value:= DB4.Field.Value1*DB4.Field.Value2*DB4.Field.Value3;
可见以上操作数都存在于 DB 的结构当中,在不进行优化的情况下,这段程序在运行时,将多次打开数据块,进行多次读取操作,程序运行所需时间较多。
定义数据块
解决方法:在 FC4 中声明一个与 DB4 中“field”变量结构相同的临时变量(例如“Temp”)。然后使用如下语句从 DB4 中将数据拷贝到临时存储区内:
Temp:=field;
对以上所描述的语句,可将 DB 变量“DB4.Field”替代为临时变量“Temp”:
field.Value:=Temp .Value1*Temp .Value2*Temp .Value3;
此时数据块中的数值被复制到 CPU 的 L 堆栈当中,在后续程序中,可以使用这些 L 堆栈中的临时变量替代原来数据块中的变量,由于 CPU 对 L 堆栈的访问速度远快于对数据块的访问速度,这样就实现了数据访问的优化。
e
优化数据块访问
注意事项: 变量声明“VAR_TEMP”存储在 CPU 的堆栈中。这可能会在小型 CPU 模块中导致堆栈溢出。因此使用临时变量要慎重。
问题:如何用布尔型变量优化 IF 语句来缩短循环时间?
解答:在优化 IF 语句后,S7-SCL 代码将变得更为紧凑,这样代码序列的处理就更快。程序计算的布尔类型数据相同,优化后事件仅分配给一个变量。相对于简化格式,IF 语句完整格式编程时需要加载另一个跳转和一个常量 (TRUE 或 FALSE) 。
示例 1:
当一个模拟量值(REAL 变量)超过限定(此处是 100)时设置一个比特位。
函数“IF_Test”包含了查询限定值的 IF 语句。整个 IF 语句可用以下语句代替:
IF_Test:= (100 < value) 。
IF 语句不同格式(a)
示例 2:
查询在一个 WORD 变量中指定比特位 X 是否置位。
这里函数 BitX 的 IF 语句由以下语句代替:BitX:= status = 16#0004。
IF 语句不同格式(b)
注意事项: 紧凑的 IF 语句加快了程序处理速度,但是优化处理可能使得程序变得不够清晰和难于理解。
问题:为什么我的 S7-SCL 程序在自己的计算机上编译正常,在别人的计算机上却打不开或无法编译?
解答:应当确认其它计算机是否安装了 S7-SCL 环境,而且要检查 S7-SCL 环境版本,例如:S7-SCL V5.3 SP1 提供了新的函数(SEL,MAX,MIN,LIMIT,MUX,BYTE_TO_INT,INT_TO_BYTE 等等),旧
版本无法识别这些函数。如果用户程序中使用了这些函数,在旧版本的 S7-SCL 环境下无法通过编译。
问题:为什么我的程序与别人的程序完全一致,却通不过编译?
解答:除了前面问题所需注意的事项外,符号表是初学者经常忽略的因素,这里额外单独强调一下。用户在编写 S7-SCL 程序源代码时,对符号进行良好的定义,可以使编程清晰易懂。而初学者经常仅仅复制其他人的源代码,却忘记复制符号表,以至于在 S7-SCL 程序中经常出现不清楚的名称定义,从而导致编译错误。
问题:为什么包含比较类型为 WORD/DWORD 的变量的 IF 语句不能被编译通过?
解答:当在 IF 指令内比较操作数时,如果变量声明为 WORD 和 DWORD 类型,S7-SCL 仅允许比较操作“= ”和“<> ”,而不允许比较操作“> ”和“< ”。作为一种补救措施,建议将变量类型声 明为 DINT。如果变量的类型不能声明为 DINT,在此比较之前则必须首先进行类型转换。
问题:当给一个双字类型变量分配了一个实型数值时,出现非法数据类型错误
解答:当给一个双字类型变量分配了一个实型数值时,出现"Invalid data type"消息,是由于数据类型不匹配造成的。注意仅当数据类型为 BOOL, BYTE, WORD 和 DWORD 时,允许对 DB 块的绝对地址访问。下图举例说明何时数据类型必须转换.
问题:在输出窗口中的错误消息与程序行数字不符
解答:当 S7-SCL 程序行数超过 65535, S7-SCL 编译器把行计数器重新从 1 开始计数。例如,在 S7-SCL 源程序中,一个编程错误出现在第 65537 行, 以下行数字将被输出:"F: L 00001 error xyz”, 而不是 "F: L 65537 error xyz"
解决方法:双击 S7-SCL 编译器输出窗口中的错误消息,光标将跳至不正确的行。如果编程错误不在所指示的行,你可以使用菜单命令"Edit > Go To > Line..."然后输入" 65536 + 显示错误数字"跳至有错误语句的行。
问题:"The FB is not available or the instance declaration is missing"
解答:此消息出现在当一个 FC/FB/SFB/SFC 块在程序中被调用时,该块却不包含在块文件夹下。
解决方法 1:手动复制相关的程序块到 BLOCK 文件夹中然后重新编译 S7-SCL。
解决方法 2:调用 FC/FB/SFB/SFC 时,使用 S7-SCL 菜单中的 Insert>Block Call 向导,S7-SCL 将会自动将此 FC/FB/SFB/SFC 复制到当前的 BLOCK 目录中,从而避免以上情况出现。
问题:"Character strings have different lengths"
解答:示例中包含 FC1 和 FC2 带有字符串变量"name_1" 与"name_2", 当 FC1 被编译时,得到警告"Character strings have different lengths"。在运行期间,在赋值的右侧("name_1")可能是一个比左侧所允许的 STRING 变量("name_2")具有更长长度的 STRING 字符串。
解决方法:我们建议予左侧的变量"name_2"声明一个长度为 254 字符的 STRING 字符串。如果你编译具有这种声明的功能 FC2,上述警告将不会出现。
注意:如果你声明长达 254 字符的 STRING 字符串,将会需要更大的本地装载存储空间
问题:CPU 消息"STOP due to unknown OP code"
解答:当你在 S7-SCL 中使用转换功能"WORD_TO_BLOCK_DB(...)",并且编辑以下语句时该消息会被发出:
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));
问题:在编译 UDT 时出现"Syntax error with UNLINKED"
解答:如果一个 UDT 在用"UNLINKED"声明之前已标识,该 UDT 不会被编译通过。"UNLINKED"属性不可用于 UDT。编译将会以错误消息"Syntax error with UNLINKED"结束。该规则也应用于 STL 源程序声明。UDT 通常不装载到 S7 CPU 中,而总是存储于"离线"的 S7 用户程序。
相关知识:对于"UNLINKED"数据块属性,意味着 DB 块有以下特性:
仅仅存储于装载存储器中
不占据任何 RAM空间。
"UNLINKED"属性声明在数据块的头部
与程序没有关联关系
数据块的 UNLINKIF 属性
问题:在编译 DB 时出现"Syntax error with 2#1100_1100"
解答:如果你赋一个二进制数字作为初始值给一个数据块中 BYTE 类型的变量,编译 S7-SCL 源程序时将出现错误消息"Syntax error with 2#..."
例如:Var1: BYTE:= b#2#1100_1100;
在 S7-SCL, 数据块由 AWL 编译器生成。如果你在数据块准备部分和赋值部分同时初始化变量,你必须使用 AWL 专用符号。因此在示例中的 BYTE 类型的变量,仅允许指定十六进制数字作为初始值。S7-SCL 符号 (例如 B#2#1100_1100) 只可用在代码区,因为 S7-SCL 编译器只在代码区被使用。解决方法:将二进制数字改为十六进制数字作为初始值,
例如:Var1: BYTE: = b#16#cc;
问题:为什么我的程序编译通过,但无法运行?
解答:当使用 S7-SCL 语言时,建议使用的 CPU 类型 最低为 CPU314。即便如此,用户也应当注意系统资源的限制。例如:当定义临时变量的时候,不要超过所用 CPU 技术参数中的本地数据大小的限制。否则可能导致程序无法运行。
问题:为什么我的程序无法被监控?
解答:为了程序可以被监控,在编译 S7-SCL 程序时,在菜单 Options>Customize>Compiler 中, 应当选择 Create debug info 项。注意:Create object code 项也应当被选择,否则程序编译时仅仅作语法检查,而不生成可执行程序。Optimize object code 项也应当被选择,此选项将优化程序代码。
问题:在 S7-SCL 哪些变量在监控时无法被显示?解答:在监控时,如下变量无法被显示:
复杂数据类型不被显示,但复杂数据类型中的基本数据类型可以被显示(例如字节数组中的某个字节)
DATE_AND_TIME、STRING、BLOCK_FB、BLOCK_FC、BLOCK_DB、BLOCK_SDB、TIMER、
COUNTER 不被显示
以符号格式访问的数据块不被显示,例如:"myDB".DW0, "myDB" 为某个数据块的符号名注意:有时候监控变量的数据超出了 CPU 能够提供的资源数量,也将出现部分无法显示的情况。
相关问答
PLC高级电气工程师证书..._电气工程师_帮考网
PLC高级电气工程师证书是由国家职业技能鉴定中心颁发的,是对PLC高级电气工程师技能水平的认证。该证书是电气工程师职业资格证书的一种,具有国家承...
pLc是什么类型证书?
PLC(可编程逻辑控制器)证书是一种职业技能证书,主要用于认证从事PLC选型、编程、应用系统设计、集成和维护的人员。PLC证书分为初级、中级、高级和师资证,代...
刚毕业学习PLC方面能考什么证书?
可以考有关PLC的国家资格证书。例如“电子设计工程师认证”,或者是注册电气工程师。PLC即可编程逻辑控制器,它采用一类可编程的存储器,用于其内部存储程序,执...
工业平板电脑与PLC怎么连接编程?工业平板EN50155认证服务态...
[回答]我平时用平板就是看下电影、电视,浏览网页,你安装PLC太专业了吧嵌入式平板电脑与一般所讲的4U型工业平板电脑的差距就是在于体积上的大小。如果不...
面试官问对plc有什么认识怎么回答-职业科普-醉学网
[最佳回答]如果面试官问对PLC(可编程逻辑控制器)有什么认识,可以从以下几个方面来回答:1.定义:PLC是一种工业控制计算机,它是由控制器、输入输出(I/O)模块、通...
西门子plc工程师证书含金量?
1.这个证书的含量一般,企业内部认可2.西门子考证的证书的含金量,以及认可范围。西门子证不是最重要的,总要的是在考证的过程中,能学到多少东西到手3.PLC证...
深圳哪个plc培训学校好点?
深圳plc培训学校比较好点的有:深圳龙丰自动化培训、八方汇PLC培训、深圳伯俊PLC培训、深控PLC培训1、深圳龙丰自动化培训龙丰自动化培训学校是一所专注于培...
plc电气工程师怎样入行..._电气工程师_帮考网
要成为PLC电气工程师,通常需要以下步骤:1.获得相关学历:PLC电气工程师通常需要拥有相关的学历背景,如电气工程、自动化工程、计算机科学等。2.学...
本人从事PLC编程10年,想办培训班但没有经验,请教各位给指点一二可以吗?
说几句我个人的看法,仅供参考!首先,长期干一份工作疲倦了想换一下环境是很正常的,所以你这个想法是值得鼓励的。但是,办培训机构所要考虑的事情就很多了,...当...
学plc编程用什么电脑合适?
常用编程软件的话,配置参数上不能太差,电脑配置需求参考如下:1.操作系统:windows7(建议使用64位)2.内存:最少2GB(推荐4GB及以上)3.显卡:显存1G...1...