研华智能设备控制器 MAS控制器

MAS控制器

MAS控制器

简单高效

模版框架快速入門

132

说明

本文是假设您新建项目时已经使用了框架,   但不知从何下手. 透过本文档可以了解Motion Studio提供的4种框架.   使用框架可以缩短开发时间, 避免重复造轮子. 根据我们的经验还能大幅减少误动作的发生.


在您开始编程, 第一步骤必须先验证框架能否正常运行,特别是当您是连接实体控制器与设备时, 需要验证框架的预设值有没有跟您的设备冲突, 预设动作是否正常. 第二步骤则是先了解框架架构的基本知识, 您才能快速定位要在哪边加入您的代码.


除框架外, Motion Studio同时提供对应框架的HMI调适程序, 步骤1与2可以配合HMI调适程序来了解框架, 让您掌握使用的重点.


使用框架3个步骤

步骤1.      先验证框架是否能正常运行

步骤2.      解框架 (主模块与子模块)

步骤3.      如何使用框架

附录A:    框架的范例HMI程序是如何与框架互动?


   提示! 框架里面有范例动作,不改任何代码可直接运行



步骤1. 先验证框架是否能正常运行

如果Motion Studio是连接模拟器(虚拟控制器) 请看方法1. 如果是连接实体控制器请看方法2, 再看方法1.

照着方法1, 2, 您可以了解如何编译/运行框架. 并测试框架的基本功能(回原点, 运行, 停止, 暂停, 回复)

方法1. 使用[虚拟控制器] 验证框架

a. 新建框架项目后,请先编译项目




b. 确认编译成功后, 点击右边VR表工具上的 [下载到控制器] 按钮, 将Tag下载到控制器, 并执行程序
   提示! 只需要运行Main.bas任务, Main启动时会去调用 RunTask 指令将 子模块运行起来。



c. 开启 框架的HMI调适程序, 测试....




   提示!
1. 框架里面已经有范例动作, 您可以点击HMI上的按钮进行回原点, 自动运行...等测试
2. 您会发现有些按钮点击没有作用, 这是因为框架内部有状态机(防呆机制), 具体可看步骤2主模块说明.
3. 运行前可先设断点, eg.在actHome_main() 设断点,点击HMI上的回原点按钮, 看看代码如何运行
4.    HMI调适程序档案路径
        OneTable_HMI.exe :   
         C:\Advantech\Motion Studio\Example\Template\OneTable\OneTable_HMI\bin\Release
        OneStation_HMI.exe :
          C:\Advantech\Motion Studio\Example\Template\OneStation\OneStation_HMI\bin\Release
        TwoStation_HMI.exe :   
         C:\Advantech\Motion Studio\Example\Template\TwoStation\TwoStation_HMI\bin\Release
        TwoStation_TwoHead_HMI.exe :   
         C:\Advantech\Motion Studio\Example\Template\TwoStation_TwoHead\TwoStation_TwoHead_HMI\bin\Release



方法2. 使用[实体控制器] 验证框架

a. <重要> 请开启轴测试工具, 验证下面a1 - a5的硬件设置是否正确!   避免撞机!避免撞机!避免撞机!


a1. 透过JOG移动轴0,1,2 判断框架是否对应机构上的 X1,Y1,Z1

不正确请修改 ProjectDefine.bi   里面的轴编号定义


a2. 透过JOG移动, 并碰触原点/左右限位传感器 确认能否正常动作

不正确请修改子模块xxx_Sub.bas的actInit_xx() 里面的初始化设定

 指令提示 

EMG_LOGIC: EMG逻辑电平

ORG_LOGIC: 原点ORG信号的有效逻辑电平

ALM_EN: : 启用/禁用运动报警功能

EL_EN: 启用/禁用硬件限位功能

ALM_LOGIC: 报警输入信号的有效逻辑电平

EL_LOGIC: 硬限位输入信号的有效逻辑电平



a3. 确认回原点方向是否正确

不正确请修改子模块xxx_Sub.bas的actHome_xx()

注意! 框架范例中并没有下Home指令,实际请根据机构改为 HOMEP 或者 HOMEN


a4. 确认移动单位(PPU)是否正确

不正确请修改子模块xxx_Sub.bas的 actInit_xx()里面的初始化设定

框架预设移动单位 1000, 也就是 MOVEABS 1 会送出 1000 个脉冲

UNIT_DENOM : 移动单位的分母

UNIT_NUM : 移动单位的分子

移动单位量 = UNIT_NUM/UNIT_DENOM


a5. 确认范例动作运行距离是否有超过你的设备行程, 范例动作最长行程 300mm



b. 验证没有问题后, 请照 方法1[虚拟控制器]步骤验证框架

   提示! actInit_xx(), xx看是哪一种子模块会有不一样的后缀名 (TB: Table, SL: Slide, HD: Head)




步骤2. 了解框架

使用框架开发程序首先要清楚 1)框架已具备那些功能? 2)如何扩展功能?
简单的理解:
1. 框架就是毛坯房, 主结构已经好了, 但要成精装修房, 使用者需要依照自己的需求对毛坯房进行施工。
2. 框架是积木(模块)架构, 可以弹性组合. 每个模块是独立任务, 独立运行, 透过信号交互 !


1. 4种框架

Motion Studio提供4种框架, 请依您的设备选择框架对应您的机构. 框架由Task模块与VR变量组成. 在使用前须先了解.

4种框架对应的机构与Task模块

