private BX4KLEDControler GetAController(byte commport, long baudRate)
 {
     if (_ControllersLocker == null)
     {
         _ControllersLocker = new object();
     }
     lock (_ControllersLocker)
     {
         if (_Controllers != null && _Controllers.Count > 0)
         {
             foreach (BX4KLEDControler ctrl in _Controllers)
             {
                 if (ctrl.Port == commport)
                 {
                     return(ctrl);
                 }
             }
         }
         BX4KLEDControler bx = new BX4KLEDControler(commport, baudRate);
         if (_Controllers == null)
         {
             _Controllers = new List <BX4KLEDControler>();
         }
         _Controllers.Add(bx);
         return(bx);
     }
 }
        /// <summary>
        /// 更新所有户外屏的亮度
        /// </summary>
        public void SetBrightness()
        {
            //这里使用新的OutDoorLed集合是因为OutDoorLeds在发送数据过程中有可能被修改,导致foreach错误
            List <OutDoorLed> leds = new List <OutDoorLed>();

            leds.AddRange(OutDoorLeds);
            //这个方法采用每次都打开和关闭串口,则如果两个屏串口一样时也可以依次更新。
            //如果采用打开串口后不关闭,则下一个屏属于同一个串口的就会打开此串口失败,导致不能更新屏。
            foreach (OutDoorLed led in leds)
            {
                BX4KLEDControler ledController = GetAController(led.Commport, led.Baud);
                try
                {
                    ledController.Open();
                    ledController.SetBrightness((short)led.CarLedAddress, 0x51, led.Brightness);
                    if (AppSettings.CurrentSetting.Debug)
                    {
                        Ralid.GeneralLibrary.LOG.FileLog.Log("户外屏", string.Format("发屏亮度指令给小车屏 地址{0}", led.CarLedAddress));
                    }
                    Thread.Sleep(2000);
                    ledController.SetBrightness((short)led.MotorLedAddress, 0x51, led.Brightness);
                    if (AppSettings.CurrentSetting.Debug)
                    {
                        Ralid.GeneralLibrary.LOG.FileLog.Log("户外屏", string.Format("发屏亮度指令给电单车屏 地址{0}", led.MotorLedAddress));
                    }
                    Thread.Sleep(2000);
                }
                catch (Exception ex)
                {
                    Ralid.GeneralLibrary.ExceptionHandling.ExceptionPolicy.HandleException(ex);
                }
            }
        }
 private void btnShowOnLed_Click(object sender, EventArgs e)
 {
     if (comport.ComPort > 0)
     {
         if (_bx4kController != null)
         {
             _bx4kController.Close();
         }
         int baud = comBaud.SelectedIndex == 0 ? 9600 : 57600;
         _bx4kController = new BX4KLEDControler(comport.ComPort, baud);
         if (!_bx4kController.Open())
         {
             MessageBox.Show("串口打开失败");
             return;
         }
         if (txtAddress1.IntergerValue > 0)
         {
             List <BX4KDynamicArea> areas = GetCarLedAreas();
             _bx4kController.DynamicDisplay((short)txtAddress1.IntergerValue, 0x51, true, areas);
             System.Threading.Thread.Sleep(100);
         }
         if (txtAddress2.IntergerValue > 0)
         {
             List <BX4KDynamicArea> areas = GetBikeLedAreas();
             _bx4kController.DynamicDisplay((short)txtAddress2.IntergerValue, 0x51, true, areas);
         }
     }
 }
        /// <summary>
        /// 在所有户外屏上显示车位信息
        /// </summary>
        public void ShowLed()
        {
            //这里使用新的OutDoorLed集合是因为OutDoorLeds在发送数据过程中有可能被修改,导致foreach错误
            List <OutDoorLed> leds = new List <OutDoorLed>();

            leds.AddRange(OutDoorLeds);

            //这个方法采用每次都打开和关闭串口,则如果两个屏串口一样时也可以依次更新。
            //如果采用打开串口后不关闭,则下一个屏属于同一个串口的就会打开此串口失败,导致不能更新屏。
            foreach (OutDoorLed led in leds)
            {
                BX4KLEDControler ledController = GetAController(led.Commport, led.Baud);
                try
                {
                    ledController.Open();
                    List <BX4KDynamicArea> areas = GetAreas(0);
                    if (areas != null && areas.Count > 0)
                    {
                        ledController.DynamicDisplay((short)led.CarLedAddress, 0x51, true, areas);
                        if (AppSettings.CurrentSetting.Debug)
                        {
                            Ralid.GeneralLibrary.LOG.FileLog.Log("户外屏", string.Format("发屏更新指令给小车屏 地址{0} 车位{1} {2} {3}",
                                                                                      led.CarLedAddress, areas[0].Text, areas[1].Text, areas[2].Text));
                        }
                        Thread.Sleep(2000);
                    }

                    areas = GetAreas(1);
                    if (areas != null && areas.Count > 0)
                    {
                        ledController.DynamicDisplay((short)led.MotorLedAddress, 0x51, true, areas);
                        if (AppSettings.CurrentSetting.Debug)
                        {
                            Ralid.GeneralLibrary.LOG.FileLog.Log("户外屏", string.Format("发屏更新指令给电单车屏 地址{0} 车位{1} {2} {3}",
                                                                                      led.MotorLedAddress, areas[0].Text, areas[1].Text, areas[2].Text));
                        }
                        Thread.Sleep(2000);
                    }
                }
                catch (Exception ex)
                {
                    Ralid.GeneralLibrary.ExceptionHandling.ExceptionPolicy.HandleException(ex);
                }
            }
        }
Beispiel #5
0
        private void btnApply_Click(object sender, EventArgs e)
        {
            if (_bx4kController != null)
            {
                _bx4kController.Close();
            }
            if (!CheckInput())
            {
                return;
            }
            _bx4kController = new BX4KLEDControler(comport.ComPort, 57600);
            if (!_bx4kController.Open())
            {
                MessageBox.Show("串口打开失败");
                return;
            }
            BX4KDynamicArea        area  = GetAreaFromInput();
            List <BX4KDynamicArea> areas = new List <BX4KDynamicArea>();

            areas.Add(area);
            _bx4kController.DynamicDisplay((short)txtAddress.IntergerValue, 0x51, true, areas);
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (comport.ComPort > 0)
            {
                int baud = comBaud.SelectedIndex == 0 ? 9600 : 57600;
                if (_bx4kController != null)
                {
                    _bx4kController.Close();
                }
                _bx4kController = new BX4KLEDControler(comport.ComPort, baud);
                if (!_bx4kController.Open())
                {
                    MessageBox.Show("串口打开失败");
                    return;
                }
                for (int i = txtFrom.IntergerValue; i < txtTo.IntergerValue; i += 2)
                {
                    List <BX4KDynamicArea> areas = GetCarLedAreas();
                    foreach (BX4KDynamicArea area in areas)
                    {
                        Random rd     = new Random();
                        int    vacant = rd.Next(100, 800);
                        area.Text = @"\FE000\C3" + vacant.ToString("D3");
                    }
                    _bx4kController.DynamicDisplay((short)i, 0x51, true, areas);
                    System.Threading.Thread.Sleep(500);

                    areas = GetBikeLedAreas();
                    foreach (BX4KDynamicArea area in areas)
                    {
                        Random rd     = new Random();
                        int    vacant = rd.Next(100, 800);
                        area.Text = @"\FE000\C3" + vacant.ToString("D3");
                    }
                    _bx4kController.DynamicDisplay((short)(i + 1), 0x51, true, areas);
                    System.Threading.Thread.Sleep(500);
                }
            }
        }