Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        /// <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
        }
Esempio n. 4
0
        public ModbusTCPManager(DeviceManager devcieCommunication, DataChangeEventHandler callback)
        {
            _DevcieComm = devcieCommunication;

            Initial(devcieCommunication.DevicePKID, devcieCommunication.CommParam.CommAddress,
                    devcieCommunication.DeviceTags, callback);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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);
            }
        }
Esempio n. 8
0
        /// <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));
        }
Esempio n. 9
0
        /// <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
        }
Esempio n. 10
0
        /// <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] : ""; //自定义协议参数
        }
Esempio n. 11
0
        /// <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
        }
Esempio n. 12
0
        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
        }
Esempio n. 13
0
        /// <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
        }
Esempio n. 14
0
        /// <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);
        }