自动化中计算矩形料盘中各个物料的坐标位置、松下PLC、ST文本程序、

自动化中计算矩形料盘中各个物料的坐标位置、松下PLC、ST文本程序、

一、矩形料盘两个边沿与XY轴平行(属于特殊情况,也较为常见)

示意图

在这里插入图片描述
其中
n、m、通过初期机械设计确定料盘尺寸大小
要计算出所有交点的坐标,法1、至少需要通过示教获得A、D、两点的坐标。
或者 法2、 通过示教获得A、B、C、三点的坐标(第二节使用)。

涉及的坐标值一般为电机的坐标值,通过触摸屏等示教得来。

使用松下PRO7设计程序如下

法1:该函数使用A、D、两点的坐标计算

输入输出IO定义如下

在这里插入图片描述

ST文本程序实现如下:

/*------ 料盘阵列计算------
通过起始点(Xa,Ya)、对角点两点(Xb,Yb)坐标、
料盘的行数rows、料盘的列数columns、计算其它点位的坐标

该方法适用于:
1、料盘平行X轴,平行Y轴的情况。
*/


/*计算物料之间的距离*/
//物料Y方向的距离差
if (ui总行数rows >1) then
	r行距:=(r对角坐标Yb-r起始坐标Ya)/(TO_REAL(ui总行数rows)-1);
else
	r行距:=0;
end_if;

//物料X方向的距离差
if (ui总列数cols>1) then
	r列距:=(r对角坐标Xb-r起始坐标Xa)/(TO_REAL(ui总列数cols)-1);
else
	r列距:=0;
end_if;

/*计算目标坐标值*/
//计算当前X坐标
if (ui当前列数 >= 1 AND ui当前列数<=ui总列数cols) then
	r当前X坐标:=r起始坐标Xa + r列距*(TO_REAL(ui当前列数)-1);
else
	r当前X坐标:=r起始坐标Xa;
end_if;

//计算当前Y坐标
if (ui当前行数 >= 1 AND ui当前行数<=ui总行数rows) then
	r当前Y坐标:=r起始坐标Ya + r行距*(TO_REAL(ui当前行数)-1);
else
	r当前Y坐标:=r起始坐标Ya;
end_if;

//错误提示
b行列数超限:= NOT(ui当前列数 >= 1 AND ui当前列数<=ui总列数cols) OR NOT (ui当前行数 >= 1 AND ui当前行数<=ui总行数rows);

FB 函数封装如下

在这里插入图片描述

二、倾斜矩形料盘,两个边沿与XY轴不平行

示意图

在这里插入图片描述

其中
n、m、通过初期机械设计确定料盘尺寸大小
要计算出所有交点的坐标,此时不能通过A、D、两点的坐标计算其它坐标点。

只能通过 法2、 通过示教获得A、B、C、三点的坐标。

使用松下PRO7设计程序如下

法2、 通过示教获得A、B、C、三点的坐标计算

输入输出IO定义如下

在这里插入图片描述

ST文本程序实现如下:

/*------ 料盘阵列计算------
通过起始点左下(Xa,Ya)、左上(Xb,Yb)、右下(Xc,Yc)三点坐标、
料盘的行数rows、料盘的列数columns、计算其它点位的坐标

该方法适用于
1、料盘平行X轴,平行Y轴的情况。
2、倾斜矩形料盘中物料位置的程序
3、AB不平行Y轴、不平行X轴,AC不平行Y轴、不平行X轴。
*/


/* 计算第四个角点D(右上角)(Xd,Yd)*/
//根据矩形性质,第四个角点D可以通过向量运算得到:D = B + C - A
r右上坐标Xd := r左上坐标Xb + r右下坐标Xc - r左下坐标Xa;
r右上坐标Yd := r左上坐标Yb + r右下坐标Yc - r左下坐标Ya;

/*计算行距的增量向量*/
//类似物料Y方向的距离差,行距
IF (ui总行数rows>1) THEN
    Row_Vector_X := (r左上坐标Xb - r左下坐标Xa) / (TO_REAL(ui总行数rows) - 1);
    Row_Vector_Y := (r左上坐标Yb - r左下坐标Ya) / (TO_REAL(ui总行数rows) - 1);
ELSE
    Row_Vector_X := 0.0;
    Row_Vector_Y := 0.0;
END_IF;

/* 计算列距的增量向量*/
//类似物料X方向的距离差,列距
IF (ui总列数cols > 1) THEN
	Col_Vector_X := (r右下坐标Xc - r左下坐标Xa) / (TO_REAL(ui总列数cols) - 1);
	Col_Vector_Y := (r右下坐标Yc - r左下坐标Ya) / (TO_REAL(ui总列数cols) - 1);
ELSE
    Col_Vector_X := 0.0;
    Col_Vector_Y := 0.0;
END_IF;

/*计算目标坐标值*/
//计算当前X坐标
if (ui当前列数 >= 1 AND ui当前列数<=ui总列数cols) AND (ui当前行数 >= 1 AND ui当前行数<=ui总行数rows) then
	r当前X坐标:=r左下坐标Xa + Row_Vector_X*(TO_REAL(ui当前行数)-1) + Col_Vector_X *(TO_REAL(ui当前列数)-1);
	r当前Y坐标:=r左下坐标Ya + Row_Vector_Y*(TO_REAL(ui当前行数)-1) + Col_Vector_Y *(TO_REAL(ui当前列数)-1);
	
else
	r当前X坐标:=r左下坐标Xa;
	r当前Y坐标:=r左下坐标Ya;
end_if;


//错误提示
//b行列数超限:= NOT(ui当前列数 >= 1 AND ui当前列数<=ui总列数cols) OR NOT (ui当前行数 >= 1 AND ui当前行数<=ui总行数rows);
b行列数超限:= ui当前列数 < 1 OR ui当前列数 > ui总列数cols OR ui当前行数 < 1 OR ui当前行数 > ui总行数rows;


FB 函数封装如下

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值