重庆垫江网站建设/清远市发布

重庆垫江网站建设,清远市发布,网站建设需要工作计划,做公众号首图网站在实际工作中,如果我们需要开发一个运行在后台,无需用户交互,不需要界面的应用程序,我们可以通过Windows服务来实现。 本文主要介绍如何基于C#创建一个Windows服务,来实现西门子PLC的定时读取保存。 一、Windows服务…

在实际工作中,如果我们需要开发一个运行在后台,无需用户交互,不需要界面的应用程序,我们可以通过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($"{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

      图片

      本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/72885.shtml

      如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

      相关文章

      吴恩达机器学习笔记复盘(六)梯度下降算法

      简介 梯度下降(Gradient Descent)是一种常用的优化算法,广泛应用于机器学习、深度学习等领域,在这里是用于求J(w,b)局部最小值。 我自己觉得这样说有点过于抽象。换个直观点的说法就是,一个人…

      使用JAVA-进行维吉尼亚密码的解密与加密

      维吉尼亚密码 来源于百度百科 维吉尼亚密码_百度百科 具体代码 import java.util.*;public class WJMYmm {//常量 26public static final int N 26;//密码public static void main(String[] args) {//字母String ZM"abcdefghijklmnopqrstuvwxyz";char[] zm ZM.…

      LeetCode 解题思路 22(Hot 100)

      解题思路: 递归思路: 传入当前节点的最小值和最大值,递归判断左右子树。结束条件: 当前节点为空或不满足二叉搜索树。 Java代码: class Solution {public boolean isValidBST(TreeNode root) {return isValidBST(ro…

      乐享数科:政策助推假日经济,2月普惠金融-景气指数稳中有升

      数据显示,2025年2月普惠金融-景气指数达48.99点,较1月上升0.03点。 企业运行持续向好,企业信心预期和经营活力回升。“假日经济”与“政策效应”相互叠加,市场供求格局有所改善,景气水平稳步恢复。 普惠金融-景气指数…

      leetcode日记(108)验证回文串

      看上去很简单,其实很麻烦。 一开始写的递归,但是内存超限……搜了下发现原因是每次递归调用都会创建一个新的字符串副本,这在处理长字符串时会占用大量内存。 class Solution { public:bool isPalindrome(string s) {if(s.size()0||s.size(…

      用css绘制收银键盘

      最近需求说需要自己弄个收银键盘&#xff0c;于是乎直接上手搓 主要基于Vue3写的&#xff0c;主要是CSS <template><view class"container"><view class"info"><image class"img" src"" mode"">&l…

      智能车间管理系统(源码+文档+讲解+演示)

      引言 在现代制造业中&#xff0c;智能车间管理系统正成为推动工业4.0和智能制造的关键力量。它通过整合先进的信息技术和自动化技术&#xff0c;优化生产流程&#xff0c;提高生产效率&#xff0c;降低成本&#xff0c;并确保产品质量。 系统概述 智能车间管理系统采用前后端…

      单片机开发资源分析的实战——以STM32F103C8T6为例子的单片机资源分析

      目录 第一点&#xff1a;为什么叫STM32F103C8T6 从资源手册拿到我们的对STM32F103C8T6的资源描述 第二件事情&#xff0c;关心我们的GPIO引脚输出 第三件事情&#xff1a;去找对应外设的说明部分 前言 本文章隶属于项目&#xff1a; Charliechen114514/BetterATK: This is…

      腾讯云MySQL数据库架构分析与使用场景

      TDSQL-C for MySQL TDSQL-C MySQL 版&#xff08;TDSQL-C for MySQL&#xff09;是腾讯云自研的新一代云原生关系型数据库。融合了传统数据库、云计算与新硬件技术的优势&#xff0c;为用户提供具备高弹性、高性能、海量存储、安全可靠的数据库服务。TDSQL-C MySQL 版100%兼容…

      荣耀手机卸载应用商店、快应用中心等系统自带的

      1.下载abd ADB Download - Get the latest version of ADB and fastboot 2.手机打开开发者选项 3.手机接电脑打开USB调试 4.下载MT管理器查看系统包名 D:\1.LFD\ADB\platform-tools-latest-windows\platform-tools>adb shell adb.exe: no devices/emulators found 这边是…

      网络流基本概念及实现算法

      基本概念 流网络 对于一个有向图, 抽象成水管里的水的模型, 每根管子有容量限制, 计为 G ( V , E ) G (V, E) G(V,E), 首先不考虑反向边 对于任意无向图, 都可以将反向边转化为上述形式 如果一条边不存在, 定义为容量为 0 0 0, 形式上来说就是 c ( u , v ) 0 c(u, v) 0 c(…

      【css酷炫效果】纯CSS实现球形阴影效果

      【css酷炫效果】纯CSS实现球形阴影效果 缘创作背景html结构css样式完整代码基础版进阶版(动态版) 效果图 想直接拿走的老板&#xff0c;链接放在这里&#xff1a;上传后更新 缘 创作随缘&#xff0c;不定时更新。 创作背景 刚看到csdn出活动了&#xff0c;赶时间&#xff0…

      Linux如何在设备树中表示和引用设备信息

      DTS基本知识 dts 硬件的相应信息都会写在.dts为后缀的文件中&#xff0c;每一款硬件可以单独写一份xxxx.dts&#xff0c;一般在Linux源码中存在大量的dts文件&#xff0c;对于arm架构可以在arch/arm/boot/dts找到相应的dts&#xff0c;一个dts文件对应一个ARM的machie。 dtsi 值…

      C++20 中的同步输出流:`std::basic_osyncstream` 深入解析与应用实践

      文章目录 一、std::basic_osyncstream 的背景与动机二、std::basic_osyncstream 的基本原理三、std::basic_osyncstream 的使用方法&#xff08;一&#xff09;基本用法&#xff08;二&#xff09;多线程环境下的使用&#xff08;三&#xff09;与文件流的结合 四、std::basic_…

      C/C++蓝桥杯算法真题打卡(Day8)

      一、P8780 [蓝桥杯 2022 省 B] 刷题统计 - 洛谷 算法代码&#xff1a; #include<bits/stdc.h> // 包含标准库中的所有头文件&#xff0c;方便使用各种数据结构和算法 using namespace std; // 使用标准命名空间&#xff0c;避免每次调用标准库函数时都要加 std::in…

      第十三次CCF-CSP认证(含C++源码)

      第十三次CCF-CSP认证 跳一跳满分题解 碰撞的小球满分题解遇到的问题 棋局评估满分题解 跳一跳 题目链接 满分题解 没什么好说的 基本思路就是如何用代码翻译题目所给的一些限制&#xff0c;以及变量应该如何更新&#xff0c;没像往常一样给一个n&#xff0c;怎么读入数据&…

      MySQL:数据库基础

      数据库基础 1.什么是数据库&#xff1f;2.为什么要学习数据库&#xff1f;3.主流的数据库&#xff08;了解&#xff09;4.服务器&#xff0c;数据库&#xff0c;表之间的关系5.数据的逻辑存储6.MYSQL架构7.存储引擎 1.什么是数据库&#xff1f; 数据库(Database,简称DB)&#x…

      【C++】二叉树和堆的链式结构(上)

      本篇博客给大家带来的是用C语言来实现堆链式结构和二叉树的实现&#xff01; &#x1f41f;&#x1f41f;文章专栏&#xff1a;数据结构 &#x1f680;&#x1f680;若有问题评论区下讨论&#xff0c;我会及时回答 ❤❤欢迎大家点赞、收藏、分享&#xff01; 今日思想&#xff…

      Devops之AWS:如何安装AWS CLI

      AWS 命令行界面&#xff08;AWS CLI&#xff09;是一种开源工具&#xff0c;让我们能够使用命令行 Shell 中的命令与 AWS 服务进行交互。 安装步骤&#xff1a; 下载并运行AWS CLI的MSI安装程序&#xff1a; 点击如下的链接&#xff0c;即可下载MSI安装程序&#xff1a; htt…

      PH2D数据集: 用人类演示数据提升人形机器人操作能力,助力跨实体学习

      2025-03-18, 由加州大学圣地亚哥分校, 卡内基梅隆大学, 华盛顿大学, 麻省理工学院等机构联合收集了PH2D数据集。该数据集包含26824个任务导向的人类演示&#xff0c;采用消费者级VR设备收集&#xff0c;提供了准确的3D手部关键点姿态和语言注释。数据集覆盖了多种操作任务、不同…