| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- using MathNet.Numerics;
- using Prism.Events;
- using Prism.Ioc;
- using Prism.Mvvm;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- using System.Windows;
- using TeamAAS_VP.Core;
- using TeamAAS_VP.Core.PLCs;
- using TeamAAS_VP.Events;
- using TeamAAS_VP.Interfaces;
- using TeamAAS_VP.Models;
- using TeamAAS_VP.Models.PLC;
- using TeamAAS_VP.Models.Torque;
- namespace TeamAAS_VP.Services
- {
- public class TorqueService : BindableBase
- {
- IEventAggregator _eventAggregator;
- IConfigService _configService;
- IContainerProvider _container;
- IRobotService _robotService;
- IPlcService _plcService;
- private Management management;
- /// <summary>
- /// 扭矩日志月份目录
- /// </summary>
- private string TorqueParametrPath
- {
- get
- {
- // 示例:..//Log//LogTorque//2026-01
- return $"..//Log//LogTorque//{DateTime.Now:yyyy-MM}";
- }
- }
- /// <summary>
- /// 当天扭矩 CSV 文件完整路径
- /// </summary>
- private string CurrentVariableCSV
- {
- get
- {
- // 示例:..//Log//LogTorque//2026-01//2026-01-22.csv
- return $"..//Log//LogTorque//{DateTime.Now:yyyy-MM}//{DateTime.Now:yyyy-MM-dd}.csv";
- }
- }
- public async Task Save_Torque_Log(string content)
- {
- try
- {
- if (!File.Exists(TorqueParametrPath))
- {
- Directory.CreateDirectory(TorqueParametrPath);
- }
- bool Is_Exists = File.Exists(CurrentVariableCSV);
- if (!Is_Exists)
- {
- using (File.Create(CurrentVariableCSV)) { }
- }
- using (StreamWriter sw = new StreamWriter(CurrentVariableCSV, true))
- {
- if (!Is_Exists)
- {
- //初始化文件,写入标题行
- sw.WriteLine("Time,扭力仪测量值,电批读取值,当前差值,设置差值,结果");
- sw.WriteLine(content);
- }
- else
- {
- sw.WriteLine(content);
- }
- }
- }
- catch (Exception ex)
- {
- MessageBox.Show("写入数据失败"+ex);
- }
- }
- public TorqueService(IEventAggregator ea, IConfigService configService,
- IContainerProvider container, IRobotService robotService, IPlcService plcService)
- {
- _eventAggregator = ea;
- _configService = configService;
- _container = container;
- _robotService = robotService;
- _plcService = plcService;
- management = _container.Resolve<Management>();
- }
- public async Task<bool> Throw_Screw_Async(IRobot Robot, OpcUaClientPLC plc, PlcAddressConfig addressConfig, TorqueProduceModel PlcPoint,float speed = 100)
- {
- List<bool> result = new List<bool>();
- var point = new RPoint()
- {
- X = PlcPoint.TorquePoints[0].X_Position,
- Y = PlcPoint.TorquePoints[0].Y_Position,
- Z = PlcPoint.TorquePoints[0].Z_Position_Start,
- };
- result.Add(await plc.WriteNodeAsync(addressConfig.Manu_ZAxis_Velocity.Address, speed));
- result.Add(await Robot.JumpAsync(point, 0));
- result.Add(await plc.WriteNodeAsync<bool>(addressConfig.ManuToHome.Address, true));
- return !result.Contains(false);
- }
- public async Task<bool> Pick_Screw_Async(IRobot Robot, OpcUaClientPLC plc, PlcAddressConfig addressConfig, TorqueProduceModel PlcPoint)
- {
- List<bool> result = new List<bool>();
- var point = new RPoint()
- {
- X = PlcPoint.TorquePoints[1].X_Position,
- Y = PlcPoint.TorquePoints[1].Y_Position,
- Z = PlcPoint.TorquePoints[1].Z_Position_Start,
- };
- result.Add(await plc.WriteNodeAsync(addressConfig.Screw_Backward.Address, true));
- result.Add(await Robot.JumpAsync(point, 0));
- result.Add(await plc.WriteNodeAsync(addressConfig.ManuTOWork.Address, true));
- result.Add(await plc.WriteNodeAsync(addressConfig.Screw_Backward.Address, false));
- result.Add(await BackZero_Async(Robot, point));
- await Task.Delay(500);
- result.Add(await Task.Run(() =>
- {
- return (bool)plc.ReadNode(addressConfig.InWork.Address);
- }));
- return !result.Contains(false);
- }
- public async Task<bool> Screw_Torque_Async(IRobot Robot, OpcUaClientPLC plc, PlcAddressConfig addressConfig, TorqueProduceModel PlcPoint)
- {
- List<bool> result = new List<bool>();
- var point = new RPoint()
- {
- X = PlcPoint.TorquePoints[2].X_Position,
- Y = PlcPoint.TorquePoints[2].Y_Position,
- Z = PlcPoint.TorquePoints[2].Z_Position_Start,
- };
- result.Add(await Robot.JumpAsync(point, 0));
- result.Add(await plc.WriteNodeAsync(addressConfig.Manu_ZAxis_Velocity.Address, (float)5.0));
- result.Add(await plc.WriteNodeAsync(addressConfig.Check_ScrewTorque.Address, true));
- point.Z = PlcPoint.TorquePoints[2].Z_Position_Stop;
- result.Add(await Robot.GoAsync(point));
- result.Add(await plc.WriteNodeAsync(addressConfig.ManuToHome.Address, true));
- result.Add(await plc.WriteNodeAsync(addressConfig.Manu_ZAxis_Velocity.Address, (float)100.0));
- return !result.Contains(false);
- }
- public async Task<bool> Safety_Position_Async(IRobot Robot, OpcUaClientPLC plc, PlcAddressConfig addressConfig, TorqueProduceModel PlcPoint)
- {
- List<bool> result = new List<bool>();
- var point = new RPoint()
- {
- X = PlcPoint.TorquePoints[3].X_Position,
- Y = PlcPoint.TorquePoints[3].Y_Position,
- Z = PlcPoint.TorquePoints[3].Z_Position_Start,
- };
- result.Add(await Robot.JumpAsync(point, 0));
- return !result.Contains(false);
- }
- public async Task<bool> BackZero_Async(IRobot Robot, RPoint point)
- {
- point.Z = 0;
- return await Robot.GoAsync(point);
- }
- public async Task Signal_Move_Async(IRobot Robot, OpcUaClientPLC plc, PlcAddressConfig addressConfig, PlcPoint_Torque target)
- {
- var point = new RPoint()
- {
- X = target.X_Position,
- Y = target.Y_Position,
- Z = target.Z_Position_Start,
- };
- await Robot.JumpAsync(point, 0);
- }
- }
- }
|