private List <string> UnFinishWriteData = new List <string>(); //未完成写入的数据 #endregion public SocketClientManager(DeviceManager devcieCommunication, DataChangeEventHandler callback) { _DevcieComm = devcieCommunication; Initial(devcieCommunication.DevicePKID, devcieCommunication.CommParam.CommAddress, devcieCommunication.CommParam.CommInterface, devcieCommunication.DeviceTags, callback); }
private string OPCServerName; //OPC 的名称 #endregion public OpcClassicManager(DeviceManager devcieCommunication, DataChangeEventHandler callback) { _DevcieComm = devcieCommunication; Initial(devcieCommunication.DevicePKID, devcieCommunication.CommParam.CommAddress, devcieCommunication.CommParam.UpdateRate, devcieCommunication.DeviceTags, callback); }
/// <summary> /// 初始化 /// </summary> /// <param name="serverPKID">ID</param> /// <param name="address">地址:WebApi基地址 如 http://example.com/resources/ </param> /// <param name="updateRate"></param> /// <param name="deviceTagParams"></param> /// <param name="callback"></param> private void Initial(Int64 serverPKID, string address, int updateRate, List <DeviceTagParam> deviceTagParams, DataChangeEventHandler callback) { pkid = serverPKID; #region 初始化参数 client = new HttpClient(); string webapiurl = address; string[] addes = address.Split('|'); //分号隔开,前面是IP地址,后面是 if (addes.Length > 1) { webapiurl = addes[0]; } if (string.IsNullOrEmpty(webapiurl)) { webapiurl = "http://localhost/BFM.WebApiService/"; } client.BaseAddress = new Uri(webapiurl); Callback = callback; //设置回调函数 DeviceTags = deviceTagParams; //标签 #endregion #region 自定义协议 CustomProtocol = (addes.Length >= 2) ? addes[1] : ""; //自定义协议 ProtocolVariable = (addes.Length >= 3) ? addes[2] : ""; //自定义协议 #endregion }
public ModbusTCPManager(DeviceManager devcieCommunication, DataChangeEventHandler callback) { _DevcieComm = devcieCommunication; Initial(devcieCommunication.DevicePKID, devcieCommunication.CommParam.CommAddress, devcieCommunication.DeviceTags, callback); }
public SocketManager(DeviceManager devcieCommunication, DataChangeEventHandler callback) { _DevcieComm = devcieCommunication; Initial(devcieCommunication.DevicePKID, devcieCommunication.CommParam.CommAddress, devcieCommunication.CommParam.UpdateRate, devcieCommunication.CommParam.CustomProtocol, devcieCommunication.CommParam.ProtocolVariable, devcieCommunication.DeviceTags, callback); }
public FocasManager(DeviceManager devcieCommunication, DataChangeEventHandler callback) { _DevcieComm = devcieCommunication; CurThreadID = Thread.CurrentThread.ManagedThreadId.ToString(); //当前线程ID Initial(devcieCommunication.DevicePKID, devcieCommunication.CommParam.CommAddress, devcieCommunication.CommParam.UpdateRate, devcieCommunication.DeviceTags, callback); }
private void OnDataReceived(object sender, DataReceivedEventArgs e) { DataChangeEventHandler dataReceived = DataChanged; if (dataReceived != null) { dataReceived(e); } }
/// <summary> /// 初始化设备 /// </summary> /// <param name="tagPKNO"></param> /// <param name="tagAddress"></param> /// <param name="callback"></param> /// <returns></returns> public IDeviceCore InitialDevice(string tagPKNO, string tagAddress, DataChangeEventHandler callback = null) //初始化设备 { List <DeviceTagParam> deviceTags = new List <DeviceTagParam>(); DeviceTagParam deviceTag = new DeviceTagParam(tagPKNO, tagAddress, this); //通讯参数 deviceTags.Add(deviceTag); //添加节点 return(InitialDevice(deviceTags, callback)); }
/// <summary> /// 初始化 /// </summary> /// <param name="serverPKID"></param> /// <param name="address"></param> /// <param name="updateRate"></param> /// <param name="protocolVariable"></param> /// <param name="deviceTagParams"></param> /// <param name="callback"></param> /// <param name="customProtocol"></param> public void Initial(Int64 serverPKID, string address, int updateRate, string customProtocol, string protocolVariable, List <DeviceTagParam> deviceTagParams, DataChangeEventHandler callback) { pkid = serverPKID; #region Socket 通讯相关 string ip = (address == "") ? CBaseData.LocalIP : address; int port = 2001; string[] addes = address.Split(';', ';'); //分号隔开,前面是IP地址,后面是Port if (addes.Length > 1) { ip = addes[0]; if ((ip.ToLower() == "local") || (ip.ToLower() == "localhost") || (ip.ToLower() == ".")) { ip = CBaseData.LocalIP; //本机IP } int.TryParse(addes[1], out port); } Callback = callback; //设置回调函数 IPAddress remote; IPAddress.TryParse(ip, out remote); ServerIP = remote; ServerPort = port; if (remote != null) { _client = new SocketClient(remote, port); _client.OnReadServerBytes -= ClientOnOnReadServerMessage; _client.OnReadServerBytes += ClientOnOnReadServerMessage; //读取数据 _client.OnConnectChange -= ClientOnOnConnectChange; _client.OnConnectChange += ClientOnOnConnectChange; //连接成功 _client.Connect(); //连接服务器 } #endregion #region 设置标签信息 DeviceTags = deviceTagParams; //设置标签 #endregion #region 自定义协议,创建不同的协议内容 CustomProtocol = customProtocol; //自定义协议 ProtocolVariable = protocolVariable; //自定义协议 #endregion }
/// <summary> /// 初始化 /// </summary> /// <param name="serverPKID">ID</param> /// <param name="address">地址:格式 IP地址;登录名;密码;数据库;数据库类型</param> /// <param name="updateRate"></param> /// <param name="deviceTagParams"></param> /// <param name="callback"></param> private void Initial(Int64 serverPKID, string address, int updateRate, List <DeviceTagParam> deviceTagParams, DataChangeEventHandler callback) { pkid = serverPKID; string[] connStrings = address.Split('|'); //分隔符 #region 初始化参数 DbType = EmDbType.SqlServer; ConnectionString = address; #region 数据库类型及连接语句 if (connStrings.Count() >= 2) { ConnectionString = connStrings[1]; string sdbtype = connStrings[0].ToLower(); if (sdbtype == "access") { DbType = EmDbType.Access; } if (sdbtype == "oracle") { DbType = EmDbType.Oracle; } if (sdbtype == "mysql") { DbType = EmDbType.MySql; } } if (connStrings.Count() >= 5) //分开的数据库连接数据 { if (!string.IsNullOrEmpty(connStrings[2]) && !string.IsNullOrEmpty(connStrings[3]) && !string.IsNullOrEmpty(connStrings[4])) { ConnectionString = DBFactory.BuildConnStr(DbType, connStrings[1], connStrings[2], connStrings[3], connStrings[4]); } } #endregion MainConn = DBFactory.NewConnection(DbType, ConnectionString); //连接语句 Callback = callback; //设置回调函数 DeviceTags = deviceTagParams; //标签 #endregion CustomProtocol = (connStrings.Length >= 6) ? connStrings[5] : ""; //自定义协议 ProtocolVariable = (connStrings.Length >= 7) ? connStrings[6] : ""; //自定义协议参数 }
/// <summary> /// 初始化 /// </summary> /// <param name="serverPKID"></param> /// <param name="address"></param> /// <param name="deviceInterface">设备接口</param> /// <param name="deviceTagParams"></param> /// <param name="callback"></param> public void Initial(Int64 serverPKID, string address, DeviceCommInterface deviceInterface, List <DeviceTagParam> deviceTagParams, DataChangeEventHandler callback) { pkid = serverPKID; #region Socket 通讯相关 string ip = (address == "") ? CBaseData.LocalIP : address; int port = 2001; string[] addes = address.Split('|'); //分号隔开,前面是IP地址,后面是Port if (addes.Length > 1) { ip = addes[0]; if ((ip.ToLower() == "local") || (ip.ToLower() == "localhost") || (ip.ToLower() == ".")) { ip = CBaseData.LocalIP; //本机IP } int.TryParse(addes[1], out port); } Callback = callback; //设置回调函数 IPAddress remote; IPAddress.TryParse(ip, out remote); ServerIP = remote; ServerPort = port; ThreadPool.QueueUserWorkItem(s => { CreateAndRefreshClient(); }); //不断重连 #endregion #region 设置标签信息 DeviceTags = deviceTagParams; //设置标签 #endregion #region 添加自定义协议设备 CustomProtocol = (addes.Length >= 3) ? addes[2] : ""; //自定义协议 ProtocolVariable = (addes.Length >= 4) ? addes[3] : ""; //自定义协议 SockeDevice = CustomSocket.GetDevice(deviceInterface, CustomProtocol, ProtocolVariable); #endregion }
private void Initial(Int64 serverPKID, string address, int updateRate, List <DeviceTagParam> deviceTagParams, DataChangeEventHandler callback) { #region 初始化参数 pkid = serverPKID; string ip = (address == "") ? CBaseData.LocalIP : address; int port = 8193; string[] addes = address.Split('|'); //分号隔开,前面是IP地址,后面是Port if (addes.Length > 1) { ip = addes[0]; if ((ip.ToLower() == "local") || (ip.ToLower() == "localhost") || (ip.ToLower() == ".")) { ip = CBaseData.LocalIP; //本机IP } if (!string.IsNullOrEmpty(addes[1])) { int.TryParse(addes[1], out port); } } IPAddress remote; IPAddress.TryParse(ip, out remote); ServerIP = remote; ServerPort = (ushort)port; #endregion Callback = callback; //设置回调函数 DeviceTags = deviceTagParams; //标签 #region 自定义协议 CustomProtocol = (addes.Length >= 3) ? addes[2] : ""; //自定义协议 ProtocolVariable = (addes.Length >= 4) ? addes[3] : ""; //自定义协议 #endregion }
/// <summary> /// 初始化 /// </summary> /// <param name="serverPKID"></param> /// <param name="address"></param> /// <param name="updateRate"></param> /// <param name="deviceTagParams"></param> /// <param name="callback"></param> private void Initial(Int64 serverPKID, string address, int updateRate, List <DeviceTagParam> deviceTagParams, DataChangeEventHandler callback) { pkid = serverPKID; #region 初始化参数 string ip = (address == "") ? CBaseData.LocalIP : address; string serverName = address; string[] addes = address.Split('|', ';'); //分号隔开,前面是IP地址,后面是OPCServer名称 if (addes.Length > 1) { ip = addes[0]; if ((ip.ToLower() == "local") || (ip.ToLower() == "localhost") || (ip.ToLower() == ".")) { ip = CBaseData.LocalIP; //本机IP } serverName = addes[1]; } else //默认为本机 { ip = CBaseData.LocalIP; } IPAddress remote; IPAddress.TryParse(ip, out remote); ServerIP = remote; OPCServerName = serverName; Callback = callback; //设置回调函数 #endregion DeviceTags = deviceTagParams; //标签 #region 自定义协议 CustomProtocol = (addes.Length >= 3) ? addes[2] : ""; //自定义协议 ProtocolVariable = (addes.Length >= 4) ? addes[3] : ""; //自定义协议 #endregion #region OPC 设定 string error = String.Empty; _opcServer = OpcServers.FirstOrDefault(c => c.PKID == serverPKID); if ((_opcServer == null) || (!_opcServer.IsConnected)) { _opcServer = OPCConnector.ConnectOPCServer(serverPKID, ip, serverName, ref error); } else { EventLogger.Log($"【{serverPKID}】OPC服务器已连接"); } if (_opcServer != null && _opcServer.IsConnected) { List <Guid> subHandels = new List <Guid>(); //Handel List <string> subItemIds = new List <string>(); //标签地址 List <Guid> normalHandels = new List <Guid>(); //Handel List <string> normalItemIds = new List <string>(); //标签地址 if (subHandels.Count > 0) //添加订阅 { OpcGroup subGroup = _opcServer.AddGroup("GP" + serverPKID + "S", updateRate, true); //订阅的Group subGroup.AddItems(subItemIds.ToArray(), subHandels.ToArray()); subGroup.DataChanged -= OPCDataChanged; subGroup.DataChanged += OPCDataChanged; } if (normalHandels.Count > 0) //添加正常 { OpcGroup normalGroup = _opcServer.AddGroup("GP" + serverPKID + "N", updateRate, false); //正常的Group normalGroup.AddItems(normalItemIds.ToArray(), normalHandels.ToArray()); } EventLogger.Log($"【{serverPKID}】OPC服务器连接成功。"); } else { error = $"【{serverPKID}】OPC服务器连接失败,具体为:" + error; EventLogger.Log(error); } OpcServers.Add(_opcServer); //将OPCServer添加到系统中 #endregion }
/// <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); }