using DataEntity.Device; using DataEntity.Share; using DataRWDAL.Device; using HxEnum; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Text; using XImagingXhandler.XDAL; using static HxEnum.StateEnum; namespace HxSocketImplement.Sockets { /// /// 连接设备 /// public class EquConnect { #region 服务端 #region 断开服务端 /// /// 断开服务端 /// public static bool BreakDeviceConnect() { bool isOk = true; // 根据项目ID,获取设备列表 var lstDevice = DeviceConfigDB.GetDeviceConfigListByProjectId(Shared.SoftwareInformation.software_information_id); foreach (var item in lstDevice) { if (item.CommunicateType == EnumManagement.GetEnumValue(CommunicateTypeEnum.Socket)) { Result resultModel = HxSocketParameterService.BreakConnect(item.Type, item.Ip, Convert.ToInt32(item.Port), item.EquipmentId); if (resultModel.status == StateEnum_Equipment.Failed) { isOk = false; } } #region Del //else if (item.CommunicateType == EnumManagement.GetEnumValue(CommunicateTypeEnum.Modbus)) //{ // PLCService.DisposePLC(item.EquipmentId, (item.VirtualConnectionState == EnumManagement.GetEnumValue(VirtualConnectionStateEnum.Virtually))); //} //else if (item.CommunicateType == EnumManagement.GetEnumValue(CommunicateTypeEnum.SerialPort)) //{ // SerialPortParameterModel serialPortsModel = new SerialPortParameterModel { PortName = "" }; // SerialPorts.CloseSerialPort(serialPortsModel); //} //else if (item.CommunicateType == EnumManagement.GetEnumValue(CommunicateTypeEnum.SocketUDP)) //{ // SocketUdpNonstandardClient.Close(new SocketUdpNonstandardParameterModel { EquipmentType = item.Type, Ip = item.Ip, Port = Sys.ConvertToTrimInt(item.Port), EquipmentId = item.EquipmentId }); //} //else if (item.CommunicateType == EnumManagement.GetEnumValue(CommunicateTypeEnum.SocketNonstandard)) //{ // SocketNonstandardClient.Close(new SocketNonstandardParameterModel { EquipmentType = item.Type, Ip = item.Ip, Port = Sys.ConvertToTrimInt(item.Port), EquipmentId = item.EquipmentId }); //} #endregion } return isOk; } #endregion #region 作为客户端连接设备的服务端 /// /// 作为客户端连接设备的服务端 /// /// public static Result ConnectService() { Result result = new Result(); result.msg = JsonConvert.SerializeObject(GetConnectServiceStr()); return result; } /// /// 获取服务端链接字符串 /// /// private static List GetConnectServiceStr() { var deviceConfigResult = DeviceConfigDB.GetDeviceConfigListByProjectId(Shared.SoftwareInformation.software_information_id); List strList = new List(); foreach (var item in deviceConfigResult) { StringBuilder sb = new StringBuilder(); if (item.CommunicateType == EnumManagement.GetEnumValue(CommunicateTypeEnum.Socket)) //Socket-TCP { #region SocketTCP var socketParameter = HxSocketParameterService.AddSocketDefaultParameter(item.Type, item.Ip, Convert.ToInt32(item.Port), item.EquipmentId, (item.VirtualConnectionState == EnumManagement.GetEnumValue(VirtualConnectionStateEnum.Virtually))); if (socketParameter != null && socketParameter.status == StateEnum_Equipment.Completed) { var result = HxSocketParameterService.Connect(item.Type, item.Ip, Convert.ToInt32(item.Port), item.EquipmentId); if (result != null && result.status == StateEnum_Equipment.Completed) { sb.Append(($"IP【{item.Ip + ":" + item.Port}】,设备【{item.Name + "(" + EnumManagement.GetFieldTextByValue(item.CommunicateType)})】{result.msg}" + Environment.NewLine)); } else { sb.Append(($"IP【{item.Ip + ":" + item.Port}】,设备【{item.Name + "(" + EnumManagement.GetFieldTextByValue(item.CommunicateType)})】->{result.msg}<-" + Environment.NewLine)); } } else { sb.Append(($"IP【{item.Ip + ":" + item.Port}】,设备【{item.Name + "(" + EnumManagement.GetFieldTextByValue(item.CommunicateType)})】->{socketParameter.msg}<-" + Environment.NewLine)); } #endregion } #region Del //else if (item.CommunicateType == EnumManagement.GetEnumValue(CommunicateTypeEnum.Modbus)) //Modbus //{ // #region Modbus // var result = PLCService.ConnectPLC(item.Ip, Sys.ConvertToTrimInt(item.Port), item.EquipmentId, // (item.VirtualConnectionState == EnumManagement.GetEnumValue(VirtualConnectionStateEnum.Virtually)), Sys.ConvertToTrimInt(item.PlcHeartbeatAddress)); // if (result != null && result.status == EnumManagement.GetEnumValue(StateEnum.StateEnum_Equipment.Completed)) // { // sb.Append(($"IP【{item.Ip + ":" + item.Port}】,设备【{item.Name + "(" + EnumManagement.GetFieldTextByValue(item.CommunicateType)})】{result.msg}" + Environment.NewLine)); // } // else // { // sb.Append(($"IP【{item.Ip + ":" + item.Port}】,设备【{item.Name + "(" + EnumManagement.GetFieldTextByValue(item.CommunicateType)})】->{result.msg}<-" + Environment.NewLine)); // } // #endregion //} //else if (item.CommunicateType == EnumManagement.GetEnumValue(CommunicateTypeEnum.SerialPort)) //SerialPort //{ // #region SerialPort // SerialPortParameterModel serialPortsModel = new SerialPortParameterModel(); // serialPortsModel.EquipmentType = item.Type; // serialPortsModel.EquipmentId = item.EquipmentId; // serialPortsModel.PortName = item.PortName; // serialPortsModel.VirtualConnectionState = (item.VirtualConnectionState == EnumManagement.GetEnumValue(VirtualConnectionStateEnum.Virtually)); // serialPortsModel.DelaySecondTime = 3000; // serialPortsModel.BaudRate = Sys.ConvertToTrimInt(item.BaudRate); // serialPortsModel.Parity = EnumManagement.ToEnum(item.Parity); // serialPortsModel.DataBits = Sys.ConvertToTrimInt(item.DataBits); // serialPortsModel.StopBits = EnumManagement.ToEnum(item.StopBits); // var addResult = SerialPorts.AddSerialPortDefaultParameters(serialPortsModel); // if (addResult != null && addResult.status == EnumManagement.GetEnumValue(StateEnum.StateEnum_Equipment.Completed)) // { // var result = SerialPorts.OpenSerialPort(serialPortsModel); // if (result != null && result.status == EnumManagement.GetEnumValue(StateEnum.StateEnum_Equipment.Completed)) // { // sb.Append(($"端口名称【{item.PortName}】,设备【{item.Name + "(" + EnumManagement.GetFieldTextByValue(item.CommunicateType)})】{result.msg}" + Environment.NewLine)); // } // else // { // sb.Append(($"端口名称【{item.PortName}】,设备【{item.Name + "(" + EnumManagement.GetFieldTextByValue(item.CommunicateType)})】->{result.msg}<-" + Environment.NewLine)); // } // } // else // { // sb.Append(($"端口名称【{item.PortName}】,设备【{item.Name + "(" + EnumManagement.GetFieldTextByValue(item.CommunicateType)})】->{addResult.msg}<-" + Environment.NewLine)); // } // #endregion //} //else if (item.CommunicateType == EnumManagement.GetEnumValue(CommunicateTypeEnum.SocketUDP)) //SocketUDP //{ // #region SocketUDP // SocketUdpNonstandardParameterModel socketUdpNonstandardModel = new SocketUdpNonstandardParameterModel(); // socketUdpNonstandardModel.EquipmentType = item.Type; // socketUdpNonstandardModel.EquipmentId = item.EquipmentId; // socketUdpNonstandardModel.Ip = item.Ip; // socketUdpNonstandardModel.Port = Sys.ConvertToTrimInt(item.Port); // socketUdpNonstandardModel.VirtualConnectionState = (item.VirtualConnectionState == EnumManagement.GetEnumValue(VirtualConnectionStateEnum.Virtually)); // var socketParameter = SocketUdpNonstandardClient.AddSerialPortDefaultParameters(socketUdpNonstandardModel); // if (socketParameter != null && socketParameter.status == EnumManagement.GetEnumValue(StateEnum.StateEnum_Equipment.Completed)) // { // var result = SocketUdpNonstandardClient.SocketNonstandardConnect(socketUdpNonstandardModel); // if (result != null && result.status == EnumManagement.GetEnumValue(StateEnum.StateEnum_Equipment.Completed)) // { // sb.Append(($"IP【{item.Ip + ":" + item.Port}】,设备【{item.Name + "(" + EnumManagement.GetFieldTextByValue(item.CommunicateType)})】{result.msg}" + Environment.NewLine)); // } // else // { // sb.Append(($"IP【{item.Ip + ":" + item.Port}】,设备【{item.Name + "(" + EnumManagement.GetFieldTextByValue(item.CommunicateType)})】->{result.msg}<-" + Environment.NewLine)); // } // } // else // { // sb.Append(($"IP【{item.Ip + ":" + item.Port}】,设备【{item.Name + "(" + EnumManagement.GetFieldTextByValue(item.CommunicateType)})】->{socketParameter.msg}<-" + Environment.NewLine)); // } // #endregion //} //if (item.CommunicateType == EnumManagement.GetEnumValue(CommunicateTypeEnum.SocketNonstandard)) //SocketNonstandard //{ // #region SocketNonstandard // SocketNonstandardParameterModel socketNonstandardModel = new SocketNonstandardParameterModel(); // socketNonstandardModel.EquipmentType = item.Type; // socketNonstandardModel.EquipmentId = item.EquipmentId; // socketNonstandardModel.Ip = item.Ip; // socketNonstandardModel.Port = Sys.ConvertToTrimInt(item.Port); // socketNonstandardModel.VirtualConnectionState = (item.VirtualConnectionState == EnumManagement.GetEnumValue(VirtualConnectionStateEnum.Virtually)); // var socketParameter = SocketNonstandardClient.AddSerialPortDefaultParameters(socketNonstandardModel); // if (socketParameter != null && socketParameter.status == EnumManagement.GetEnumValue(StateEnum.StateEnum_Equipment.Completed)) // { // var result = SocketNonstandardClient.SocketNonstandardConnect(socketNonstandardModel); // if (result != null && result.status == EnumManagement.GetEnumValue(StateEnum.StateEnum_Equipment.Completed)) // { // sb.Append(($"IP【{item.Ip + ":" + item.Port}】,设备【{item.Name + "(" + EnumManagement.GetFieldTextByValue(item.CommunicateType)})】{result.msg}" + Environment.NewLine)); // } // else // { // sb.Append(($"IP【{item.Ip + ":" + item.Port}】,设备【{item.Name + "(" + EnumManagement.GetFieldTextByValue(item.CommunicateType)})】->{result.msg}<-" + Environment.NewLine)); // } // } // else // { // sb.Append(($"IP【{item.Ip + ":" + item.Port}】,设备【{item.Name + "(" + EnumManagement.GetFieldTextByValue(item.CommunicateType)})】->{socketParameter.msg}<-" + Environment.NewLine)); // } // #endregion //} #endregion strList.Add(sb.ToString()); } return strList; } /// /// 获取检查设备连接状态 /// /// public static Dictionary GetCheckDeviceConnectState() { Dictionary dictionaryResult = new Dictionary(); var deviceConfigResult = DeviceConfigDB.GetDeviceConfigListByProjectId(Shared.SoftwareInformation.software_information_id); foreach (var item in deviceConfigResult) { if (item.CommunicateType == EnumManagement.GetEnumValue(CommunicateTypeEnum.Socket)) //Socket { var checkConnectedResult = HxSocketParameterService.CheckConnected(item.Type, item.Ip, Convert.ToInt32(item.Port), item.EquipmentId); if (checkConnectedResult != null && checkConnectedResult.status == StateEnum_Equipment.Completed) { dictionaryResult.Add(item.Id, true); } else { dictionaryResult.Add(item.Id, false); } } #region Del //else if (item.CommunicateType == EnumManagement.GetEnumValue(CommunicateTypeEnum.Modbus)) //Modbus //{ // if (PLCService.PlcConnectState(item.EquipmentId, (item.VirtualConnectionState == EnumManagement.GetEnumValue(VirtualConnectionStateEnum.Virtually)))) // { // dictionaryResult.Add(item.Id, true); // } // else // { // dictionaryResult.Add(item.Id, false); // } //} //else if (item.CommunicateType == EnumManagement.GetEnumValue(CommunicateTypeEnum.SerialPort)) //SerialPort //{ // SerialPortParameterModel serialPortsModel = new SerialPortParameterModel(); // serialPortsModel.PortName = item.PortName; // if (SerialPorts.IsOpenSerialPortState(serialPortsModel)) // { // dictionaryResult.Add(item.Id, true); // } // else // { // dictionaryResult.Add(item.Id, false); // } //} //else if (item.CommunicateType == EnumManagement.GetEnumValue(CommunicateTypeEnum.SocketUDP)) //SocketUDP //{ // SocketUdpNonstandardParameterModel socketUdpNonstandardModel = new SocketUdpNonstandardParameterModel(); // socketUdpNonstandardModel.EquipmentType = item.Type; // socketUdpNonstandardModel.EquipmentId = item.EquipmentId; // socketUdpNonstandardModel.Ip = item.Ip; // socketUdpNonstandardModel.Port = Sys.ConvertToTrimInt(item.Port); // socketUdpNonstandardModel.VirtualConnectionState = (item.VirtualConnectionState == EnumManagement.GetEnumValue(VirtualConnectionStateEnum.Virtually)); // var checkConnectedResult = SocketUdpNonstandardClient.CheckConnected(socketUdpNonstandardModel); // if (checkConnectedResult != null && checkConnectedResult.status == EnumManagement.GetEnumValue(StateEnum.StateEnum_Equipment.Completed)) // { // dictionaryResult.Add(item.Id, true); // } // else // { // dictionaryResult.Add(item.Id, false); // } //} //else if (item.CommunicateType == EnumManagement.GetEnumValue(CommunicateTypeEnum.SocketNonstandard)) //SocketNonstandard //{ // SocketNonstandardParameterModel socketNonstandardModel = new SocketNonstandardParameterModel(); // socketNonstandardModel.EquipmentType = item.Type; // socketNonstandardModel.EquipmentId = item.EquipmentId; // socketNonstandardModel.Ip = item.Ip; // socketNonstandardModel.Port = Sys.ConvertToTrimInt(item.Port); // socketNonstandardModel.VirtualConnectionState = (item.VirtualConnectionState == EnumManagement.GetEnumValue(VirtualConnectionStateEnum.Virtually)); // var checkConnectedResult = SocketNonstandardClient.CheckConnected(socketNonstandardModel); // if (checkConnectedResult != null && checkConnectedResult.status == EnumManagement.GetEnumValue(StateEnum.StateEnum_Equipment.Completed)) // { // dictionaryResult.Add(item.Id, true); // } // else // { // dictionaryResult.Add(item.Id, false); // } //} #endregion } return dictionaryResult; } #endregion #endregion #region 客户端 #region 连接设备 /// /// 连接设备 /// /// public static Result GetClientConnect() { StringBuilder sb = new StringBuilder(); Result result = new Result(); // wdy //var model = SharedClientModel.ServiceConfigModel; //if (model != null) //{ // var modelParameter = HxSocketParameterService.AddSocketDefaultParameter(ParameterEnum.Enum_Equipment.Client.ToString(), model.Ip, Convert.ToInt32(model.Port), ""); // if (modelParameter != null && modelParameter.status == EnumManagement.GetEnumValue(StateEnum.StateEnum_Equipment.Completed)) // { // result = HxSocketParameterService.Connect(ParameterEnum.Enum_Equipment.Client.ToString(), model.Ip, Convert.ToInt32(model.Port), ""); // sb.Append($"【{model.ProName}】{result.msg}"); // } // else // { // sb.Append($"【{model.ProName}】{modelParameter.msg}"); // } //} //result.msg = sb.ToString(); return result; } #endregion #region 发消息给服务 /// /// 发消息给服务 /// /// 发送数据参数类 /// public static Result SendData(HxSendBase sendModel) { Result resultModel = new Result(); //try //{ // var model = new ServiceConfigBLL().GetServiceConfigIsDefault(); // if (model != null) // { // var socketParameterModel = HxSockServiceExecute.GetSocketParameterModel(ParameterEnum.Enum_Equipment.Client.ToString(), model.Ip, Convert.ToInt32(model.Port), ""); // if (socketParameterModel != null) // { // #region 虚拟连接 // var virtualConnectionStateResult = HxSocketParameterService.GetVirtualConnectionState(socketParameterModel.VirtualConnectionState, socketParameterModel.DelaySecondTime); // if (virtualConnectionStateResult != null && virtualConnectionStateResult.status == EnumManagement.GetEnumValue(StateEnum.StateEnum_Equipment.Completed)) // { // return virtualConnectionStateResult; // } // #endregion // #region 参数 // InstructCommonMethodSendModel instructCommonMethodSendModel = HxSocketParameterService.GetInstructCommonMethodSendModel(new InstructCommonMethodSendModel() // { // EquipmentType = ParameterEnum.Enum_Equipment.Client.ToString(), // Ip = model.Ip, // Port = Convert.ToInt32(model.Port), // EquipmentId = "", // // Parameters = new RobotParameterModel { DestinationName = "1", Pose = "2", TargetName = "3", _Rotation = Enum_Rotation.Forward90 },// txt_content.Text.Trim(), // //Parameters = JsonHelp.SerializeObject(new RobotParameterModel { DestinationName = "1", Pose = "2", TargetName = "3", _Rotation = Enum_Rotation.Forward90 }, new List { "DestinationName", "Pose", "TargetName", "_Rotation" }), // SendData = new HxSendBase { experiment_id = sendModel.experiment_id, parameters = sendModel.parameters, method = sendModel.method, ExpOperationType = sendModel.ExpOperationType }, // }); // #endregion // string sendJson = JsonConvert.SerializeObject(instructCommonMethodSendModel); // resultModel = HxSockServiceExecute.SendData(ParameterEnum.Enum_Equipment.Client.ToString(), model.Ip, Convert.ToInt32(model.Port), "", sendJson, instructCommonMethodSendModel.SendData.workflow_id); // } // else // { // resultModel = HxSocketParameterService.GetResultInfo(HxSocketParameterService.GetMethodInfo(), new Result { status = EnumManagement.GetEnumValue(StateEnum.StateEnum_Equipment.Failed), msg = "获取指定设备类型缓存数据未获取到" }); // } // } // else // { // resultModel = HxSocketParameterService.GetResultInfo(HxSocketParameterService.GetMethodInfo(), new Result { status = EnumManagement.GetEnumValue(StateEnum.StateEnum_Equipment.Failed), msg = "设备数据未获取到" }); // } //} //catch (Exception ex) //{ // resultModel = HxSocketParameterService.GetResultInfo(HxSocketParameterService.GetMethodInfo(), new Result { status = EnumManagement.GetEnumValue(StateEnum.StateEnum_Equipment.Failed), msg = ex.Message }); //} return resultModel; } #endregion #endregion } }