public bool OnInit()
        {
            _log.NormalLog(string.Format("ModbusTCPClientHanderTask:Init=>Initing "));
            try
            {
                //获取配置
                _config = ReaderXMLUtil.ReadXMLConfig <ModbusTCPClientConfig>("../../../../conf/Configuration.xml", ModbusTCPClientConfig.ReadConfig, "setup", "ModbusTCPClientHandlerTask")[0];
                if (_config.IpAddress == "" || _config.SignalListFilePath == "")
                {
                    _log.ErrorLog(string.Format("ModbusTCPClientHanderTask Init fail:{0}", "IP address or Signal file path is null!"));
                    return(false);
                }
                _setup   = new EthernetSetUp(_config.IpAddress, _config.Port);
                _timeout = new TimeOut("ModbusTCPClientHanderTask", _config.TimeOut, _log);

                _timeRead = new Timer.Timer(_config.PollingTime);

                _client = new ModbusTCPClient(_setup, _timeout, _log);

                //获取点数据
                _workbook = XmlSerialiaztion.XmlDeserial <XMLWorkbook>(_config.SignalListFilePath, _log);
                _points   = PointsCollcetCreate.Create(_workbook, _log);
                //点数据注册
                PointsRegister.Register(ref _points, _log);
                _log.NormalLog(string.Format("ModbusTCPClientHanderTask:Initing=>Inited "));
                return(true);
            }
            catch (Exception e)
            {
                _log.ErrorLog(string.Format("ModbusTCPClientHanderTask Init fail:{0}", e.Message));
                return(false);
            }
        }
Exemplo n.º 2
0
 public bool OnInit()
 {
     _log.NormalLog(string.Format("ModbusServerHanderTask:Init=>Initing"));
     try
     {
         _config = ReaderXMLUtil.ReadXMLConfig <ModbusServerConfig>("../../../../conf/Configuration.xml", ModbusServerConfig.ReadConfig, "setup", "ModbusTCPServerHandlerTask")[0];
         if (_config.SignalListFilePath == "")
         {
             _log.ErrorLog("ModbusServerHanderTask Init fail: signal file path is null!");
             return(false);
         }
         _workbook = XmlSerialiaztion.XmlDeserial <XMLWorkbook>(_config.SignalListFilePath, _log);
         if (_workbook == default(XMLWorkbook))
         {
             _log.ErrorLog("ModbusServerHanderTask Init fail:Read signal file fail!");
             return(false);
         }
         _points = PointsCollcetCreate.CreateMoudbus(_workbook, _log);
         ModbusPointsRegister.Register(_points, _log);
         _timeout = new TimeOut("ModbusServerHanderTask", _config.TimeOut, _log);
         _server  = new ModbusTCPServer(new EthernetSetUp(_config.IpAddress, _config.Port), _timeout, _log, _config.MaxConnect, _config.SalveId, SocketServers.SocketServerType.SaeaServer);
         if (_server.Init())
         {
             _log.NormalLog(string.Format("ModbusServerHanderTask:Initing=>Inited"));
             return(true);
         }
         else
         {
             return(false);
         }
     }
     catch (Exception e)
     {
         _log.ErrorLog(string.Format("ModbusServerHanderTask Init fail:{0}", e.Message));
         return(false);
     }
 }
 public PointsCollcetFactory(XMLWorkbook workbook, ILog log)
 {
     _workbook = workbook;
     _log      = log;
 }
