private List <ModbusTcpServer> modbusTcpServers; // 所有的ModbusTcp服务器 #endregion #region ModbusAlien private void AddDeviceCore(IDeviceCore device) { this.deviceCores.Add(device); if (this.dictDeviceCores.ContainsKey(device.UniqueId)) { this.logNet?.WriteError("设备唯一码重复,无法添加集合,ID: " + device.UniqueId); } else { this.dictDeviceCores.Add(device.UniqueId, device); } }
/// <summary> /// 异步读数据 /// </summary> /// <param name="dataAddress"></param> /// <returns></returns> public OperateResult AsyncReadData(string dataAddress) { IDeviceCore deivceCore = GetCurDeviceCore(); if (deivceCore == null) { return(new OperateResult <string>("设备未初始化")); } dataAddress = dataAddress.Replace("#13", "\n"); return(deivceCore.AsyncReadData(dataAddress)); }
/// <summary> /// 异步写数据 /// </summary> /// <param name="dataAddress"></param> /// <param name="dataValue"></param> /// <returns></returns> public OperateResult AsyncWriteData(string dataAddress, string dataValue) { IDeviceCore deivceCore = GetCurDeviceCore(); if (deivceCore == null) { return(new OperateResult("设备未初始化")); } dataAddress = dataAddress.Replace("#13", "\n"); dataValue = dataValue.Replace("#13", "\n"); return(deivceCore.AsyncWriteData(dataAddress, dataValue)); }
/// <summary> /// 获取当前的通讯设备 /// </summary> /// <returns></returns> public IDeviceCore GetCurDeviceCore() { IDeviceCore deviceCore = DeviceCores.FirstOrDefault(); if (CommParam.CommInterface == DeviceCommInterface.CNC_Fanuc) //Faunc CNC 线程 { string threadID = Thread.CurrentThread.ManagedThreadId.ToString(); //按照线程分别建立ID foreach (var device in DeviceCores) { FocasManager focasDevice = device as FocasManager; if ((focasDevice != null) && (focasDevice.CurThreadID == threadID)) //线程相同 { return(device); } } for (int i = DeviceCores.Count - 1; i >= 3; i--) { DeviceCores[i].Dispose(); DeviceCores.RemoveAt(i); } #region 创建新的通讯 deviceCore = new FocasManager(this, CallBack); if (!DeviceHelper.CommDevices.Contains(this)) { DeviceHelper.CommDevices.Add(this); //添加到通讯设备中 } DeviceCores.Add(deviceCore); #endregion } return(deviceCore); }
private void AddDeviceCore(NodeState parent, XElement device) { if (device.Name == "DeviceNode") { // 提取名称和描述信息 string name = device.Attribute("Name").Value; string description = device.Attribute("Description").Value; // 创建OPC节点 FolderState deviceFolder = CreateFolder(parent, device.Attribute("Name").Value, device.Attribute("Description").Value); // 添加Request foreach (var requestXml in device.Elements("DeviceRequest")) { DeviceRequest deviceRequest = new DeviceRequest( ); deviceRequest.LoadByXmlElement(requestXml); AddDeviceRequest(deviceFolder, deviceRequest); } IDeviceCore deviceReal = CreateNewByXml(device); if (deviceReal != null) { deviceReal.OpcUaNode = deviceFolder.NodeId.ToString( ); AddDeviceCore(deviceReal); deviceReal.WriteDeviceData = WriteDeviceData; deviceReal.Name = name; deviceReal.StartRead( ); // 显示系统所有的设备数量 Interlocked.Increment(ref deviceCount); this.logNet?.WriteInfo($"已发现 {deviceCount} 台设备,类型为{deviceReal.TypeName}"); } } }
/// <summary> /// 初始化设备 /// </summary> /// <param name="divDeviceTagParams"></param> /// <param name="callback"></param> public IDeviceCore InitialDevice(List <DeviceTagParam> divDeviceTagParams, DataChangeEventHandler callback) //初始化设备 { DeviceTags = divDeviceTagParams; CallBack = callback; IDeviceCore deviceCore = null; #region 初始化主通讯设备 switch (CommParam.CommInterface) { case DeviceCommInterface.CNC_Fanuc: //Fanuc CNC deviceCore = new FocasManager(this, callback); break; case DeviceCommInterface.FanucRobot: //Fanuc机器人 deviceCore = new ModbusTCPManager(this, callback); break; case DeviceCommInterface.ModulaTCP: //Modula 自动货柜 deviceCore = new SocketClientManager(this, callback); break; case DeviceCommInterface.ABPLC: //Modula 自动货柜 deviceCore = new HslAllenBradleyNetManager(this, callback); break; case DeviceCommInterface.ZeissTCP: //蔡司 三坐标 int serverIndex = this.CommParam.CommAddress.IndexOf('|', 0); string serverAdd = this.CommParam.CommAddress.Substring(serverIndex + 1); serverIndex = serverAdd.IndexOf('|', 0); serverAdd = serverAdd.Substring(serverIndex + 1); DeviceManager deviceComm = new DeviceManager(this.DevicePKNO + "_S", DeviceCommInterface.ZeissTCP, serverAdd); deviceCore = new SocketClientManager(this, callback); var serverManager = new SocketServerManager(deviceComm, callback); //新的Server端 break; case DeviceCommInterface.OPC_Classic: //OPC Server //deviceCore = new OpcClassicManager(this, callback); break; case DeviceCommInterface.TCP_Custom: //自定义TCP协议 deviceCore = new SocketClientManager(this, callback); break; case DeviceCommInterface.TCP_Modbus: //Modbus TCP deviceCore = new ModbusTCPManager(this, callback); break; case DeviceCommInterface.TCP_Server: //TCP 服务器 deviceCore = new SocketServerManager(this, callback); break; case DeviceCommInterface.WebApi: //WebApi deviceCore = new WebApiManager(this, callback); break; case DeviceCommInterface.DataBase: //数据库通讯 deviceCore = new DatabaseManager(this, callback); break; case DeviceCommInterface.ShareFile: //数据库通讯 deviceCore = new CopyFileManager(); break; } #endregion if (deviceCore != null) { if (!DeviceHelper.CommDevices.Contains(this)) { DeviceHelper.CommDevices.Add(this); //添加到通讯设备中 } DeviceCores.Add(deviceCore); } return(deviceCore); }
private void WriteDeviceData(IDeviceCore deviceCore, string node, byte[] data, DeviceRequest request) { WriteDeviceData(node, data, request, deviceCore.ByteTransform); }