如果真 (打开所有相机 = 10
)
延时 (10
)
hal.
复制图像 (相机1图片, Image
)
图像预处理1 ()
左边结果 = hal.
单模型寻找不同形状 (Image, 模板句柄, 0, 360, 0.9, 1.1, 0.9, 1.1,
到小数 (编辑框12.内容
), 1, 0.5,
“least_squares”,
到整数 (编辑框11.内容
), 0.9, 返回Y, 返回X, 返回角度, , , 返回分数
)
如果 (hal.
弧度到角度 (返回角度
).
取元组小数 () > 90
)
角度转换 = hal.
弧度到角度 (返回角度
).
取元组小数 () - 360

角度转换 = hal.
弧度到角度 (返回角度
).
取元组小数 ()
如果真 (左边结果 = 0
)

hal.
创建矩形 (临时矩形, 返回Y, 返回X, 返回角度, 400, 400
)
编辑框4.内容 =
到文本 (角度转换
)
编辑框5.内容 =
到文本 (返回X.
取元组小数 ())

编辑框6.内容 =
到文本 (返回Y.
取元组小数 ())

编辑框7.内容 =
到文本 (到数值 (编辑框5.内容
) -
到数值 (编辑框500.内容
))

编辑框8.内容 =
到文本 (到数值 (编辑框6.内容
) -
到数值 (编辑框600.内容
))

编辑框902.内容 =
到文本 (到数值 (编辑框4.内容
) -
到数值 (编辑框900.内容
))

编辑框602.内容 = 编辑框8.内容

编辑框502.内容 = 编辑框7.内容

如果真 (返回Y.
取元组小数 () ≠ 0
或 返回X.
取元组小数 () ≠ 0
)
延时 (10
)

线程ID1 =
线程_启动 (&找交点
)
临时矩形.显示 (窗口ID)
如果真 (左边结果 ≠ 2
)

hal.
复制图像 (Image, Image2
)
hal.
取图像的尺寸 (Image2, Image高, Image宽
)
hal.
显示图像局部 (WindowHandle, 0, 0, Image宽, Image高
)
hal.
RGB1转灰度 (Image2, Image2
)

hal.
设置颜色 (WindowHandle,
“red”)
hal.
显示图像对象 (Image2, WindowHandle
)
hal.
取图像的尺寸 (Image2, Image高, Image宽
)
hal.
设置线宽 (WindowHandle, 2
)
Row1 = hal.
取整数 (到小数 (编辑框17.内容
) +
到小数 (编辑框8.内容
))

Column1 = hal.
取整数 (到小数 (编辑框18.内容
) +
到小数 (编辑框7.内容
))

Row2 = hal.
取整数 (到小数 (编辑框19.内容
) +
到小数 (编辑框8.内容
))

Column2 = hal.
取整数 (到小数 (编辑框20.内容
) +
到小数 (编辑框7.内容
))

hal.
赋值 (Line, hal.
创建元组 (Row1, Column1, Row2, Column2
))

hal.
创建计量模型 (MetrologyHandle
)
hal.
设置计量模型图像大小 (MetrologyHandle, Image高, Image宽
)
hal.
添加计量对象通用 (MetrologyHandle,
“line”, Line, 20, 5, 1, 15, hal.
创建元组 (), hal.
创建元组 (), Index
)
hal.
应用计量模型 (Image2, MetrologyHandle
)
hal.
取计量对象测量 (Contours, MetrologyHandle,
“all”,
“all”, Row, Column
)
hal.
创建十字XLD轮廓 (Cross, Row, Column, 1, 0.785398
)
hal.
取计量对象结果 (MetrologyHandle,
“all”,
“all”,
“result_type”,
“all_param”, Parameter
)
hal.
取计量对象模型轮廓 (Contour, MetrologyHandle,
“all”, 1.5
)
hal.
清除计量模型 (MetrologyHandle
)

hal.
创建多边形XLD轮廓 (Contour5, Row, Column
)
hal.
XLD轮廓拟合直线 (Contour5,
“tukey”, -1, 0, 5, 2, RowBegin1, ColBegin1, RowEnd1, ColEnd1, Nr1, Nc1, Dist1
)

hal.
线位置 (RowBegin1, ColBegin1, RowEnd1, ColEnd1, RowCenter, ColCenter, Length, Phi
)

hal.
赋值 (radian, Phi
)
hal.
赋值 (degree, hal.
除 (hal.
乘 (radian, 180
), 3.1415926
))

编辑框2302.内容 =
到文本 (degree.
取元组小数 ())

