/// <summary>
        /// Метод, который исполняет управляющие команды
        /// </summary>
        /// <param name="Par">Управляющая команда</param>
        /// <returns></returns>
        public void ExeComand(DevCommand Par)
        {
            int tmpcount = 0;
            UInt64 Value = 0;
            int masCounter = Par.command.Count();
            for (int i = 0; i < masCounter; i++)
            {
                Value = (UInt64)(Value + Par.command[i] * Math.Pow(256, masCounter - 1 - tmpcount));
                tmpcount++;
            }

            DevCommand Ansewr = new DevCommand();
            Ansewr.port = Par.port;
            Ansewr.device = Par.device;
            Ansewr.command = new byte[1];
            bool result = Program.data_module.UpdDeviceVal(Par.port.ToString(), Par.device.ToString(), Value.ToString());
            if (result)
            {
                Ansewr.command[0] = 1;
            }
            else
            {
                Ansewr.command[0] = 0;
            }
            byte[] PackAnswer = ProtocolForParser.Pack(Ansewr.port, Ansewr.device, Ansewr.command);
            Program.WW.SendInform(PackAnswer);
        }
Example #2
0
 public ArrayList Unpack(Stream dataStream)
 {
     byte buffer;
     byte count;
     bool IsFindComand = false;
     DevCommand comand;
     ArrayList result = new ArrayList();
     int SubBuffer = (int)dataStream.ReadByte();
     while (SubBuffer != -1)
     {
         try
         {
             buffer = (byte)SubBuffer;
             if ((buffer == 181) || (IsFindComand))
             {
                 comand = new DevCommand();
                 count = (byte)dataStream.ReadByte();
                 comand.len = count;
                 comand.command = new byte[count - 5];
                 comand.port = (byte)dataStream.ReadByte();
                 comand.device = (byte)dataStream.ReadByte();
                 for (int i = 0; i < count - 5; i++)
                 {
                     comand.command[i] = (byte)dataStream.ReadByte();
                 }
                 if (dataStream.ReadByte() != 74)
                 {
                 }
                 else
                 {
                     result.Add(comand);
                 }
                 IsFindComand = false;
             }
             else
             {
                 while ((SubBuffer != 181) || (SubBuffer != -1))
                 {
                     SubBuffer = (byte)dataStream.ReadByte();
                 }
             }
             SubBuffer = (int)dataStream.ReadByte();
         }
         catch
         {
             return result;
         }
     }
     return result;
 }
 /// <summary>
 /// Метод, определения пришел запрос или управляющая команда
 /// </summary>
 /// <param name="Comand">Присланная команда</param>
 public void ParssComand(DevCommand Comand)
 {
     if (Comand.command.Count() >= 1)
     {//Выполняется если пришла управляющая команда
         ExeComand(Comand);
     }
     else if ((Comand.command.Count() == 0) || (Comand.command == null))
     {//Выполняется если пришёл запрос
         Query(Comand);
     }
     else
     {
         MessageBox.Show("Неверный формат команды");
     }
 }
        /// <summary>
        /// Метод, который исполняет запрос
        /// </summary>
        /// <param name="Par">Запрос</param>
        /// <returns></returns>
        public void Query(DevCommand Par)
        {
            byte[] PackComand;
            string Ansewr = Program.data_module.FindCurentVal( Par.port.ToString(),Par.device.ToString());

            if (Ansewr == "Error")
            {//Выполняется если запрос завершился ошибкой
                byte[] QueryAnsewr = new byte[1];
                QueryAnsewr[0] = 0;
                PackComand = ProtocolForParser.Pack(Par.port, Par.device, QueryAnsewr);

                Program.WW.SendInform(QueryAnsewr);
            }
            else
            {//Выполняется если запрос не завершился ошибкой
                int A = Convert.ToInt32(Ansewr);
                Stack st = new Stack();
                while (A > 255)
                {
                    st.Push(A % 256);
                    A = A / 256;
                }
                if (st.Count == 0)
                {
                    st.Push(A);
                }
                else if (A>0)
                {
                    st.Push(A);
                }
                byte[] QueryAnsewr = new byte[st.Count];
                int Count = st.Count;
                for (int i = 0; i < Count; i++)
                {
                    QueryAnsewr[i] = Convert.ToByte(st.Pop());
                }
                QueryAnsewr = ProtocolForParser.Pack(Par.port, Par.device, QueryAnsewr);
                Program.WW.SendInform(QueryAnsewr);
            }
        }