예제 #1
0
        /// <summary>
        ///     反格式化
        /// </summary>
        /// <param name="messageBytes">获取的信息</param>
        /// <param name="flag">当前反格式化的位置</param>
        /// <returns>反格式化的信息</returns>
        public override IOutputStruct Unformat(byte[] messageBytes, ref int flag)
        {
            var slaveAddress = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag);
            var functionCode = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag);
            var startAddress = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag);
            var writeCount   = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag);

            return(new SetSystemTimeModbusOutputStruct(slaveAddress, functionCode, startAddress, writeCount));
        }
예제 #2
0
        /// <summary>
        ///     反格式化
        /// </summary>
        /// <param name="messageBytes">设备返回的信息</param>
        /// <param name="pos">当前反格式化的位置</param>
        /// <returns>反格式化的信息</returns>
        public override IOutputStruct Unformat(byte[] messageBytes, ref int pos)
        {
            var slaveAddress = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref pos);
            var functionCode = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref pos);
            var dataCount    = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref pos);
            var dataValue    = new byte[dataCount];

            Array.Copy(messageBytes, 3, dataValue, 0, dataCount);
            return(new ReadDataModbusOutputStruct(slaveAddress, functionCode, dataCount, dataValue));
        }
예제 #3
0
        /// <summary>
        ///     反格式化
        /// </summary>
        /// <param name="messageBytes">设备返回的信息</param>
        /// <param name="flag">当前反格式化的位置</param>
        /// <returns>反格式化的信息</returns>
        public override IOutputStruct Unformat(byte[] messageBytes, ref int flag)
        {
            var slaveAddress = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag);
            var functionCode = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag);
            var startAddress = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag);
            var writeValue   = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag);
            var returnValue  = functionCode == (byte)ModbusProtocalWriteDataFunctionCode.WriteSingleCoil
                ? (object)(writeValue == 0xFF00) : writeValue;

            return(new WriteSingleDataModbusOutputStruct(slaveAddress, functionCode, startAddress,
                                                         returnValue));
        }
예제 #4
0
        /// <summary>
        ///     构造函数
        /// </summary>
        /// <param name="slaveAddress">从站号</param>
        /// <param name="startAddress">开始地址</param>
        /// <param name="writeValue">写入的数据</param>
        /// <param name="addressTranslator">地址翻译器</param>
        /// <param name="endian">端格式</param>
        public WriteDataModbusInputStruct(byte slaveAddress, string startAddress, object[] writeValue,
                                          AddressTranslator addressTranslator, Endian endian)
        {
            SlaveAddress = slaveAddress;
            var translateAddress = addressTranslator.AddressTranslate(startAddress, false);

            FunctionCode = (byte)translateAddress.Area;
            StartAddress = (ushort)translateAddress.Address;
            var writeByteValue = ValueHelper.GetInstance(endian).ObjectArrayToByteArray(writeValue);

            WriteCount =
                (ushort)(writeByteValue.Length / addressTranslator.GetAreaByteLength(translateAddress.AreaString));
            WriteByteCount = (byte)writeByteValue.Length;
            WriteValue     = writeByteValue;
        }
예제 #5
0
        /// <summary>
        ///     反格式化
        /// </summary>
        /// <param name="messageBytes">获取的信息</param>
        /// <param name="flag">当前反格式化的位置</param>
        /// <returns>反格式化的信息</returns>
        public override IOutputStruct Unformat(byte[] messageBytes, ref int flag)
        {
            var slaveAddress   = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag);
            var functionCode   = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag);
            var writeByteCount = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag);
            var year           = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag);
            var day            = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag);
            var month          = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag);
            var hour           = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag);
            var second         = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag);
            var minute         = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag);
            var millisecond    = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag);

            return(new GetSystemTimeModbusOutputStruct(slaveAddress, functionCode, writeByteCount, year, day,
                                                       month, hour, second, minute, millisecond));
        }
예제 #6
0
        /// <summary>
        ///     构造函数
        /// </summary>
        /// <param name="slaveAddress">从站号</param>
        /// <param name="startAddress">开始地址</param>
        /// <param name="writeValue">写入的数据</param>
        /// <param name="addressTranslator">地址翻译器</param>
        /// <param name="endian">端格式</param>
        public WriteSingleDataModbusInputStruct(byte slaveAddress, string startAddress, object writeValue,
                                                ModbusTranslatorBase addressTranslator, Endian endian)
        {
            SlaveAddress = slaveAddress;
            var translateAddress = addressTranslator.AddressTranslate(startAddress, false, true);

            FunctionCode = (byte)translateAddress.Area;
            StartAddress = (ushort)translateAddress.Address;
            int a = 0, b = 0;
            var writeByteValue =
                FunctionCode == (byte)ModbusProtocalWriteDataFunctionCode.WriteSingleCoil
                    ? ((bool)writeValue
                        ? new byte[] { 0xFF, 0x00 }
                        : new byte[] { 0x00, 0x00 })
                    : ValueHelper.GetInstance(endian).GetBytes(ushort.Parse(writeValue.ToString()));

            WriteValue = writeByteValue;
        }