hal.
XLD轮廓拟合直线 (Contour5,
“tukey”, -1, 0, 5, 2, Row11, Column11, Row22, Column22, Nr1, Nc1, Dist1
)

判断 (hal.
等于 (hal.
减 (Row22, Row11
), 0
))


hal.
赋值 (k, 0
)

hal.
创建多边形XLD轮廓 (Contour, hal.
创建元组 (Row22, Row22
), hal.
创建元组 (0, Image高
))


k = hal.
取整数 ( (Column22.
取元组小数 () - Column11.
取元组小数 ())
÷ (Row22.
取元组小数 () - Row11.
取元组小数 ())
)

hal.
赋值 (b, hal.
减 (Column22, hal.
乘 (k, Row22
))
)

hal.
赋值 (Row1, 0
)

hal.
赋值 (Row2, hal.
减 (Image宽, 1
))


hal.
赋值 (col1, hal.
加 (hal.
乘 (k, Row1
), b
))


hal.
赋值 (col2, hal.
加 (hal.
乘 (k, Row2
), b
))


hal.
创建多边形XLD轮廓 (Contour, hal.
创建元组 (Row1, Row2
), hal.
创建元组 (col1, col2
))



hal.
显示图像对象 (Contour, 窗口ID
)

Row111 = hal.
取整数 (到小数 (编辑框21.内容
) +
到小数 (编辑框8.内容
))

Column111 = hal.
取整数 (到小数 (编辑框22.内容
) +
到小数 (编辑框7.内容
))

Row222 = hal.
取整数 (到小数 (编辑框23.内容
) +
到小数 (编辑框8.内容
))

Column222 = hal.
取整数 (到小数 (编辑框24.内容
) +
到小数 (编辑框7.内容
))

hal.
赋值 (Line, hal.
创建元组 (Row111, Column111, Row222, Column222
))

hal.
创建计量模型 (MetrologyHandle1
)
hal.
设置计量模型图像大小 (MetrologyHandle1, Image高, Image宽
)
hal.
添加计量对象通用 (MetrologyHandle1,
“line”, Line, 20, 5, 1, 15, hal.
创建元组 (), hal.
创建元组 (), Index
)
hal.
设置颜色 (WindowHandle,
“red”)
hal.
应用计量模型 (Image2, MetrologyHandle1
)

hal.
取计量对象测量 (Contours1, MetrologyHandle1,
“all”,
“all”, Row3, Column3
)

hal.
创建十字XLD轮廓 (Cross1, Row3, Column3, 1, 0.785398
)
hal.
取计量对象结果 (MetrologyHandle1,
“all”,
“all”,
“result_type”,
“all_param”, Parameter
)

hal.
取计量对象模型轮廓 (Contour1, MetrologyHandle1,
“all”, 1.5
)
hal.
清除计量模型 (MetrologyHandle1
)

hal.
创建多边形XLD轮廓 (Contour2, Row3, Column3
)
hal.
XLD轮廓拟合直线 (Contour2,
“tukey”, -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist
)

hal.
线位置 (RowBegin, ColBegin, RowEnd, ColEnd, RowCenter1, ColCenter1, Length1, Phi1
)

hal.
赋值 (radian1, Phi1
)
hal.
赋值 (degree1, hal.
除 (hal.
乘 (radian1, 180
), 3.1415926
))

编辑框2303.内容 =
到文本 (degree1.
取元组小数 ())

hal.
XLD轮廓拟合直线 (Contour2,
“tukey”, -1, 0, 5, 2, Row11, Column11, Row22, Column22, Nr1, Nc1, Dist1
)

判断 (hal.
等于 (hal.
减 (Row22, Row11
), 0
))


hal.
赋值 (k, 0
)

hal.
创建多边形XLD轮廓 (Contour1, hal.
创建元组 (Row22, Row22
), hal.
创建元组 (0, Image高
))


k = hal.
取整数 ( (Column22.
取元组小数 () - Column11.
取元组小数 ())
÷ (Row22.
取元组小数 () - Row11.
取元组小数 ())
)

hal.
赋值 (b, hal.
减 (Column22, hal.
乘 (k, Row22
))
)

hal.
赋值 (Row1, 0
)

hal.
赋值 (Row2, hal.
减 (Image宽, 1
))


hal.
赋值 (col1, hal.
加 (hal.
乘 (k, Row1
), b
))


hal.
赋值 (col2, hal.
加 (hal.
乘 (k, Row2
), b
))


