网站首页 > 编程文章 正文
在实际工作中,如果我们需要开发一个运行在后台,无需用户交互,不需要界面的应用程序,我们可以通过Windows服务来实现。
本文主要介绍如何基于C#创建一个Windows服务,来实现西门子PLC的定时读取保存。
一、Windows服务说明
Windows 服务是一种特殊类型的应用程序,能够在系统启动时自动运行,且无需用户登录即可执行。
它适合于以下场景:
- 持续运行的任务(如日志采集、网络代理等)
- 系统后台维护(如自动更新、性能监控)
- 需要在无人值守环境中执行的任务
Windows 服务的核心特性:
- 通过服务控制管理器(SCM) 管理
- 运行时与用户登录状态无关
- 支持系统启动时自动运行
二、Windows服务创建
1、创建一个新项目,项目模板选择Windows服务(.Net Framework):
2、项目名称为WindowsServiceDemo,项目创建完成后如下:
3、修改服务名称为SiemensPLCService:
4、在设计界面的空白处,右击弹窗中,选择添加安装程序:
5、点击添加安装程序之后,会自动添加一个ProjectInstaller界面,里面有两个组件,分别是serviceProcessInstaller和serviceInstaller。
6、选择serviceInstaller,在右侧的属性进行设置,主要可以设置以下属性:
- ServiceName:服务名称
- Description:服务描述
- StartType:启动类型
7、接着选择ProjectInstaller进行设置,主要设置Account,指示用来运行此服务的账户类型,可以设置为LocalSystem。
8、设置完成之后,切换到SiemensPLCService这个类,点击切换到代码视图,我们可以看到后台有一些自动生成的代码:
public partial class SiemensPLCService : ServiceBase
{
public SiemensPLCService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
}
protected override void OnStop()
{
}
}
我们可以在OnStart和OnStop里写一些代码逻辑。
9、写了一个简单的逻辑,就是每次服务启动或停止都会向指定的文件中写入一串信息。
private Plc siemens;
private CancellationTokenSource cts;
protected override void OnStart(string[] args)
{
try
{
this.siemens = new Plc(CpuType.S7200Smart, "192.168.2.150", 0, 0);
this.siemens.Open();
cts = new CancellationTokenSource();
Task.Run(async () =>
{
while (!cts.IsCancellationRequested)
{
try
{
uint temp = Convert.ToUInt32(this.siemens.Read("DB1.DBD4"));
float val = temp.ConvertToFloat();
await Task.Delay(1000);
WriteInfo("读取PLC数据:"+val.ToString("f2"));
}
catch (Exception ex)
{
WriteInfo(ex.Message);
}
}
this.siemens.Close();
});
}
catch (Exception ex)
{
WriteInfo(ex.Message);
}
}
private string filePath = @"D:\ServiceLog.txt";
private void WriteInfo(string info)
{
using (FileStream stream = new FileStream(filePath, FileMode.Append))
{
using (StreamWriter writer = new StreamWriter(stream))
{
writer.WriteLine(#34;{DateTime.Now},{info}");
}
}
}
protected override void OnStop()
{
this.siemens?.Close();
}
三、Windows服务安装卸载
我们直接运行刚刚创建的服务,发现是无法运行的,提示如下:
接下来,我们使用这个exe来进行安装和卸载Windows服务。
1、首先,使用管理员权限打开cmd命令行,然后进入这个路径下,便于直接操作InstallUtil。
cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
2、安装服务命令:installutil exe绝对路径 ;
installutil C:\Users\Administrator\Desktop\WindowsServiceDemo\WindowsServiceDemo\bin\Debug\WindowsServiceDemo.exe
打开服务,可以看到TestService这个名称的服务已经安装完成,
3、安装完成后,双击打开,可以启动服务,也可以手动停止:
4、观察D盘文件,可以看到PLC的数据每秒会存一次到指定文件中:
5、需要卸载服务时,可以执行卸载服务命令:installutil exe绝对路径 -u ;
installutil C:\Users\Administrator\Desktop\WindowsServiceDemo\WindowsServiceDemo\bin\Debug\WindowsServiceDemo.exe -u
- 上一篇: C# 定时器基本操作和应用
- 下一篇: 240.C# Quartz.net 定时任务应用
猜你喜欢
- 2025-05-11 管理定时任务的简单工具——Pythonschedule库
- 2025-05-11 定时休眠怎么设置?用这方法一招搞定 自由设置任意时间休眠
- 2025-05-11 定时任务轻松搞定:使用Cron表达式和Quartz库实现定时任务调度
- 2025-05-11 下班总是忘记关电脑!添加任务自动定时关机,不用再跑一趟!
- 2025-05-11 Windows系统通过BAT脚本截取日期和时间
- 2025-05-11 定时任务优化总结(从半个小时优化到秒级)
- 2025-05-11 SQL Server 创建定时任务:定时自动执行SQL
- 2025-05-11 Python「定时任务」:你的自动化小能手,了解一下?
- 2025-05-11 程序定时器:让电脑自动“踩点”的神器
- 2025-05-11 前端定时任务的神库!快把它加到你的项目中去!
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- spire.doc (59)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- sqljdbc4.jar下载 (56)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- 苹果ios字体下载 (56)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)