예제 #1
0
 //传给Timer的数据用于分析用户选择的物理量
 public void TimerShow(object sender, SJRControlCData data)
 {
     this.Invoke(new Action(() =>
     {
         //线圈检测状态和测速通讯线连接状态同时满足
         if (SJRControlC.ConnectState == true && SpeedLine == true)
         {
             //在用户设定的周期内
             if (runNum <= runTime)
             {
                 button1.Enabled = false;
                 if (data.CarOrNot == 1 && inFlag == false)
                 {
                     //测交通量
                     carCount++;
                     inFlag = true;
                 }
                 if (data.CarOrNot == 0)
                 {
                     inFlag = false;//还原车辆第一次进入线圈的标志,以便再次计数
                 }
                 //测车速
                 speed += data.Speed;
                 //测时间
                 timeTotal += data.Time;
             }
         }
     }));
 }
예제 #2
0
 protected void OnTimerMsgRecieved(SJRControlCData data)//触发事件方法
 {
     if (TimerMsgRevieced != null)
     {
         TimerMsgRevieced(this, data);
     }
 }
예제 #3
0
        public void Show(object sender, SJRControlCData data)
        {
            this.Invoke(new Action(() =>
            {
                int i;
                //输出车辆信号检测数据,不包含线圈编号
                if (SJRControlC.Cardetect_ButtonState == true && SJRControlC.CardetectLine_ButtonState == true && frequency_CheckBox.Checked == false)
                {
                    if (SJRControlC.CoilCheck_ButtonState == false || SJRControlC.CoilCheckLine_ButtonState == false)
                    {
                        i = dataGridView1.Rows.Add();
                        dataGridView1.Rows[i].Cells[0].Value = DateTime.Now.ToString("hh:mm:ss");
                        dataGridView1.Rows[i].Cells[2].Value = data.CarOrNot;
                    }

                    //输出车辆检测信号和线圈编号检测数据,
                    else if (SJRControlC.CoilCheck_ButtonState == true && SJRControlC.CoilCheckLine_ButtonState == true && frequency_CheckBox.Checked == false)
                    {
                        i = dataGridView1.Rows.Add();
                        dataGridView1.Rows[i].Cells[0].Value = DateTime.Now.ToString("hh:mm:ss");
                        dataGridView1.Rows[i].Cells[1].Value = data.LoopNum;
                        dataGridView1.Rows[i].Cells[2].Value = data.CarOrNot;
                    }
                }
                //输出线圈编号检测数据,
                else if (SJRControlC.CoilCheck_ButtonState == true && SJRControlC.CoilCheckLine_ButtonState)
                {
                    if (frequency_CheckBox.Checked == true)
                    {
                        i = dataGridView1.Rows.Add();
                        dataGridView1.Rows[i].Cells[0].Value = DateTime.Now.ToString("hh:mm:ss");
                        dataGridView1.Rows[i].Cells[1].Value = data.LoopNum;
                    }
                    else if (frequency_CheckBox.Checked == false)
                    {
                        if (SJRControlC.Cardetect_ButtonState == false || SJRControlC.CardetectLine_ButtonState == false)
                        {
                            i = dataGridView1.Rows.Add();
                            dataGridView1.Rows[i].Cells[0].Value = DateTime.Now.ToString("hh:mm:ss");
                            dataGridView1.Rows[i].Cells[1].Value = data.LoopNum;
                        }
                    }
                }

                dataGridView1.FirstDisplayedScrollingRowIndex = dataGridView1.Rows.Count - 1;
            }));
        }
예제 #4
0
 //传给实时测速的数据
 public void Show(object sender, SJRControlCData data)
 {
     this.Invoke(new Action(() =>
     {
         int i;
         //输出速度
         if (SJRControlC.ConnectState == true && SJRControlA.SpeedLine == true)
         {
             if (data.Speed != 0)
             {
                 i = dataGridView1.Rows.Add();
                 dataGridView1.Rows[i].Cells[0].Value = DateTime.Now.ToString("hh:mm:ss");
                 dataGridView1.Rows[i].Cells[1].Value = data.Speed;
             }
         }
         dataGridView1.FirstDisplayedScrollingRowIndex = dataGridView1.Rows.Count - 1;
     }));
 }
예제 #5
0
        //解析数据
        private void GetMsg()
        {
            try
            {
                while (true)
                {
                    //存储二进制数据的数组
                    int[]  lAChannelbits = new int[8];
                    int[]  tHBbits       = new int[8];
                    int[]  tLBbits       = new int[8];
                    int[]  timebits;                       //高低位结合,组成十六位,值范围 =0-65535ms
                    int[]  troubleStatebits = new int[8];
                    byte[] arrRecMsg        = new byte[4]; //接收数据字节数组

                    //十进制
                    byte LAChannel    = 0;                  //线圈编号和通道检测状态
                    byte THB          = 0;                  //系统计时高位
                    byte TLB          = 0;                  //系统计时低位
                    byte TroubleState = 0;                  //通道故障状态

                    int length = client.Receive(arrRecMsg); //接收数据
                    LAChannel    = arrRecMsg[0];
                    THB          = arrRecMsg[1];
                    TLB          = arrRecMsg[2];
                    TroubleState = arrRecMsg[3];

                    GetBit(LAChannel, lAChannelbits);
                    GetBit(THB, tHBbits);
                    GetBit(TLB, tLBbits);
                    GetBit(TroubleState, troubleStatebits);


                    //计算线圈编号
                    loopNumber = lAChannelbits[4] + lAChannelbits[5] * 2 + lAChannelbits[6] * 4 + lAChannelbits[7] * 8;

                    //有无车辆经过
                    carOrNot = lAChannelbits[0];
                    //线圈故障检测
                    if (loopNumber == 1)
                    {
                        troubleOrNot = troubleStatebits[0];
                    }
                    else if (loopNumber == 2)
                    {
                        troubleOrNot = troubleStatebits[1];
                    }

                    speed    = 0;
                    lastTime = 0;
                    if (carOrNot == 1 && inFlag == false)
                    {
                        inTime = System.DateTime.Now.Second * 1000 + System.DateTime.Now.Millisecond;//以毫秒为单位
                        inFlag = true;
                    }
                    if (carOrNot == 0 && inFlag == true)
                    {
                        outTime = System.DateTime.Now.Second * 1000 + System.DateTime.Now.Millisecond; //以毫秒为单位
                        inFlag  = false;                                                               //还原车辆第一次进入线圈的标志

                        //车辆离开线圈时计算时间和车速
                        lastTime = outTime - inTime;
                        speed    = Math.Round((0.3 * 1000 / lastTime), 2);
                    }
                    data = new SJRControlCData {
                        Time = lastTime, LoopNum = loopNumber, CarOrNot = carOrNot, TroubleState = troubleOrNot, Speed = speed
                    };
                    OnMsgRecieved(data);
                    OnTimerMsgRecieved(data);
                }
            }
            catch (SocketException ex)
            {
                client.Close();
                client.Dispose();
                MessageBox.Show(ex.ToString());
            }
        }