Exemplo n.º 1
0
 /// <summary>
 /// Входящая команда
 /// </summary>
 /// <param name="_timeout">Время ожидания прихода команды, мс</param>
 public Command(ulong _timeout)
 {
     address     = 0;
     count       = 0;
     timeOut     = _timeout;
     commandType = CommandType.TYPICAL;
     set_or_get  = SET_OR_GET.OTHER;
     index       = 0;
     data        = new byte[0];
 }
Exemplo n.º 2
0
        //public CommandType comType;

        /// <summary>
        /// Отправляемая команда
        /// </summary>
        /// <param name="_addr">Адрес данных</param>
        /// <param name="_cnt">Количество байт (размер)</param>
        /// <param name="_set_or_get">Команда для SET, GET или общая</param>
        /// <param name="_index">Индекс текущего сигнала среди общего списка сигналов (параметров) платы</param>
        public Command(ushort _addr, ushort _cnt, SET_OR_GET _set_or_get, int _index, CommandType _commandType)
        {
            //comType = _comType;
            address     = _addr;
            count       = _cnt;
            set_or_get  = _set_or_get;
            index       = _index;
            timeOut     = 0;
            commandType = _commandType;

            //data = new byte[_comType == CommandType.READ ? 0 : _cnt];
            data = new byte[_cnt];
        }
Exemplo n.º 3
0
        private void CreateAndSendSignal(BoardSignal signal,int index,SET_OR_GET set_or_get)
        {
            if (bCommandBusy)
            {
                return;
            }
            ushort addr     = 0;
            ushort cnt      = 0;
            uint   port     = 0;
            uint   groupVal = 0;

            byte[] buf = null;
            Udp    udp = null;

            //lastSignal1 = signal;

            switch (set_or_get)
            {
            case SET_OR_GET.SET:
            {
                //if (signal.set.source == null) return;
                addr = (ushort)signal.set.source.address;
                cnt  = signal.set.sizebyte;
                port = signal.set.source.port;
                buf  = signal.set.source.group.valueTX;

                //собираем из буфера группы число
                for (int i = 0; i < buf.Length; i++)
                {
                    groupVal += (uint)(buf[i] << (8 * i));
                }

                //делаем ИЛИ с отправляемым сигналом
                groupVal |= signal.set.valueon;
            }
            break;

            case SET_OR_GET.GET:
            {
                addr = (ushort)signal.get.source.address;
                cnt  = signal.get.sizebyte;
                port = signal.get.source.port;
                buf  = signal.get.source.group.valueTX;

                //собираем из буфера группы число
                for (int i = 0; i < buf.Length; i++)
                {
                    groupVal += (uint)(buf[i] << (8 * i));
                }

                //делаем ИЛИ с отправляемым сигналом
                //groupVal |= signal.get.valueon;
            }
            break;

            case SET_OR_GET.DESET:
            {
                addr = (ushort)signal.set.source.address;
                cnt  = signal.set.sizebyte;
                port = signal.set.source.port;
                buf  = signal.set.source.group.valueTX;

                //собираем из буфера группы число
                for (int i = 0; i < buf.Length; i++)
                {
                    groupVal += (uint)(buf[i] << (8 * i));
                }

                //делаем И с отправляемым сигналом на выключение
                groupVal &= signal.set.valueoff;
            }
            break;
            }


            //выбираем порт для отправки
            if (port == uint.Parse(_frmMainWindow._frmSettings.txtIPPort1.Text))
            {
                udp = udpPU; lastSignal1 = signal;
            }
            if (port == uint.Parse(_frmMainWindow._frmSettings.txtIPPort2.Text))
            {
                udp = udpPK; lastSignal2 = signal;
            }
            if (port == uint.Parse(_frmMainWindow._frmSettings.txtIPPort3.Text))
            {
                udp = udpPTVC; lastSignal3 = signal;
            }

            //собираем обратно получившееся значение в групповой буфер
            for (int i = 0; i < buf.Length; i++)
            {
                buf[i] = (byte)((groupVal >> (8 * i)) & 0xFF);
            }

            //создаем команду с определенным адресом и количеством байт данных
            Command com = new Command(addr,cnt,set_or_get,index,CommandType.TYPICAL);

            //заполняем буфер данных значением группы
            com.data = buf;

            //отображаем уходящий пакет на форме
            ShowBuf(com.GetCommandByteBuf(),BUF_TO_SHOW.TX);

            //команда уходит
            if (udp != null)
            {
                bCommandBusy = true;
                udp.SendCommand(com);
            }
            else
            {
                MessageBox.Show("Проверьте соединение!","7600",MessageBoxButtons.OK,MessageBoxIcon.Error); return;
            }

            while (bCommandBusy)
            {
                this.Cursor = Cursors.AppStarting; Application.DoEvents();
            }
            this.Cursor = Cursors.Default;
        }