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);
// }
//}
}
}