Exemple #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="address">адрес подчиненого</param>
        /// <param name="function">запрашиваемая функция</param>
        /// <param name="data">передаваемые данные</param>
        public void RequestCustomFunction(byte address, byte function, byte[] data)
        {
            if (!_waitResponse)
            {
                _counterRepeat = 0;
                int i = 0;
                _bufferTransmit      = new byte[(data == null ? 0 : data.Length) + 5];
                _addressSlave        = address;
                _bufferTransmit[i++] = address;
                _bufferTransmit[i++] = function;
                _bufferTransmit[i++] = data == null ? (byte)0 : (byte)data.Length;

                if (data != null)
                {
                    foreach (byte b in data)
                    {
                        _bufferTransmit[i++] = b;
                    }
                }

                _bufferTransmit[i++] = (byte)CRC.GetCRC(_bufferTransmit, _bufferTransmit.Length - 2);
                _bufferTransmit[i]   = (byte)(CRC.GetCRC(_bufferTransmit, _bufferTransmit.Length - 2) >> 8);

                _requestFunction = function;
                RepeatRequest();
            }
            else
            {
                throw new BusyException();
            }
        }
Exemple #2
0
        /// <summary>
        ///     запрос на чтение двоичного содержания регистров подчиненого
        /// </summary>
        /// <param name="address">Адрес подчиненого</param>
        /// <param name="regAddress">начальный адрес регистров</param>
        /// <param name="numberReg">количество регистров </param>
        public void ReadHoldingRegisters(byte address, short regAddress, short numberReg)
        {
            if (!_waitResponse)
            {
                _counterRepeat = 0;
                int i = 0;
                _bufferTransmit      = new byte[8];
                _addressSlave        = address;
                _bufferTransmit[i++] = address;
                _bufferTransmit[i++] = 0x03;
                _bufferTransmit[i++] = (byte)(regAddress >> 8);
                _bufferTransmit[i++] = (byte)(regAddress);

                _bufferTransmit[i++] = (byte)(numberReg >> 8);
                _bufferTransmit[i++] = (byte)(numberReg);

                _bufferTransmit[i++] = (byte)CRC.GetCRC(_bufferTransmit, 6);
                _bufferTransmit[i]   = (byte)(CRC.GetCRC(_bufferTransmit, 6) >> 8);

                _requestFunction = 3;
                RepeatRequest();
            }
            else
            {
                throw new BusyException();
            }
        }
Exemple #3
0
        /// <summary>
        ///     Запрос на запись двоичного содержания регистров подчиненого
        /// </summary>
        /// <param name="address">дрес подчиненого</param>
        /// <param name="regAddress">начальный адрес регистров</param>
        /// <param name="data">Массив новых значений регистров</param>
        /// <param name="numberReg">количество регистров</param>
        public void PresetMultipleRegisters(byte address, short regAddress, short[] data, short numberReg)
        {
            if (!_waitResponse)
            {
                _counterRepeat = 0;
                int i = 0;
                _bufferTransmit      = new byte[numberReg * 2 + 9];
                _addressSlave        = address;
                _bufferTransmit[i++] = address;
                _bufferTransmit[i++] = 0x10;
                _bufferTransmit[i++] = (byte)(regAddress >> 8);
                _bufferTransmit[i++] = (byte)(regAddress);

                _bufferTransmit[i++] = (byte)(numberReg >> 8);
                _bufferTransmit[i++] = (byte)(numberReg);

                _bufferTransmit[i++] = (byte)(numberReg * 2);


                int index = 0;
                while (index != numberReg)
                {
                    _bufferTransmit[i++] = (byte)(data[index] >> 8);
                    _bufferTransmit[i++] = (byte)(data[index++]);
                }

                _bufferTransmit[i++] = (byte)CRC.GetCRC(_bufferTransmit, _bufferTransmit.Length - 2);
                _bufferTransmit[i]   = (byte)(CRC.GetCRC(_bufferTransmit, _bufferTransmit.Length - 2) >> 8);

                _requestFunction = 0x10;
                RepeatRequest();
            }
            else
            {
                throw new BusyException();
            }
        }