TIAPortal软件SCL编程常见问题
问题1:如何监视循环指令?
正常监视如图1所示,无法监控到循环程序内部的执行情况。
图1监视页面
点击监视按钮
可以看到FOR循环内部没有任何变量显示
如果希望监视循环内部执行情况,可以在监视中的SCL程序任意位置,如图2中操作。
图2点击监视循环
激活监视循环后,跳出窗口如图3所示,点击按钮是。
图3警告窗口
之后,就可以如图4所示的,看到循环内的情况,不过这会造成增加CPU循环时间,并且只能监控到第一个循环。
图4监视循环问题2:CASEOF指令如何实现顺控功能?
通过CASEOF指令,可以比较容易实现类似顺控的功能,并且编程方法便捷、可读性较好。可以使用类似于下面的编程方式实现类似顺控的功能:
CASE步骤号OFInt类型步骤号,一般位于FB的Static
0:hr步骤0
逻辑编程一般初始步不执行具体操作,只是初始化,然后是等待开始
IF条件THEN
步骤号:1;
ELSIF错误THEN
步骤号:100;
ENDIF;
1:hr步骤1
逻辑编程
置位复杂指令i。REQ
IF复杂指令i。DONETHEN
复位复杂指令i。REQ
步骤号:2;
ELSIF复杂指令i。ERROR
复位复杂指令i。REQ
步骤号:100;
ENDIF;
2:hr步骤2
逻辑编程
置位复杂指令m。REQ
IF复杂指令m。DONETHEN
复位复杂指令m。REQ
步骤号:3;
ELSIF复杂指令m。ERROR
复位复杂指令m。REQ
步骤号:100;
ENDIF;
。
。
。
n:
步骤n
逻辑编程
置位复杂指令x。REQ
IF复杂指令x。DONETHEN
复位复杂指令x。REQ
步骤号:n1;
ELSIF复杂指令x。ERROR
复位复杂指令x。REQ
步骤号:100;
ENDIF;
。
。
。
100:hr错误处理逻辑编程
步骤号:0
ENDCASE;
复杂指令0复杂指令调用
复杂指令1
。
。
。
复杂指令n
输出Busy、Done、Status等
复杂指令一般包含:通信、运动控制、读配方、写数据日志、读写数据记录、定时器等异步指令,这些指令通常不放在CASE语句的逻辑中,而是在最后统一调用。
一般通过复杂指令完成位、错误位等作为跳转条件。如果是定时器,也可以通过判断时间是否到达作为跳转条件。
例子:使用CASEOF指令编程运动控制,第一步相对运动以200mms的速度移动10000mm,第二步速度控制以100mms的速度移动15s,第三步停止。
图5为FB块的参数部分,图6为程序。
图5FB参数
图6源程序问题3:如何导入导出SCL源文件?
可以将SCL编写的块,或者全局DB以及UDT导出成源文件,可以导出块或UDT,也可以导出所关联嵌套的块或者UDT,如图7所示。
外层块
SCL编写OBFCFB
全局DB
UDT
背景DB
工艺DB
PLC变量
嵌套
无
可以导出
可以导出
可以导出
可以导出但没有变量
不可以导出
不可以导出
UDT
可以导出
可以导出
可以导出
可以导出但没有变量
不可以导出
不可以导出
SCL编写FCFB
可以导出
背景DB
可以导出但没有变量
导出方式参见图7。
图7导出源文件
通过选择仅所选块导出当前块,即表中绿色底色的部分。通过选择包含所有关联块,导出嵌套的UDT、程序块,即表中红色底色的部分。
导入源文件方式如图89所示。
图8导入源文件
图9从源生成块
通过导入的方式可以导入单独内容的源文件,也可以导入包含多个内容的源文件。问题4:如何使用经典Step7的接口型式?
在TIAPORTALV15。1之前,SCL块的接口方式和其他编程语言是一致的。从V15。1开始,SCL块的接口方式可以修改成和经典STEP7相同的方式,操作方式如图10所示。
图10块接口设置
在TIAPORTAL选项中选择设置
左边选择SCL(结构化控制语言)
在块接口选择文本视图,此设置默认选择表格视图。设置完,再新建的SCL块即使用所选择的视图。之前新建的SCL块不变。
如图11所示为文本视图的SCL。
图11文本视图SCL问题5:为什么GOTO指令会编译报错?
如图1213所示,在LADFBD中的SCL编写GOTO指令时会编译报错,所以不要在这里编写GOTO指令。建议在LADFBD中的SCL不要使用过于复杂的编程,如果需要实现较为复杂的程序,建议单独把SCL组织成为一个子程序,然后在LADFBD中调用。
图12编译报错
图13语法错误