线下实训
HOME
线下实训
正文内容
plc编程入门-微盘 电工零基础学习PLC:想入门,这些都是,敲门砖!(附软件下载)
发布时间 : 2025-03-16
作者 : 小编
访问数量 : 23
扫码分享至微信

电工零基础学习PLC:想入门,这些都是,敲门砖!(附软件下载)

这一节讲的是西门子S7-200PLC总概览 。这是学习西门子S7-200PLC的入门必备的级基础知识,适合想学习西门子PLC的无基础小白。因为前几节讲的都是PLC点对点的某一部分的知识,大家对西门子PLC还没有一个总体的认识,所以这节就来整体叙述一下。这一节的学习资料已经上传,如果有需要的朋友可以自己到我的网盘去下载(网盘内部还有详细的资料,编程软件,仿真软件等),下载方法和下载地址在文章的结尾。

首先看图1 ,这就是西门子S7-200PLC的全部CPU模块,一共5款全在这里了,大家在实际项目选型时,就从这5款CPU中选择就行。他们每一款的主要区别就是,可以接入的开关量,输入输出的点数通讯接口的数量 。但需要注意的是,S7-221这款CPU的后面是不扩其他功能展模块的。具体这5款CPU的详细参数在网盘下载的资料中有详细的介绍。

图2 ,是西门子S7-200PLC的CPU模块的外观功能说明,包括通讯下载接口,输入输出接口端子,导轨安装夹,运行模式选择开关等。初学者需要注意的是S7-200PLC模块的电源电压,分DC24V和AC220V 两种。在上电以前一定要确认清楚,否则容易烧毁PLC。 图2中也已经标明。

图3 ,是西门子S7-200PLC的CPU模块的每一部分的功能描述,图中已经把每一部分功能标的很明白了,这是我们能操作到的PLC的所有的部分了,你只要能明白这上面的每部分的功能和作用就行了,至于它的内部还有些什么鬼,我们不用去管他。就像我们使用手机发短信,会操作就行了,不用去研究它是怎么把短信发出去的。

图4 ,是告诉我们西门子S7-200PLC的程序下载只要一根PC-PPI的数据线 和一台电脑 就行了,电脑上装上PLC的编程软件Micro/Win,你就可以编写程序了。程序写完后通过PC-PPI的数据线下载到PLC就行了。

图5 ,西门子S7-200PLC的安装方式,这个更简单,和安装我们平时用的继电器是一样的,把它挂到导轨上就行了。唯一不一样的一点是,当我们的模块太多,一排导轨放不下时,需要一根延长线,去连接另一排导轨上的模块,这个延长线是西门子专用配件,如果需要的话买一根插上就行。

图6 至 图9 ,是西门子S7-200PLC的一些实际应用范围,但并不限于这些范围。以后还会慢慢讲解,大家自己先大体看看吧,将来都会用的到的。这里的图片不太清晰,我的网盘里有这些图片资料的清晰版本,自己去下载吧,下载方法在文章结尾。

资料下载方法是: 点击大话工控 头像,再点击红色的关注 ,然后给我发私信 ,内容写 我要资料 这4个字(注意:一定要只写 我要资料 这4个字,不能多写也不能少写)。下载地址和下载密码就会自动发到你的手机上。

另:不会发私信的请看下图,共分4步。

初识上位机(下):C#读写PLC数据块数据

大家好,我是Edison。

作为一个工业自动化领域的程序员,不懂点PLC和上位机,貌似有点说不过去。这里我用两篇小文带你快速进入上位机开发领域。后续,我会考虑再出一个系列文章一起玩工控上位机。上一篇:搭建PLC模拟仿真环境复习一下 在上一篇中,我们通过PLCSIM Advanced软件创建了一个虚拟的西门子S7-1500 PLC如下所示:

然后,我们创建了一个博途的自动化项目,和我们的虚拟PLC进行了组态。在编译完成后,我们创建的数据块中的数据字段就得到了偏移量,如下图所示,0,2,4, 260就是所谓的偏移量,会在后面用到。

创建Windows Form项目

这里开始我们就开始使用C#创建一个Windows Form项目,然后通过S7NetPlus库来连接PLC,并读取和写入数据块中的数据,这是一个典型的上位机数据采集的场景。这里我们创建一个.NET Framework 4.8的Windows Form项目,并拖控件完成一个如下图所示的窗体应用界面:

这个窗体提供了连接和断开PLC,以及读取 和 写入 文本框中的数据,接下来我们就来实现这几个功能。

实现PLC的连接与断开

要实现S7 PLC的连接和操作,目前已经有很多较为成熟的组件了,我们这里使用S7NetPlus组件,直接通过NuGet安装最新版本即可。

然后编写Connect按钮的Click事件如下:

private static Plc s7Instance;public MainForm(){ InitializeComponent();}private void btnConnect_Click(object sender, System.EventArgs e){ if (btnConnect.Text == "Connect") { if (s7Instance == ) s7Instance = new Plc(CpuType.S71500, txtPlcIPAddress.Text.Trim(), 0, 1); s7Instance.Open(); btnConnect.Text = "Disconnect"; } else { s7Instance.Close(); btnConnect.Text = "Connect"; txtBool01.Clear(); txtInt01.Clear(); txtStr01.Clear(); txtStr02.Clear(); }}实现PLC数据块的读取 由于我们在博途项目中设置的数据块是DB01,且只有4个字段,所以这里我们编写ReadData按钮的Click事件如下,它通过指定参数读取到指定类型的数据并绑定到文本框的Text中。

