图片
图1-1物料分拣设备场景
图片
图1-2设备IO信号分配
PART2
功能描述
该设备有四条输送线,分别是进料输送线1、出料输送线1、进料输送线2、出料输送线2,在进料输送线末端各有一个视觉传感器,用于识别产品的型号,在出料输送线的首端分别有两个气缸,用于产品的分拣。
其动作流程如图所示:
图片
图1-3设备动作流程图
PART3
项目案例功能实现
该项目按照新建FacotyIO任务场景,导出变量表,新建博图项目、导入变量,新建SCL功能块,编写SCL程序,设备仿真调试几个步骤进行。
1.新建FactoryIO任务场景;
图片
图1-4新建物料分拣场景
本案例中使用的FactoryIO场景是V2.5.0版本,使用的是其自带的分拣工作站场景。
2.选择驱动器类型为西门子S7-PLCSIM并导出变量表;
图片
图1-5导出场景变量表
图片
图1-6导出标签(变量表)
3.新建博图项目,并导入变量表;
图片
图1-7导入变量表
注意:新建的项目使用FactoryIO提供的工程模板。
4.新建SCL功能块;
图片
图1-8新建SCL功能并在OB1中调用
5.编写SCL程序
图片
图1-9设备模式程序
图片
图1-10自动控制程序
图片
图1-11 设备停止及信号输出
图片
图1-11关联PLC变量
6.设备仿真调试,先将PLC进行仿真,FactoryIO再连接仿真器调试。
图片
图1-12启动博图PLCSIM仿真
图片
图1-13Factory IO连接PLCSIM
注意:连接成功后,在状态栏中会有一个绿色对勾的标识,之后可以在场景视图中进行仿真调试了。
PART4
总结
此案例是基于FactoryIO仿真硬件,使用SCL语言编写的控制程序。通过此案例,可以让初学者掌握SCL的基本 *** 迹神作、编程思路和编程方法。首先scl语言和lad(梯形图)语言都是可编程控制器中的一种编程语言,用来编写程序。
另外SCL(Structured Control Language 结构化控制语言) 具有以下特点:
适用于 S7-300 (推荐CPU314以上), S7-400,S7-1200,S7-1500, C7 and WinAC
SCL 为 PLC 做了优化处理,它不仅仅具有 PLC 典型的元素(例如 输入/输出,定时器,计数器,符号表),而且具有高级语言的特性, 例如:表达式,赋值运算,运算符,循环, 选择,分支,数组 ,高级函数等。
SCL 其非常适合于如下任务:
复杂运算功能
复杂数学函数
数据管理
过程优化
2.相关问题
关于scl语言的相关问题可以参考西门子官网手册:
文档链接:https://support.industry.siemens.com/cs/attachments/109481384/2008928131135970.pdf
3.scl语言的编写环境
scl的编写环境可以在单独的一个块里面,也可以在一小段程序里面,并且可以和其它的语言混合编写,简称混编。例如:程序段2是lad编写,程序段3是scl编写。
这里我们添加新块fc,选择scl语言就可以了,下面是在fc块中的编写环境。(这里可以看出和C语言有些相似)和平常写程序时一样,上面是常用的指令,右侧是基本指令,中间是写程序的地方。
二、表达式和运算符
1.算术表达式
1.介绍
1、算术表达式既可以是一个数字值,也可以是由带有算术运算符的两个值或表达老州猛式组合而成。
2、算术运算符可以处理当前 CPU 所支持的各种数据类型。如果在该运算中有2个 *** 作数,那么可根据以下条件来确定结果的数据类型:
如果这 2个 *** 作数均为有符号的整数,但长度不同,那么结果将采用长度较长的那个侍桥整数数据类型例如:INT + DINT = DINT
如果1个 *** 作数为有符号整数,另一个 *** 作数为无符号整数,那么结果将采用另一个长度较大的有符号数据类型(包括无符号)例如:SINT+SUINT=INT
如果这 2 个 *** 作数均为无符号整数,但长度不同,那么结果将采用长度较长的那个整数数据类型,例如:USINT + UDINT = UDINT
3、如果,一个 *** 作数为整数,另一个为浮点数,那么结果将采用浮点数的数据类型,例如,INT +REAL= REAL
4、如果两个 *** 作数均为浮点数,但长度不同,结果将采用长度较长的那个浮点数的数据类型,例如:REAL+LREAL=LREAL
2.算术表达式使用
算术表达式有:加法, 减法, 乘法,除法,模运算和幂运算。
创建一个数据块,使用一个结构体变量(struct)变量类型为int,C是最后的结果;
然后C:=A+B,就是将A+B的和放到C里面,其中:=是赋值的意思。
最后打开仿真,输入数值,就可以计算出结果;这里是以加法举例,后面的乘除取模和幂运算大致相同。
3.例题
使用scl语言计算这个公式:(A*(B+C))的2次方/4
这样套进去就可以了。
2.关系表达式
1.介绍
关系表达式就是由 = 、<>、>、<、>=、<= 组成的表达式。如果条件成立为:TRUE,不成立为:FALSE;比较后的结果必须是放在Boll量类型的变量中。
数据类型中的所有变量都可以进行比较:整数/浮点数、二进制数、字符串。
对于以下数据类型/数据组,只能比较相同类型的变量像:TIME、LTIME日期和时间、ARRAY。
比较浮点数
1、比较浮点数时,待比较的 *** 作数必须具有相同的数据类型,而无需考虑具体的“IEC 检查”(IEC Check) 设置。2、对于无效运算的运算结果(如,-1的平方根),这些无效浮点数(NaN)的特定位模式不可比较。即,如果一个 *** 作数的值为 NaN,则比较表达式“==:等于”和“<>:不等于”的结果将为 FALSE。
比较字符串
比较字符串时,系统将对各字符的代码进“a”大于“A”)。并按照从行比较(如,左到右的顺序进行比较。第一个不同的字符将确定比较的结果。
比较定时器、日期和时间
系统无法比较无效定时器、日期和时间的位模式1、如DT#2015-13-33-25:62:99.999 999 999)如果某个 *** 作数的值无效,则指令“手:等于即,的结果将为FALSE<>:不等干
2、并非所有时间类型都可以直接相互比较,如需要将其显式转换为其它时简类型S5TIME。此时然后再进行比较(如,TIME),
3、如果要比较不同数据类型的日期和时间,则需将较小的日期或时间数据类型显式转换为较大的日期或时间数据类型。。例如,比较日期和时间数据类型DATE和DTL时,将基于DTL进行比较
如果显式转换失败,则比较结果为 FALSE
比较 WORD 数据类型的变量与S5TIME 数据类型的变量
将WORD 数类型的变量与 S5TIME 数据类型的变量进行比较时,这两种变量都将转换为 TIME 数据类型。WORD变量将解释为一个 S5TIME 值。如果这两个变量中的某个变量无法转换,则不进行比较且输出结果 FALSE。如果转换成功,则系统将基于所选的比较指令进行比较 *** 作。
比较结构
1、结构比较功能仅适用于固件版本为 V4.2及以上版本的S7-1200系列CPU,以及固件版本为V2.0及以上版本的S7-1500系列CPU2、如果两个变量的结构数据类型相同,则可以比较这两个结构化 *** 作数的值。比较结构化变量时,待比较 *** 作数的数据类型必须相同,而无需考虑具体的“IEC 检查(IEC Check) 设置。但一个 *** 作数为VARIANT,而另一个为 ANY时除外。创建程序时,如果数据类型未知,则可使用 VARIANT 数据类型。这样,就可比较任意数据类型的结构化变量 *** 作数。此外,还可以比较VARIANT或ANY 数据类型的变量。
ARRAY 数据类型
1、元素的数据类型必须相同。
2、两个 ARRAY 的维数必须相同。3、所有维数的元素数量必须相同,而具体的ARRAY 限值无需相同
2.使用
相等为TRUE,不相等为FALSE。
3.逻辑表达式
1、逻辑表达式由两个 *** 作数和逻辑运算符(取反:NOT,与:AND/&,或:OR,异或:XOR)组成。
2、逻辑运算符可以处理当前 CPU 所支持的各种数据类型。如果两个 *** 作数都是 BOOL数据类型则逻辑表达式的结果也为BOOL数据类型。如果两个 *** 作数是位字符串,则结果也为位字符串。
3、逻辑表达式中一个 *** 作数为 BOOL 类型而另一个为位字符串时,必须先将BOOL类型的 *** 作数显式转换为位学符串类型
1.取反 (NOT)
取反指令可以将1变为0,将0变为1;是按2进制位取反。
2.与(AND/&)
与指令(按位与):全1为1,有0为0.
3.或(OR)
或指令(按位或):有1为1,全0为0。
4.异或(XOR)
异或指令:相同为0,相异为1。
4.运算符的优先级
运算符及其运算顺序
-通过运算符可以将表达式连接在一起或相互嵌套。
表达式的运算顺序取决于运算符的优先级和括号。基本原则如下所示
1、算术运算符优先于关系运算符,关系运算符优先于逻辑运算符。
2、同等优先级运算符的运算顺序则按照从左到右的顺序进行。
3、赋值运算的计算按照从右到左的顺序进行括号中的运算的优先级最高
5.赋值运算
1、通过赋值运算,可以将一个表达式的值分配给一个变量。赋值表达式的左侧为变量,右侧为表达式的值。2、函数名称也可以作为表达式。赋值运算将调用该函数,并返回其函数值,赋给左侧的变量。
3、赋值运算的数据类型取决于左边变量的数据类型。右边表达式的数据类型必须与该数据类型一致。
在Step7中仿真SCL程序可能存在一些问题。仔腔首先,您需要检查SCL程序是否有语法错误。其次,您可以尝帆仔试使用不同态戚汪的编程器运行SCL程序,以便更好的排查问题是否出现在仿真上。如果以上均无效,则您可以联系Simatic欢迎分享,转载请注明来源:内存溢出
评论列表(0条)