hal.
创建多边形XLD轮廓 (Contour1, hal.
创建元组 (Row1, Row2
), hal.
创建元组 (col1, col2
))



hal.
显示图像对象 (Contour1, 窗口ID
)
hal.
求线段交点 (RowBegin1, ColBegin1, RowEnd1, ColEnd1, RowBegin, ColBegin, RowEnd, ColEnd, Row6, Column4, IsOverlapping
)
hal.
创建十字XLD轮廓 (Cross2, Row6, Column4, 200, 0.785398
)
找到交点 = hal.
显示图像对象 (Cross2, 窗口ID
)
编辑框42.内容 =
到文本 (找到交点
)
取交点原点Y =
到数值 (Row6.
取元组小数 ())

取交点原点X =
到数值 (Column4.
取元组小数 ())

编辑框2300.内容 =
到文本 (到数值 (Row6.
取元组小数 ()) -
到数值 (编辑框800.内容
))

编辑框2301.内容 =
到文本 (到数值 (Column4.
取元组小数 ()) -
到数值 (编辑框801.内容
))

编辑框2506.内容 = 编辑框2300.内容

编辑框2507.内容 = 编辑框2301.内容

hal.
保存窗口到文件 (窗口ID,
“png”,
取运行目录 () +
“\测试完成图片\” +
到文本 (取现行时间 ()) +
“_” + 编辑框10.内容 +
“_左”)
如果 (编辑框2300.内容 ≠
“” 且 编辑框2301.内容 ≠
“”)

如果真 (按钮25.标题 =
“标定开启”)

延时 (10
)

线程_启动 (&标定A
)




如果真 (到整数 (编辑框2302.内容
) = 0
且 到整数 (编辑框2303.内容
) = 0
)

标签6.文本颜色 =
#红色 

标签6.标题 =
“NG”