private void btnReadData_Click(object sender, System.EventArgs e){ if (s7Instance == || !s7Instance.IsConnected) { MessageBox.Show("Your PLC is not connected now!", "Error", MessageBoxButtons.OK); return; } // bool var boolData = (bool)s7Instance.Read(DataType.DataBlock, 1, 0, VarType.Bit, 1); txtBool01.Text = boolData ? "1" : "0"; // int var intData = (short)s7Instance.Read(DataType.DataBlock, 1, 2, VarType.Int, 1); txtInt01.Text = intData.ToString(); // string var count = (byte)s7Instance.Read(DataType.DataBlock, 1, 4 + 1, VarType.Byte, 1); // +1表示读取偏移值的长度 var str01Data = Encoding.Default.GetString(s7Instance.ReadBytes(DataType.DataBlock, 1, 4 + 2, count)); // +2表示读取偏移值(跳过)的字符 txtStr01.Text = str01Data; // wstring var str02Data = (string)s7Instance.Read(DataType.DataBlock, 1, 260, VarType.S7WString, 254); txtStr02.Text = str02Data;}(1)针对bool和int类型,我们可以直接通过Read方法快速读取到,但需要告诉PLC准确的读写位置和数据类型,主要是偏移量一定要给正确。

Read方法的参数分别为数据块类型,数据块,偏移量,读取类型,读取长度

(2)针对string和wstring类型,就稍微麻烦一些了:针对string,需要先获取string值的所占长度。再拿到具体byte值。转换为utf8格式的ascci码,具体代码中有体现。

+1 表示获取到长度

+2 表示获取到跳过偏移长度的字符

var count = (byte)s7Instance.Read(DataType.DataBlock, 1, 4 + 1, VarType.Byte, 1); // +1表示读取偏移值的长度var str01Data = Encoding.Default.GetString(s7Instance.ReadBytes(DataType.DataBlock, 1, 4 + 2, count)); // +2表示读取偏移值(跳过)的字符

特别注意:string类型只能存储ascci码,需要注意,不能存储中文

针对wstring,稍微简单点,但是需要注意的是获取的字符需要为254个 ,因为符号占用了4个字节。

实现PLC数据块的写入

和读取一样,通过Write方法即可轻松实现写入,但针对string和wstring仍然是复杂一些,这里我封装了一个S7DataWriter的静态类,提供了两个方法来获取要写入的bytes,因为它无法直接接收C#程序中的string类型。

public static class S7DataWriter{ /// <summary> /// 获取西门子PLC字符串数组--String类型 /// </summary> public static byte[] GetPlcStringByteArray(string str) { byte[] value = Encoding.Default.GetBytes(str); byte[] head = new byte[2]; head[0] = Convert.ToByte(254); head[1] = Convert.ToByte(str.Length); value = head.Concat(value).ToArray(); return value; } /// <summary> /// 获取西门子PLC字符串数组--WString类型 /// </summary> public static byte[] GetPlcWStringByteArray(string str) { byte[] value = Encoding.BigEndianUnicode.GetBytes(str); byte[] head = BitConverter.GetBytes((short)508); byte[] length = BitConverter.GetBytes((short)str.Length); Array.Reverse(head); Array.Reverse(length); head = head.Concat(length).ToArray(); value = head.Concat(value).ToArray(); return value; }}然后,我们就可以编写Write Data按钮的Click事件了:

private void btnWriteData_Click(object sender, System.EventArgs e){ if (s7Instance == || !s7Instance.IsConnected) { MessageBox.Show("Your PLC is not connected now!", "Error", MessageBoxButtons.OK); return; } // bool var boolValue = txtBool01.Text.Trim() == "1" ? true : false; s7Instance.Write(DataType.DataBlock, 1, 0, boolValue); // int var intValue = Convert.ToInt16(txtInt01.Text); s7Instance.Write(DataType.DataBlock, 1, 2, intValue); // string s7Instance.Write(DataType.DataBlock, 1, 4, S7DataWriter.GetPlcStringByteArray(txtStr01.Text.Trim())); // wstring s7Instance.Write(DataType.DataBlock, 1, 260, S7DataWriter.GetPlcWStringByteArray(txtStr02.Text.Trim())); MessageBox.Show("Write data successfully!", "Info", MessageBoxButtons.OK);}

效果演示

和读取一样,通过Write方法即可轻松实现写入,但针对string和wstring仍然是复杂一些,这里我封装了一个S7DataWriter的静态类,提供了两个方法来获取要写入的bytes,因为它无法直接接收C#程序中的string类型。(1)读取数据

(2)写入数据

小结

本文通过使用C#开发了一个简单的WindowsForm窗体程序,实现了S7 PLC的连接、数据读取和写入。虽然只是一个简单的Demo,但是从中可以看见上位机的基本思想,就是对PLC的数据采集和监控。当然,实现这个目的,不止S7协议一条路,我们还可以通过ModBus、OPC UA等协议,这些就留到后面的专题吧,如果你感兴趣的话,就保持关注哦!

源码

GitHub:https://github.com/Coder-EdisonZhou/PLC-Connectors年终总结:Edison的2023年终总结数字化转型:我在传统企业做数字化转型C#刷题:C#刷剑指Offer算法题系列文章目录.NET面试:.NET开发面试知识体系.NET大会:2020年中国.NET开发者大会PDF资料

相关问答

谁知道求助怎么把PLC中的数据导入电脑的Excel表格中?-ZOL问答

可以这样做,PLC和上位机自由口通讯,PLC通过COM口把需要保存的数据发给PC,PC再把数据保存为EXCEL格式的文件到硬盘。可以这样做,PLC和上位机自由口通讯,PLC通过...

请问上位机用vb和s7-300PLC通讯怎么实现?

可利用OPC服务器来完成,比较方便。可适用于各类PLC。下面以西门子PLC为例说下实现方法:一、通过STEP7软件建立一个新项目OPC,在项目中添加SIMATIC300站...

 章佩然  徐家汇藏书楼 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2025  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部