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

[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
C#实现Windows服务及进程监控解决方案
Windows服务是Windows操作系统中的一种特殊应用程序,它们被设计为在后台运行,不需要用户登录即可执行任务,例如系统服务、数据库服务、打印服务等。这些服务为用户提供了一个稳定且灵活的操作环境。管理Windows服务是系统维护和故障排除不可或缺的一部分。Windows服务是在后台运行的应用程序,它们可以启动和停止,不受用户登录状态的影响。服务的运行不需要交互式桌面,可以在没有用户干预的情况下,自动启动和运行。在.NET框架中,类是一个非常重要的系统类,允许您与Windows服务进行交互。
C# 实现 CPU 使用率监控的全过程
类是命名空间中用于执行WMI查询的核心组件。通过创建此类的实例,可以执行针对WMI的查询并获取返回的数据对象集合。它可以使用多种查询语言进行数据检索,其中最为常用的查询语言为WQL(WMI Query Language)。创建对象的基本方式包括:使用无参数的构造函数:使用WQL查询字符串:使用对象:类提供了多个属性来管理和访问查询结果:Options:获取或设置查询选项,如是否返回枚举器。Scope:获取或设置查询的范围。Query。
Windows下可扩展的C#任务调度部署包,含Web管理+多节点服务+SQL Server支持
一套开箱即用的Windows分布式任务调度部署方案,用C#编写,后端基于SQL Server存储任务定义、执行记录和节点状态。包含TaskManager.Web管理后台(支持任务启停、重试设置、日志查看、节点健康监控)、Node WinService服务节点(可部署多个实例,需手动注册为Windows服务)、完整数据库建表及初始化脚本。部署流程清晰:先运行SQL脚本创建数据库,再配置web.config中的连接字符串并发布网站;接着在Web界面添加节点信息,然后分别在各服务器上安装并启动Node服务(注意不


