一、整体概述
设备用于通过视觉定位智能算法实现高精度极耳焊接。相机精准捕捉锂电池两端角位置,结合焊接点偏移参数,实现极耳寻址,自动计算21条焊接点空间坐标并实时传输至PLC,适配多规格锂电池焊接需求。
现场设备调试图片:
设备硬件:
PLC:西门子S71500
光源:图灵微视(华周智能)DKZ4-24V-4-AC
相机:海康MV-CU120
二、开始搭建前工作
1. 设备动作逻辑流程图
根据客户工艺绘制逻辑流程图,具体流程图在说明流程时展示。
2. 制作GS电气PLC IO表
第一次使用GS软件时操作步骤如下:
(1)运行GS软件;
(2)打开资源管理器界面;
(3)在算子库PLC模块内找到PLCIO配置算子;
(4)打开配置界面会给出默认文件,下载模版文件另存为一份,点击保存,模版文件默认使用PLC品牌为三菱。
(5)打开存储的路径文件,根据实际进行修改,地址功能填写寄存器地址是用于读取还是写入,读取填Intput,写入填Output,两种都需要则填写Intput/Output,PLC品牌列填写使用PLC厂商,PLC型号列填写PLC具体型号,数据类型填写寄存器地址的数据类型,寄存器地址填写要通讯的寄存器地址编号,默认缺省值填写默认寄存器地址,功能描述填写寄存器地址实际作用。
三、 流程搭建
3.1. 资源管理器:
第一步:
连接相机,使用相机资源管理器算子。
点击相机路径选择,路径跳转到软件根目录选择HardwareResources文件夹中的Camera文件夹。
根据相机型号选择Camera文件夹中对应的驱动库,设备使用海康相机,使用HIKGigECamera.dll加载显示到相机资源管理器列表,点击执行打开相机,完成相机连接。
第二步:
配置PLC寄存器地址资源以及连接西门子S71500PLC,通过PLCIO配置和西门子PLC初始化算子实现。
通过PLCIO配置算子导入配置过的PLC文件为主任务设计器制作寄存器写入和读取做准备。
设备使用西门子S7-1500PLC,需使用S7协议交互,通过PLC初始化算子选择PLC型号为,协议类型为S7协议,输入IP和端口号,完成连接功能。
第三步:
使用日志工具算子创建存储日志信息文件夹,后续和主任务设计器日志记录工具配置做运行日志存储。
第四步:
连接图灵威视光源控制器,使用光源对象算子厂商选择图灵威视,通过RS232通讯线连接,通讯模式选择串口,配置连接端口号,控制器有4个光源通道,因此通道数量设置4,完成光源连接。
第五步:
配置使用变量,包括控制流程运行变量(开始、停止、左侧拍照状态、右侧拍照状态)、位置变量(存储HMI开放参数)、发送位置变量(发送引导到焊接位置结果)等。
3.2. 任务设计器:
第一步:PLC交互流程开发
PLC交互流程为工作流程,主要用于实现读取PLC通知指令根据指令执行对应动作,流程图如下:
步骤1.
判断开始变量:开始变量在打开软件时默认值为false,为false时说明设备没有在运行,通过条件分支判断开始变量是否为true。
为 true时使用日志记录工具,详细记录流程启动时间、触发源等关键信息,为后续问题追溯以及HMI显示提供依据。
步骤2.
变量初始化:通过修改变量算子实现每次启动变量的初始化,确保每次启动时流程处于统一基准状态,从源头规避因变量残留值引发的逻辑混乱,例如开始、停止等变量
步骤3.
发送视觉软件准备OK:使用西门子PLC寄存器赋值算子给PLC提供准备OK地址赋值,算子引用资源管理器内的西门子PLC初始化与PLCIO配置算子输出资源,通过地址信息下拉列表找到准备OK地址,加到表格内,发送true,PLC接收到设备继续运行。
步骤4.
判断发送成功:使用条件分支算子判断西门子PLC寄存器赋值算子输出状态,状态为true表名写入值成功,状态为false表名写入失败。
写入失败后程序不用进行,记录日志并通过运行流程执行停止流程。
在停止流程中通过修改变量将开始变量写为false,停止变量写入true,此时PLC交互流程执行结束。
步骤5.
判断是否停止:前三步已经将准备工作制作完,实际使用时操作员点击软件开始按钮后即可为实现长时运行,因此使用循环算子将后续动作循环执行,当操作员点击停止时再将循环退出,配置引用停止变量,当按下停止时执行停止流程,即可结束运行。
步骤6.
判断达到停止时间:与PLC制定了2000毫秒一次的心跳交互,需要GS在2000毫秒实现一次心跳地址值由true再false的一个过程,制作时写入true后需要间隔一段时间再写入false,防止出现交互过快导致PLC程序没未收到,通过条件分支对心跳状态变量结果为判断,为0时说明达到心跳发送时间。
通过寄存器写入算子设置心跳地址值为true
设置后通过条件分支算子判断写入结果,写入失败提供日志记录,写入成功则通过初始化计时器算子重置心跳时间,并使用修改变量算子将心跳状态设置为1。
步骤7.
记录当前时间:当给心跳地址写入true后需要间隔一段时间才能写入false,先通过码表算子记录时间,引用初始化计时器算子。
通过条件分支判断心跳地址是否为1,当为1时说明已经将心跳地址写为true。
使用条件分支算子判断码表记录时间是否达满足600毫秒。
满足则通过寄存器写入算子将心跳地址写入false,即可完成一次心跳过程。
由写入true到写入false这一段需要间隔,同样新一轮的心跳过程也需要有间隔,通过修改变量将心跳状态设置为2,并再使用一个初始化计时器算子用于开始计时新一轮心跳过程的启用时间。
再次使用码表算子记录新一轮心跳过程的启用时间,引用初始化计时器1。
通过条件分支算子判断心跳地址是否为2,为2说明已经给心跳地址写入过false。
通过条件分支算子判断记录新一轮心跳时间是否大于800毫秒,大于则说明可进行新一轮的心跳过程,使用修改变量将心跳地址变量设置为0,即可完成2000毫秒内实现心跳发送。
步骤8.
读取PLC指令:通过西门子PLC寄存器读取算子读取指令,算子引用西门子PLC初始化以及PLCIO配置输出资源,添加需读取的寄存器地址算子基于已完成的PLC 初始化建立通信连接实现读取,并输出读取结果。
步骤9.
判断初始化:判断PLC通知初始化首先使用类型转换将初始化地址结果转换为字符串。
使用文本对比算子引用转换结果与文本True做对比(与PLC规定此寄存器地址为True时表明需要初始化)。
然后使用条件分支判断对比结果是否为true,为true通过寄存器赋值算子将此地址值复位并且通过修改变量将拍照次数变量设置为0,设备默认从右侧开始定位,当拍照次数变量为0时说明设备要在右侧定位,右侧定位完成后将此变量设置1,拍照次数变量为1时说明设备要在左侧定位,定位完成后将此变量设置为0。
步骤10.
判断标定信号:判断PLC通知初始化首先使用类型转换将标定地址结果转换为字符串。
使用文本对比算子引用转换结果与文本True做对比(与PLC规定此寄存器地址为True时表明需要标定)。
然后使用条件分支判断对比结果是否为true,为true通过寄存器赋值算子将此地址复位。
标定前需要先控制光源亮度,使用光源控制算子,算子引用资源管理器光源对象资源实现光源控制,设备光源使用通道号为2,控制通道2亮度为160。
打开光源后通过运行流程调用自动标定流程执行并等待执行完成。
执行完成后再使用光源控制算子将控制器2通道亮度设置为0,关闭光源。
再判断相机标定状态结果,当标定状态为1时表示标定成功;当标定状态为2时表示标定失败,使用多分支工具引用相机标定状态,增加两个分支,分别为1和2。
通过寄存器赋值算子将标定结果写入到寄存器中,写入后将相机标定状态变量通过修改变量算子修改为0,及时对其进行复位,避免异常。
步骤11.
判断拍照信号:判断PLC通知相机拍照同样使用类型转换将拍照地址结果转换为字符串。
使用文本对比算子引用转换结果与文本True做对比(与PLC规定此寄存器地址为True时表明需要拍照定位)。
然后使用条件分支判断对比结果是否为true。
为true通过寄存器赋值算子将此地址值进行复位。
通过多分支工具判断拍照次数变量值,当此变量值为0时表明设备将在右侧进行拍照,配置如下:
在右侧使用设置的光源亮度进行定位,使用光源控制算子配置通道2光源亮度来自右侧光源亮度变量,右侧光源亮度变量值由HMI界面传递。
设置光源亮度后执行右侧定位流程,通过运行流程算子调用,设置为等待流程结束。
定位流程结束后通过光源控制将光源关闭。
当拍照次数变量值为1时表明设备将在左侧进行拍照,使用光源控制算子配置通道2光源亮度来自左侧光源亮度变量,左侧光源亮度变量值由HMI界面传递。
通过运行流程算子调用左侧定位流程,设置为等待流程结束,执行结束后同样使用光源控制算子将光源关闭。
左、右侧定位后会给相机处理状态变量赋值,通过多分支工具解析此变量,当值为1时表示定位成功可以发送焊接点位置。
通过寄存器赋值算子将发送位置变量写入到PLC寄存器中。
并通知PLC处理成功,可以进行下一次拍照。
当值为2时说明处理失败,通知PLC需重新拍照。
第二步:右侧定位流程开发
根据流程图,右侧定位流程主要负责定位和运算:
步骤1.
图像采集:通过面阵相机算子实现采图,算子引用资源管理器内相机资源管理器算子输出的相机对象,相机列表选择设备相机名称,采集一张图进行定位即可,设置采集模式为单帧采集,配置曝光时间、伽马等参数。
步骤2.
判断采集状态:通过条件分支判断图像是否采集成功。
如果不成功使用日记记录并将相机处理状态变量赋值为2,PLC流程通过多分支工具对此变量进行判断从而确定右侧定位失败。
步骤3.
定位右侧X方向产品直线:通过扫描直线算子检测电池边缘,扫描直线算子引用采集到图像,在图像显示窗口使用矩形2ROI将边缘线框住根据电池边缘打光效果,设置扫描直线算子边缘极性为暗到亮,边缘位置为最后,算子扫描到线段将线段数据输出。
步骤4.
判断X方向直线定位是否成功:通过条件分支引用步骤3检测直线算子状态变量判断检测是否成功,检测成功程序继续执行,检测失败使用日志记录并将相机处理状态变量设置为2,反馈到PLC流程。
步骤5.
定位右侧Y方向产品直线:通过扫描直线算子检测电池Y方向边缘,扫描直线算子引用采集到图像,在图像显示窗口使用矩形2ROI将边缘线框住根据电池边缘打光效果,设置扫描直线算子边缘极性为暗到亮,边缘位置为最后,算子扫描到线段将线段数据输出。
步骤6.
判断Y方向直线定位是否成功:通过条件分支引用步骤5检测直线算子状态变量判断检测是否成功,检测成功程序继续执行,检测失败使用日志记录并将相机处理状态变量设置为2,反馈到PLC流程。
步骤7.
定位两线交点:电池右侧X和Y方向直线都检测出来后通过两线关系算子定位两条线的交点位置,算子引用两个扫描直线算子输出线段自动运算出两线交点位置,此时定位产品右侧交点实际在相机视野中心位置。
交点效果如下图所示:
步骤8.
像素坐标转换为实际坐标:通过一键九点标定算子实现坐标转换功能,算子具备标定和像素坐标转机械坐标功能,算子导入标定文件以及引用两线交点坐标,选择图像转机械,即可输出产品角点在相机视野中的物理坐标。
坐标进行转换后需要使用条件分支对一键九点标定算子状态进行判断,防止可能出现标定文件丢失等情况出现导致焊接异常,状态异常通过日志记录并修改相机处理状态变量反馈给PLC流程。
步骤9.
拟合单行线:在图像显示窗口画一条单行线,构造方式选择ROI。
步骤10.
计算右侧Y方向直线角度和斜率:角度通过拟合步骤9拟合出的单竖线以及检测Y方向直线获取,使用两线关系算子引用这两条直线,自动运算出两线夹角角度。
拟合直线算子通过引用线段参数输出线段斜率,构造来源选择来自引用,引用Y方向线段数据,执行输出直线斜率。
步骤11.
焊接点位运算:计算前根据Y方向直线斜率大小计算出使用角度,通过条件分支判断斜率大小,动态调整运算角度,确保根据产品实际摆放将焊接点位置发送给机械手,判断斜率是否小于0,小于0,将步骤10计算出的角度通过修改变量算子修改到角度变量中。
大于0使用表达式解析算子把角度*-1,引用两线角度,将计算值通过修改变量算子赋值给角度变量。
通过数组元素索引算子提取出坐标转换后的XY值,引用一键九点标定算子转换结果,添加到配置表格将是否输出列打“√”,完成XY值提取。
通过表达式解析计算出焊接点虚拟位置,虚拟位置指软包电池上标准的PCB板角点到实际焊接点差值加上提取的XY值,通过HMI给入。
计算出虚拟点XY坐标后通过字符串操作算子将X和Y值拼接成2D坐标格式,算子数据来源选择引用,引用运算结果的字符串格式添加虚拟X值,数据来源修改为自定义,输入“,”进行添加,再将数据来源切换为引用,添加虚拟Y值,执行输出字符串格式的“X,Y”。
使用类型转换算子将字符串格式的“X,Y”转换为2D坐标。
使用计算旋转后点坐标算子计算实际焊接点位置,将理论设计位置(虚拟坐标)转换为实际物理空间中的焊接位置,补偿软包电池摆放造成的位置偏差,算子以转换坐标为旋转中心,虚拟坐标为旋转前坐标,旋转角度引用角度变量,得到起始焊接点位置,右侧计算11组焊接点,后续10组焊接点使用流程相同。
步骤12.
焊接点位复位:将计算出的11组坐标数据通过数组元素索引算子提取出X和Y值。
将提取出的XY值通过修改变量算子给到发送位置变量中,同时将拍照次数变量设置1,表示右侧完成定位,下次触发拍照运行左测定位流程。
第三步:左侧定位流程开发
根据流程图,左侧定位流程主要负责定位和运算,和右侧定位处理流程逻辑相同,在搭建时可通过提供复制粘贴流程功能加快开发速度,提升效率
步骤1.
图像采集:通过面阵相机算子实现采图,算子引用资源管理器内相机资源管理器算子输出的相机对象,相机列表选择设备相机名称,采集一张图进行定位即可,设置采集模式为单帧采集,配置曝光时间、伽马等参数。
步骤2.
判断采集状态:通过条件分支判断图像是否采集成功,如果不成功使用日记记录并将相机处理状态变量赋值为2,PLC流程通过多分支工具对此变量进行判断从而确定右侧定位失败。
步骤3.
定位左侧X方向产品直线:通过扫描直线算子检测电池边缘,扫描直线算子引用采集到图像,在图像显示窗口使用矩形2ROI将边缘线框住根据电池边缘打光效果,设置扫描直线算子边缘极性为暗到亮,边缘位置为最后,算子扫描到线段将线段数据输出。
步骤4.
判断X方向直线定位是否成功:通过条件分支引用步骤3检测直线算子状态变量判断检测是否成功,检测成功程序继续执行,检测失败使用日志记录并将相机处理状态变量设置为2,反馈到PLC流程。
步骤5.
定位左侧Y方向产品直线:通过扫描直线算子检测电池Y方向边缘,扫描直线算子引用采集到图像,在图像显示窗口使用矩形2ROI将边缘线框住根据电池边缘打光效果,设置扫描直线算子边缘极性为暗到亮,边缘位置为最后,算子扫描到线段将线段数据输出。
步骤6.
判断Y方向直线定位是否成功:通过条件分支引用步骤5检测直线算子状态变量判断检测是否成功,检测成功程序继续执行,检测失败使用日志记录并将相机处理状态变量设置为2,反馈到PLC流程。
步骤7.
定位两线交点:电池左侧X和Y方向直线都检测出来后通过两线关系算子定位两条线的交点位置,算子引用两个扫描直线算子输出线段自动运算出两线交点位置,此时定位产品左侧交点实际在相机视野中心位置。
步骤8.
像素坐标转换为实际坐标:通过一键九点标定算子实现坐标转换功能,算子具备标定和像素坐标转机械坐标功能,算子导入标定文件以及引用两线交点坐标,选择图像转机械,即可输出产品角点在相机视野中的物理坐标。
坐标进行转换后需要使用条件分支对一键九点标定算子状态进行判断,防止可能出现标定文件丢失等情况出现导致焊接异常,状态异常通过日志记录并修改相机处理状态变量反馈给PLC流程。
步骤9.
拟合单行线:在图像显示窗口画一条单行线,构造方式选择ROI。
步骤10.
计算左侧Y方向直线角度和斜率:角度通过拟合步骤9拟合出的单竖线以及检测Y方向直线获取,使用两线关系算子引用这两条直线,自动运算出两线夹角角度。
拟合直线算子通过引用线段参数输出线段斜率,构造来源选择来自引用,引用Y方向线段数据,执行输出直线斜率。
步骤11.
焊接点位运算:计算前根据Y方向直线斜率大小计算出使用角度,通过条件分支判断斜率大小,动态调整运算角度,确保根据产品实际摆放将焊接点位置发送给机械手,判断斜率是否大于0,大于0,将步骤10计算出的角度通过修改变量算子修改到角度变量中。
小于0使用表达式解析算子把角度*-1,引用两线角度,将计算值通过修改变量算子赋值给角度变量。
通过数组元素索引算子提取出坐标转换后的XY值,引用一键九点标定算子转换结果,添加到配置表格将是否输出列打“√”,完成XY值提取。
通过表达式解析计算出焊接点虚拟位置,虚拟位置指软包电池上标准的PCB板角点到实际焊接点差值加上提取的XY值,通过HMI给入。
计算出虚拟点XY坐标后通过字符串操作算子将X和Y值拼接成2D坐标格式,算子数据来源选择引用,引用运算结果的字符串格式添加虚拟X值,数据来源修改为自定义,输入“,”进行添加,再将数据来源切换为引用,添加虚拟Y值,执行输出字符串格式的“X,Y”。
使用类型转换算子将字符串格式的“X,Y”转换为2D坐标。
使用计算旋转后点坐标算子计算实际焊接点位置,将理论设计位置(虚拟坐标)转换为实际物理空间中的焊接位置,补偿软包电池摆放造成的位置偏差,算子以转换坐标为旋转中心,虚拟坐标为旋转前坐标,旋转角度引用角度变量,得到起始焊接点位置,左侧计算10组焊接点,后续9组焊接点使用流程相同。
步骤12.
焊接点位复位:将计算出的10组坐标数据通过数组元素索引算子提取出X和Y值。
将提取出的XY值通过修改变量算子给到发送位置变量中,同时将拍照次数变量设置0,表示左侧完成定位,下次触发拍照运行右测定位流程。
第四步:自动标定流程
自动标定流程由PLC流程触发执行,主要通过人工将标定板放到指定位置,启动时机械手自动走到标定位,通知PLC到位,PLC通知GS开始标定。
步骤1.
图像采集:使用图像采集算子采集一张图片。
步骤2.
判读采集状态:通过条件分支算子判断采集是否成功,不成功标定状态变量设置为2。
步骤3.
九点标定:通过一键九点标定算子对采集图片进行标定,在图像显示窗口使用矩形ROI框出标定板9点所在区域,实现标定。
步骤4.
判断标定是否成功:通过条件分支算子判断一键九点标定算子状态,标定失败将标定状态变量设置为2。
标定成功设置标定状态变量为1。
3.3. HMI设计器
人机交互界面需要实现打开定位界面、参数设置界面、设备启动以及设备停止,因此将界面分为主界面、图像显示界面以及参数设置界面,HMI界面运行默认打开主界面,通过窗体按钮增加2个窗体,配置每个界面的背景色一致。
4. 图像显示界面:图像显示界面是一个单独的窗口,窗口上包含功能名称说明、定位图像显示、定位结果显示以及运行日志。
功能名称说明:例如“左侧图像显示”,通过标签控件设置显示名称实现,配置文字大小、显示颜色以及显示位置。
位图像显示:通过图片框控件显示定位时采集的图像,例如左侧图像显示,控件引用左侧图片变量,调整显示位置、尺寸以及图片显示方式实现,当左侧图片变量发生改变时图片框自动刷新
定位结果显示:通过文本框控件实现,控件引用左侧拍照状态变量后实时显示变量结果,定位成功此变量通过修改变量值设置为OK,控件显示OK,定位失败设置NG,控件显示NG。
日志显示:使用日志显示控件进行日志显示,将主任务设计器流程中所有日志记录工具添加到显示表格内,流程运行记录时同步显示在日志显示控件中。
5. 参数设置:参数设置界面是一个单独的窗口,包含配方存储、切换配方、设置基础焊接位置和取图亮度等。
配方存储:通过创建配方控件算子实现HMI所有界面参数另存为一份参数文件,配置尺寸、文字大小等参数。
切换配方:通过切换配方控件导入存储的参数文件,导入后的界面控件显示参数跟随文件参数自动刷新。
设置基础焊接位置:用于设置标准的软包电池PCB板角点到焊接点的位置,通过数值增减控件实现,例如焊缝12起始X,引用焊缝12起始X变量,当修改此控件值同步给到变量中,光源亮度设置同样使用数值增减控件实现。
3. 主界面:实现设备开始运行、停止以及打开图像显示界面以及参数设置界面。
设备开始、停止:通过按钮控件实现,使用事件管理器绑定鼠标单击事件触发对应流程实现功能,配置显示文本、背景色、尺寸、文字大小。
打开事件管理器。
在事件源中显示每个窗体包含的控件,事件列表提供了大量事件,实现开始功能绑定鼠标单击事件即可,在方法列表中选择PLC流程,实现绑定,运行HMI鼠标单击开始按钮运行PLC流程。
当需要使用大量控件时可通过HMI提供修改控件名称功能方便查找,选中一个控件单击鼠标右键即可弹出菜单栏,选择重命名进行修改。
打开图像显示、参数设置界面:使用触发控件,配置绑定窗口,运行HMI鼠标单击此按钮打开对应界面。
项目例程可通过GraniStudio官网获取。