编辑框3.
加入文本 (到文本 (取现行时间 ()) +
“:左交点未生成,左计算NG” +
#换行符 )

编辑框20006.内容 =
“2”
窗口程序集名 | 保 留 | 保 留 | 备 注 |
窗口程序集_启动窗口 | | | |
变量名 | 类 型 | 数组 | 备 注 |
相机ID | 视觉元组 | |
相机ID1 | 视觉元组 | |
窗口ID | 视觉元组 | |
窗口ID1 | 视觉元组 | |
窗口ID2 | 视觉元组 | |
窗口ID3 | 视觉元组 | |
hal | Halcon19 | |
Image | 视觉对象 | |
Image高 | 视觉元组 | |
Image宽 | 视觉元组 | |
Image1 | 视觉对象 | |
Image1高 | 视觉元组 | |
Image1宽 | 视觉元组 | |
绘制矩形 | 视觉对象 | |
模板句柄 | 视觉元组 | |
绘制矩形1 | 视觉对象 | |
模板句柄1 | 视觉元组 | |
模板轮廓 | 视觉对象 | |
模板轮廓1 | 视觉对象 | |
返回X | 视觉元组 | |
返回Y | 视觉元组 | |
返回角度 | 视觉元组 | |
返回分数 | 视觉元组 | |
中心Y | 双精度小数型 | |
中心X | 双精度小数型 | |
长半轴角度 | 双精度小数型 | |
长半轴长度 | 双精度小数型 | |
短半轴长度 | 双精度小数型 | |
取原点X | 双精度小数型 | |
取原点Y | 双精度小数型 | |
取原点R | 视觉元组 | |
返回1X | 视觉元组 | |
返回1Y | 视觉元组 | |
返回角度1 | 视觉元组 | |
返回分数1 | 视觉元组 | |
中心1Y | 双精度小数型 | |
中心1X | 双精度小数型 | |
长半轴角度1 | 双精度小数型 | |
长半轴长度1 | 双精度小数型 | |
短半轴长度1 | 双精度小数型 | |
取原点1X | 双精度小数型 | |
取原点1Y | 双精度小数型 | |
取原点1R | 视觉元组 | |
取交点原点X | 双精度小数型 | |
取交点原点Y | 双精度小数型 | |
取交点原点1X | 双精度小数型 | |
取交点原点1Y | 双精度小数型 | |
t | 整数型 | |
PLC接通 | 逻辑型 | |
起点Y | 视觉元组 | |
起点X | 视觉元组 | |
终点Y | 视觉元组 | |
终点X | 视觉元组 | |
起点1Y | 视觉元组 | |
起点1X | 视觉元组 | |
终点1Y | 视觉元组 | |
终点1X | 视觉元组 | |
矩阵 | 视觉元组 | |
临时矩阵 | 视觉元组 | |
左边结果 | 整数型 | |
右边结果 | 整数型 | |
取图像原点Y | 文本型 | |
取图像原点X | 文本型 | |
启动软件 | 整数型 | |
RB连接站点号 | 整数型 | |
打开相机1 | 短整数型 | |
打开相机2 | 短整数型 | |
线程ID1 | 整数型 | |
线程ID2 | 整数型 | |
图像处理中 | 整数型 | |
hal.
打开窗口 (0, 0, 图片框1.宽度, 图片框1.高度, 图片框1.
取窗口句柄 (),
#视觉_窗口模式_可视, , 窗口ID
)hal.
打开窗口 (0, 0, 图片框4.宽度, 图片框4.高度, 图片框4.
取窗口句柄 (),
#视觉_窗口模式_可视, , 窗口ID1
)hal.
打开窗口 (0, 0, 图片框2.宽度, 图片框2.高度, 图片框2.
取窗口句柄 (),
#视觉_窗口模式_可视, , 窗口ID2
)hal.
打开窗口 (0, 0, 图片框3.宽度, 图片框3.高度, 图片框3.
取窗口句柄 (),
#视觉_窗口模式_可视, , 窗口ID3
)hal.
设置颜色 (窗口ID,
#视觉_颜色_红色 )hal.
设置填充模式 (窗口ID,
“margin”)hal.
设置线宽 (窗口ID, 3
)hal.
设置颜色 (窗口ID1,
#视觉_颜色_红色 )hal.
设置填充模式 (窗口ID1,
“margin”)hal.
设置线宽 (窗口ID1, 3
)hal.
设置颜色 (窗口ID2,
#视觉_颜色_红色 )hal.
设置填充模式 (窗口ID2,
“margin”)hal.
设置线宽 (窗口ID2, 3
)hal.
设置颜色 (窗口ID3,
#视觉_颜色_红色 )hal.
设置填充模式 (窗口ID3,
“margin”)hal.
设置线宽 (窗口ID3, 3
)
变量名 | 类 型 | 静态 | 数组 | 备 注 |
矩阵左 | 视觉元组 | | |
临时轮廓 | 视觉对象 | | |
临时矩形 | 视觉对象 | | |
角度转换 | 双精度小数型 | | |
ScaleR | 双精度小数型 | | |
ScaleC | 双精度小数型 | | |
如果真 (打开所有相机 = 10
)
hal.
复制图像 (相机1图片, Image
)
图像预处理1 ()
左边结果 = hal.
单模型寻找不同形状 (Image, 模板句柄, hal.
角度到弧度 (0
), hal.
角度到弧度 (90
), 1, 1, 1, 1,
到小数 (编辑框12.内容
), 1, 0.5,
“least_squares”,
到整数 (编辑框11.内容
), 0.9, 返回Y, 返回X, 返回角度, , , 返回分数
)
如果 (hal.
弧度到角度 (返回角度
).
取元组小数 () > 90
)
角度转换 = hal.
弧度到角度 (返回角度
).
取元组小数 () - 360

角度转换 = hal.
弧度到角度 (返回角度
).
取元组小数 ()
如果真 (左边结果 = 0
)

hal.
创建矩形 (临时矩形, 返回Y, 返回X, 返回角度, 400, 400
)
编辑框4.内容 =
到文本 (角度转换
)
编辑框5.内容 =
到文本 (返回X.
取元组小数 ())

编辑框6.内容 =
到文本 (返回Y.
取元组小数 ())

编辑框7.内容 =
到文本 (到数值 (编辑框5.内容
) -
到数值 (编辑框500.内容
))

编辑框8.内容 =
到文本 (到数值 (编辑框6.内容
) -
到数值 (编辑框600.内容
))

编辑框902.内容 =
到文本 (到数值 (编辑框4.内容
) -
到数值 (编辑框900.内容
))

编辑框602.内容 = 编辑框8.内容

编辑框502.内容 = 编辑框7.内容
延时 (10
)
如果真 (返回Y.
取元组小数 () ≠ 0
或 返回X.
取元组小数 () ≠ 0
)

线程ID1 =
线程_启动 (&找交点
)
临时矩形.显示 (窗口ID)

按钮4.标题 =
“找模板关”
如果 (返回Y.
取元组小数 () = 0
或 返回X.
取元组小数 () = 0
)
标签6.文本颜色 =
#红色 
标签6.标题 =
“NG”
编辑框20006.内容 =
“2”
_选择框1_被单击 ()


