internal async void ProcessAsync(object sender, EventArgs e)
            {
                try
                {
                    if (!Enabled)
                    {
                        return;
                    }

                    Logger.Debug("{0}光栅触发", scaleOperator.Name);

                    if (IsBusy)
                    {
                        return;
                    }
                    IsBusy = true;
                    Busy?.Invoke(this, new EventArgs());

                    await scaleOperator.SwitchRelayAsync(false);//turn red

                    double        weight = 0;
                    GetWtResponse resp   = null;
                    for (int i = 1; i <= 5; i++)
                    {
                        Logger.Debug("[{0}]请求重量", scaleOperator.Name);
                        resp = await scaleOperator.RestClient.GetWtAsync(scaleOperator.ScaleIP, scaleOperator.InOrOut.ToString());

                        Logger.Debug("[{0}]返回重量{1}", scaleOperator.Name, resp.wt_num);

                        /*GetWtResponse resp = new GetWtResponse()
                         * {
                         *  status = "1",
                         *  tk_no = "辽A 88888888",
                         *  wt_num = "1000.88"
                         * };*/
                        if (resp.status == "0")
                        {
                            //Progress?.Invoke(this, new ProgressEventArgs("请求重量失败"));
                            Logger.Warn("称重失败");
                            await Task.Delay(1000);

                            continue;
                        }
                        var w = Convert.ToDouble(resp.wt_num);
                        if (w > 1000)
                        {
                            Logger.Debug("称重大于1000");
                            weight = w;
                            break;
                        }
                        await Task.Delay(1000);
                    }
                    if (weight < 1000)
                    {
                        Logger.Debug("称重小于1000, 开始抬杆");
                        Logger.Debug("[{0}]请求抬杆", scaleOperator.Name);
                        GatePassResponse gpResp = await scaleOperator.RestClient.GatePassAsync(scaleOperator.ScaleIP, scaleOperator.InOrOut.ToString(), resp.tk_no, resp.wt_num);

                        Logger.Debug("[{0}]返回抬杆", scaleOperator.Name);

                        /*GatePassResponse gpResp = new GatePassResponse()
                         * {
                         *  status = 1
                         * };*/
                        if (gpResp.status == "0")//抬杆失败
                        {
                            //Progress?.Invoke(this, new ProgressEventArgs("抬杆失败"));
                            Logger.Warn("抬杆失败:" + gpResp.reason);
                            //SwitchRelay(false);//no need to call this, it's already red
                        }
                        else if (gpResp.status == "1")
                        {
                            Logger.Info("抬杆成功");
                            //Progress?.Invoke(this, new ProgressEventArgs("抬杆成功"));
                            //SwitchRelay(true);
                        }
                        FakeCar?.Invoke(this, new EventArgs());
                    }
                }
                catch (Exception ex)
                {
                    Error?.Invoke(this, new EventArgs());
                    Logger.Debug("处理前光栅事件发生异常:{0}", ex.Message);
                }
                finally
                {
                    IsBusy = false;
                }
            }
            internal async void ProcessAsync(object sender, EventArgs e)
            {
                try
                {
                    if (!Enabled)
                    {
                        return;
                    }

                    Logger.Debug("{0}按钮触发", scaleOperator.Name);
                    if (IsBusy)
                    {
                        return;
                    }
                    IsBusy = true;

                    //Progress?.Invoke(this, new ProgressEventArgs("开始工作"));
                    Logger.Debug("开始工作");

                    Busy?.Invoke(this, new EventArgs());

                    if (!scaleOperator.IsGratingsOff())
                    {
                        var config = new LEDMessageShowConfig
                        {
                            FontSize  = 0,
                            ShowStyle = 3,
                            ShowSpeed = 8
                        };
                        scaleOperator.Display("调整车辆", config);
                        NeedAdjust?.Invoke(this, new EventArgs());
                        return;
                    }

                    //call remote service to get weight and plate number
                    //Progress?.Invoke(this, new ProgressEventArgs("正在请求重量"));
                    Logger.Debug("[{0}]请求重量", scaleOperator.Name);
                    GetWtResponse resp = await scaleOperator.RestClient.GetWtAsync(scaleOperator.ScaleIP, scaleOperator.InOrOut.ToString());

                    Logger.Debug("[{0}]返回重量{1}", scaleOperator.Name, resp.wt_num);

                    /*GetWtResponse resp = new GetWtResponse()
                     * {
                     *  status = 1,
                     *  tk_no = "辽A 88888888",
                     *  wt_num = 888.88
                     * };*/
                    if (resp.status == "0")
                    {
                        //Progress?.Invoke(this, new ProgressEventArgs("请求重量失败"));
                        Logger.Warn("称重失败");
                        return;
                    }

                    //Progress?.Invoke(this, new ProgressEventArgs("正在输出到显示屏"));
                    string text = String.Format(scaleOperator.LEDOptions.CPZLMessage.Template, resp.tk_no, resp.wt_num);
                    if (!scaleOperator.Display(text, scaleOperator.LEDOptions.CPZLMessage.ShowConfig))
                    {
                        //Progress?.Invoke(this, new ProgressEventArgs("输出到显示屏失败"));
                        Logger.Warn("LED显示失败");
                        //return;
                    }

                    //Progress?.Invoke(this, new ProgressEventArgs("正在抬杆"));
                    Logger.Debug("[{0}]请求抬杆", scaleOperator.Name);
                    GatePassResponse gpResp = await scaleOperator.RestClient.GatePassAsync(scaleOperator.ScaleIP, scaleOperator.InOrOut.ToString(), resp.tk_no, resp.wt_num);

                    Logger.Debug("[{0}]返回抬杆", scaleOperator.Name);

                    /*GatePassResponse gpResp = new GatePassResponse()
                     * {
                     *  status = 1
                     * };*/
                    if (gpResp.status == "0")//抬杆失败
                    {
                        //Progress?.Invoke(this, new ProgressEventArgs("抬杆失败"));
                        Logger.Warn("抬杆失败:" + gpResp.reason);
                        //SwitchRelay(false);//no need to call this, it's already red
                        return;
                    }

                    Logger.Info("抬杆成功:");
                    //Progress?.Invoke(this, new ProgressEventArgs("抬杆成功"));

                    Succeed?.Invoke(this, new EventArgs());
                }
                catch (Exception ex)
                {
                    //Progress?.Invoke(this, new ProgressEventArgs("发生错误:" + ex.Message));
                    Logger.Warn("{0}上的本次操作失败:{1}", scaleOperator.Name, ex.ToString());
                }
                finally
                {
                    IsBusy = false;
                }
            }