首页 理论教育 编写ST、MCC和LAD/FBD程序实现数据交换和逻辑控制

编写ST、MCC和LAD/FBD程序实现数据交换和逻辑控制

时间:2023-07-02 理论教育 版权反馈
【摘要】:本项目中使用ST编程语言编写了数据初始化和与HMI的数据交换两段程序,使用MCC编程语言编写了与运动控制相关的程序,使用LAD/FBD编程语言编写了周期性执行的逻辑控制程序。使用ST编程语言编写的程序需要放在IMPLEMENTATION段中,以PROGRAM关键字开头,以END_PROGRAM关键字结尾。当检测到有停止信号gboProgEnd时,程序结束。

编写ST、MCC和LAD/FBD程序实现数据交换和逻辑控制

项目程序需要根据实际工艺编写,本项目中将工艺分解为回零、传送带运行、吹出器动作、安全门控制、错误处理等部分,分别进行编程处理,之后通过程序在执行系统中的分配,达到各程序协调工作的目的。

由于相同的功能,可以使用不同的编程语言实现,所以编程方式十分自由。本项目中使用ST编程语言编写了数据初始化和与HMI的数据交换两段程序,使用MCC编程语言编写了与运动控制相关的程序,使用LAD/FBD编程语言编写了周期性执行的逻辑控制程序。

1.使用ST编程语言编写程序

在SCOUT软件中,依次打开“D435”→“PROGRAMS”,用鼠标双击其中的“Insert ST source file”即可插入一段ST程序,在右侧窗口会自动打开ST程序编程器。使用ST编程语言编写的程序需要放在IMPLEMENTATION段中,以PROGRAM关键字开头,以END_PROGRAM关键字结尾。程序编写完成后,还需要在INTERFACE段进行声明。比如pInit()程序的ST程序如下。

978-7-111-43580-8-Chapter03-44.jpg

978-7-111-43580-8-Chapter03-45.jpg

用相同方法可编写pHMIaus()程序,这里不再赘述。

2.使用MCC编程语言编写程序

在SCOUT软件中,依次打开“D435”→“PROGRAMS”,用鼠标双击其中的“Insert MCC Unit”,即可创建一个MCC程序单元,然后双击其中的“Insert MCC Chart”即可插入一段MCC程序,在右侧窗口中会自动打开MCC编辑器,此时在工具栏上会出现MCC编程工具条978-7-111-43580-8-Chapter03-46.jpg,所有的MCC指令都可以通过单击工具条上的按钮插入。下面以pAuto()程序为例,介绍MCC编辑器的操作。pAuto()是用于控制生产线自动运行的程序,在所有轴都回零以后,即开始执行pAuto()中的程序。按照工艺要求,需要先将虚主轴MasterAxis使能,在接到起动信号iboStartBelt以后,传送带轴Conveyorbelt开始跟随主轴做电子齿轮同步,同时将喷嘴阀门的OUTPUT CAM功能使能。由于此时轴Ejector仍处于停止状态,所以喷嘴阀门一直关闭。然后启动虚主轴,如果虚主轴的速度设定值发生变化则要立即生效,因此在程序中需要循环判断设定值是否有变化。在虚主轴启动以后,传送带轴也开始运动。当检测到有停止信号gboProgEnd时,程序结束。

首先插入一个新程序,用鼠标单击编程窗口中的978-7-111-43580-8-Chapter03-47.jpg,然后选择工具栏上的轴使能命令978-7-111-43580-8-Chapter03-48.jpg即可插入该功能块,如图3-32所示。

用鼠标双击Switch axis enable命令,在弹出窗口中设置其属性,如图3-33所示。

同理插入978-7-111-43580-8-Chapter03-49.jpgWaiting for signal命令,并设置其属性如图3-34所示。

然后插入978-7-111-43580-8-Chapter03-50.jpgGearing On命令,并设置其Parameter和Synchronization选项卡内参数如图3-35和图3-36所示。

然后插入978-7-111-43580-8-Chapter03-51.jpgSwitch output cam on命令,并设置其参数如图3-37所示。

978-7-111-43580-8-Chapter03-52.jpg

图3-32 轴使能命令

978-7-111-43580-8-Chapter03-53.jpg

图3-33 设置轴使能命令属性

978-7-111-43580-8-Chapter03-54.jpg

图3-34 Waiting for signal命令

978-7-111-43580-8-Chapter03-55.jpg

图3-35 Gearing On命令(一)

同理插入其他命令块并设置其属性,程序编写完毕后,如图3-38所示。

单击工具栏上的编译按钮978-7-111-43580-8-Chapter03-56.jpg完成编译。在SCOUT软件底部Compile/check output信息栏可以查看编译状态,如图3-39所示。

同理完成其他MCC程序的编写和编译。

3.使用LAD/FBD编程语言编写程序

978-7-111-43580-8-Chapter03-57.jpg

图3-36 Gearing On命令(二)

978-7-111-43580-8-Chapter03-58.jpg

图3-37 Switch output cam on命令

978-7-111-43580-8-Chapter03-59.jpg

图3-38 程序编写完毕

978-7-111-43580-8-Chapter03-60.jpg

