private bool SendCommandToObject(out UInt16 status, UInt16 adr, PakCommands command, TimeSpan waitTime) { status = default(UInt16); var pakReqCoord = new PakStructRequest(); // Пакет запроса координат const ushort pakNumber = UInt16.MaxValue; pakReqCoord.SetRequestCoordinate(adr, pakNumber, command, 0, 0); pakReqCoord.ActualDateTime(); pakReqCoord.WriteCrc16(); var tpReq = new ModulePak(pakReqCoord, false); //_mreWaitData.Reset(); var queue = (CQueue <ModulePak>)_rModule.InQueue; queue.DequeueAll(); _mreHaveData.Reset(); _rModule.OutQueueEnq(tpReq); bool sign = _mreHaveData.WaitOne(TimeSpan.FromSeconds(10)); //bool sign = _mreHaveData.WaitOne(10););) if (!sign) { return(false); //Не дождались ответа от трекера } ModulePak pak; int i; for (i = 0; i < 2; ++i)//for (int i = 0; i < 2; i++) { while (queue.TryDequeue(out pak)) { var ps = pak.Structure as PakStructAnsw1; if (ps != null) { if (ps.Address == adr && ps.IsCrcOk()) { status = ps.Status; return(true); } } } Thread.Sleep(waitTime); // Ждем, что пройдут тесты //Thread.Sleep(TimeSpan.FromSeconds(1)); } Debug.WriteLine("RetryCount " + i); return(false); }
private void BtnSend_Click(object sender, EventArgs e) { CheckRadioModuleObject(); if (!CheckComOpenState()) return; PakStruct ps = GetPakFromControls(); if (ps == null) { MessageBox.Show(@"Значения полей должны быть целыми числами", @"Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Warning); WriteLogTextBox("Неудачная попытка послать данные", false, true, true); return; } ps.WriteCrc16(); var tp = new ModulePak(ps); if (!_isStartedRcv) { BtnRecive_Click(sender, e); RModuleOnDataReceived(sender, null); RModuleOnErrReceived(sender, null); } _rModule.OutQueueEnq(tp); byte[] bts = ps.GetBytes(); var sb = new StringBuilder(DateTime.Now.TimeOfDay.ToString()); sb.Append(" OUT: "); if (FlagHexOut.Checked) { foreach (var bt in bts) { sb.Append(bt.ToString("X") + " "); } } else { foreach (var bt in bts) { sb.Append(bt); sb.Append(" "); } } sb.AppendLine(); _delegateSetTextSafe(FieldTerminal, sb.ToString()); FieldNum.Text = (Convert.ToInt16(FieldNum.Text) + 1).ToString(); }
private void WriteDb(ModulePak pak, int bsNomer) { var sqlb = new SqlConnectionStringBuilder(Properties.Settings.Default.ArmConnectionString); WriteLogTextBox("Запись в БД......", false, false, true); if (sqlb.ToString().Length == 0) { WriteLogTextBox("Ошибка! (нет строки подключения)", false, true, false); return; } using (var connection = new SqlConnection(sqlb.ToString())) { try { connection.Open(); var cmd = Tasker.GetDbSetObjectStateCommand(pak, bsNomer, false) as SqlCommand; if (cmd != null) { cmd.Connection = connection; cmd.ExecuteNonQuery(); } } catch (SqlException) { WriteLogTextBox("Ошибка SQL!", false, true, false); throw; } catch (Exception ex) { WriteLogTextBox("Ошибкапри записи в БД: "+ ex.Message, false, true, false); throw; } finally { connection.Close(); } } }