我这个用C#写的windows服务 quartz定时执行,就这SPM33执行一段时间不执行了,其他的任务还在执行,这还导致服务器CPU上升,这是啥原因

qq_37978691 qq_37978691 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

 

 

 

 

 

 

  
        [Obsolete]
        public void Execute(IJobExecutionContext context)
        {
            try
            {
                system_dateTime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                //初始化设备列表
                InitSubDeviceList();
                //存储日志
                List<RunLogEntity> _runLogList = new List<RunLogEntity>();
                //按照 采集站IP、采集站Port 进行分组,读取4G模块数据
                var _group = treeSubDeviceList.GroupBy(a => new { a.StationIP, a.StationPort });
                foreach (var _ in _group)
                {
                    StationGroupDto groupDto = new StationGroupDto()
                    {
                        StationIP = _.Key.StationIP,
                        StationPort = _.Key.StationPort,
                        DeviceList = _.ToList()
                    };
                    ReadSPM33Data_Gai(groupDto, out List<RunLogEntity> runLogList);
                    _runLogList.AddRange(runLogList);
                }
                //运行日志入库
                if (_runLogList.Count() > 0)
                {
                    runLogService.InsertRunLogList(_runLogList);
                }
            }
            catch (Exception ex)
            {
                //新增运行日志异常信息
                RunLogEntity runLogEntity = new RunLogEntity()
                {
                    ID = Guid.NewGuid(),
                    LogTime = DateTime.Now,
                    LogCategory = (int)LogCategoryEnum.数据采集日志,
                    LogContent = "派诺SPM33计量仪表启动失败," + ex.Message,
                    RunState = (int)ProgramStateEnum.采数程序异常
                };
                runLogService.InsertRunLog(runLogEntity);
            }
        }
[Obsolete]


          [Obsolete]
        public void ReadSPM33Data_Gai(StationGroupDto groupDto, out List<RunLogEntity> runLogList_)
        {
            List<RunLogEntity> runLogList = new List<RunLogEntity>();
            List<PointData> points = new List<PointData>();
            try
            {
                TcpClient tcpClient = new TcpClient();
                tcpClient.Connect(groupDto.StationIP, groupDto.StationPort);
                ModbusSerialMaster master = ModbusSerialMaster.CreateRtu(tcpClient);
                //设置读取超时时间
                master.Transport.ReadTimeout = 2000;
                master.Transport.Retries = 1;
                master.Transport.WaitToRetryMilliseconds = 150;
                if (tcpClient.Connected)
                {
                    foreach (var deviceInfo in groupDto.DeviceList)
                    {
                        if (deviceInfo.PointList.Count() > 0)
                        {
                            try
                            {
                                var data_List = master.ReadHoldingRegisters(Convert.ToByte(deviceInfo.SlaveID), Convert.ToUInt16(0), Convert.ToUInt16(40));
                                foreach (var item in deviceInfo.PointList)
                                {
                                    double Value = 0;
                                    if (item.DataType == (int)DataTypeEnum.二进制16位)
                                    {
                                        int index = Convert.ToInt32(item.Address);
                                        Value = handleDataType(item.DataBit, data_List[index]);
                                    }
                                    else
                                    {
                                        if (item.IsHighLowBit)
                                        {
                                            int index = Convert.ToInt32(item.Address);
                                            Value = CommonHelper.DealWidthLowHighHex_unSigned(data_List[index + 1], data_List[index]) * item.Multiple * item.Ratio;
                                        }
                                        else
                                        {
                                            int index = Convert.ToInt32(item.Address);
                                            Value = data_List[index] * item.Multiple * item.Ratio;
                                        }
                                    }
                                    var point = PointData
                                                 .Measurement(deviceInfo.ParentCode)
                                                 .Tag("PointTag", item.PointTag.ToString())
                                                 .Tag("PointID", item.ID.ToString())
                                                 .Field("Value", Math.Round(Value, 4))
                                                 .Timestamp(TimeZoneInfo.ConvertTimeToUtc(system_dateTime), WritePrecision.Ns);
                                    points.Add(point);

                                    //验证数据是否报警
                                    alarmRecordService.VerifyAlarm(deviceInfo, item, thresholdList, Value);
                                }
                                //通讯正常
                                var entity = breakEventService.WriteCommunicateEvent(deviceInfo, null, 1, deviceInfo.PointList.Count().ToString());
                                runLogList.Add(entity);
                            }
                            catch (Exception ex)
                            {
                                // 通讯异常
                                var entity = breakEventService.WriteCommunicateEvent(deviceInfo, null, 2, ex.Message);
                                runLogList.Add(entity);
                            }
                            //线程休眠
                            Thread.Sleep(1);
                        }
                    }
                }
                else
                {
                    // tcp/ip 连接失败
                    var entity = breakEventService.WriteCommunicateEvent(null, groupDto, 3, "请检查网络通讯环境!");
                    runLogList.Add(entity);
                }
                //释放寄存器资源
                master.Dispose();
                //释放tcp握手资源
                tcpClient.Close();
                //线程休眠
                Thread.Sleep(1);
                //运行日志推出
                runLogList_ = runLogList;
                //往influxdb写入数据
                if (points.Count > 0)
                {
                    helper.WriteData(points);
                }
            }
            catch (Exception ex)
            {
                //新增运行日志异常信息
                RunLogEntity runLogEntity = new RunLogEntity()
                {
                    ID = Guid.NewGuid(),
                    LogTime = DateTime.Now,
                    LogCategory = (int)LogCategoryEnum.数据采集日志,
                    LogContent = "派诺SPM33计量仪表设备数据采集失败," + ex.Message,
                    RunState = (int)ProgramStateEnum.采数程序异常
                };
                runLogService.InsertRunLog(runLogEntity);
                //运行日志推出
                runLogList_ = new List<RunLogEntity>();
            }

        }

 

