Пример #1
0
        public static async void DoWork(string commandType, int linkId, int slotId, int modbusAddress = 1)
        {
            try
            {
                var            messageString = "";
                ControlRequest job           = null;
                messageString = DebugHelper.MockRequest(commandType, 1, modbusAddress, "Device", slotId, linkId);
                job           = messageString.FromJson <ControlRequest>();

                if (job != null)
                {
                    if (useLinkId)
                    {
                        lock (ClientInfo.locker)
                        {
                            ClientInfo.RequestTime = DateTime.Now;
                            ClientInfo.LinkId      = job.LinkId;
                        }
                    }
                    $"{ job.CommandType}:{job.DeviceName}:{job.DeviceId}:{job.GroupName}:{job.ModbusAddress}".Info();

                    switch (job.CommandType)
                    {
                        #region //心跳包

                    case "Heartbeat":
                        //try
                        //{
                        //    //await client.ReadHoldingRegisters(255, 1, 1);
                        //}
                        //catch
                        //{
                        //    // ignored
                        //}
                        break;

                        #endregion

                        #region                         //浙江精华
                    case "Get_ZJJH_WTPM_TrunkPressure": //读取配水间干压
                        await Vendor.ZJJH.Box.Get_ZJJH_WTPM_TrunkPressure(client, redisClient, messageString);

                        break;

                    case "Get_ZJJH_WII_WaterInjectingInstrument":     //读取注水仪数据
                        await Vendor.ZJJH.Box.Get_ZJJH_WII_WaterInjectingInstrument(client, redisClient, messageString);

                        break;

                    case "Post_ZJJH_WII_InjectionAllocation":     //下发配注量
                        await Vendor.ZJJH.Box.Post_ZJJH_WII_InjectionAllocation(client, redisClient, messageString);

                        break;

                    case "Post_ZJJH_WII_TubePressure":     //下发管压设定
                        await Vendor.ZJJH.Box.Post_ZJJH_WII_TubePressure(client, redisClient, messageString);

                        break;
                        #endregion

                        #region                         //北京必创
                    case "Get_BJBC_WTPM_TrunkPressure": //读取配水间干压
                        await Box.Get_BJBC_WTPM_TrunkPressure(client, redisClient, messageString);

                        break;

                    case "Get_BJBC_WII_WaterInjectingInstrument":     //读取注水仪数据
                        await Box.Get_BJBC_WII_WaterInjectingInstrument(client, redisClient, messageString);

                        break;

                    case "Post_BJBC_WII_InjectionAllocation":     //下发配注量
                        await Box.Post_BJBC_WII_InjectionAllocation(client, redisClient, messageString);

                        break;
                        #endregion

                        #region                         //西安国仪
                    case "Get_XAGY_WTPM_TrunkPressure": //读取配水间干压
                        await Vendor.XAGY.Box.Get_XAGY_WTPM_TrunkPressure(client, redisClient, messageString);

                        break;

                    case "Get_XAGY_WII_WaterInjectingInstrument":     //读取注水仪数据
                        await Vendor.XAGY.Box.Get_XAGY_WII_WaterInjectingInstrument(client, redisClient, messageString);

                        break;

                    case "Post_XAGY_WII_InjectionAllocation":     //下发配注量
                        await Vendor.XAGY.Box.Post_XAGY_WII_InjectionAllocation(client, redisClient, messageString);

                        break;

                    case "Post_XAGY_WII_TubePressure":     //下发管压设定
                        await Vendor.XAGY.Box.Post_XAGY_WII_TubePressure(client, redisClient, messageString);

                        break;
                        #endregion

                        #region                       //中科奥维
                    case "Get_ZKAW_IndicatorDiagram": // 读取无线功图
                        await IndicatorDiagram.Get_ZKAW_IndicatorDiagram(client, redisClient, messageString);

                        break;
                        #endregion

                        #region //西安贵隆

                        #region wm1000
                    case "Get_XAGL_WM1000YXGT_IndicatorDiagram":     // 读取有线功图
                        await WM1000YXGT.Get_XAGL_WM1000YXGT_IndicatorDiagram(client, redisClient,
                                                                              messageString);

                        break;

                    case "Get_XAGL_WM1000DLT_CurrentDiagram":     // 读取电流图
                        await WM1000DLT.Get_XAGL_WM1000DLT_CurrentDiagram(client, redisClient,
                                                                          messageString);

                        break;

                    case "Get_XAGL_WM1000DB_PowerMeter":     // 读电参
                        await WM1000DB.Get_XAGL_WM1000DB_PowerMeter(client, redisClient,
                                                                    messageString);

                        break;

                    case "Post_XAGL_WM1000KZG_StartWell":     // 开井操作
                        await WM1000KZG.Post_XAGL_WM1000KZG_StartWell(client, redisClient,
                                                                      messageString);

                        break;

                    case "Post_XAGL_WM1000KZG_StopWell":     // 关井操作
                        await WM1000KZG.Post_XAGL_WM1000KZG_StopWell(client, redisClient,
                                                                     messageString);

                        break;

                    case "Get_XAGL_WM1000KZG_ControllerStatus":     // 读变频器运行参数
                        await WM1000KZG.Get_XAGL_WM1000KZG_ControllerStatus(client, redisClient,
                                                                            messageString);

                        break;

                        #endregion

                        #region  wm2000

                    case "Get_XAGL_WM2000YXGT_IndicatorDiagram":     // 读取有线功图
                        await WM2000YXGT.Get_XAGL_WM2000YXGT_IndicatorDiagram(client, redisClient, messageString);

                        break;

                    case "Get_XAGL_WM2000GLT_PowerDiagram":     // 读取功率图
                        await WM2000GLT.Get_XAGL_WM2000GLT_PowerDiagram(client, redisClient, messageString);

                        break;

                    case "Get_XAGL_WM2000DLT_CurrentDiagram":     // 读取电流图
                        await WM2000DLT.Get_XAGL_WM2000DLT_CurrentDiagram(client, redisClient, messageString);

                        break;

                    case "Get_XAGL_WM2000DB_PowerMeter":     // 读电参
                        await WM2000DB.Get_XAGL_WM2000DB_PowerMeter(client, redisClient, messageString);

                        break;

                    case "Post_XAGL_WM2000KZG_StartWell":     // 开井操作
                        WM2000KZG.Post_XAGL_WM2000KZG_StartWell(client, redisClient, messageString);
                        break;

                    case "Post_XAGL_WM2000KZG_StopWell":     // 关井操作
                        WM2000KZG.Post_XAGL_WM2000KZG_StopWell(client, redisClient, messageString);
                        break;

                    case "Post_XAGL_WM2000KZG_StrokeFrequency":     // 下发冲次操作
                        await WM2000KZG.Post_XAGL_WM2000KZG_StrokeFrequency(client, redisClient, messageString);

                        break;

                    case "Get_XAGL_WM2000KZG_ControllerParameter":     // 读电机参数
                        await WM2000KZG.Get_XAGL_WM2000KZG_ControllerParameter(client, redisClient, messageString);

                        break;

                    case "Get_XAGL_WM2000KZG_ControllerStatus":     // 读变频器运行参数
                        await WM2000KZG.Get_XAGL_WM2000KZG_ControllerStatus(client, redisClient, messageString);

                        break;

                    case "Get_XAGL_PumpPressure":     // 读取泵压
                        await PumpPressure.Get_XAGL_PumpPressure(client, redisClient, messageString);

                        break;

                        #endregion

                        #region wm3000

                    case "Get_XAGL_WM3000WXGT_IndicatorDiagram":     // 读取无线功图
                        await WM3000WXGT.Get_XAGL_WM3000WXGT_IndicatorDiagram(client, redisClient,
                                                                              messageString);

                        break;

                    case "Get_XAGL_WM3000YXGT_IndicatorDiagram":     // 读取有线功图
                        await WM3000YXGT.Get_XAGL_WM3000YXGT_IndicatorDiagram(client, redisClient, messageString);

                        break;

                    case "Get_XAGL_WM3000GLT_PowerDiagram":     // 读取功率图
                        await WM3000GLT.Get_XAGL_WM3000GLT_PowerDiagram(client, redisClient, messageString);

                        break;

                    case "Get_XAGL_WM3000DLT_CurrentDiagram":     // 读取电流图
                        await WM3000DLT.Get_XAGL_WM3000DLT_CurrentDiagram(client, redisClient, messageString);

                        break;

                    case "Get_XAGL_WM3000DB_PowerMeter":     // 读电参
                        await WM3000DB.Get_XAGL_WM3000DB_PowerMeter(client, redisClient, messageString);

                        break;

                    case "Post_XAGL_WM3000KZG_StartWell":     // 开井操作
                        WM3000KZG.Post_XAGL_WM3000KZG_StartWell(client, redisClient, messageString);
                        break;

                    case "Post_XAGL_WM3000KZG_StopWell":     // 关井操作
                        WM3000KZG.Post_XAGL_WM3000KZG_StopWell(client, redisClient, messageString);
                        break;

                    case "Post_XAGL_WM3000KZG_StrokeFrequency":     // 下发冲次操作
                        await WM3000KZG.Post_XAGL_WM3000KZG_StrokeFrequency(client, redisClient, messageString);

                        break;

                    case "Get_XAGL_WM3000KZG_ControllerParameter":     // 读电机参数
                        await WM3000KZG.Get_XAGL_WM3000KZG_ControllerParameter(client, redisClient, messageString);

                        break;

                    case "Get_XAGL_WM3000KZG_ControllerStatus":     // 读变频器运行参数
                        await WM3000KZG.Get_XAGL_WM3000KZG_ControllerStatus(client, redisClient, messageString);

                        break;

                        #endregion

                        #endregion

                        #region                         //西安安森
                    case "Get_XAAS_WTPM_TrunkPressure": //读取配水间干压
                        if (useLinkId)
                        {
                            var mclient = TcpBridge.ManyClients.Values.FirstOrDefault(c => c.LinkId.HasValue && c.LinkId == job.LinkId);
                            if (mclient != null)
                            {
                                await Vendor.XAAS.Box.Get_XAAS_WTPM_TrunkPressure(client, redisClient, messageString);
                            }
                            else
                            {
                                $"读取{job.CommandType},linkid:{job.LinkId}不存在".Info();
                            }
                        }
                        else
                        {
                            await Vendor.XAAS.Box.Get_XAAS_WTPM_TrunkPressure(client, redisClient, messageString);
                        }
                        break;

                    case "Get_XAAS_WII_WaterInjectingInstrument":     //读取注水仪数据

                        if (useLinkId)
                        {
                            var mclient = TcpBridge.ManyClients.Values.FirstOrDefault(c => c.LinkId.HasValue && c.LinkId == job.LinkId);
                            if (mclient != null)
                            {
                                await Vendor.XAAS.Box.Get_XAAS_WII_WaterInjectingInstrument(client, redisClient, messageString);
                            }
                            else
                            {
                                $"读取{job.CommandType},linkid:{job.LinkId}不存在".Info();
                            }
                        }
                        else
                        {
                            await Vendor.XAAS.Box.Get_XAAS_WII_WaterInjectingInstrument(client, redisClient, messageString);
                        }
                        break;

                    case "Post_XAAS_WII_InjectionAllocation":     //下发配注量
                        await Vendor.XAAS.Box.Post_XAAS_WII_InjectionAllocation(client, redisClient, messageString);

                        break;

                    case "Post_XAAS_WII_TubePressure":     //下发管压设定
                        await Vendor.XAAS.Box.Post_XAAS_WII_TubePressure(client, redisClient, messageString);

                        break;


                    case "Get_XAAS_WII_IndicatorDiagram":     // 读取有线功图
                        await Vendor.XAAS.YXGT.Get_XAAS_WII_IndicatorDiagram(client, redisClient, messageString);

                        break;

                    case "Get_XAAS_WII_PowerDiagram":     // 读取功率图
                        await Vendor.XAAS.GLT.Get_XAAS_WII_PowerDiagram(client, redisClient, messageString);

                        break;

                    case "Get_XAAS_WII_CurrentDiagram":     // 读取电流图
                        await Vendor.XAAS.DLT.Get_XAAS_WII_CurrentDiagram(client, redisClient, messageString);

                        break;

                    case "Get_XAAS_WII_PowerMeter":     // 读电参
                        await Vendor.XAAS.DB.Get_XAAS_WII_PowerMeter(client, redisClient, messageString);

                        break;

                    case "Post_XAAS_WII_StartWell":     // 开井操作
                        Vendor.XAAS.KZG.Post_XAAS_WII_StartWell(client, redisClient, messageString);
                        break;

                    case "Post_XAAS_WII_StopWell":     // 关井操作
                        Vendor.XAAS.KZG.Post_XAAS_WII_StopWell(client, redisClient, messageString);
                        break;

                        #endregion

                        #region                         //延安华圣
                    case "Get_YAHS_WTPM_TrunkPressure": //读取配水间干压

                        var mClient = TcpBridge.ManyClients.Values.FirstOrDefault(c => c.LinkId.HasValue && c.LinkId == job.LinkId);
                        if (mClient != null)
                        {
                            await Vendor.YAHS.Box.Get_YAHS_WTPM_TrunkPressure(client, redisClient, messageString);
                        }
                        else
                        {
                            $"读取{job.CommandType},linkid:{job.LinkId}不存在".Info();
                        }
                        break;

                    case "Get_YAHS_WII_WaterInjectingInstrument":     //读取注水仪数据

                        mClient = TcpBridge.ManyClients.Values.FirstOrDefault(c => c.LinkId.HasValue && c.LinkId == job.LinkId);
                        if (mClient != null)
                        {
                            await Vendor.YAHS.Box.Get_YAHS_WII_WaterInjectingInstrument(client, redisClient, messageString);
                        }
                        else
                        {
                            $"读取{job.CommandType},linkid:{job.LinkId}不存在".Info();
                        }

                        break;

                    case "Post_YAHS_WII_InjectionAllocation":     //下发配注量
                        await Vendor.YAHS.Box.Post_YAHS_WII_InjectionAllocation(client, redisClient, messageString);

                        break;

                    case "Post_YAHS_WII_TubePressure":     //下发管压设定
                        await Vendor.YAHS.Box.Post_YAHS_WII_TubePressure(client, redisClient, messageString);

                        break;
                        #endregion

                        #region                          //洛阳乾禾
                    case "Get_LYQH_WG_IndicatorDiagram": //读取功图
                        await GT.Get_LYQH_WG_IndicatorDiagram(client, redisClient, messageString);

                        break;

                    case "POST_LYQH_WG_IndicatorDiagramSetting":     //设置功图配置
                        await GT.POST_LYQH_WG_IndicatorDiagramSetting(client, redisClient, messageString);

                        break;

                    case "Post_LYQH_KZG_StartWell":     // 开井操作
                        await KZG.POST_LYQH_KZG_StartWell(client, redisClient, messageString);

                        break;

                    case "POST_LYQH_KZG_StopWell":     // 关井操作
                        await KZG.POST_LYQH_KZG_StopWell(client, redisClient, messageString);

                        break;

                    case "Get_LYQH_DB_PowerMeter":     //电表
                        await DB.Get_LYQH_DB_PowerMeter(client, redisClient, messageString);

                        break;

                    case "Get_LYQH_DLT_CurrentDiagram":     //电流图
                        await DLT.Get_LYQH_DLT_CurrentDiagram(client, redisClient, messageString);

                        break;

                    case "Get_LYQH_GLT_PowerDiagram":     //功率图
                        await GLT.Get_LYQH_GLT_PowerDiagram(client, redisClient, messageString);

                        break;

                    case "Get_LYQH_DYM_Movefluidlevel":     //动液面
                        await DYM.Get_LYQH_DYM_Movefluidlevel(client, redisClient, messageString);

                        break;

                    case "POST_LYQH_DYMSetting":     //设置动液面
                        await DYM.POST_LYQH_DYMSetting(client, redisClient, messageString);

                        break;

                    case "Get_LYQH_GJL_Tankmeasure":     //液位罐计量
                        await GJL.Get_LYQH_GJL_Tankmeasure(client, redisClient, messageString);

                        break;

                    case "POST_LYQH_GJLSetting":     //液位罐设置
                        await GJL.POST_LYQH_GJLSetting(client, redisClient, messageString);

                        break;

                    case "POST_LYQH_DBSetting":     //电参设置
                        await DB.POST_LYQH_DBSetting(client, redisClient, messageString);

                        break;

                    case "POST_LYQH_GTShiShiCaiJI":     //功图实时采集
                        await GT.POST_LYQH_GTShiShiCaiJI(client, redisClient, messageString);

                        break;

                    case "POST_LYQH_DYMShiShiCaiJI":     //动液面实时采集
                        await DYM.POST_LYQH_DYMShiShiCaiJI(client, redisClient, messageString);

                        break;

                    case "Get_LYQH_KZG_StartWellTime":     //读取开井时间
                        await KZG.Get_LYQH_KZG_StartWellTime(client, redisClient, messageString);

                        break;

                    case "POST_LYQH_DB_ShiShiCaiJI":
                        await DB.POST_LYQH_DB_ShiShiCaiJI(client, redisClient, messageString);

                        break;

                    case "POST_LYQH_GJLShiShiCaiJI":
                        await GJL.POST_LYQH_GJLShiShiCaiJI(client, redisClient, messageString);

                        break;


                        #endregion

                        #region 德汇活塞式流量计
                    case "Get_DEHUI_LLJ":     //读取流量计
                        await LLJ.Get_DEHUI_LLJ(client, redisClient, messageString);

                        break;
                        #endregion

                    default:
                        Logger.Error("Default:" + job.CommandType);
                        break;
                    }
                }
                else
                {
                    Thread.Sleep(100);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Task.Run[1-1]:" + ex.Message);
                Console.WriteLine("Task.Run[1-1]:" + ex.StackTrace);
            }
        }