项目程序需要根据实际工艺编写,本项目中将工艺分解为回零、传送带运行、吹出器动作、安全门控制、错误处理等部分,分别进行编程处理,之后通过程序在执行系统中的分配,达到各程序协调工作的目的。
由于相同的功能,可以使用不同的编程语言实现,所以编程方式十分自由。本项目中使用ST编程语言编写了数据初始化和与HMI的数据交换两段程序,使用MCC编程语言编写了与运动控制相关的程序,使用LAD/FBD编程语言编写了周期性执行的逻辑控制程序。
1.使用ST编程语言编写程序
在SCOUT软件中,依次打开“D435”→“PROGRAMS”,用鼠标双击其中的“Insert ST source file”即可插入一段ST程序,在右侧窗口会自动打开ST程序编程器。使用ST编程语言编写的程序需要放在IMPLEMENTATION段中,以PROGRAM关键字开头,以END_PROGRAM关键字结尾。程序编写完成后,还需要在INTERFACE段进行声明。比如pInit()程序的ST程序如下。
用相同方法可编写pHMIaus()程序,这里不再赘述。
2.使用MCC编程语言编写程序
在SCOUT软件中,依次打开“D435”→“PROGRAMS”,用鼠标双击其中的“Insert MCC Unit”,即可创建一个MCC程序单元,然后双击其中的“Insert MCC Chart”即可插入一段MCC程序,在右侧窗口中会自动打开MCC编辑器,此时在工具栏上会出现MCC编程工具条,所有的MCC指令都可以通过单击工具条上的按钮插入。下面以pAuto()程序为例,介绍MCC编辑器的操作。pAuto()是用于控制生产线自动运行的程序,在所有轴都回零以后,即开始执行pAuto()中的程序。按照工艺要求,需要先将虚主轴MasterAxis使能,在接到起动信号iboStartBelt以后,传送带轴Conveyorbelt开始跟随主轴做电子齿轮同步,同时将喷嘴阀门的OUTPUT CAM功能使能。由于此时轴Ejector仍处于停止状态,所以喷嘴阀门一直关闭。然后启动虚主轴,如果虚主轴的速度设定值发生变化则要立即生效,因此在程序中需要循环判断设定值是否有变化。在虚主轴启动以后,传送带轴也开始运动。当检测到有停止信号gboProgEnd时,程序结束。
首先插入一个新程序,用鼠标单击编程窗口中的,然后选择工具栏上的轴使能命令
即可插入该功能块,如图3-32所示。
用鼠标双击Switch axis enable命令,在弹出窗口中设置其属性,如图3-33所示。
同理插入Waiting for signal命令,并设置其属性如图3-34所示。
然后插入Gearing On命令,并设置其Parameter和Synchronization选项卡内参数如图3-35和图3-36所示。
然后插入Switch output cam on命令,并设置其参数如图3-37所示。
图3-32 轴使能命令
图3-33 设置轴使能命令属性
图3-34 Waiting for signal命令
图3-35 Gearing On命令(一)
同理插入其他命令块并设置其属性,程序编写完毕后,如图3-38所示。
单击工具栏上的编译按钮完成编译。在SCOUT软件底部Compile/check output信息栏可以查看编译状态,如图3-39所示。
同理完成其他MCC程序的编写和编译。
3.使用LAD/FBD编程语言编写程序
图3-36 Gearing On命令(二)
图3-37 Switch output cam on命令
图3-38 程序编写完毕
图3-39 查看编译状态
在SCOUT软件中,依次打开“D435”→“PROGRAMS”,用鼠标双击其中的“Insert LAD/FBD Unit”,即可创建一个LAD/FBD程序单元,然后双击其中的“Insert LAD/FBDProgram”即可插入一段LAD/FBD程序,在右侧窗口中会自动打开LAD/FBD编辑器。通过工具栏上的按钮或
可以方便地在LAD和FBD两种语言之间切换。在使用LAD时,工具栏上会出现编程工具条
,在使用FBD时,工具栏上会出现编程工具条
,所有的指令都可以通过单击工具条上的按钮插入。
下面以pLADFBD()程序为例,介绍LAD编辑器的操作。本项目中,在安全门打开时,所有设备停止运行,在安全门关闭以后,所有设备重新自动运行。pLADFBD()就是用于各MotionTask重新自动运行的程序。在本程序中,自动判断当前系统状态并重新启动运动控制任务MotionTask_2和MotionTask_3。
首先插入第一行网络,实现如下功能:如果驱动系统未准备好,就跳转到end结束。单击工具栏上的按钮插入一个网络,选中该网络后单击工具条上的
按钮插入一个常闭触点,并在其顶部输入变量名称gboDriveActive,再单击
按钮插入一个线圈,在其下拉菜单中选择JMPN(Jump not),并在其顶部输入变量名称end,如图3-40所示。
图3-40 LAD编程
同理完成第二行网络,如果安全门被打开,那么也跳转到end结束。
接下来的网络3到网络9是对MotionTask的操作。在SIMOTION中MotionTask的状态模型如图3-41所示。(www.xing528.com)
图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所示。
图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所示。
图3-43 任务控制编程
在编写完成后,单击工具栏上的按钮完成编译,在SCOUT软件底部Compile/check output信息栏可以查看编译状态,如图3-44所示。
同理可完成其他LAD程序的编写和编译。
图3-44 编译结果
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。