优秀的编程知识分享平台

网站首页 > 技术文章 正文

C#如何模拟PLC写起保停控制板卡(plc停机指令)

nanyue 2024-09-11 05:30:28 技术文章 7 ℃

想必做过电工、电气工程师的工控人,都很熟悉起保停。对,就是你们熟悉的那个起保停。这个电路应用范围很广,比如电机的启动停止控制,如果我们把这个电路程序能移植到上位机那么已经事半功倍了。

1.我们先分析下什么叫起保停?

起:启动(启动条件)保:保持(自锁条件)停:停止(停止条件)

2.用C#上位机实现PLC起保停,创建项目这里命名为DEMO1


3.从控件工具库中拖拽Button按钮, 分别命名为btnStart和btnStop并把text属性改为启动和停止,并分别创建MouseDown、 MouseUp事件模拟启动按键和停止按键。(双击事件自动创建)



4.从控件工具库中拖拽Label标签 命名为lblState并把text属性改为 今日头条 模拟运行状态

5.从控件工具库中拖拽timer控件 并把Enabled属性改为 true,把触发 周期改为100ms,模拟PLC扫



6.界面效果图


7.按F7进入代码页,大家查看代码注释理解下,不清楚的可以在评论区问我


public FrmMain()

{

InitializeComponent();

stop = true;//这里停止按钮初始化为抬起状态

}

bool start, stop, run;

private void BtnStart_MouseDown(object sender, MouseEventArgs e)

{

//写启动按下

start = true;

}


private void BtnStart_MouseUp(object sender, MouseEventArgs e)

{

//启动按钮抬起

start = false;

}


private void BtnStop_MouseDown(object sender, MouseEventArgs e)

{

//停止按钮按下

stop = false;

}


private void BtnStop_MouseUp(object sender, MouseEventArgs e)

{

//停止按钮抬起

stop = true;

}

//模拟PLC扫描


private void Timer1_Tick(object sender, EventArgs e)

{

run = (start || run) && stop;//启动和运行或一下(并联)再和停止或一下(串联)

lblState.BackColor = run ? Color.Green : Color.Black;//三元表达式 run为真赋值为绿色为假赋值为黑色

}

7.运行效果图


8.这个只是抛砖引玉,这个timer事件是来自UI线程,实时性不靠谱,实际现场我们会创建独立的线程死循环来处理现场IO数据。可以参考下面的写法


public Form1()

{

InitializeComponent();

Thread t1 = new Thread(PLCRUN);//创建一个线程并把 PLC运行方法传入

t1.IsBackground = true;//设为背景线程

t1.Start();//线程开始运行

}


private void PLCRUN()

{

while (true)

{

try

{

#region 输入映像刷新

#endregion

#region PLC逻辑....

#endregion

#region 输出映像刷新

#endregion

Thread.Sleep(1);//CPU强悍实时性要求高可以不sleep

}

catch (Exception ex)

{


//异常捕捉

}

}


}

9.当然起保停还有直接通过if判断实现或者其他方法实现,我这里只是提供是思路,没必要杠。在起保停的逻辑上可以加各种现场控制逻辑,比如延时逻辑 ,计数逻辑,其他与或非逻辑等等。剩下的大家灵活应用。

10.如果用运动板块控制或者项目比较大,建议分层架构,两层三层都可以。

11.篇幅有限,起保停的相关电路我就不画了,PLC的起保停不写了。我相信大家这块非常熟悉了。

END

如果对您有帮助 欢迎关注、评论、点赞转发。定期出C#上位机 电气 PLC 运动板卡 STM32 自动化相关心得应用


Tags:

最近发表
标签列表