/// <summary> /// 根据数据类型,直接写入主Mapping /// </summary> /// <param name="points"></param> /// <param name="log"></param> public static void Register(ref PointDeviceCollcet points, ILog log) { var boolPointMapping = PointMapping <bool> .GetInstance(log); var bytePointMapping = PointMapping <byte> .GetInstance(log); var ushortPointMapping = PointMapping <ushort> .GetInstance(log); var shortPointMapping = PointMapping <short> .GetInstance(log); var uintPointMapping = PointMapping <uint> .GetInstance(log); var intPointMapping = PointMapping <int> .GetInstance(log); var folatPointMapping = PointMapping <float> .GetInstance(log); var doublePointMapping = PointMapping <double> .GetInstance(log); var stringPointMapping = PointMapping <string> .GetInstance(log); ///注册 Register(ref points, boolPointMapping, log); Register(ref points, bytePointMapping, log); Register(ref points, ushortPointMapping, log); Register(ref points, shortPointMapping, log); Register(ref points, uintPointMapping, log); Register(ref points, intPointMapping, log); Register(ref points, folatPointMapping, log); Register(ref points, doublePointMapping, log); Register(ref points, stringPointMapping, log); }
/// <summary> /// byte型点注册 /// </summary> /// <param name="points"></param> /// <param name="mapping"></param> public static void Register(ref PointDeviceCollcet points, IPointMapping <byte> mapping, ILog log) { List <DevicePoint <byte> > dupPoints = new List <DevicePoint <byte> >();//重复点名列表 foreach (var point in points.BytePoints) { if (mapping.Find(point.Name)) { dupPoints.Add(point); log.ErrorLog(string.Concat("Point Register Error:Duplication point name <", point.Name, ">")); } else { mapping.Register(point.Name, point); } } foreach (var point in dupPoints) { points.BytePoints.Remove(point); } }
/// <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); }
/// <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); }