You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

171 lines
6.0 KiB
C#

11 months ago
using Rs.Controls;
using Rs.DataAccess;
using Rs.Framework;
using Rs.MotionPlat.Flow;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Rs.MotionPlat.Commom
{
/// <summary>
/// 料盘点位管理
/// </summary>
public class TrayPointManager
{
static SqliteHelper db = new SqliteHelper();
static ConcurrentDictionary<string, SlotPoint> trayPoints = new ConcurrentDictionary<string, SlotPoint>();
public static void LoadPoint()
{
string querySql = "select * from TrayPoints";
DataTable dt = db.GetDataTable(querySql);
if (ObjectHelper.IsNotNullorEmpty(dt))
{
foreach (DataRow dataRow in dt.Rows)
{
string recipeName = dataRow["recipename"].ToString();
string trayName = dataRow["trayname"].ToString();
string slotIndex = dataRow["slotIndex"].ToString();
float x = float.Parse(dataRow["x"].ToString());
float y = float.Parse(dataRow["y"].ToString());
string key = $"{recipeName}-{trayName}-{slotIndex}";
if (!trayPoints.ContainsKey(key))
{
trayPoints.TryAdd(key, new SlotPoint(x, y));
}
}
}
}
/// <summary>
/// 获取料盘的点位
/// </summary>
/// <param name="recipeName"></param>
/// <param name="trayName"></param>
/// <param name="slotIndex"></param>
/// <param name="pointType"></param>
/// <returns></returns>
public static SlotPoint GetSlotPoint(ETrayType trayType,int slotIndex)
{
string key = $"{GlobalVar.CurRecipe}-{trayType}-{slotIndex}";
if(trayPoints.ContainsKey(key))
{
return trayPoints[key];
}
return null;
}
/// <summary>
/// 获取异常料盘的点位
/// </summary>
/// <param name="recipeName"></param>
/// <param name="trayName"></param>
/// <param name="slotIndex"></param>
/// <param name="pointType"></param>
/// <returns></returns>
public static SlotPoint GetExceptionTrayPoint(int slotIndex)
{
string key = $"{GlobalVar.CurRecipe}-ExceptiontTray-{slotIndex}";
if (trayPoints.ContainsKey(key))
{
return trayPoints[key];
}
return null;
}
/// <summary>
/// 获取测试治具测高的点位
/// </summary>
/// <param name="recipeName"></param>
/// <param name="trayName"></param>
/// <param name="slotIndex"></param>
/// <param name="pointType"></param>
/// <returns></returns>
public static SlotPoint GetTestFixtureTrayCheckHeighPoint(int slotIndex)
{
string key = $"{GlobalVar.CurRecipe}-CheckHeightTestTray-{slotIndex}";
if (trayPoints.ContainsKey(key))
{
return trayPoints[key];
}
return null;
}
/// <summary>
/// 获取周转盘测高的点位
/// </summary>
/// <param name="recipeName"></param>
/// <param name="trayName"></param>
/// <param name="slotIndex"></param>
/// <param name="pointType"></param>
/// <returns></returns>
public static SlotPoint GetTurnoverTrayCheckHeighPoint(int slotIndex)
{
string key = $"{GlobalVar.CurRecipe}-CheckHeightTurnover-{slotIndex}";
if (trayPoints.ContainsKey(key))
{
return trayPoints[key];
}
return null;
}
/// <summary>
/// 获取周转盘强力吸嘴的点位
/// </summary>
/// <param name="recipeName"></param>
/// <param name="trayName"></param>
/// <param name="slotIndex"></param>
/// <param name="pointType"></param>
/// <returns></returns>
public static SlotPoint GetTurnoverTrayForceNozzlePoint(int slotIndex)
{
string key = $"{GlobalVar.CurRecipe}-ForceNozzleTurnover-{slotIndex}";
if (trayPoints.ContainsKey(key))
{
return trayPoints[key];
}
return null;
}
/// <summary>
/// 获取周转盘强力吸嘴的点位
/// </summary>
/// <param name="recipeName"></param>
/// <param name="trayName"></param>
/// <param name="slotIndex"></param>
/// <param name="pointType"></param>
/// <returns></returns>
public static SlotPoint GetExceptiontTrayPoint(int slotIndex)
{
string key = $"{GlobalVar.CurRecipe}-ExceptiontTray-{slotIndex}";
if (trayPoints.ContainsKey(key))
{
return trayPoints[key];
}
return null;
}
public static SlotPoint GetDistToNozzle1(int nozzleIndex)
{
//先获取相机的中心位置
SlotPoint point = new SlotPoint();
double nozzle1ToCameraCenterX = SysConfigParam.GetValue<double>("InkpadX") - SysConfigParam.GetValue<double>("CameraInkpadX");
double nozzle1ToCameraCenterY = SysConfigParam.GetValue<double>("InkpadY") - SysConfigParam.GetValue<double>("CameraInkpadY");
//再加上指定吸嘴到吸嘴1的距离
double distToNozzle1X = SysConfigParam.GetValue<double>($"Nozzle{nozzleIndex}CenterX") - SysConfigParam.GetValue<double>($"Nozzle1CenterX");
double distToNozzle1Y = SysConfigParam.GetValue<double>($"Nozzle{nozzleIndex}CenterY") - SysConfigParam.GetValue<double>($"Nozzle1CenterY");
point.X = nozzle1ToCameraCenterX + distToNozzle1X;
point.Y = nozzle1ToCameraCenterY + distToNozzle1Y;
return point;
}
}
}