news 2026/4/16 11:56:09

C#工业上通用的顺序控制写法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C#工业上通用的顺序控制写法

工业软件里,顺序程序控制最常见、最稳妥的是:
👉「状态机(Step / State) + 周期扫描(Timer/Loop) + 条件推进」
👉 延时用 TON(或等效逻辑),而不是 Thread.Sleep / await Delay

这就是PLC 思想在上位机里的延续。

工业顺序控制常见写法排名(按“真实使用率”)
✅ 第一名(⭐⭐⭐⭐⭐):
状态机(Step)+ 周期扫描(Timer)【最常见】
写法特征
switch (Step)
{
case 10:
if (条件A)
Step = 20;
break;

case 20: if (ton.Q(3000)) { ton.Reset(); Step = 30; } break;

}

//----------------------------下面用一个简单的示例,说明此种写法的好处---------------------------------
第一步:先定义一个定时器类
public sealed class Ton
{
private bool _running = false;
private long _startTick = 0;

public void Reset() { _running = false; _startTick = 0; } // 返回 true 表示“到时了”(相当于 TON.Q) public bool Q(int presetMs) { if (!_running) { _running = true; _startTick = Environment.TickCount64; } long elapsed = Environment.TickCount64 - _startTick; return elapsed >= presetMs; }

}

第二步:定义步序枚举类型和定时器实例化、枚举实例化
// ===== 步序枚举 =====
private enum Step
{
step10 = 0,
step20 = 10,
step30 = 20,
step40 = 30,
step50 = 40,
step60 = 50,
step70 = 900
}

// ===== TON 定时器(PLC 的 TON)=====
private readonly Ton _ton = new Ton();
//枚举实例化
private Step stepNumber = Step.step10;

第三步:开始在定时器中编写顺序控制逻辑
private async void timer1_Tick(object sender, EventArgs e)
{
switch (stepNumber)
{
case Step.step10:
_ton.Reset();
if (stepNumber == Step.step10)
{
richTextBox1.AppendText(DateTime.Now + " step10" + “\r\n”);
}
stepNumber = Step.step20;
break;

case Step.step20: stepNumber = Step.step30; Step1 = 100; //标志位赋值 if (stepNumber == Step.step20) { richTextBox1.AppendText(DateTime.Now + " step20" + "\r\n"); } break; case Step.step30: if (Step1==100) { Step1= 0; //标志位清零 richTextBox1.AppendText(DateTime.Now + " step30" + "\r\n"); } if(_ton.Q(4000)) { stepNumber = Step.step40; } break; case Step.step40: if (stepNumber == Step.step40) { richTextBox1.AppendText(DateTime.Now + " step40" + "\r\n"); stepNumber = Step.step50; } break; case Step.step50: if (stepNumber == Step.step50) { richTextBox1.AppendText(DateTime.Now + " step50" + "\r\n"); stepNumber = Step.step60; } break; }

}

//-----------下面是输出的结果----------------

打印出来的结果如下:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/5 22:32:20

小红书下载终极指南:XHS-Downloader一键获取无水印高清素材

小红书下载终极指南:XHS-Downloader一键获取无水印高清素材 【免费下载链接】XHS-Downloader 免费;轻量;开源,基于 AIOHTTP 模块实现的小红书图文/视频作品采集工具 项目地址: https://gitcode.com/gh_mirrors/xh/XHS-Downloade…

作者头像 李华
网站建设 2026/4/14 1:36:51

WarcraftHelper完全免费优化方案:彻底解决魔兽争霸III性能瓶颈

WarcraftHelper完全免费优化方案:彻底解决魔兽争霸III性能瓶颈 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸III在现代电…

作者头像 李华
网站建设 2026/4/12 16:24:40

首个国产芯片训练的多模态 SOTA 模型,已免费开源!

这是苍何的第 471 篇原创!大家好,我是苍何。看到智谱联合华为开源了新一代图像生成模型 GLM-Image 的消息,我还挺兴奋的。这意味着,AI 生图的价格可能会被打下来,我的感触是很深的,因为最近一直在给我的产品…

作者头像 李华
网站建设 2026/4/13 12:53:04

这张 DINQ 卡,装下了我所有的 AI 经历!

这是苍何的第 472 篇原创!大家好,我是苍何。不瞒你说,我现在两个号加起来差不多有 15000 好友了,加起来也发了差不多有 10000 多次自我介绍了。我迭代过 N 个版本,无论是文字版还是小程序版,总觉得哪里不大…

作者头像 李华
网站建设 2026/4/15 3:32:51

2026年AI部署新方向:DeepSeek-R1-Distill-Qwen-1.5B边缘计算实战

2026年AI部署新方向:DeepSeek-R1-Distill-Qwen-1.5B边缘计算实战 1. 引言 随着人工智能从云端向边缘侧持续迁移,轻量化大模型在终端设备上的高效部署正成为产业落地的关键突破口。在这一趋势下,DeepSeek-R1-Distill-Qwen-1.5B 模型应运而生…

作者头像 李华
网站建设 2026/4/16 11:14:28

原神帧率解锁终极指南:三步突破60fps限制

原神帧率解锁终极指南:三步突破60fps限制 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 想要在原神中体验更流畅的游戏画面吗?这款原神帧率解锁工具专为突破游戏…

作者头像 李华