不同脚本启动方式进行视觉检测

 

烙影两种运行状态,即监视运行状态和检测运行状态,进行视觉检测、视频分析等工作需要在检测运行状态下运行。烙影进入的检测运行状态以后,将执行脚本进行各种检测工作。脚本启动有4种不同方式, 可以根据不同的应用场景选择。

 

脚本启动运行后,首先进入名称为STARTUP的子流程,该流程为系统默认子流程。

 

点击“助理->设置”菜单,弹出“选项”窗口。在“常规”页点击“脚本启动方式”下拉框, 设置脚本启动方式。

 

脚本启动方式分为“手动执行”方式、“外部硬件触发”方式、“周期性执行”方式、“执行一次”4种方式。

“手动执行”方式

“手动执行”方式下,当烙影进入检测运行状态后,每次点击手动触发检测窗口中的下一个按钮后,烙影将执行脚本一次。

脚本执行完成以后,再次点击下一个按钮,重复执行。

“外部硬件触发”方式

这种执行方式通过外部硬件发送的信号来触发,这些信号可以是数字输入输出信号,Modbus RTU访问的软单元数据,还可以是外部控制设备通过RS232,RS485, RS45等发送过来的消息。

 

这种触发方式必须选择外部输入通信设备,否则将无法正常工作。点击运行->通信设置菜单,显示通信设置窗口。

根据外部主机与外部设备的通信方式,可以选择本地数字输入输出信号,Modbus RTU协议,SMT平台,自定义协议以及通串口或网口发送的自由协议。

 

本地数字输入输出信号触发需要在特定视觉主机上进行。使用Modbus RTU协议进行读取软单元数据触发的方式下,可以与任何支持Modbus RTU协议的PLC,数字输入输出模块进行协同工作。自定义协议可以定义与外部设备支持的非标准协议,达到与这些设备协同工作的目的。自由从站协议可以使用在更加灵活的场所,这些外部设备具有更加灵活的协议定义方式,通常有PLC 工业机器人等。

 

不同硬件触发方式比较

类型

工作方式

通信端口

说明

本地数字输入输出

主动

数字输入输出

特定主视觉主机才有

Modbus RTU协议

主动

RS232, RS485串口

标准协议

SMT平台

主动

RS232串口

2轴移动平台

自定义协议

主动

RS232, RS485串口

非标准协议

自由从站协议(串口)

被动

RS232, RS485串口,TCP,UDP网口

由外部控制设备发送消息触发

自由从站协议(网口)

被动

TCP, UDP

由外部控制设备发送消息触发

 

很多商用电脑如台式机,手提电脑并没有合适串口或网口,在学习过程中可以启用模拟自由从站协议功能。下面举例说明如何模拟外部设备消息进行触发执行。

 

1.  点击助理->设置菜单,设置脚本启动方式为外部硬件触发,选择模拟自由协议主站消息复选框,点击确定按钮。

      

 

 

2.  点击运行->通信设置菜单,显示通信设置窗口。

设置外部设备为自由从站协议(TCP) 请求消息设置为A,相应消息设置为B,分割符设置回车,点击确定按钮完成设置。

 

3.  点击运行->启动菜单,进入检测运行状态,同时显示模拟消息窗口。

  

输入发送消息A,点击发送按钮,将收到响应消息B

“周期性执行”方式

周期性执行方式常用在智能监视场所,烙影进入检测状态后,周期性地产生触发信号,执行脚本程序。在选项窗口的常规页,选择该方式以后,可以设置触发频率,即每分钟触发执行的次数。

触发频率越大,每分钟触发执行的次数越多,否则越少。

“执行一次”方式

这种方式下,烙影进入检测状态以后,立即执行脚本,而且只会执行一次。下面举例说明使用执行一次方式调用一段脚本程序。

 

1.  点击助理->设置菜单,设置脚本启动方式为执行一次,设置检测类型为默认,点击确定按钮。

  

 

2.  点击运行->编辑脚本菜单, 显示编辑脚本窗口。

3.   点击右下角按钮, 显示定义子流程窗口。

   

    输入名称为sub1,点击新增按钮,建立个子流程。同样步骤建立一个名称为sub2的子流程。

   

    点击右上角关闭按钮结束。

4.   编辑脚本窗口,设置子流程为SUB1

   

输入trace("entering sub1")。同样地,在SUB2子流程输入trace("entering sub2")

5.   编辑脚本窗口,设置子流程为STARTUP。输入如下语句:

   var.n[1] =0

   DO

       var.n[1] =1 +  var.n[1]

 

       IF(mod(var.n[1], 2) == 0)

            GOTO(SUB1)

       ELSE

           GOTO(SUB2)

       END

 

       delay(1200)

   UNTIL(false)

 

上面的语句首先将变量n[1]设置为0 然后进入DO..UNTIL循环。将n[1]变量的值每次加1,然后最新的结果取2的余数,如果为0,进入执行SUB1子流程,否则进入SUB2子流程。最后,等待1.2秒时间后反复循环。

    

 

点击运行->启动菜单,可以看到输出窗口中调试页不断输出如下内容: