在主机上这样玩很有趣

自动化行业正在慢慢逼近软件行业。

 

许多PLC工程师慢慢意识到掌握编程语言变得越来越重要。

那么PLC工程师学习编程后会有什么样的体验呢?

我想最直接的体会就是:原理性的东西了解更多了,技术栈更全面了,可以独立完成项目评估、绘图、选型、PLC程序开发调试,到上位机开发,甚至更高——级WEB端。 、移动终端。

言归正传,本文主要分享一个工业现场常用的运动控制案例,从硬件选型到程序设计,再从本地调试到上位机开发调试。

本案例比较简单,但可以有效地将PLC与上位机结合起来。 是一个比较适合初学者的训练项目。

1、硬件选型

控制器:西门子200Smart PLC,型号ST20(DC-DC-DC)

驱动器:步进驱动器

电机:42mm步进电机

限位:3个限位开关,分别对应原点、左限位、右限位

平台:单轴模块

按钮指示灯:启动、停止、运行状态、3个行程开关(模拟完成信号)

2、硬件接线图

运动控制工程师需要掌握什么_运动控制工程_工控运动控制/

3.PLC程序开发

S7-200智能PLC的运动控制需要使用运动控制向导来实现。 核心程序如下:

运动控制工程师需要掌握什么_工控运动控制_运动控制工程/

工控运动控制_运动控制工程师需要掌握什么_运动控制工程/

4、上位机程序开发

(1)I/O表:PLC编程时,会预留上位机接口。 上位机I/O表如下:

工控运动控制_运动控制工程师需要掌握什么_运动控制工程/

(2)界面设计:PC UI界面设计

运动控制工程师需要掌握什么_运动控制工程_工控运动控制/

(3)功能实现:上位机主要包括实时状态和数据监控、速度和位置参数设置、系统日志显示、通讯参数设置等。

本案例与西门子PLC的通讯方式采用S7通讯,使用开源通讯库s7.net实现。 基于多线程实现实时数据采集,并结合实际I/O进行数据分析。

 private void PLCCommunication()
 {
 while (!cts.IsCancellationRequested)
 {
 byte[] result = plc.ReadBytes(StoreType.DataBlock, 1, 0, 23);
 if (result != null && result.Length == 23)
 {
 this.Invoke(new Action(() =>
 {
 //这里进行实时状态更新
 }));
 Thread.Sleep(10);
 }
 }
 }

 

参数设置采用独立的设置接口,通过表单传值实现。

运动控制工程师需要掌握什么_工控运动控制_运动控制工程/

代码如下所示:

 ///
 /// 设定值
 /// 
 public string setValue = string.Empty;
 private void btn_Set_Click(object sender, EventArgs e)
 {
 this.setValue = this.txt_SetValue.Text;
 this.DialogResult = DialogResult.OK;
 this.Close();
 }

 

系统日志基于ListView控件开发,实现日志、报警、警告三种不同状态的差异化显示,并可同时存入数据库,方便后续追溯。

 private string CurrentTime
 {
 get { return DateTime.Now.ToString("HH:mm:ss"); }
 }
 //写入日志
 private void AddLog(int index, string log)
 {
 if (this.lstInfo.InvokeRequired)
 {
 this.lstInfo.Invoke(new Action(() =>
 {
 ListViewItem lst = new ListViewItem(CurrentTime, index);
 lst.SubItems.Add(log);
 this.lstInfo.Items.Insert(0, lst);
 }));
 }
 else
 {
 ListViewItem lst = new ListViewItem(CurrentTime, index);
 lst.SubItems.Add(log);
 this.lstInfo.Items.Insert(0, lst);
 }
 }

 

通讯参数为系统参数,采用Winform的Settings进行配置和存储,简单快捷。

界面设计如下:

运动控制工程_运动控制工程师需要掌握什么_工控运动控制/

代码如下所示:

 public SaveDefaultSettingDelegate SaveDefaultSetting;
 private void btn_Set_Click(object sender, EventArgs e)
 {
 CommSet set = new CommSet();
 try
 {
 set.IPAddress = this.txt_IPAddress.Text;
 set.CPUType = this.cmb_CPUType.Text;
 set.StoreTime = Convert.ToInt32(this.txt_StoreTime.Text);
 set.AutoStore = this.chk_AutoStore.Checked;
 }
 catch (Exception)
 {
 MessageBox.Show("请检查数据格式是否正确","格式错误");
 return;
 }
 SaveDefaultSetting(set);
 MessageBox.Show("配置成功,立即生效", "配置成功");
 this.Close(); 
 }

 

5.写在背面

近年来,随着越来越多的设备开始加入IIoT网络(工业物联网,简称IIoT),IT和OT之间的界限将逐渐消失,直至成为一个或同一个系统。

因此,越来越多的电气工程师开始转向PC开发。 因为在现有的电气技能基础上,如果掌握了PC开发技能,工资达到20K甚至30K就会变得更容易。