图3-39 查看编译状态

在SCOUT软件中,依次打开“D435”→“PROGRAMS”,用鼠标双击其中的“Insert LAD/FBD Unit”,即可创建一个LAD/FBD程序单元,然后双击其中的“Insert LAD/FBDProgram”即可插入一段LAD/FBD程序,在右侧窗口中会自动打开LAD/FBD编辑器。通过工具栏上的按钮978-7-111-43580-8-Chapter03-61.jpg978-7-111-43580-8-Chapter03-62.jpg可以方便地在LAD和FBD两种语言之间切换。在使用LAD时,工具栏上会出现编程工具条978-7-111-43580-8-Chapter03-63.jpg,在使用FBD时,工具栏上会出现编程工具条978-7-111-43580-8-Chapter03-64.jpg,所有的指令都可以通过单击工具条上的按钮插入。

下面以pLADFBD()程序为例,介绍LAD编辑器的操作。本项目中,在安全门打开时,所有设备停止运行,在安全门关闭以后,所有设备重新自动运行。pLADFBD()就是用于各MotionTask重新自动运行的程序。在本程序中,自动判断当前系统状态并重新启动运动控制任务MotionTask_2和MotionTask_3。

首先插入第一行网络,实现如下功能:如果驱动系统未准备好,就跳转到end结束。单击工具栏上的978-7-111-43580-8-Chapter03-65.jpg按钮插入一个网络,选中该网络后单击工具条上的978-7-111-43580-8-Chapter03-66.jpg按钮插入一个常闭触点,并在其顶部输入变量名称gboDriveActive,再单击978-7-111-43580-8-Chapter03-67.jpg按钮插入一个线圈,在其下拉菜单中选择JMPN(Jump not),并在其顶部输入变量名称end,如图3-40所示。

978-7-111-43580-8-Chapter03-68.jpg

图3-40 LAD编程

同理完成第二行网络,如果安全门被打开,那么也跳转到end结束。

接下来的网络3到网络9是对MotionTask的操作。在SIMOTION中MotionTask的状态模型如图3-41所示。(www.xing528.com)

978-7-111-43580-8-Chapter03-69.jpg

图3-41 MotionTask的状态模型

图中各任务状态的意义如下:

1)TS_INVALID,任务不存在于执行系统中,在执行系统的参数设置中未使用。

2)TS_STOP_PENDING,任务已经收到一个停止信号,但仍然处于RUNNING和STOPPED状态之间。任务仍然可以执行动作直到被停止。

3)TS_STOPPED,任务因下列动作已经被停止:

①调用功能_resetTaskId();

②SIMOTION SCOUT执行了停止。

4)TS_RUNNING,任务因下列功能而运行:

①调用功能_startTaskId()(MotionTasks);

②激活循环任务(BackgroundTask等);

③相关事件已发生(UserInterruptTask等)。

5)TS_WAITING,任务因下列功能之一而处于等待状态:

①_waitTime();

②WAITFORCONDITION。

6)TS_SUSPENDED,任务通过功能_suspendTaskId()被暂停。

7)TS_WAIT_NEXT_CYCLE,TimerInterruptTask正在等待其触发信号。

8)TS_WAIT_NEXT_INTERRUPT,SystemInterruptTask正在等待触发报警,或者UserInterruptTask正在等待触发事件。

9)TS_LOCKED,任务通过功能_disableScheduler()被锁定。

通过系统功能_getStateOfTaskId()可以读取指定任务的当前状态,该功能可以在命令库中找到,如图3-42所示。

978-7-111-43580-8-Chapter03-70.jpg

图3-42 命令库

该功能的返回值为DWORD,返回值指示下列状态:

1)16#0000:指定的任务不存在(TASK_STATE_INVALID);

2)16#0001:从RUN变换到STOP(TASK_STATE_STOP_PENDING);

3)16#0002:任务被停止(TASK_STATE_STOPPED);

4)16#0004:任务正在运行(TASK_STATE_RUNNING);

5)16#0010:任务正在等待(TASK_STATE_WAITING);

6)16#0020:任务被暂停(TASK_STATE_SUSPENDED);

7)16#0040:定时中断任务等待下一个周期(TASK_STATE_WAIT_NEXT_CYCLE);

8)16#0080:用户中断任务或者系统中断任务等待下一个事件(TASK_STATE_WAIT_NEXT_INTERRUPT);

9)16#0100:任务被_disablescheduler禁止(TASK_STATE_LOCKED)。

本程序中,判断当前任务的状态,如果任务处于被停止(16#0002)或暂停(16#0020)状态,那么就使用系统功能_RestartTaskId()重新启动任务。在完成本段程序编写后,程序如图3-43所示。

978-7-111-43580-8-Chapter03-71.jpg

图3-43 任务控制编程

在编写完成后,单击工具栏上的按钮978-7-111-43580-8-Chapter03-72.jpg完成编译,在SCOUT软件底部Compile/check output信息栏可以查看编译状态,如图3-44所示。

同理可完成其他LAD程序的编写和编译。

978-7-111-43580-8-Chapter03-73.jpg

图3-44 编译结果

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