检测数据输出到外部设备

 

PLC,工业机器人等外部设备连接的时候,烙影可以将检测结果数据通过串口或网口输出到此类设备。烙影不但支持开放协议如Modbus RTU,而且支持自定义协议与外部控制系统进行通信。

 

检测结果数据可以通过不同方式输出给外部控制系统,下面详细介绍两种常见的数据输出方式。鉴于各位用户可能使用不同品牌的PLC或工业机器人,为了阐述方便本文使用模拟软件工具TCP232.exe(该软件来自网络,版权归原作者所有,下载地址: http://www.lottav.com/dlres/tcp232.rar)模拟外部控制系统。

 

一. 外部触发方式启动运行时输出

 

准备工作

1. 一台运行烙影,一台支持自由协议的PLC。两台设备都通过网线连接到交换机。烙影的网口IP地址设置为192.168.1.5, 掩码为255.255.255.0PLC 网口IP地址设置为192.168.1.25,掩码为255.255.255.0

2. 烙影与外部设备通信方式使用自由协议进行通过网口通信(自由协议在有些设备文献中可能称无协议通信,自定义格式通信等)。

3. 使用bqzm.rar文件中的图像建立一个虚拟相机,并创建工程。(bqzm.rar文件下载地址: http://www.lottav.com/noing/imagebase/bqzm.rar

4. 烙影专用版,或使用VIP用户登录或使用模拟端口。

 

注意事项:

1. 当交换机有多台设备,IP地址如果有冲突,可以设置其他地址,但是需要保证在一个网段上,即掩码必须相同。

2. 在测试过程中,请保证没有任何杀毒软件或防火墙对烙影或模拟工具进行通信限制,否则,可能无法正常运行。

 

详细操作步骤如下:

打开上一节创立的包含bqzm.rar文件中图像的工程。设置检测任务类型为“默认”类型,同时将数值1数值2变量属性设置为输出变量值

 

l         点击助理->设置菜单,显示选项窗口。将脚本启动方式设置为外部硬件触发 不选择模拟自由协议主站消息复选框。

l          点击控件->尺寸测量类->检测直线菜单,添加一个直线拟合算子。双击算子,显示参数设置窗口,在专用页设置如下参数:

 按照同样的方法,添加一个直线拟合算子,将检测区旋转90度,参数设置如下:

复制刚才创建的两个算子,将新复制的两个检测算子检测区分别移动到对边。

 

l          点击运行->通信设置菜单,

请求消息设置为A| B, 响应消息设置为${var.n[1]:1.2},${var.n[2]:1.2}

点击按钮,将IP地址设置为102.168.1.5,端口设置为5188注意:与PLC的连接端口和IP地址一样)。

l         点击“运行->编辑脚本”菜单,显示编辑脚本窗口。新增两个名称分别为CALC_LEFTTOP_POSCALC_RIGHTBOTTOM_POS子流程。

 

STARTUP流程中输入:

sight1.shot()

 

IF (mvs.req == "A")       

       SET p1 = GOTO(CALC_LEFTTOP_POS)

         

       var.n[1]=p1.x

       var.n[2]=p1.y  

ELSE

     SET p2 = GOTO(CALC_RIGHTBOTTOM_POS)    

    

      var.n[1]=p2.x

      var.n[2]=p2.y

END

sight1.refresh()

 

当接收到PLC发送过来的消息后,首先视场从相机抓图,然后判断消息内容,如果接收到A,进入子流程计算标签的左上角位置坐标。如果接收到B,进入子流程计算标签的右下角坐标。坐标的x,y分别赋值给变量n[1]n[2]后,刷新视场。

 

该段脚本执行完成后,烙影将根据响应消息的定义,将变量n[1]n[2]发送给PLC注意:n[1]n[2]变量必须设置为输出变量值

 

CALC_LEFTTOP_POS流程中输入:

sight1.lind1.inspect()

sight1.lind2.inspect()

 

SET ln1= LINE2(sight1.lind1.p1,  sight1.lind1.p2)

SET ln2= LINE2(sight1.lind2.p1,  sight1.lind2.p2)

 

SET b, pt = poi2j(ln1, ln2)

 

IF(b)

    RETURN(pt)

ELSE

    pt =POINT(0,0)

    RETURN(pt)

END

上面的语句调用lind1,lind2直线拟合算子的inspect方法进行拟合,将两直线拟合算子的p1,p2读数分别拟合成两条直线,然后使用poi2j函数计算两直线的交点。

 

CALC_RIGHTBOTTOM_POS流程中输入:

sight1.lind3.inspect()

sight1.lind4.inspect()

 

SET ln1= LINE2(sight1.lind3.p1,  sight1.lind3.p2)

SET ln2= LINE2(sight1.lind4.p1,  sight1.lind4.p2)

 

SET b, pt = poi2j(ln1, ln2)

IF(b)

    RETURN(pt)

ELSE

    pt =POINT(0,0)

    RETURN(pt)

END

上面的语句调用lind3,lind4直线拟合算子的inspect方法进行拟合,将两直线拟合算子的p1,p2读数分别拟合成两条直线,然后使用poi2j函数计算两直线的交点。

 

l         点击“运行->启动”菜单启动运行, PLC发送A+回车键,或B+回车, 烙影将检测一次,并将结果发送给PLC

 

 

二. 调用端口读写方法的方式输出

 

在第一节中创建的示例创建一个工程,使用一台三菱PLC或其它支持自由协议的PLC,与作出如下修改。

准备工作

1. 一台含有一个485串口的电脑,一台支持485串口通信的PLC

2. 烙影与外部设备通信方式使用自由协议进行通过网口通信(自由协议在有些设备文献中可能称无协议通信,自定义格式通信等)。

3. 使用bqzm.rar文件中的图像建立一个虚拟相机,并创建工程。(bqzm.rar文件下载地址: http://www.lottav.com/noing/imagebase/bqzm.rar

4. 烙影专用版,或使用VIP用户登录或使用模拟端口。

 

2.1点击助理->设置菜单,显示选项窗口,将脚本启动方式改为执行一次,不选择模拟自由协议主站消息复选框。

 

2.2 点击运行->通信设置菜单,将外部设备设置为自由从站协议(串口),选择连接的端口名称。

点击按钮,将本机的设置于连接PLC连接的串口通信参数,使本机的通信参数与PLC连接串口的通信参数一致。

注意:上面的参数需要与实际PLC相同。

 

2.2 点击运行->编辑脚本菜单,显示编辑脚本窗口。新增两个名称分别为CALC_LEFTTOP_POSCALC_RIGHTBOTTOM_POS子流程。

 

l         STARTUP流程中输入:

 

WHILE(true)

    SET ret, s = fc.getmsg("", CR)

 

    IF(ret)

            trace(s)

 

            IF (s == "A")

                 sight1.shot()

               

                SET p1 = GOTO(CALC_LEFTTOP_POS)

                SET p2 = GOTO(CALC_RIGHTBOTTOM_POS)    

               

                SET ac =  "x1: "..nxt(p1.x,2) ..", y1:"..nxt(p1.y,2)

                ac = ac.. ", x2: "..nxt(p2.x,2) ..", y2:"..nxt(p2.y,2)

               

                fc.sendmsg(ac, CR)

 

                sight1.refresh()

            END

     END    

    delay(100)

AGAIN

 

上面的程序首先接收以回车键结尾的字符,如果接收到A 视场抓图,然后分别进入子流程计算标签的左上角位置坐标和右下角坐标。将坐标连接成字符串,然后发送给PLC。最后刷新视场显示内容。

 

由于脚本启动方式为“执行一次”方式,所以,主程序放在一个WHILE循环当中,每次循环一次后,调用delay函数睡眠100毫秒(注意:delay语句可以不用)。

 

l         CALC_LEFTTOP_POS流程中输入:

sight1.lind1.inspect()

sight1.lind2.inspect()

 

SET ln1= LINE2(sight1.lind1.p1,  sight1.lind1.p2)

SET ln2= LINE2(sight1.lind2.p1,  sight1.lind2.p2)

 

SET b, pt = poi2j(ln1, ln2)

 

IF(b)

    RETURN(pt)

ELSE

    pt =POINT(0,0)

    RETURN(pt)

END

上面的语句调用lind1,lind2直线拟合算子的inspect方法进行拟合,将两直线拟合算子的p1,p2读数分别拟合成两条直线,然后使用poi2j函数计算两直线的交点。

 

l         CALC_RIGHTBOTTOM_POS流程中输入:

sight1.lind3.inspect()

sight1.lind4.inspect()

 

SET ln1= LINE2(sight1.lind3.p1,  sight1.lind3.p2)

SET ln2= LINE2(sight1.lind4.p1,  sight1.lind4.p2)

 

SET b, pt = poi2j(ln1, ln2)

 

IF(b)

    RETURN(pt)

ELSE

    pt =POINT(0,0)

    RETURN(pt)

END

上面的语句调用lind3,lind4直线拟合算子的inspect方法进行拟合,将两直线拟合算子的p1,p2读数分别拟合成两条直线,然后使用poi2j函数计算两直线的交点。

 

2.3 点击运行->启动菜单,运行程序。

 

2.4  PLC端发送A + 回车键,将收到当此检测结果。