using HslCommunication; using HslCommunication.Profinet.Melsec; using MoviconHub.App.Com; using MoviconHub.App.Models; using MoviconHub.App.Services; using NLog; using ReaLTaiizor.Forms; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace MoviconHub.App { public partial class frmMain : MaterialForm { public frmMain() { InitializeComponent(); } /// /// 当前的日志记录 /// private Logger Logger { get; set; } = LogManager.GetCurrentClassLogger(); /// /// 当前的信号模型 /// public SglModel CurSglModel { get; set; } /// /// PLCScanTask扫描Task /// private static Task PLCScanTask { get; set; } /// /// 扫描线程使能 /// public bool ThreadEnable { get; set; } = true; /// /// 三菱连接驱动程序 /// public MelsecMcNet MelsecMcNetDrive { get; set; } /// /// DB连接服务 /// public DBServices CurDBServices { get; set; } private void frmMain_Load(object sender, EventArgs e) { CurSglModel = new SglModel(); CurSglModel.SglModelChanged += CurSglModel_SglModelChanged; CurDBServices = new DBServices(CurSglModel); CurDBServices.StartPolling(); // 初始化API服务 ApiHelper.Initialize(); WebSocketClientHelper.Initialize(); WebSocketClientHelper.PubRtDataStart(); ClearActionInstance = new ClearAction(); ClearActionInstance.ClearActionEvent += ClearActionInstance_ClearActionEvent; ClearActionInstance.DeviceStateChangeEvent += ClearActionInstance_DeviceStateChangeEvent; ListAlarmModels = new List() { new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="热水罐液位 H报警", Index=0, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="热水罐液位 L报警", Index=1, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="热水罐液位 LL报警", Index=2, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="清洗剂罐液位 H报警", Index=3, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="清洗剂罐液位 L报警", Index=4, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="清洗剂罐液位 LL报警", Index=5, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="桁架平移前进极限报警", Index=6, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="桁架平移后退极限报警", Index=7, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="桁架吊装上升极限报警", Index=8, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="桁架吊装下降极限报警", Index=9, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="漫射喷淋AXIS1 X1伺服报警", Index=10, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="漫射喷淋AXIS2 伺服报警", Index=11, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="漫射喷淋AXIS3 X2伺服报警", Index=12, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="上位机 急停被按下报警", Index=13, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="大部件 急停安全继电器未吸合报警", Index=14, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="R08与FX3U 通讯丢失,请查看网线是否松动", Index=15, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="N1C1 XME02(零部件)变频器 CC LINK网络报警 站号:1", Index=16, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="N1C1 XME03(大部件)变频器 CC LINK网络报警 站号:2", Index=17, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="N1C1 XME04(ROB1高压泵)变频器 CC LINK网络报警 站号:3", Index=18, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="N1C1 XME05(ROB2高压泵)变频器 CC LINK网络报警 站号:4", Index=19, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="机器人1 CC LINK网络报警 站号:5", Index=20, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="机器人2 CC LINK网络报警 站号:9", Index=21, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="JCB03 A3119_1 远程IO从站 CC LINK网络报警 站号:13", Index=22, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="JCB03 A4119_1 远程IO从站 CC LINK网络报警 站号:14", Index=23, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="JCB01 A119_1 远程IO从站 CC LINK网络报警 站号:15", Index=24, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="JCB01 A124_1 远程IO从站 CC LINK网络报警 站号:16", Index=25, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="JCB01 A129_1 远程IO从站 CC LINK网络报警 站号:17", Index=26, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="JCB01 A200_1 远程IO从站 CC LINK网络报警 站号:18", Index=27, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="JCB01 A205_1 远程IO从站 CC LINK网络报警 站号:19", Index=28, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="JCB02 A2119_1 远程IO从站 CC LINK网络报警 站号:20", Index=29, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="ROB1 机器人故障报警", Index=30, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="ROB2 机器人故障报警", Index=31, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="N1C1 XME02 变频器存在错误", Index=32, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="N1C1 XME03 变频器存在错误", Index=33, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="N1C1 XME04 变频器存在错误", Index=34, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="N1C1 XME05 变频器存在错误", Index=35, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="ROB1第七轴伺服故障", Index=36, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="ROB2第七轴伺服故障", Index=37, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="零部件吊装伺服故障", Index=38, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="零部件平移伺服故障", Index=39, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="N1C1 XME04 高压泵温度指示报警", Index=40, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="N1C1 XME04 高压泵压力指示报警", Index=41, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="N1C1 XME05 高压泵温度指示报警", Index=42, DeviceState=2, }, new AlarmModel(FRemoteSqlContext.FDb){ DeviceName="机车构架及大部件自动化智能清洗设备", DeviceCode="942010002", AlarmMessage="N1C1 XME05 高压泵压力指示报警", Index=43, DeviceState=2, }, }; ListDeviceStateStaticModels = new List() { new DeviceStateStaticModel() { Name="开机时长", Index=2 }, new DeviceStateStaticModel() { Name="运行时长", Index=6 }, new DeviceStateStaticModel() { Name="待机时长", Index=8 }, new DeviceStateStaticModel() { Name="关机时长", Index=10 }, new DeviceStateStaticModel() { Name="故障时长", Index=14 }, new DeviceStateStaticModel() { Name="使用率分子", Index=18 }, new DeviceStateStaticModel() { Name="作业计次", Index=100 }, new DeviceStateStaticModel() { Name="故障计次", Index=102 }, }; InitCom(); //扫描线程成功 RtScanDeviceStart(); //dBServices.StartPolling(); //var data = ApiHelper.GetPartInfoAsync("df3976d89a8f482685d0fb2ba5ed11ba", ""); } private void ClearActionInstance_DeviceStateChangeEvent(object sender, StateInfo Value) { var Data = new DeviceStatusChange() { DeviceCode = "942010002", DeviceName = "机车构架及大部件自动化智能清洗设备", DeviceState = Value.State, StartTime = Value.StartTime, EndTime = Value.EndTime, }; var Result = FRemoteSqlContext.FDb.Insert(Data).ExecuteInserted(); if (Result != null && Result.Count > 0) { Logger.Info("设备数据状态改变保存完成"); BeginInvoke(new Action(() => { MainText.AppendText($"时间:{DateTime.Now}-Msg:设备数据状态改变保存完成 {Environment.NewLine}"); })); } } /// /// 清洗动作实例信息 /// /// /// /// private void ClearActionInstance_ClearActionEvent(object sender, string Par) { switch (Par) { case "设备关机": { var Data = new DeviceState() { DeviceName = "机车构架及大部件自动化智能清洗设备", DeviceCode = "942010002", PowerOnTime = ListDeviceStateStaticModels.Find(a => a.Name == "开机时长").Value, RunTime = ListDeviceStateStaticModels.Find(a => a.Name == "运行时长").Value, StandbyTime = ListDeviceStateStaticModels.Find(a => a.Name == "待机时长").Value, ShutdownTime = ListDeviceStateStaticModels.Find(a => a.Name == "关机时长").Value, FaultTime = ListDeviceStateStaticModels.Find(a => a.Name == "故障时长").Value, JobNum = ListDeviceStateStaticModels.Find(a => a.Name == "作业计次").Value, FaultNum = ListDeviceStateStaticModels.Find(a => a.Name == "故障计次").Value, //UseRatio = ListDeviceStateStaticModels.Find(a=>a.Name== "故障计次").Value, }; var Result = FRemoteSqlContext.FDb.Insert(Data).ExecuteInserted(); if (Result != null && Result.Count > 0) { Logger.Error("清洗时间统计数据完成"); BeginInvoke(new Action(() => { MainText.AppendText($"时间:{DateTime.Now}-Msg:清洗时间统计数据完成 {Environment.NewLine}"); })); } } break; case "清洗完成": { // 获取组件信息 var component = CurDBServices.RealtimeData.ListComponentsInfo?.FirstOrDefault(); if (component != null) { // 创建CurRunClearState对象并映射数据 var curRunData = new ClearData() { // 基本信息 DeviceCode = CurDBServices.RealtimeData.Device_Code, DeviceName = CurDBServices.RealtimeData.Device_Name, // 组件信息 part_qrid = component?.part_qrid, part_num = component?.part_num, part_position = component?.part_position, component_name = component?.part_name, vehicle_model = component?.part_Vehicle_model, locomotive_number = component?.part_locomotive_number, repair_process = component?.part_repair_process, program_process = CurDBServices.RealtimeData.TestData.Test_FrameworkProgramProcess, // 程序进程 Test_FrameworkProgramProcess = CurDBServices.RealtimeData.TestData.Test_FrameworkProgramProcess, Test_FrameworkProgramProcessPercentage = CurDBServices.RealtimeData.TestData.Test_FrameworkProgramProcessPercentage, //// 设备状态 //Test_PartsEquipmentStatus = CurDBServices.RealtimeData.TestData.Test_PartsEquipmentStatus, // 清洗时长和用量 Test_FrameworkPerModelCleaningDuration = CurDBServices.RealtimeData.TestData.Test_FrameworkPerModelCleaningDuration, Test_FrameworkPerModelCleaningAgentUsage = CurDBServices.RealtimeData.TestData.Test_FrameworkPerModelCleaningAgentUsage, Test_FrameworkPerModelWaterUsage = CurDBServices.RealtimeData.TestData.Test_FrameworkPerModelWaterUsage, // 水箱和清洗剂罐信息 WaterTank_Temp = CurDBServices.RealtimeData.TestData.Test_WaterTankTemperature, AgentTank_Temp = CurDBServices.RealtimeData.TestData.Test_CleaningAgentTankTemperature, WaterTank_Level = CurDBServices.RealtimeData.TestData.Test_WaterTankLevel, AgentTank_Level = CurDBServices.RealtimeData.TestData.Test_CleaningAgentTankLevel, // 浸泡池温度 SoakingTank1_Temp = CurDBServices.RealtimeData.TestData.Test_SoakingTank1Temperature, SoakingTank2_Temp = CurDBServices.RealtimeData.TestData.Test_SoakingTank2Temperature, // 运行模式 Test_WaterTankHeat = CurDBServices.RealtimeData.TestData.Test_WaterTankHeat, Test_WaterTankAdd = CurDBServices.RealtimeData.TestData.Test_WaterTankAdd, Test_CleaningAgentTankHeat = CurDBServices.RealtimeData.TestData.Test_CleaningAgentTankHeat, Test_CleaningAgentTankAdd = CurDBServices.RealtimeData.TestData.Test_CleaningAgentTankAdd, // 监控信息 Test_ElectricSurveillance = CurDBServices.RealtimeData.TestData.Test_ElectricSurveillance, Test_SteamSurveillance = CurDBServices.RealtimeData.TestData.Test_SteamSurveillance, //Test_Rob1Axis7BackwardLimitOK = CurDBServices.RealtimeData.TestData.Test_Rob1Axis7BackwardLimitOK, //Test_Rob1Axis7ForwardLimitOK = CurDBServices.RealtimeData.TestData.Test_Rob1Axis7ForwardLimitOK, //Test_Rob1Axis7Home = CurDBServices.RealtimeData.TestData.Test_Rob1Axis7Home, //Test_Rob2Axis7BackwardLimitOK = CurDBServices.RealtimeData.TestData.Test_Rob2Axis7BackwardLimitOK, //Test_Rob2Axis7ForwardLimitOK = CurDBServices.RealtimeData.TestData.Test_Rob2Axis7ForwardLimitOK, //Test_Rob2Axis7Home = CurDBServices.RealtimeData.TestData.Test_Rob2Axis7Home, //Test_TrussLiftHome = CurDBServices.RealtimeData.TestData.Test_TrussLiftHome, //Test_TrussLiftLowerLimit = CurDBServices.RealtimeData.TestData.Test_TrussLiftLowerLimit, //Test_TrussLiftPoolPos = CurDBServices.RealtimeData.TestData.Test_TrussLiftPoolPos, //Test_TrussLiftRiseLimit = CurDBServices.RealtimeData.TestData.Test_TrussLiftRiseLimit, //Test_TrussLiftWashPos = CurDBServices.RealtimeData.TestData.Test_TrussLiftWashPos, //Test_TrussMoveBackwardLimit = CurDBServices.RealtimeData.TestData.Test_TrussMoveBackwardLimit, //Test_TrussMoveForwardLimit = CurDBServices.RealtimeData.TestData.Test_TrussMoveForwardLimit, //Test_TrussMoveHome = CurDBServices.RealtimeData.TestData.Test_TrussMoveHome, }; var Result = FRemoteSqlContext.FDb.Insert(curRunData).ExecuteInserted(); if (Result != null && Result.Count > 0) { Logger.Error("清洗当时数据记录完成"); BeginInvoke(new Action(() => { MainText.AppendText($"时间:{DateTime.Now}-Msg:清洗当时数据记录完成 {Environment.NewLine}"); })); } } } break; default: break; } } /// /// 报警集合 /// public List ListAlarmModels { get; set; } /// /// 清洗动作实例 /// public ClearAction ClearActionInstance { get; set; } /// /// 运行状态统计模型 /// public List ListDeviceStateStaticModels { get; set; } /// /// 报警结果集合 /// private OperateResult OperateResultAlarm { get; set; } /// /// 清洗结束 /// private OperateResult OperateResultClearEnd { get; set; } /// /// 设备关机 /// private OperateResult OperateResultDeviceClose { get; set; } private OperateResult OperateResultClearAction { get; set; } /// /// 报警结果集合 /// private OperateResult OperateResultDeviceStateStatic { get; set; } private OperateResult OperateResultDeviceStateChange { get; set; } /// /// 通信初始化 /// private void InitCom() { try { var PLCIP = ConfigHelper.GetValue("PLCIP"); var PLCPort = 6000; if (int.TryParse(ConfigHelper.GetValue("PLCPort"), out int PortResult)) { PLCPort = PortResult; } //PLC通信的连接 MelsecMcNetDrive = new MelsecMcNet(); MelsecMcNetDrive.IpAddress = PLCIP; MelsecMcNetDrive.Port = PLCPort; MelsecMcNetDrive.ConnectClose(); MelsecMcNetDrive.ConnectTimeOut = 3000; // 连接3秒超时 OperateResult connect = MelsecMcNetDrive.ConnectServer(); if (connect.IsSuccess)//初始连接状态的显示判断 { //MessageBox.Show(HslCommunication.StringResources.Language.ConnectedSuccess); //MelsecMcNetDrive.Write("M504", true); //MessageBox.Show("PLC连接成功"); } else { Logger.Error("初始PLC通信失败"); //MessageBox.Show(connect.Message + Environment.NewLine + "ErrorCode: " + connect.ErrorCode); } } catch (Exception) { } } /// /// PLC扫描线程 /// private void RtScanDeviceStart() { PLCScanTask = Task.Run(async () => { while (ThreadEnable) { //await Task.CompletedTask; await Task.Delay(50); try { OperateResultAlarm = MelsecMcNetDrive.ReadBool("M150", 50); if (OperateResultAlarm.IsSuccess) { foreach (var item in ListAlarmModels) { if (CurDBServices.RealtimeData != null && CurDBServices.RealtimeData.FaultDetails != null) { if (int.TryParse(CurDBServices.RealtimeData.Device_Status, out int FaultCodeResult)) { item.DeviceState = FaultCodeResult; } } item.IsActive = OperateResultAlarm.Content[item.Index]; } } OperateResultDeviceStateStatic = MelsecMcNetDrive.ReadInt16("D4500", 150); if (OperateResultDeviceStateStatic.IsSuccess) { foreach (var itemDeviceStateStatic in ListDeviceStateStaticModels) { itemDeviceStateStatic.Value = OperateResultDeviceStateStatic.Content[itemDeviceStateStatic.Index]; } } OperateResultDeviceStateChange = MelsecMcNetDrive.ReadInt16("D4000"); if (OperateResultDeviceStateChange.IsSuccess) { ClearActionInstance.DeviceState = OperateResultDeviceStateChange.Content; } //OperateResultClearEnd = MelsecMcNetDrive.ReadBool("M210"); //if (OperateResultClearEnd.IsSuccess) //{ // ClearActionInstance.ClearEnd = OperateResultClearEnd.Content; //} //设备清洗结束 OperateResultClearEnd = MelsecMcNetDrive.ReadBool("M211"); if (OperateResultClearEnd.IsSuccess) { ClearActionInstance.ClearEnd = OperateResultClearEnd.Content; } //设备关机 OperateResultDeviceClose = MelsecMcNetDrive.ReadBool("M210"); if (OperateResultDeviceClose.IsSuccess) { ClearActionInstance.DeviceClose = OperateResultDeviceClose.Content; } //OperateResultClearAction = MelsecMcNetDrive.ReadInt16("D5010"); //if (OperateResultClearAction.IsSuccess) //{ // ClearActionInstance.ClearEnd = OperateResultClearAction.Content.GetBoolByIndex(12); //} } catch (Exception ex) { //LogService.Info($"时间:{DateTime.Now.ToString()}-【Meter】-{ex.Message}"); } } }); } /// /// 信号信息改变事件 /// /// /// /// private void CurSglModel_SglModelChanged(object sender, string Par) { switch (Par) { case "CodeReady": // 处理条码信息OK信号 // 这里可以添加您需要执行的操作 // 获取零件二维码ID var partQrId = CurDBServices.RealtimeData.ListComponentsInfo.FirstOrDefault()?.part_qrid; if (string.IsNullOrEmpty(partQrId)) { Logger.Error("二维码ID为空,无法获取部件信息"); //MessageBox.Show("二维码ID为空,无法获取部件信息", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } Logger.Error("开始进行API请求"); BeginInvoke(new Action(() => { MainText.AppendText($"时间:{DateTime.Now}-Msg:开始进行API请求 {Environment.NewLine}"); })); Task.Run(async () => { try { var partInfoResponse = await ApiHelper.GetPartInfoAsync(CurDBServices.RealtimeData.ListComponentsInfo.FirstOrDefault().part_qrid, ""); BeginInvoke(new Action(() => { materialMultiLineTextBoxEditApi.Text = $"Datetime:{DateTime.Now}-Msg:请求了 Api-{partInfoResponse.Message}"; })); // 解析响应数据 if (partInfoResponse != null) { if (partInfoResponse.Status == 200) // 成功状态码 { var partInfo = partInfoResponse.Data; if (partInfo != null) { // 这里可以根据需要处理和显示部件信息 string partInfoDetails = $"车型: {partInfo.VehicleModel}\n" + $"车号: {partInfo.LocomotiveNumber}\n" + $"修程: {partInfo.RepairProcess}\n" + $"部件名称: {partInfo.ComponentName}\n" + $"位别: {partInfo.PartPosition}\n" + $"部件编号: {partInfo.PartNum}\n" + $"部件二维码: {partInfo.PartQrCode}"; // 显示或记录部件信息 Logger.Info($"成功获取部件信息: {partInfoDetails}"); if (CurDBServices.RealtimeData.ListComponentsInfo != null && CurDBServices.RealtimeData.ListComponentsInfo.Count > 0) { CurDBServices.RealtimeData.ListComponentsInfo.FirstOrDefault().part_Vehicle_model = partInfo.VehicleModel; CurDBServices.RealtimeData.ListComponentsInfo.FirstOrDefault().part_locomotive_number = partInfo.LocomotiveNumber; CurDBServices.RealtimeData.ListComponentsInfo.FirstOrDefault().part_repair_process = partInfo.RepairProcess; CurDBServices.RealtimeData.ListComponentsInfo.FirstOrDefault().part_position = partInfo.PartPosition; CurDBServices.RealtimeData.ListComponentsInfo.FirstOrDefault().part_name = partInfo.ComponentName; CurDBServices.RealtimeData.ListComponentsInfo.FirstOrDefault().part_num = partInfo.PartNum; CurDBServices.RealtimeData.ListComponentsInfo.FirstOrDefault().part_qrid = partInfo.PartQrCode; } //写个PLC FSqlContext.FDb.Update() .Set(a => a.Val, partInfo.VehicleModel) .Where(a => a.Name == "part_Vehicle_model") .ExecuteAffrows(); FSqlContext.FDb.Update() .Set(a => a.Val, partInfo.LocomotiveNumber) .Where(a => a.Name == "part_locomotive_number") .ExecuteAffrows(); FSqlContext.FDb.Update() .Set(a => a.Val, partInfo.RepairProcess) .Where(a => a.Name == "part_repair_process") .ExecuteAffrows(); FSqlContext.FDb.Update() .Set(a => a.Val, partInfo.PartPosition) .Where(a => a.Name == "part_position") .ExecuteAffrows(); FSqlContext.FDb.Update() .Set(a => a.Val, partInfo.ComponentName) .Where(a => a.Name == "part_name") .ExecuteAffrows(); FSqlContext.FDb.Update() .Set(a => a.Val, partInfo.PartNum) .Where(a => a.Name == "part_num") .ExecuteAffrows(); //FSqlContext.FDb.Update() // .Set(a => a.Val, partInfo.VehicleModel) // .Where(a => a.Name == "part_qrid") // .ExecuteAffrows(); // 读取数据后,关闭文件流 BeginInvoke(new Action(() => { MainText.AppendText($"时间:{DateTime.Now}-Msg:{partInfoDetails} {Environment.NewLine}"); })); // 根据UI设计,可以将这些信息显示在相应的控件上 // 例如:lblVehicleModel.Text = partInfo.VehicleModel; // 或者可以将整个部件信息对象保存到某个属性中,供其他地方使用 // this.CurrentPartInfo = partInfo; } else { Logger.Error("API返回成功但部件信息为空"); //MessageBox.Show($"API返回成功但部件信息为空", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } else { Logger.Error($"获取部件信息失败: {partInfoResponse.Message}\n状态码: {partInfoResponse.Status}"); // 处理API返回的错误 //MessageBox.Show($"获取部件信息失败: {partInfoResponse.Message}\n状态码: {partInfoResponse.Status}", //"API错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } else { MessageBox.Show("API响应为空", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } catch (Exception ex) { Logger.Error(ex, "异步获取或解析部件信息时发生异常"); } }); break; default: break; } } private void frmMain_FormClosed(object sender, FormClosedEventArgs e) { WebSocketClientHelper.Disconnect(); CurDBServices.StopPolling(); ThreadEnable = false; } //private Task Async ddd() //{ // // 初始化 // WebSocketClientHelper.Initialize(); // // 注册消息接收事件 // WebSocketClientHelper.MessageReceived += (sender, e) => // { // // 处理接收到的消息 // if (e.Message.MessageType == MessageType.DeviceStatus) // { // // 处理设备状态消息 // } // }; // // 连接服务器 // WebSocketClientHelper.ConnectAsync(); // // 发送数据 // var statusData = new DeviceStatusData // { // DeviceId = "Device001", // DeviceName = "测试设备", // Status = "运行中", // Voltage = 220.5, // Current = 5.2, // Temperature = 36.8 // }; // WebSocketClientHelper.SendDeviceStatus(statusData); //} //private void Request() //{ // // 假设您从输入框获取二维码和设备编码 // string qrCode = txtQrCode.Text.Trim(); // string deviceCode = txtDeviceCode.Text.Trim(); // if (string.IsNullOrEmpty(qrCode) || string.IsNullOrEmpty(deviceCode)) // { // MessageBox.Show("请输入二维码和设备编码", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); // return; // } // try // { // // 显示加载中状态 // SetControlsEnabled(false); // lblStatus.Text = "正在获取数据..."; // // 调用API获取部件信息 // var result = await ApiHelper.GetPartInfoAsync(qrCode, deviceCode); // if (result.Status == 200 && result.Data != null) // { // // 将获取到的数据填充到表单中 // txtVehicleModel.Text = result.Data.VehicleModel; // txtLocomotiveNumber.Text = result.Data.LocomotiveNumber; // txtRepairProcess.Text = result.Data.RepairProcess; // txtComponentName.Text = result.Data.ComponentName; // txtPartPosition.Text = result.Data.PartPosition; // txtPartNum.Text = result.Data.PartNum; // lblStatus.Text = "数据获取成功"; // } // else // { // // 显示错误信息 // lblStatus.Text = $"获取数据失败:{result.Message}"; // MessageBox.Show($"获取数据失败:{result.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); // } // } // catch (Exception ex) // { // lblStatus.Text = $"发生异常:{ex.Message}"; // MessageBox.Show($"发生异常:{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); // } // finally // { // // 恢复控件状态 // SetControlsEnabled(true); // } //} } }