/// <summary> /// 向指定地址添加指定类型和数量的数据 /// [注:当向同一个地址多次发送数据时,可以定义一个数据单元;但当向不同地址发送数据时,则需要定义多个数据单元] /// </summary> /// <typeparam name="T"></typeparam> /// <param name="address"></param> /// <param name="number"></param> public void AssignValue <T>(ushort address, int number) where T : struct { this.Address = address; { ProDriver.Auxiliary.HZZHComDataType dtTp = ProDriver.Auxiliary.HZZHComDataType.Int; System.Type tp = typeof(T); if (tp.Name == "Int32") { dtTp = ProDriver.Auxiliary.HZZHComDataType.Int; this.IntValue = new int[number]; } else if (tp.Name == "Single") { dtTp = ProDriver.Auxiliary.HZZHComDataType.Float; this.FloatValue = new float[number]; } else if (tp.Name == "UInt16") { dtTp = ProDriver.Auxiliary.HZZHComDataType.Ushort; this.UshortValue = new ushort[number]; } else if (tp.Name == "Int16") { dtTp = ProDriver.Auxiliary.HZZHComDataType.Short; this.ShortValue = new short[number]; } else if (tp.Name == "UInt32") { dtTp = ProDriver.Auxiliary.HZZHComDataType.Uint; this.UintValue = new uint[number]; } else if (tp.Name == "Byte") { dtTp = ProDriver.Auxiliary.HZZHComDataType.Byte; this.ByteValue = new byte[number * 2]; } this.DataType = dtTp; } this.RegisterNumber = (ushort)number; this.ComSucceed = false; }
/// <summary> /// 向指定地址添加指定类型的数据 /// [注:当向同一个地址多次发送数据时,可以定义一个数据单元;但当向不同地址发送数据时,则需要定义多个数据单元] /// </summary> /// <typeparam name="T"></typeparam> /// <param name="address"></param> /// <param name="arrValue"></param> public void AssignValue <T>(ushort address, T[] arrValue) where T : struct { this.Address = address; { ProDriver.Auxiliary.HZZHComDataType dtTp = ProDriver.Auxiliary.HZZHComDataType.Int; System.Type tp = typeof(T); if (tp.Name == "Int32") { dtTp = ProDriver.Auxiliary.HZZHComDataType.Int; this.IntValue = (int[])arrValue.Clone(); } else if (tp.Name == "Single") { dtTp = ProDriver.Auxiliary.HZZHComDataType.Float; this.FloatValue = (float[])arrValue.Clone(); } else if (tp.Name == "UInt16") { dtTp = ProDriver.Auxiliary.HZZHComDataType.Ushort; this.UshortValue = (ushort[])arrValue.Clone(); } else if (tp.Name == "Int16") { dtTp = ProDriver.Auxiliary.HZZHComDataType.Short; this.ShortValue = (short[])arrValue.Clone(); } else if (tp.Name == "UInt32") { dtTp = ProDriver.Auxiliary.HZZHComDataType.Uint; this.UintValue = (uint[])arrValue.Clone(); } else if (tp.Name == "Byte") { dtTp = ProDriver.Auxiliary.HZZHComDataType.Byte; this.ByteValue = (byte[])arrValue.Clone(); } this.DataType = dtTp; } this.ComSucceed = false; }
public ProDriver.Auxiliary.HZZHComBaseData ReadRegister(ushort address, ushort registerNumber, ProDriver.Auxiliary.HZZHComDataType dataType, int blockTime = 1000) { ProDriver.Auxiliary.HZZHComBaseData bsData = new HZZHComBaseData(); bsData.IsDataValid = false; bsData.InitiativeRead = true; bsData.RegisterNumber = registerNumber; switch (dataType) { case ProDriver.Auxiliary.HZZHComDataType.Byte: bsData.AssignValue(address, new byte[registerNumber]); AddNetList(bsData); break; case ProDriver.Auxiliary.HZZHComDataType.Float: bsData.AssignValue(address, new float[registerNumber]); AddNetList(bsData); break; case ProDriver.Auxiliary.HZZHComDataType.Int: bsData.AssignValue(address, new int[registerNumber]); AddNetList(bsData); break; case ProDriver.Auxiliary.HZZHComDataType.Short: bsData.AssignValue(address, new short[registerNumber]); AddNetList(bsData); break; case ProDriver.Auxiliary.HZZHComDataType.Uint: bsData.AssignValue(address, new uint[registerNumber]); AddNetList(bsData); break; case ProDriver.Auxiliary.HZZHComDataType.Ushort: bsData.AssignValue(address, new ushort[registerNumber]); AddNetList(bsData); break; default: break; } int cnt = 0; //在板卡连接成功的情形下,一直等到数据源访问成功 while (!bsData.ComSucceed) { //板卡连接不成功,退出等待 if (!IsConnected) { break; } System.Threading.Thread.Sleep(1); cnt++; //超时退出 if (cnt > blockTime) { break; } } bsData.IsDataValid = bsData.ComSucceed; return(bsData); }