예제 #1
0
        void SetOffset0(int _offset)
        {
            pr("SetOffset");
            state.Error = null;
            if (_offset == 0)
            {
                return;
            }
            bool   positive = _offset > 0;
            string cmd      = positive ? "!1" : "!2";

            if (_offset < 0)
            {
                _offset = -_offset;
            }
            cmd += _offset.ToString("D2");
            cmd += "\r\n";
            if (!comPort.Write(Encoding.ASCII.GetBytes(cmd)))
            {
                state.XError = "Не смогли записать";
                return;
            }
            byte[] packet = ReadTail();
            if (packet.Length < 3)
            {
                state.XError = "Не смогли прочитать";
                return;
            }
            string reply = Encoding.ASCII.GetString(packet, 0, 3);

            if (positive)
            {
                if (reply != "OK1")
                {
                    state.XError = "Ошибка установки смещения";
                    return;
                }
            }
            else
            {
                if (reply != "OK2")
                {
                    state.XError = "Ошибка установки смещения";
                    return;
                }
            }
        }
예제 #2
0
 string ReadInputRegister(byte _cmd, int _abonent, int _pos, ref ushort _result)
 {
     byte[] query = new byte[] { Convert.ToByte(_abonent), _cmd, 0, Convert.ToByte(_pos), 0, 1, 0, 0 };
     Crc16.Add(query);
     if (!comPort.Write(query))
     {
         return("Не смогли записать");
     }
     // 0 - абонент
     // 1 - ошибки
     // 2 - длина / код ошибки
     // 3 - данные
     // 4 - данные
     // 5 - crc
     // 6 - crc
     byte[] packet = comPort.Read(7);
     if (packet.Length != 7)
     {
         return("Не смогли прочитать");
     }
     if (packet[0] != _abonent)
     {
         return("Не тот абонент");
     }
     if ((packet[1] & 0x80) != 0)
     {
         return("Ошибка в ответе: " + packet[2].ToString());
     }
     if (packet[2] != 2)
     {
         return("Не верная длина в ответе");
     }
     if (!Crc16.Check(packet))
     {
         return("Не верная контрольная сумма");
     }
     _result = BitConverter.ToUInt16(new byte[2] {
         packet[4], packet[3]
     }, 0);
     return(null);
 }
예제 #3
0
        public string Test()
        {
            if (!comPort.Write(new PacketOut(IsLittleEndian)
            {
                command = 1
            }.Serial))
            {
                return("Не смогли записать");
            }
            PacketIn pIn = new PacketIn(IsLittleEndian);

            pIn.Serial = comPort.ReadSome(PacketIn.AdditionalSize);
            if (pIn.command != 1)
            {
                return("Не та команда в ответе");
            }
            if (pIn.abonent != 2)
            {
                return("Не тот абонет в ответе");
            }
            return(pIn.SState);
        }
예제 #4
0
파일: MitCOM.cs 프로젝트: andreyV512/rag
 public void Exec(int _abonent, int _timeout, string _cmd, Request.Etype _request, string request_data, out Reply.EType _replyType, out string _replyData)
 {
     lock (SyncObj)
     {
         request    = new Request(_request, _cmd, request_data);
         _replyType = Reply.EType.None;
         _replyData = null;
         if (!comPort.Write(request.Get(_abonent, _timeout)))
         {
             _replyData = "Не смогли послать запрос";
             return;
         }
         string packet = string.Empty;
         for (; ;)
         {
             byte[] c = comPort.ReadSome(1);
             if (c.Length != 1)
             {
                 if (packet.Length == 0)
                 {
                     _replyData = "Нет ответа";
                 }
                 else
                 {
                     _replyData = "Ответ не разобран";
                 }
                 return;
             }
             packet += Encoding.ASCII.GetString(c);
             foreach (Reply p in Lreply)
             {
                 if (p.parse(_abonent, packet))
                 {
                     _replyType = p.TP;
                     _replyData = p.result;
                     return;
                 }
             }
         }
     }
 }