Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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();
        }
Ejemplo n.º 3
0
        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();
                }
            }
        }