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.

133 lines
4.2 KiB
C#

using Rs.Framework;
using Rs.MotionPlat.Commom;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Rs.MotionPlat.Vision
{
public class OneGrabOneVision : BaseVision
{
static ManualResetEvent visionGrabEvent = new ManualResetEvent(false);
string data=string.Empty;
public override void VNozzleCalib_DataRecived(System.Net.Sockets.Socket arg1, byte[] arg2)
{
//所有的视觉数据以;作为结束符
foreach (byte b in arg2)
{
if (b != 59)
{
reciveBuffer.Add(b);
}
else
{
data = Encoding.ASCII.GetString(reciveBuffer.ToArray());
MessageQueue.Instance.Insert(data);
if (data == "M,0")
{
MessageQueue.Instance.Insert("视觉收到拍照指令");
}
else if (data == "C,0")
{
visionGrabEvent.Set();
MessageQueue.Instance.Insert($" >>> {data}");
}
else
{
//result = new VisionResult();
////解析拍照结果
//string[] results = data.Split(',');
//if (results[1] == "-1")
//{
// result.Result = false;
// if (results.Length>=5)
// {
// result.Result = true;
// result.SN = VirtualBarCode.Code;
// result.OffsetX = double.Parse(results[3]);
// result.OffsetY = double.Parse(results[4]);
// }
//}
//else
//{
// result.Result = false;
// if (results.Length >= 5)
// {
// result.Result = true;
// result.SN = results[2];
// result.OffsetX = double.Parse(results[3]);
// result.OffsetY = double.Parse(results[4]);
// }
//}
NozzleCalibReciveEvent.Set();
}
reciveBuffer.Clear();
}
}
}
public bool ClearQueue(int timeout = 10000)
{
visionGrabEvent.Reset();
string content = $"C;";
int len = vNozzleCalib.Send(content);
//reciveData = true;
if (len > 0)
{
MessageQueue.Instance.Insert($" <<< {content}");
if (visionGrabEvent.WaitOne(timeout))
{
//reciveData = false;
//MessageQueue.Instance.Insert($" >>> {data}");
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
/// <summary>
/// 一拍一
/// </summary>
/// <param name="timeout"></param>
/// <returns></returns>
public string OneGrabOne(int timeout = 10000)
{
data = "";
result = null;
NozzleCalibReciveEvent.Reset();
int len = vNozzleCalib.Send("M;");
if (len > 0)
{
if (NozzleCalibReciveEvent.WaitOne(timeout))
{
MessageQueue.Instance.Insert($"收到视觉结果:{data}");
return data;
}
else
{
return null;
}
}
else
{
return null;
}
}
}
}