Beispiel #1
0
        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
            });
        }
Beispiel #2
0
        /// <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);
            }
        }
Beispiel #3
0
        /// <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);
        }