Exemplo n.º 1
0
        /// <summary>
        /// Запись данных в указанный Slave
        /// </summary>
        /// <param name="SlaveAddr"></param>
        /// <param name="StartAddr"></param>
        /// <param name="DataSent"></param>
        /// <param name="Data"></param>
        public void SetData(byte SlaveAddr, ushort StartAddr, Action <bool> DataSent, params ushort[] Data)
        {
            if (serialPort == null)
            {
                return;
            }
            if (!serialPort.IsOpen)
            {
                return;
            }

            RequestUnit reqUnit = new RequestUnit(SlaveAddr, StartAddr, DataSent, Data);

            lock (locker)
            {
                if (portBusy)
                {
                    Requests.Enqueue(reqUnit);
                }
                else
                {
                    SendRequest(reqUnit);
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Чтение данных от заданного Slave
        /// </summary>
        /// <param name="SlaveAddr"></param>
        /// <param name="StartAddr"></param>
        /// <param name="Count"></param>
        /// <param name="DataReceived">Делегат вызывается после получения данных от Slave</param>
        public void GetData(byte SlaveAddr, ushort StartAddr, int Count, Action <bool, ushort[]> DataReceived)
        {
            if (serialPort == null)
            {
                return;
            }
            if (!serialPort.IsOpen)
            {
                return;
            }

            RequestUnit reqUnit = new RequestUnit(SlaveAddr, StartAddr, Count, DataReceived);

            lock (locker)
            {
                if (portBusy)
                {
                    Requests.Enqueue(reqUnit);
                }
                else
                {
                    SendRequest(reqUnit);
                }
            }
        }
Exemplo n.º 3
0
 private void SendRequest(RequestUnit RequestUnit)
 {
     portBusy = true;
     if (RequestUnit.RequestType == RequestType.GetData)
     {
         serialPort.GetData(RequestUnit.SlaveAddr, RequestUnit.StartAddr, RequestUnit.Count, DataReceived);
         currentRequest = RequestUnit;
     }
     else if (RequestUnit.RequestType == RequestType.SetData)
     {
         serialPort.SetData(RequestUnit.SlaveAddr, RequestUnit.StartAddr, DataSent, RequestUnit.DataToSent);
         currentRequest = RequestUnit;
     }
     else if (RequestUnit.RequestType == RequestType.NotStandartFunc)
     {
         (serialPort as INotStandartFunc).Request(RequestUnit.TxBuffer, RequestUnit.ExpectByteCount, DataReceivedByte);
         currentRequest = RequestUnit;
     }
 }
Exemplo n.º 4
0
        /// <summary>
        /// Отправка нестандартного запроса в Slave
        /// </summary>
        /// <param name="SlaveAddr"></param>
        /// <param name="Buffer">Отправляемые данные</param>
        /// <param name="ExceptByteCount">ожидаемое количество байтов в ответе</param>
        /// <param name="DataReceived">делегат, вызываемый после получения ответа от Slave</param>
        public void Request(byte SlaveAddr, byte[] Buffer, byte ExpectedByteCount, Action <bool, byte[]> DataReceived)
        {
            if (serialPort == null)
            {
                return;
            }
            if (!serialPort.IsOpen)
            {
                return;
            }

            if (!(serialPort is INotStandartFunc))
            {
                throw new Exception("Invalid request for current instance of ISerialPort");
            }

            int l = 0;

            if (Buffer != null)
            {
                l = Buffer.Length;
            }

            byte[] buff = new byte[l + 1];
            buff[0] = SlaveAddr;
            Buffer.CopyTo(buff, 1);

            RequestUnit reqUnit = new RequestUnit(buff, ExpectedByteCount, DataReceived);

            lock (locker)
            {
                if (portBusy)
                {
                    Requests.Enqueue(reqUnit);
                }
                else
                {
                    SendRequest(reqUnit);
                }
            }
        }