public int WriteUInt(DeviceAddress deviceAddress, uint datas) { lock (_async) { _handler = _handler++ >= 65535 ? 0 : _handler; var source = createWriteHeader(deviceAddress, _handler, UnsafeNetConvert.UIntToBytes(datas, ByteOrder.BigEndian)); return(writedata(deviceAddress, source)); } }
public int WriteUInt(DeviceAddress deviceAddress, uint datas) { ushort startAddress; if (Function.EnableWriteRegister(deviceAddress.Address, out startAddress)) { var valueBytes = (deviceAddress.ByteOrder == ByteOrder.BigEndian) ? UnsafeNetConvert.UIntToBytes(datas, deviceAddress.ByteOrder) : UnsafeNetConvert.BytesPerversion(UnsafeNetConvert.UIntToBytes(datas, deviceAddress.ByteOrder)); byte[] sendBytes = getWriteMulRegisterHeader((byte)deviceAddress.SalveId, startAddress, valueBytes); return(writeBytes(sendBytes)); } else { return(-1); } }
/// <summary> /// 16位无符号整形点绑定32无符号整形数据 /// </summary> /// <param name="source">32位无符号整形源数据</param> /// <param name="sourceindex">源数据点索引</param> /// <param name="targets">目标数据,数组长度为2,点长度为1的虚拟点</param> /// <param name="bindingWay">绑定方式,默认为单方向</param> public static bool UshortBinding(IPoint <uint> source, int sourceindex, IPoint <ushort>[] targets, ByteOrder byteOrder = ByteOrder.None, BindingWay bindingWay = BindingWay.OneWay) { if (sourceindex >= source.Length) { return(false); } if (targets.Length != 2) { return(false); } switch (bindingWay) { case BindingWay.OneWay: source.PropertyChanged += (s, p) => { if (int.Parse(p.PropertyName) == sourceindex) { byte[] temp1 = UnsafeNetConvert.UIntToBytes(source[(byte)sourceindex], byteOrder); ushort[] temp2 = (byteOrder == ByteOrder.BigEndian)?UnsafeNetConvert.BytesToUShorts(temp1, 0, 2, byteOrder): UnsafeNetConvert.BytesToUShorts(temp1, 0, 2, ByteOrder.None); for (int i = 0; i < targets.Length; i++) { targets[i].ValueUpdate(temp2[i], 0); } } }; return(true); case BindingWay.TwoWay: source.PropertyChanged += (s, p) => { if (int.Parse(p.PropertyName) == sourceindex) { byte[] temp1 = UnsafeNetConvert.UIntToBytes(source[(byte)sourceindex], byteOrder); ushort[] temp2 = (byteOrder == ByteOrder.BigEndian) ? UnsafeNetConvert.BytesToUShorts(temp1, 0, 2, byteOrder) : UnsafeNetConvert.BytesToUShorts(temp1, 0, 2, ByteOrder.None); for (int i = 0; i < targets.Length; i++) { targets[i].ValueUpdate(temp2[i], 0); } } }; foreach (var target in targets) { target.PropertyChanged += (s, p) => { var temp1 = (byteOrder == ByteOrder.BigEndian) ? UnsafeNetConvert.UShortsToBytes(new ushort[] { targets[0][0], targets[1][0] }, byteOrder) : UnsafeNetConvert.UShortsToBytes(new ushort[] { targets[0][0], targets[1][0] }, ByteOrder.None); var temp2 = UnsafeNetConvert.BytesToUInt(temp1, 0, byteOrder); source.ValueUpdate(temp2, sourceindex); }; } return(true); case BindingWay.ReverseWay: foreach (var target in targets) { target.PropertyChanged += (s, p) => { var temp1 = (byteOrder == ByteOrder.BigEndian) ? UnsafeNetConvert.UShortsToBytes(new ushort[] { targets[0][0], targets[1][0] }, byteOrder) : UnsafeNetConvert.UShortsToBytes(new ushort[] { targets[0][0], targets[1][0] }, ByteOrder.None); var temp2 = UnsafeNetConvert.BytesToUInt(temp1, 0, byteOrder); source.ValueUpdate(temp2, sourceindex); }; } return(true); default: return(false); } }