public Item <ushort> ReadUShort(DeviceAddress deviceAddress) { var datas = readRegister(deviceAddress, 1); return(datas == null ? Item <ushort> .CreateDefault() : new Item <ushort>() { Vaule = UnsafeNetConvert.BytesToUShort(datas, 0, deviceAddress.ByteOrder), UpdateTime = DateTime.Now, Quality = QUALITIES.QUALITY_GOOD }); }
/// <summary> /// 16位无符号整形点绑定16位整形数据 /// </summary> /// <param name="source">16位整形源数据</param> /// <param name="sourceindex">源数据点索引</param> /// <param name="target">目标数据,点长度为1的虚拟点</param> /// <param name="bindingWay">绑定方式,默认为单方向</param> public static bool UshortBinding(IPoint <short> source, int sourceindex, IPoint <ushort> target, BindingWay bindingWay = BindingWay.OneWay) { if (sourceindex >= source.Length) { return(false); } switch (bindingWay) { case BindingWay.OneWay: source.PropertyChanged += (s, p) => { if (int.Parse(p.PropertyName) == sourceindex) { byte[] temp1 = UnsafeNetConvert.ShortToBytes(source[(byte)sourceindex], ByteOrder.None); ushort temp2 = UnsafeNetConvert.BytesToUShort(temp1, 0, ByteOrder.None); target.ValueUpdate(temp2, 0); } }; return(true); case BindingWay.TwoWay: source.PropertyChanged += (s, p) => { if (int.Parse(p.PropertyName) == sourceindex) { byte[] temp1 = UnsafeNetConvert.ShortToBytes(source[(byte)sourceindex], ByteOrder.None); ushort temp2 = UnsafeNetConvert.BytesToUShort(temp1, 0, ByteOrder.None); target.ValueUpdate(temp2, 0); } }; target.PropertyChanged += (s, p) => { var temp1 = UnsafeNetConvert.UShortToBytes(target[0], ByteOrder.None); var temp2 = UnsafeNetConvert.BytesToShort(temp1, 0, ByteOrder.None); source.ValueUpdate(temp2, sourceindex); }; return(true); case BindingWay.ReverseWay: target.PropertyChanged += (s, p) => { var temp1 = UnsafeNetConvert.UShortToBytes(target[0], ByteOrder.None); var temp2 = UnsafeNetConvert.BytesToShort(temp1, 0, ByteOrder.None); source.ValueUpdate(temp2, sourceindex); }; return(true); default: return(false); } }
/// <summary> /// Write single hold reister Rely /// Function:0x06 /// </summary> /// <param name="address">40001~49999</param> /// <param name="data">length=2,Data Hi:data[0],Data Lo:data[1]</param> /// <returns></returns> private byte[] writeSingleReisterRely(int address, byte[] data) { byte[] relyBuffer = new byte[6]; var value = UnsafeNetConvert.BytesToUShort(data, 0, ByteOrder.BigEndian); var addressString = string.Format("{0:D5}", address + 1 + 40000); //地址偏移+1 if (_mapping.SetValue(addressString, new ushort[] { value }) == -1) { return(errorRely(FunctionCode.WriteSingleRegister, ErrorCode.LllegalDataAddress)); } relyBuffer[0] = (byte)_salveId; relyBuffer[1] = (byte)FunctionCode.WriteSingleRegister; var addrByte = UnsafeNetConvert.UShortToBytes((ushort)address, ByteOrder.BigEndian); Array.Copy(addrByte, 0, relyBuffer, 2, 2); Array.Copy(data, 0, relyBuffer, 4, data.Length); return(relyBuffer); }