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; } } }
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); }
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); }
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; } } } } }