|
|
@@ -53,6 +53,7 @@ using TeamAAS_VP.Resources.Languages;
|
|
|
using TeamAAS_VP.Services;
|
|
|
using TeamAAS_VP.ViewModels.Home;
|
|
|
using TouchSocket.Core;
|
|
|
+using TouchSocket.SerialPorts;
|
|
|
using TouchSocket.Sockets;
|
|
|
using static MaterialDesignThemes.Wpf.Theme.ToolBar;
|
|
|
using static Org.BouncyCastle.Math.EC.ECCurve;
|
|
|
@@ -80,7 +81,7 @@ namespace TeamAAS_VP.Core
|
|
|
|
|
|
Timer yieldtimer;
|
|
|
private DateTime StartTime = DateTime.Now;
|
|
|
-
|
|
|
+ SerialPortClient client;
|
|
|
#endregion
|
|
|
|
|
|
#region 属性
|
|
|
@@ -160,10 +161,35 @@ namespace TeamAAS_VP.Core
|
|
|
|
|
|
public Dictionary<string, object> BackupObject { get; set; } = new Dictionary<string, object>();
|
|
|
|
|
|
+ private string _COM;
|
|
|
/// <summary>
|
|
|
- /// 扭力测量仪
|
|
|
+ /// 扭力测量仪COM
|
|
|
/// </summary>
|
|
|
- public Signal signalTest { get; set; }
|
|
|
+ public string COM
|
|
|
+ {
|
|
|
+ get { return _COM; }
|
|
|
+ set { SetProperty(ref _COM, value); }
|
|
|
+ }
|
|
|
+
|
|
|
+ private string _SignalValue;
|
|
|
+ /// <summary>
|
|
|
+ /// 扭力测量仪获取的最大值
|
|
|
+ /// </summary>
|
|
|
+ public string SignalValue
|
|
|
+ {
|
|
|
+ get { return _SignalValue; }
|
|
|
+ set { SetProperty(ref _SignalValue, value); }
|
|
|
+ }
|
|
|
+
|
|
|
+ private double _Value;
|
|
|
+ /// <summary>
|
|
|
+ /// 电批扭力值
|
|
|
+ /// </summary>
|
|
|
+ public double Value
|
|
|
+ {
|
|
|
+ get { return _Value; }
|
|
|
+ set { SetProperty(ref _Value, value); }
|
|
|
+ }
|
|
|
|
|
|
private NumberStatistics _NumStatistics;
|
|
|
/// <summary>
|
|
|
@@ -203,7 +229,6 @@ namespace TeamAAS_VP.Core
|
|
|
_remoteCommandService = remoteCommandService;
|
|
|
_systemDatabaseService = systemDatabaseService;
|
|
|
_lightManagerService = lightManagerService;
|
|
|
- signalTest = new Signal();
|
|
|
}
|
|
|
|
|
|
#region 读取配置参数
|
|
|
@@ -573,13 +598,13 @@ namespace TeamAAS_VP.Core
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
-
|
|
|
+
|
|
|
var screwDriverConfig = _configService.GetScrewDriverConfig();
|
|
|
ScrewDriver = new XYD_ScrewDriver(screwDriverConfig.IPAdress, screwDriverConfig.Port);
|
|
|
Status.Add(new StatusInfo(ScrewDriver.Id, "电批未连接", new SolidColorBrush(Colors.Red)));
|
|
|
ScrewDriver.ConnectStateChangedEvent += ScrewDriver_ConnectStateChangedEvent;
|
|
|
- ScrewDriver.SendTimeout= screwDriverConfig.SendTimeout;
|
|
|
- screwDriverConfig.ReceiveTimeout= screwDriverConfig.ReceiveTimeout;
|
|
|
+ ScrewDriver.SendTimeout = screwDriverConfig.SendTimeout;
|
|
|
+ screwDriverConfig.ReceiveTimeout = screwDriverConfig.ReceiveTimeout;
|
|
|
var isConnected = await ScrewDriver.ConnectAsync();
|
|
|
if (isConnected)
|
|
|
{
|
|
|
@@ -597,6 +622,58 @@ namespace TeamAAS_VP.Core
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 初始化扭力测量仪
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task InitSignal()
|
|
|
+ {
|
|
|
+ if (File.Exists(FilePath.SignalConfigPath))
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ var port = FileHelper.ReadJsonFile<string>(FilePath.SignalConfigPath);
|
|
|
+ if (port != null)
|
|
|
+ {
|
|
|
+ client = new TouchSocket.SerialPorts.SerialPortClient();
|
|
|
+ client.Connecting = (client1, e) => { return EasyTask.CompletedTask; };//即将连接到端口
|
|
|
+ client.Connected = (client1, e) => { return EasyTask.CompletedTask; };//成功连接到端口
|
|
|
+ client.Closing = (client1, e) => { return EasyTask.CompletedTask; };//即将从端口断开连接。此处仅主动断开才有效。
|
|
|
+ client.Closed = (client1, e) => { return EasyTask.CompletedTask; };//从端口断开连接,当连接不成功时不会触发。
|
|
|
+ client.Received = async (c, e) =>
|
|
|
+ {
|
|
|
+ //await Console.Out.WriteLineAsync(Encoding.UTF8.GetString(e.ByteBlock.Buffer));
|
|
|
+ await Console.Out.WriteLineAsync(e.ByteBlock.Span.ToString(Encoding.ASCII));
|
|
|
+ };
|
|
|
+ client.Received = Sp_DataReceived;
|
|
|
+
|
|
|
+ await client.SetupAsync(new TouchSocketConfig()
|
|
|
+ .SetSerialPortOption(new SerialPortOption()
|
|
|
+ {
|
|
|
+ BaudRate = 115200,//波特率
|
|
|
+ DataBits = 8,//数据位
|
|
|
+ Parity = System.IO.Ports.Parity.None,//校验位
|
|
|
+ PortName = port,//COM
|
|
|
+ StopBits = System.IO.Ports.StopBits.One//停止位
|
|
|
+ })
|
|
|
+ .SetSerialDataHandlingAdapter(() => new PeriodPackageAdapter() { CacheTimeout = TimeSpan.FromMilliseconds(100) })
|
|
|
+ );
|
|
|
+
|
|
|
+ await client.ConnectAsync();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ LogHelper.WriteLogError("初始化扭力测量仪时出错!", ex);
|
|
|
+ SendTaskMessage("初始化扭力测量仪时出错!"+ex.Message, MessageLevel.Error);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ COM = "COM1";
|
|
|
+ FileHelper.WriteJsonFile(COM, FilePath.SignalConfigPath);
|
|
|
+ }
|
|
|
+ }
|
|
|
#endregion
|
|
|
|
|
|
#region 机器人指令执行
|
|
|
@@ -956,6 +1033,31 @@ namespace TeamAAS_VP.Core
|
|
|
{
|
|
|
SendTaskMessage($"{Lang.服务器}[{client.ServicePort}]{Lang.客户端}[{client.Id}:{client.IP}]{Lang.连接成功}!", MessageLevel.Debug);
|
|
|
}
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 扭力测量仪接收信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="client"></param>
|
|
|
+ /// <param name="e"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ private async Task Sp_DataReceived(ISerialPortClient client, ReceivedDataEventArgs e)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ string poname = client.MainSerialPort.PortName;
|
|
|
+ string data = e.ByteBlock.Span.ToString(Encoding.ASCII);
|
|
|
+ await Console.Out.WriteLineAsync(data);
|
|
|
+ string response = data.Split('\r')[0];
|
|
|
+ SendTaskMessage($"{poname}Receive:{response}", MessageLevel.Info);
|
|
|
+ SignalValue = response;
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ LogHelper.WriteLogError("扭力测量仪接收信息时出错!", ex);
|
|
|
+ SendTaskMessage("扭力测量仪接收信息时出错!" + ex.Message, MessageLevel.Error);
|
|
|
+ Thread.Sleep(50);
|
|
|
+ }
|
|
|
+ }
|
|
|
#endregion
|
|
|
|
|
|
#region PLC
|
|
|
@@ -1072,9 +1174,9 @@ namespace TeamAAS_VP.Core
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- PointF[] DowmCameraResults= new PointF[10];
|
|
|
+ PointF[] DowmCameraResults = new PointF[10];
|
|
|
PointF[] UpCameraPutResults = new PointF[10];
|
|
|
-
|
|
|
+
|
|
|
|
|
|
/// <summary>
|
|
|
/// PLC命令触发时
|
|
|
@@ -1084,7 +1186,7 @@ namespace TeamAAS_VP.Core
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
- if (tuple.key!= "AutoSensor")
|
|
|
+ if (tuple.key != "AutoSensor")
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
@@ -1094,7 +1196,7 @@ namespace TeamAAS_VP.Core
|
|
|
if (plc == null || !plc.IsConnected) return;
|
|
|
// 获取当前产品
|
|
|
var currentProduct = _productService.GetCurrentProduct();
|
|
|
- if (currentProduct==null)
|
|
|
+ if (currentProduct == null)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
@@ -1141,7 +1243,7 @@ namespace TeamAAS_VP.Core
|
|
|
|
|
|
// 执行视觉任务
|
|
|
var _cts = new CancellationTokenSource();
|
|
|
- var visionResult =await _remoteCommandService.ExecutePhotoGetSinglePoint(process, null,null, _cts.Token);
|
|
|
+ var visionResult = await _remoteCommandService.ExecutePhotoGetSinglePoint(process, null, null, _cts.Token);
|
|
|
if (visionResult.IsSucceed)
|
|
|
{
|
|
|
//披头偏差
|
|
|
@@ -1278,12 +1380,12 @@ namespace TeamAAS_VP.Core
|
|
|
|
|
|
// 执行视觉任务
|
|
|
var _cts = new CancellationTokenSource();
|
|
|
- var visionResult =await _remoteCommandService.ExecutePhotoGetSinglePoint(process, null, new double[] { currentPosition.X , currentPosition.Y, currentPosition.U}, _cts.Token);
|
|
|
+ var visionResult = await _remoteCommandService.ExecutePhotoGetSinglePoint(process, null, new double[] { currentPosition.X, currentPosition.Y, currentPosition.U }, _cts.Token);
|
|
|
if (visionResult.IsSucceed)
|
|
|
{
|
|
|
- UpCameraPutResults[cameraIndex]=new PointF((float)visionResult.X, (float)visionResult.Y);
|
|
|
+ UpCameraPutResults[cameraIndex] = new PointF((float)visionResult.X, (float)visionResult.Y);
|
|
|
+
|
|
|
|
|
|
-
|
|
|
await plc.WriteNodeAsync(addressConfig.Out_UpCameraPutStatus.Address, (Int16)1);
|
|
|
}
|
|
|
else
|
|
|
@@ -1389,7 +1491,7 @@ namespace TeamAAS_VP.Core
|
|
|
{
|
|
|
if (tuple.value is Int16 state)
|
|
|
{
|
|
|
- if (state==1)
|
|
|
+ if (state == 1)
|
|
|
{
|
|
|
SendTaskMessage($"收到开始锁付信号...", MessageLevel.Debug);
|
|
|
//位置编号
|
|
|
@@ -1408,7 +1510,7 @@ namespace TeamAAS_VP.Core
|
|
|
{
|
|
|
if (tuple.value is Int16 state)
|
|
|
{
|
|
|
- if (state==1 || state == 2)
|
|
|
+ if (state == 1 || state == 2)
|
|
|
{
|
|
|
SendTaskMessage($"收到停止锁付信号...", MessageLevel.Debug);
|
|
|
//位置编号
|
|
|
@@ -1425,7 +1527,7 @@ namespace TeamAAS_VP.Core
|
|
|
|
|
|
await Task.Delay(60);
|
|
|
//获取电批结果
|
|
|
- bool isSucced= ScrewDriver.GetData();
|
|
|
+ bool isSucced = ScrewDriver.GetData();
|
|
|
LockResult lockResult = new LockResult();
|
|
|
lockResult.ScrewdriverGetDataSucceed = isSucced;
|
|
|
lockResult.Number = positionIndex;
|
|
|
@@ -1458,6 +1560,7 @@ namespace TeamAAS_VP.Core
|
|
|
await _systemDatabaseService.RecordLockResultAsync(lockResult);
|
|
|
await plc.WriteNodeAsync(addressConfig.In_WorkDone.Address, (Int16)0);
|
|
|
|
|
|
+ Value = lockResult.LockTorque;
|
|
|
//电批吸嘴报警
|
|
|
NumStatistics.HeaderNum++;//批头数量
|
|
|
NumStatistics.NozzleNum++;//吸嘴数量
|
|
|
@@ -1490,7 +1593,7 @@ namespace TeamAAS_VP.Core
|
|
|
//拍1打1
|
|
|
if (systemConfig.WorkMode == 1)
|
|
|
{
|
|
|
- currentProduct.ScrewPoints[0].X_Position = UpCameraPutResults[1].X+ DowmCameraResults[0].X;
|
|
|
+ currentProduct.ScrewPoints[0].X_Position = UpCameraPutResults[1].X + DowmCameraResults[0].X;
|
|
|
currentProduct.ScrewPoints[0].Y_Position = UpCameraPutResults[1].Y + DowmCameraResults[0].Y;
|
|
|
await currentProduct.ScrewPoints[0].WriteToPlcAddress(addressConfig.Out_Screw, plc);
|
|
|
}
|
|
|
@@ -1498,16 +1601,16 @@ namespace TeamAAS_VP.Core
|
|
|
else if (systemConfig.WorkMode == 2)
|
|
|
{
|
|
|
//根据UpCameraPutResults[]中的索引1、2,和拍照点对应的Local下的坐标,从创建Local坐标系
|
|
|
- PointF worldP1=new PointF(UpCameraPutResults[1].X, UpCameraPutResults[1].Y);
|
|
|
- PointF worldP2= new PointF(UpCameraPutResults[2].X, UpCameraPutResults[2].Y);
|
|
|
- PointF localP1= new PointF(currentProduct.ScrewCameraLocalPos1.X_Position, currentProduct.ScrewCameraLocalPos1.Y_Position);
|
|
|
- PointF localP2= new PointF(currentProduct.ScrewCameraLocalPos2.X_Position, currentProduct.ScrewCameraLocalPos2.Y_Position);
|
|
|
- CoordinateTransformer local= new CoordinateTransformer(worldP1, worldP2, localP1, localP2);
|
|
|
+ PointF worldP1 = new PointF(UpCameraPutResults[1].X, UpCameraPutResults[1].Y);
|
|
|
+ PointF worldP2 = new PointF(UpCameraPutResults[2].X, UpCameraPutResults[2].Y);
|
|
|
+ PointF localP1 = new PointF(currentProduct.ScrewCameraLocalPos1.X_Position, currentProduct.ScrewCameraLocalPos1.Y_Position);
|
|
|
+ PointF localP2 = new PointF(currentProduct.ScrewCameraLocalPos2.X_Position, currentProduct.ScrewCameraLocalPos2.Y_Position);
|
|
|
+ CoordinateTransformer local = new CoordinateTransformer(worldP1, worldP2, localP1, localP2);
|
|
|
|
|
|
for (int i = 0; i < currentProduct.ScrewPoints.Count; i++)
|
|
|
{
|
|
|
var localPoint = new PointF(currentProduct.ScrewPoints[i].X_Position, currentProduct.ScrewPoints[i].Y_Position);
|
|
|
- var worldPoint= local.ToOldCoord(localPoint.X, localPoint.Y);
|
|
|
+ var worldPoint = local.ToOldCoord(localPoint.X, localPoint.Y);
|
|
|
var point = currentProduct.ScrewPoints[i].Clone();
|
|
|
point.X_Position = (float)worldPoint[0];
|
|
|
point.Y_Position = (float)worldPoint[1];
|
|
|
@@ -1557,7 +1660,7 @@ namespace TeamAAS_VP.Core
|
|
|
{
|
|
|
if (tuple.value is Int16 state)
|
|
|
{
|
|
|
- if (state!=0)
|
|
|
+ if (state != 0)
|
|
|
{
|
|
|
SendTaskMessage($"螺丝供料器...", MessageLevel.Info);
|
|
|
await plc.WriteNodeAsync(addressConfig.In_PickINC.Address, (Int16)0);
|