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 "";
}
}
}