...全文

相关推荐

C# Windows服务开发与部署实战

在企业级应用开发中,Windows服务是一种特殊的应用程序,它在系统后台运行,不直接与用户交互。利用C#进行Windows服务开发具有许多优势和特点:集成开发环境(IDE)的支持:Visual Studio为C#开发提供了强大的IDE支持,包括项目模板、调试工具以及丰富的库,极大地简化了Windows服务的开发过程。面向对象编程(OOP)的优势:C#是面向对象的语言,支持封装、继承和多态等OOP概念,使得Windows服务的代码结构更清晰,易于维护和扩展。健壮的异常处理机制。

侯昂

C#写的Windows任务管理器源码包,带x86/x64双架构可执行文件

直接能跑的C#版任务管理器,用WinForms做的界面,功能包括进程列表实时刷新、CPU和内存占用率图表、强制结束进程、启动新任务、中文显示支持,图标也已嵌入。底层调用.NET原生System.Diagnostics.Process类操作进程,不依赖第三方库,Windows 7到11都能用。压缩包里有完整的Visual Studio解决方案(TaskMgr.sln)、项目文件、窗体设计代码(Form1.cs/Form1.Designer.cs)、资源文件(图标、字符串、设置)、以及两个编译好的发布版本:Re

奶茶API

C#实现Windows服务及进程监控解决方案

Windows服务是Windows操作系统中的一种特殊应用程序,它们被设计为在后台运行,不需要用户登录即可执行任务,例如系统服务、数据库服务、打印服务等。这些服务为用户提供了一个稳定且灵活的操作环境。管理Windows服务是系统维护和故障排除不可或缺的一部分。Windows服务是在后台运行的应用程序,它们可以启动和停止,不受用户登录状态的影响。服务的运行不需要交互式桌面,可以在没有用户干预的情况下,自动启动和运行。在.NET框架中,类是一个非常重要的系统类,允许您与Windows服务进行交互。

轩辕姐姐

C# 实现 CPU 使用率监控的全过程

类是命名空间中用于执行WMI查询的核心组件。通过创建此类的实例,可以执行针对WMI的查询并获取返回的数据对象集合。它可以使用多种查询语言进行数据检索,其中最为常用的查询语言为WQL(WMI Query Language)。创建对象的基本方式包括:使用无参数的构造函数:使用WQL查询字符串:使用对象:类提供了多个属性来管理和访问查询结果:Options:获取或设置查询选项,如是否返回枚举器。Scope:获取或设置查询的范围。Query。

holy-pills

Windows下可扩展的C#任务调度部署包,含Web管理+多节点服务+SQL Server支持

一套开箱即用的Windows分布式任务调度部署方案,用C#编写,后端基于SQL Server存储任务定义、执行记录和节点状态。包含TaskManager.Web管理后台(支持任务启停、重试设置、日志查看、节点健康监控)、Node WinService服务节点(可部署多个实例,需手动注册为Windows服务)、完整数据库建表及初始化脚本。部署流程清晰:先运行SQL脚本创建数据库,再配置web.config中的连接字符串并发布网站;接着在Web界面添加节点信息,然后分别在各服务器上安装并启动Node服务(注意不

vv45678
评论 1
收藏 已收藏
分享
返回顶部
qq_37978691
C# 111,128 成员 642,537 内容