在實際工作中,如果我們需要開發一個運行在后臺,無需用戶交互,不需要界面的應用程序,我們可以通過Windows服務來實現。本文主要介紹如何基于C#創建一個Windows服務,來實現西門子PLC的定時讀取保存。
Windows 服務是一種特殊類型的應用程序,能夠在系統啟動時自動運行,且無需用戶登錄即可執行。
它適合于以下場景:
持續運行的任務(如日志采集、網絡代理等)
系統后臺維護(如自動更新、性能監控)
需要在無人值守環境中執行的任務
Windows 服務的核心特性:
通過服務控制管理器(SCM) 管理
運行時與用戶登錄狀態無關
支持系統啟動時自動運行
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($"{DateTime.Now},{info}");
}
}
}
protected override void OnStop()
{
this.siemens?.Close();
}
我們直接運行剛剛創建的服務,發現是無法運行的,提示如下:
?接下來,我們使用這個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
閱讀原文:原文鏈接
該文章在 2025/3/21 10:29:47 編輯過