Exemplo n.º 4
0
        /// <summary>
        /// 根据XML配置文件创建Modbus点表
        /// 并将点表绑定到通用点表(PointMapping)
        /// </summary>
        /// <param name="workBook"></param>
        /// <param name="log"></param>
        /// <returns></returns>
        public static PointVirtualCollcet CreateMoudbus(XMLWorkbook workBook, ILog log)
        {
            PointMeDataList mappingIdexList = PointMeDataList.GetInstance();
            var             result          = new PointVirtualCollcet();
            List <string>   colums          = workBook.llStrings[0];//第一行列表为索引列数据;

            workBook.llStrings.RemoveAt(0);
            foreach (var ls in workBook.llStrings)
            {
                string     addressName = "";
                int        address;
                string     pointName    = "";
                int        bindingIndex = 0;
                BindingWay bindingWay   = BindingWay.OneWay;

                ByteOrder byteOrder = ByteOrder.None;
                if (ls.Count < colums.Count)
                {
                    continue;
                }
                for (int i = 0; i < colums.Count; i++)
                {
                    switch (colums[i].ToLower())
                    {
                    case "addressname":
                        addressName = ls[i];
                        break;

                    case "pointname":
                        var pointGroup = ls[i].Split(new char[] { '[' });

                        if (pointGroup != null && pointGroup.Length >= 2)
                        {
                            pointName     = pointGroup[0];
                            pointGroup[1] = pointGroup[1].Replace("]", "");    //string类型处理,去掉‘]’
                            int.TryParse(pointGroup[1], out bindingIndex);
                        }
                        break;

                    case "bindingway":
                        int temp;
                        if (int.TryParse(ls[i], out temp))
                        {
                            bindingWay = (BindingWay)temp;
                        }
                        break;

                    case "byteorder":
                        int temp1;
                        if (int.TryParse(ls[i], out temp1))
                        {
                            byteOrder = (ByteOrder)temp1;
                        }
                        break;
                    }
                }
                string type;

                /*
                 * ===============================
                 * 1.根据地址名生成相应的Modbus点
                 * 2.根据配置表绑定到对应的主地址表
                 * 3.如果绑定成功则添加到list中
                 * 4。根据不同的绑定类型分为:只读,只写,可读可写
                 * ===============================
                 */

                if (addressName != "" && int.TryParse(addressName, out address) && pointName != "")
                {
                    if (addressName.Substring(0, 1) == "0" || addressName.Substring(0, 1) == "1")
                    {
                        if (mappingIdexList.Find(pointName, out type) && type == ds.ValueType.Bool)
                        {
                            VirtulPoint <bool> boolPoint = new VirtulPoint <bool>(addressName, type)
                            {
                            };
                            var sourcePoint = PointMapping <bool> .GetInstance(log).GetPoint(pointName);

                            if (PointsBinding.BoolBinding(sourcePoint, bindingIndex, boolPoint, bindingWay))
                            {
                                result.BoolPoints.Add(boolPoint);
                            }
                        }
                    }
                    if (addressName.Substring(0, 1) == "3" || addressName.Substring(0, 1) == "4")
                    {
                        if (mappingIdexList.Find(pointName, out type))
                        {
                            VirtulPoint <ushort> ushortPoint1 = new VirtulPoint <ushort>(addressName, ds.ValueType.UInt16);
                            VirtulPoint <ushort> ushortPoint2 = new VirtulPoint <ushort>((address + 1).ToString(), ds.ValueType.UInt16);

                            if (type == ds.ValueType.Byte)
                            {
                                var sourcePoint = PointMapping <byte> .GetInstance(log).GetPoint(pointName);

                                if (PointsBinding.UshortBinding(sourcePoint, bindingIndex, ushortPoint1, bindingWay))
                                {
                                    result.UshortPoints.Add(ushortPoint1);
                                }
                            }
                            if (type == ds.ValueType.Int16)
                            {
                                var sourcePoint = PointMapping <short> .GetInstance(log).GetPoint(pointName);

                                if (PointsBinding.UshortBinding(sourcePoint, bindingIndex, ushortPoint1, bindingWay))
                                {
                                    result.UshortPoints.Add(ushortPoint1);
                                }
                            }
                            if (type == ds.ValueType.UInt16)
                            {
                                var sourcePoint = PointMapping <ushort> .GetInstance(log).GetPoint(pointName);

                                if (PointsBinding.UshortBinding(sourcePoint, bindingIndex, ushortPoint1, bindingWay))
                                {
                                    result.UshortPoints.Add(ushortPoint1);
                                }
                            }
                            if (type == ds.ValueType.Int32)
                            {
                                var sourcePoint = PointMapping <int> .GetInstance(log).GetPoint(pointName);

                                if (PointsBinding.UshortBinding(sourcePoint, bindingIndex, new VirtulPoint <ushort>[] { ushortPoint1, ushortPoint2 }, byteOrder, bindingWay))
                                {
                                    result.UshortPoints.Add(ushortPoint1);
                                    result.UshortPoints.Add(ushortPoint2);
                                }
                            }
                            if (type == ds.ValueType.UInt32)
                            {
                                var sourcePoint = PointMapping <uint> .GetInstance(log).GetPoint(pointName);

                                if (PointsBinding.UshortBinding(sourcePoint, bindingIndex, new VirtulPoint <ushort>[] { ushortPoint1, ushortPoint2 }, byteOrder, bindingWay))
                                {
                                    result.UshortPoints.Add(ushortPoint1);
                                    result.UshortPoints.Add(ushortPoint2);
                                }
                            }
                            if (type == ds.ValueType.Float)
                            {
                                var sourcePoint = PointMapping <float> .GetInstance(log).GetPoint(pointName);

                                if (PointsBinding.UshortBinding(sourcePoint, bindingIndex, new VirtulPoint <ushort>[] { ushortPoint1, ushortPoint2 }, byteOrder, bindingWay))
                                {
                                    result.UshortPoints.Add(ushortPoint1);
                                    result.UshortPoints.Add(ushortPoint2);
                                }
                            }
                        }
                    }
                }
                else
                {
                    log.ErrorLog(string.Format("adderss error or binding point is null!"));
                }
            }
            return(result);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 创建siemens S7通讯客户端点集合
        /// </summary>
        /// <param name="workBook"></param>
        /// <param name="log"></param>
        /// <returns></returns>
        public static PointDeviceCollcet CreateS7(XMLWorkbook workBook, ILog log)
        {
            PointDeviceCollcet collcet = new PointDeviceCollcet();

            List <string> colums = workBook.llStrings[0];//第一行列表为索引列数据;

            workBook.llStrings.RemoveAt(0);
            bool flag = true;

            foreach (var ls in workBook.llStrings)
            {
                string        pointName     = "";
                DeviceAddress deviceAddress = new DeviceAddress();
                string        dataType      = "";
                int           length        = 0;
                for (int i = 0; i < colums.Count; i++)
                {
                    switch (colums[i].ToLower())
                    {
                    case "tagname":
                        pointName = ls[i];
                        break;

                    //根据地址分解除功能码,DB块,地址编号
                    case "address":
                        var arrayStr = ls[i].Split('.');
                        if (arrayStr.Length >= 2)
                        {
                            if (arrayStr[0].Contains("DB"))
                            {
                                deviceAddress.FuctionCode = 0x84;
                                int area;
                                if (int.TryParse(arrayStr[0].Remove(0, 2), out area))
                                {
                                    deviceAddress.SalveId = area;
                                }
                                else
                                {
                                    flag = false;
                                }
                                int address;
                                if (int.TryParse(arrayStr[1].Remove(0, 3), out address))
                                {
                                    deviceAddress.Address = address;
                                }
                                else
                                {
                                    flag = false;
                                }
                                if (arrayStr.Length == 3)
                                {
                                    int bitAddress;
                                    if (int.TryParse(arrayStr[2], out bitAddress))
                                    {
                                        deviceAddress.BitAddress = bitAddress;
                                    }
                                    else
                                    {
                                        flag = false;
                                    }
                                }
                            }
                            else
                            {
                                flag = false;
                            }
                        }
                        else
                        {
                            flag = false;
                        }
                        break;

                    case "datatype":
                        dataType = ls[i];
                        break;

                    case "length":
                        if (int.TryParse(ls[i], out length))
                        {
                            ;
                        }
                        else
                        {
                            flag = false;
                        }
                        break;

                    case "byteorder":
                        int byteorder;
                        if (int.TryParse(ls[i], out byteorder))
                        {
                            deviceAddress.ByteOrder = (ByteOrder)byteorder;
                        }
                        else
                        {
                            flag = false;
                        }
                        break;
                    }
                }
                if (pointName != "" && flag)
                {
                    if (dataType.ToLower() == ValueType.Bool)
                    {
                        collcet.BoolPoints.Add(new DevicePoint <bool>(pointName, dataType.ToLower(), length, deviceAddress));
                    }
                    if (dataType.ToLower() == ValueType.Byte)
                    {
                        collcet.BytePoints.Add(new DevicePoint <byte>(pointName, dataType.ToLower(), length, deviceAddress));
                    }
                    if (dataType.ToLower() == ValueType.UInt16)
                    {
                        collcet.UshortPoints.Add(new DevicePoint <ushort>(pointName, dataType.ToLower(), length, deviceAddress));
                    }
                    if (dataType.ToLower() == ValueType.Int16)
                    {
                        collcet.ShortPoints.Add(new DevicePoint <short>(pointName, dataType.ToLower(), length, deviceAddress));
                    }
                    if (dataType.ToLower() == ValueType.UInt32)
                    {
                        collcet.UintPoints.Add(new DevicePoint <uint>(pointName, dataType.ToLower(), length, deviceAddress));
                    }
                    if (dataType.ToLower() == ValueType.Int32)
                    {
                        collcet.IntPoints.Add(new DevicePoint <int>(pointName, dataType.ToLower(), length, deviceAddress));
                    }
                    if (dataType.ToLower() == ValueType.Float)
                    {
                        collcet.FloatPoints.Add(new DevicePoint <float>(pointName, dataType.ToLower(), length, deviceAddress));
                    }
                    if (dataType.ToLower() == ValueType.Double)
                    {
                        collcet.DoublePoints.Add(new DevicePoint <double>(pointName, dataType.ToLower(), length, deviceAddress));
                    }
                }
            }
            return(collcet);
        }
Exemplo n.º 6
0
        /// <summary>
        /// 根据xmlWorkBook数据创建DL645点集合
        /// </summary>
        /// <param name="workBook"></param>
        /// <returns></returns>
        public static PointDeviceCollcet CreateDL645(XMLWorkbook workBook, ILog log)
        {
            PointDeviceCollcet collcet = new PointDeviceCollcet();

            List <string> colums = workBook.llStrings[0];//第一行列表为索引列数据;

            workBook.llStrings.RemoveAt(0);
            foreach (var ls in workBook.llStrings)
            {
                string        pointName     = "";
                DeviceAddress deviceAddress = new DeviceAddress();
                string        dataType      = "";
                int           length        = 0;
                for (int i = 0; i < colums.Count; i++)
                {
                    switch (colums[i].ToLower())
                    {
                    case "tagname":
                        pointName = ls[i];
                        break;

                    case "area":
                        int area;
                        if (int.TryParse(ls[i], out area))
                        {
                            deviceAddress.SalveId = int.Parse(ls[i], NumberStyles.HexNumber);
                        }
                        break;

                    case "address":
                        int address;
                        if (int.TryParse(ls[i], out address))
                        {
                            deviceAddress.Address = int.Parse(ls[i], NumberStyles.HexNumber);
                        }
                        break;

                    case "datatype":
                        dataType = ls[i];
                        break;

                    case "length":
                        int.TryParse(ls[i], out length);
                        break;

                    case "byteorder":
                        int byteorder;
                        if (int.TryParse(ls[i], out byteorder))
                        {
                            deviceAddress.ByteOrder = (ByteOrder)byteorder;
                        }
                        break;
                    }
                }
                if (pointName != "")
                {
                    if (dataType.ToLower() == ValueType.Bool)
                    {
                        collcet.BoolPoints.Add(new DevicePoint <bool>(pointName, dataType.ToLower(), length, deviceAddress));
                    }
                    if (dataType.ToLower() == ValueType.Byte)
                    {
                        collcet.BytePoints.Add(new DevicePoint <byte>(pointName, dataType.ToLower(), length, deviceAddress));
                    }
                    if (dataType.ToLower() == ValueType.UInt16)
                    {
                        collcet.UshortPoints.Add(new DevicePoint <ushort>(pointName, dataType.ToLower(), length, deviceAddress));
                    }
                    if (dataType.ToLower() == ValueType.Int16)
                    {
                        collcet.ShortPoints.Add(new DevicePoint <short>(pointName, dataType.ToLower(), length, deviceAddress));
                    }
                    if (dataType.ToLower() == ValueType.UInt32)
                    {
                        collcet.UintPoints.Add(new DevicePoint <uint>(pointName, dataType.ToLower(), length, deviceAddress));
                    }
                    if (dataType.ToLower() == ValueType.Int32)
                    {
                        collcet.IntPoints.Add(new DevicePoint <int>(pointName, dataType.ToLower(), length, deviceAddress));
                    }
                    if (dataType.ToLower() == ValueType.Float)
                    {
                        collcet.FloatPoints.Add(new DevicePoint <float>(pointName, dataType.ToLower(), length, deviceAddress));
                    }
                    if (dataType.ToLower() == ValueType.Double)
                    {
                        collcet.DoublePoints.Add(new DevicePoint <double>(pointName, dataType.ToLower(), length, deviceAddress));
                    }
                }
            }
            return(collcet);
        }