using IMCS.Device; using IMCS.Device.body; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Net.NetworkInformation; using System.Text; using YG.Device; namespace YG { /// /// 命令列表 /// public class DeviceManage { //public static DeviceInfo info = new DeviceInfo(); private static string RETVAL = "success"; private static int ASK_TIMES = 20; private static string VirtualProgram = ConfigurationManager.AppSettings["VirtualProgram"]; private static int HEX_BINARY = 8; private uint currentToolArea = 1; private static string ConncetionRedisString = ConfigurationManager.AppSettings["ConncetionRedisString"]; private static string HttpServerUrlString = ConfigurationManager.AppSettings["HttpServerUrlString"]; private static string NcExtendPath = ConfigurationManager.AppSettings["NcExtendPath"]; private static string NcUpLoadPath = ConfigurationManager.AppSettings["NcUpLoadPath"]; private static string LocalNcPath = ConfigurationManager.AppSettings["LocalNcPath"]; private static string ClsSFTP_IP = ConfigurationManager.AppSettings["ClsSFTP_Ip"]; private static string ClsSFTP_Port = ConfigurationManager.AppSettings["ClsSFTP_Port"]; private static string ClsSFTP_UserName = ConfigurationManager.AppSettings["ClsSFTP_UserName"]; private static string ClsSFTP_PWD = ConfigurationManager.AppSettings["ClsSFTP_Pwd"]; private static string ConncetionDeviceListString = ConfigurationManager.AppSettings["ConncetionDeviceListString"]; private static string ClsSFTPListString = ConfigurationManager.AppSettings["ClsSFTPListString"]; /// /// 柔性线-机器人地址 /// private static string Path_Flexible_Roboot_Path = ConfigurationManager.AppSettings["Flexible_Roboot_Path"]; /// /// 柔性线-机床1 /// private static string Path_Flexible_Machine1_Path = ConfigurationManager.AppSettings["Flexible_Machine1_Path"]; /// /// 柔性线-机床2 /// private static string Path_Flexible_Machine2_Path = ConfigurationManager.AppSettings["Flexible_Machine2_Path"]; /// /// 柔性线-机床3 /// private static string Path_Flexible_Machine3_Path = ConfigurationManager.AppSettings["Flexible_Machine3_Path"]; /// /// 柔性线-机床4 /// private static string Path_Flexible_Machine4_Path = ConfigurationManager.AppSettings["Flexible_Machine4_Path"]; /// /// 柔性线-打标机 /// private static string Path_Flexible_Print_Path = ConfigurationManager.AppSettings["Flexible_Print_Path"]; /// /// 柔性线-清洗剂 /// private static string Path_Flexible_Clean_Path = ConfigurationManager.AppSettings["Flexible_Clean_Path"]; /// /// 智能单元-机器人 /// private static string Path_Intelligent_Roboot_Path = ConfigurationManager.AppSettings["Intelligent_Roboot_Path"]; /// /// 智能单元-机床 /// private static string Path_Intelligent_Machine_Path = ConfigurationManager.AppSettings["Intelligent_Machine_Path"]; /// /// 质量中心-机器人 /// private static string Path_Quality_Roboot_Path = ConfigurationManager.AppSettings["Quality_Roboot_Path"]; private static DeviceManage coml = new DeviceManage(); public static DeviceManage Instance { get { return coml; } } /// /// 设备列表管理 /// public Dictionary device { get; set; } = new Dictionary(); public Dictionary deviceList { get; set; } = new Dictionary(); public DeviceManage() { device = new Dictionary(); Init(); } //初始化信息 建立所有协议连接 public void Init() { List devices = GetConnectDeviceList(); foreach (ConnectDeviceBody connectDevice in devices) { DeviceList deviceInfo = null; if (connectDevice.ProtocolType.Equals(DeviceType.OPCUa.ToString())) { deviceInfo = new Device.DeviceOPCUat("opc.tcp://" + connectDevice.ServerUrl, connectDevice.UserName, connectDevice.Password); deviceInfo.Dtype = DeviceType.OPCUa; } else if (connectDevice.ProtocolType.Equals(DeviceType.Socket.ToString())) { if (deviceList.Where(m => m.Key.Equals(connectDevice.ServerUrl)).Count() == 0) { deviceInfo = new Device.DeviceSocket(connectDevice.Ip, connectDevice.Port);//8074 deviceInfo.Dtype = DeviceType.Socket; deviceInfo.DeviceInit(); } } else if (connectDevice.ProtocolType.Equals(DeviceType.PLC_S7.ToString())) { deviceInfo = new Device.DeviceS7(HslCommunication.Profinet.Siemens.SiemensPLCS.S1200, connectDevice.Ip); deviceInfo.Dtype = DeviceType.PLC_S7; deviceInfo.DeviceInit(); } if (deviceInfo != null) { deviceInfo.ServerUrl = connectDevice.ServerUrl; deviceInfo.Ip = connectDevice.Ip; deviceList.Add(connectDevice.ServerUrl, deviceInfo); } } } /// 设备列表 public List GetConnectDeviceList() { List list = new List(); string[] deviceList = ConncetionDeviceListString.Split('#'); foreach (string dArray in deviceList) { if (!string.IsNullOrEmpty(dArray)) { string[] deviceArray = dArray.Split(';'); ConnectDeviceBody deviceInfo = new ConnectDeviceBody(); if ((deviceArray[0]).Ping()) { deviceInfo.Ip = deviceArray[0]; deviceInfo.Port = int.Parse(deviceArray[1]); deviceInfo.UserName = deviceArray[2]; deviceInfo.Password = deviceArray[3]; deviceInfo.ProtocolType = deviceArray[4]; deviceInfo.ServerUrl = deviceInfo.Ip + ":" + deviceInfo.Port; list.Add(deviceInfo); } } } return list; } /// SFTP设备列表 public List GetSFTPDeviceList() { List list = new List(); string[] deviceList = ClsSFTPListString.Split('#'); foreach (string dArray in deviceList) { if (!string.IsNullOrEmpty(dArray)) { string[] deviceArray = dArray.Split(';'); SFTPDeviceBody deviceInfo = new SFTPDeviceBody(); deviceInfo.Ip = deviceArray[0]; deviceInfo.Port = deviceArray[1]; deviceInfo.UserName = deviceArray[2]; deviceInfo.Password = deviceArray[3]; deviceInfo.Path = deviceArray[4]; deviceInfo.NcExtendPath = deviceArray[5]; list.Add(deviceInfo); } } return list; } public SFTPDeviceBody GetSFTPOne(string ip) { List list = GetSFTPDeviceList(); SFTPDeviceBody retBody = new SFTPDeviceBody(); foreach (SFTPDeviceBody body in list) { if (body.Ip.Equals(ip)) { retBody = body; } } return retBody; } /// /// 添加设备到设备列表 /// /// /// public void DeviceAdd(DeviceList devive, EnumDeviceList enumdev) { device.Add(enumdev, devive); } public DeviceList GetOne(EnumDeviceList enumDeviceList) { return device.Where(m => m.Key.Equals(enumDeviceList)).FirstOrDefault().Value; } public DeviceList GetOne(string serviceUrl) { return deviceList.Where(m => m.Key.Equals(serviceUrl)).FirstOrDefault().Value; } public void DeviceSend(EnumDeviceList enumdev, EnumComList com) { Log.Instance.WriteLogAdd(string.Format("{0}发送一次数据{1}", enumdev, com)); device.Where(m => m.Key.Equals(enumdev)).FirstOrDefault().Value.DeviceSend(ReturnCom(com)); System.Threading.Thread.Sleep(500); } /// /// 发送指令 /// /// public void DeviceClose() { foreach (var dc in device) { dc.Value.DeviceClose(); } } public string ReturnCom(EnumComList enumComList) { return ""; } } }