框架
OneTable
OneStation
TwoStation
TwoStation_TwoHead
对应
机构
XYZ平台
单工位单机头平台
双工位单机头平台
双工位双机头平台
Task
模块
  1. Main.bas模块
  2. Table.bas模块
  1. Main.bas模块
  2. Header.bas模块
  3. Slider.bas模块
  1. Main.bas模块
  2. Header.bas模块
  3. Slider.bas模块
  4. Slider2.bas模块
  1. Main.bas模块
  2. Header.bas模块
  3. Header2.bas模块
  4. Slider.bas模块
  5. Slider2.bas模块



4种VR使用范围

Table框架
One Station
Two StationTwo Station Two Head
模块
VR使用范围
模块
VR使用范围
模块
VR使用范围
模块
VR使用范围
Main.bas
0 – 17
Main.bas
0 – 17
Main.bas
0 – 17
Main.bas
0 – 17
Table.bas
100 115
Slide.bas
100–115
Slide.bas
100–115
Slide.bas
100–115


Head.bas
200–215
Slide2.bas
200–215
Slide2.bas
200–215




Head.bas
300–315
Head.bas
300–315






Head2.bas
400415


   提示! 请注意用户自定义的VR不要与下表VR冲突 (详细定义请参考ProjectDefine.bi )


2. 主模块子模块

2.a 框架由主模块跟子模块组成, 并各自独立运行

  • 主模块: 只有1种 Main.bas

  • 子模块: 有3种 Slide.bas, Head.bas, 与Table.bas

以最简单的 Table框架(下图) 来看, 他是由 主模块(Main.bas) 与 子模块(Table.bas)组成. 各自独立运行, 并负责不同的工作.

  • 主模块负责: 1)按钮处理 2)主系统的状态切换(管理) 3)错误处理 4)参数存档

  • 子模块负责: 1)子模块内部状态切换 2)轴与io控制 3)手动按钮处理

20200501


2.b 主模块Main.bas

  • 主要负责1)按钮处理 2)系统的状态切换(管理) 3)错误处理 4)参数存档

  • 处理7种按钮1)回原点 2)进入自动模式 3)运行 3)清除错误 4)存档 5)暂停 6)回复 7)停止 可以参考 main.bas, 里面有详细说明!

  • 主模块不参与轴控制,而是透过内部讯号发命令给子模块(Table), 让子模块处理。

eg. 以回原点来当作例子, 主模块收到<原点按钮>讯号后,是发讯号将子模块的 SetHome_TB 设为1,启动子模块回原点。并等待SetHome_TB变为0



Case 10

If MS_PULSE(HomeStep) Then SetHome_TB=1           发讯号将SetHome_TB 设为1,启动子模块回原点

If SetHome_TB = 0      Then HomeStep = StepDone    并等待SetHome_TB变为0


   提示! 可以参考 main_sub.bas里面的 actHome_main() 代码

  • 主模块的状态

主模块内部有状态机管理, 这个防呆机制, 利用BASIC简单的SELECT CASE指令特性, 让系统在不同状态接收合理的命令, 举例来说, 在Init模式, 只能接受btn_HOME原点按钮, 不接受btn_Auto按钮, 这样就能避免还没有执行回原点机台就运行导致撞机.

框架ProjectDefine.bi里面的状态机定义

#DEFINE SysMode_Init         0            '处于初始化模式中(需要初始化)
#DEFINE SysMode_Home     1            '系统处于Home模式中
#DEFINE SysMode_Ready    2            '系统处于Ready模式中(等待手动操作)
#DEFINE SysMode_Auto      3            '系统处于自动运行模式中(等待自动启动信号)
#DEFINE SysMode_Pause    4            '系统处于暂停模式中(等待恢复暂停)
#DEFINE SysMode_Err        5            '系统处于错误模式中(有错误需要处理)

   

2.c 子模块Slide.bas, Head.bas, Table.bas

a. 主要负责: 1)子模块内部状态切换 2)轴与io控制 3)手动按钮处理

eg. 以回原点来当作例子, 对应上面的主模块例子, 当子模块收到SetHome_TB讯号后,会将子模块内部状态切换到 TBMode_Home,这时子模块会开始执行原点动作,

完成后将SetHome_TB设为1


CASE TBMode_Ready                                                 待机状态
    If SetHome_TB=1 Then TBMode=TBMode_Home     ‘收到模SetHome_TB为1,切换状态为原点状态
    .....
CASE TBMode_Home                                                       回原状态: 完成后切换到Ready模式
    IF actHome_TB() = 1 Then                                    执行原点方法
    TBMode = TBMode_Ready                                    完成后切换到Ready模式
    SetHome_TB = 0                                                 恢复Home引脚
End IF




步骤3. 如何使用框架

1. 主模块跟子模块已经将所有动作分类, 封装成子函式 (如下表格的函式)

2. 基本上就看您需要做什么事情,就在对应的子函式加入代码。当然您也可以全部修改,完全看您的设备需求

3. 修改方式可以参考 20分钟使用框架开发XYZ锁螺丝机

4. 主模块子函式: 在 Main_Sub.bas , 由 7个 act_XXX()与 2个 scan_xxx()函式组成

5. 子模块子函式: 在 Table_Sub.bas , 由 5 个 act_XXX() 函式组成


下图是将2.a图模块再细化成档案与讯号, 模块内部是BASIC代码, 已经分类封装成函式.


附录A: 框架的范例HMI程序是如何与框架代码互动?

如下图, 范例HMI程序每个按钮都已经对应框架的VR, 当按下按钮, 对应的VR会由0变成1

您会发现有些按钮点击后没有作用, 这是因为框架内部有状态机管理(防呆机制), 具体可看步骤2主模块说明.