C#与西门子PLC通讯

C#与西门子PLC通讯

  • S7Net
  • PLC设置
  • C#程序

S7Net

PLC在工业自动化领域是常用的控制器,一般在和上位机界面通讯时,经常使用组态软件。以西门子PLC为例,上位机可以使用西门子的WINCC。但是,当面对需求比较多样化的需求时,WINCC难以胜任。而且,作为量产的标准化产品,WINCC授权的费用一笔不小的成本。 S7.Net .dll 是应用在 .NET平台上和西门子PLC通讯的一个动态库。大家可以到GitHub中直接去下载,或者直接搜索“S7.Net .dll”也可以找到下载的链接。文章最后也会给出链接。
目前该动态库支持的西门子PLC类型有S7-200,S7-300,S7-400,S7-1200,S7-1500,基本涵盖了西门子所有的PLC产品。该库可以直接读写PLC中的全局DB块,作为通讯的接口。 下面对需要的一些函数以及数据类型做简单说明。
构造函数:cpu 为枚举类型,代表PLC类型。ip 为PLC地址,需要和PLC组态的地址一致,同时,和通讯的PC IP地址应在同一局域网段。rack 为导轨号,slot 为插槽号,均可在TIA PLC 硬件组态处获得。
如下图,ip=“192.168.0.5”。
IP地址
如下图,rack为0,slot为1。
在这里插入图片描述

public Plc(CpuType cpu, string ip, short rack, short slot);
public enum CpuType
{S7200 = 0,S7300 = 10,S7400 = 20,S71200 = 30,S71500 = 40}

获取是否连接成功:

public bool IsConnected { get; }

连接PLC:

public void Open();
public Task OpenAsync();

该类库提供了两个用于PLC连接的函数,区别在于第二个为异步连接,在请求连接的过程中,不会导致线程阻塞。我个人比较喜欢第二种方式。
按位写操作:参数db代表访问的DB块编号,如下图所示UISendInt编号为3,UIReadInt编号为4。
在这里插入图片描述
startByteAdr是在数据块内以字节为单位的起始地址,可以传入0。bitAdr 为需要操作的位的偏移地址(以startByteAdr为基准),value 为写入的值。
dataType为枚举类型,我们操作的是数据块,传入DataBlock。

public void WriteBit(DataType dataType, int db, int startByteAdr, int bitAdr, bool value);
public enum DataType
{Counter = 28,Timer = 29,Input = 129,Output = 130,Memory = 131,DataBlock = 132}

按字节读:count代表读的字节数量。在进行按字节读写时,对于8位的单字节变量来说没有任何问题。但是对于多字节比如在PLC中16位I的INT类型,需要注意大小端问题。在西门子PLC中以大端模式存储数据,但是在Intel的X86架构的PC上,确是以小端模式。所以,在从PLC读取一个INT类型的变量,需要将读取回来的字节数组高低字节调换,后面C#程序中会有详细的实现代码。

public byte[] ReadBytes(DataType dataType, int db, int startByteAdr, int count);

按字节写:value代表将要传输的数据转换成的字节数组,如果要操作一个INT变量,需要提前将高低字节调换,后面C#程序中会有详细的实现代码。

public void WriteBytes(DataType dataType, int db, int startByteAdr, byte[] value);

PLC设置

实现外部程序可以访问操作DB块,需要对PLC部分做一些设置。首先对于要读取或者访问的DB块,要将优化的块访问取消,默认为勾选的,选中块右击选择属性。
在这里插入图片描述
同时还要在硬件组态中,设置防护与安全中的连接机制。将“允许来自远程对象的PUT/GET访问”勾选。如下图:
在这里插入图片描述

C#程序

在C#上位机软件中,对通讯类库的函数做一个简单的包装,以方便我们使用。首先新建一个类S7,在项目中需要引用S7.NET,并在该类中包含命名空间。

using S7.Net;

定义一个Plc类型变量plc,并定义该类的构造函数和析构函数:

Plc plc;
public S7(S7DataType.CpuType cpuType,string ip,Int16 rack,Int16 slot)
{plc = new Plc((CpuType)cpuType,ip, rack,slot);
}~S7()
{this.plc.Close();
}

定义连接函数以及关闭函数:

public void OpenAsync()
{this.plc.OpenAsync();}public void Close()
{this.plc.Close();
}

定义读写函数:之所以加lock,是因为在应用中数据通讯很有可能在不同的线程去操作,比如单独开一个线程定时从PLC更新数据。

public byte[] PlcReadBytes(int db, int startByteAdr=0, int count=1)
{try{lock (this){return this.plc.ReadBytes(DataType.DataBlock, db, startByteAdr, count);}}catch{return new byte[2];}}public void PlcWriteBytes(int db, byte[] value, int startByteAdr = 0)
{lock (this){this.plc.WriteBytes(DataType.DataBlock, db, startByteAdr, value);}    
} public void PlcWriteBit(int db, int bitAdr, bool value, S7DataType.DataType dataType = 
S7DataType.DataType.DataBlock){int temp1 = bitAdr / 8;int temp2 = bitAdr % 8;lock (this){this.plc.WriteBit((DataType)dataType, db, temp1, temp2, value);}}

定义字节和Int16类型之间的转换函数(需要进行高低字节转换):

public static byte[] Int16ToBytes(Int16 data){byte[] temp = new byte[2];temp[0] =(byte) (data >> 8);temp[1] = (byte)(data);return temp;}public static Int16 BytesToInt16(byte[] bytes){Int16 temp;temp =(Int16)( bytes[0] << 8 | bytes[1]);return temp;}

S7.NET.dll 下载链接:
https://download.csdn.net/download/m0_37763193/11721737

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

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

相关文章

C#使用S7NetPlus以及PLCSIM Advanced V3.0实现西门子PLC仿真通讯

PLCSIM Advanced 简介 PLCSIM Advanced是西门子推出的一款功能强大的仿真软件&#xff0c;目前最新发布的版本为4.0&#xff0c;但鉴于新版本可能存在未知的bug&#xff0c;故本文使用V3.0。 V3.0支持仿真1500PLC及ET 200SP&#xff0c;可实现Socket网络通讯功能&#xff0c;…

西门子PLC与C#程序的S7.net通信

1、导入S7.net通信文件&#xff1a;打开工具->NuGet包管理器->管理解决方案得NuGet程序包&#xff0c;入下图搜索S7&#xff0c;安装S7netplus。 在程序中引用S7.Net文件 建立西门子PLC类 using System; using System.Collections.Generic; using System.Linq; using…

JAVA与西门子S7 PLC通信,方式一:S7connector

背景 在公司项目中&#xff0c;需要用到和PLC进行通讯&#xff0c;经过搜索后查询到使用JAVA与PLC通信两种方式&#xff0c;测试后达到正常读写的目的&#xff0c;于是记录下学习过程。 环境 SpringSpringMVCMybatisPlus / SpringBoot PLC: 西门子 S7-1500/S7-1200(1214C) …

汇川PLC和PLC之间ModebusTCP通讯

目录 一、AM402做主站和H3U通讯 1、Modebus主站中组态配置 2、读从站寄存器配置 3、写从站寄存器配置 4、程序中使用对从站读写操作的寄存器值 &#xff08;1&#xff09;I/O映射中地址关联 &#xff08;2&#xff09;创建自定义全局变量 &#xff08;3&#xff09;程序…

倍福TwinCAT3上位机与PLC通信测试(ADS通信) 包含C#和C++代码

倍福TwinCAT3上位机与PLC通信测试(ADS通信) 包含C#和C代码 倍福TwinCAT3上位机与PLC通信测试(ADS通信) 包含C#和C代码 本次测试需要环境&#xff1a; VS2013&#xff0c;TwinCAT3&#xff08;本人版本TC31-Full-Setup.3.1.4018.16&#xff09; 代码&#xff1a;C#代码&…

C#使用S7netPlus与PLC通讯(超简单)

前言 刚接到手一个项目&#xff0c;是开发一款程序&#xff0c;要和PLC有数据交互&#xff0c;如上图&#xff0c;设备发生故障后&#xff0c;PLC会发电报&#xff0c;我们收到电报后把故障显示出来&#xff0c;同时点击解除故障&#xff0c;也会给PLC发送相对应的电报。查了蛮…

C#与西门子PLC通信上位机程序

1.该程可以实现c#与西门子全系列plc(200smart&#xff0c;300&#xff0c;400&#xff0c;1200&#xff0c;1500)的以太网s7通讯&#xff0c;通讯传输快稳定。 2.该程序采用.dll动态链接库方式&#xff0c;是最近几年才出来的一种与西门子plc通讯的方式&#xff0c;本人经过几个…

C#中使用S7.net与西门子PLC通讯

最近因为工作的原因用到了西门子PLC&#xff0c;在使用过程中一直在思考上位机和PLC的通讯问题&#xff0c;后来上网查了一下&#xff0c;找到了一个专门针对S7开发的一个.net库–《S7netPlus》&#xff0c;PLC通讯方法比较多&#xff0c;所以也是在不断地学习中&#xff0c;以…

C#调用PCHMI与西门子PLC连接通讯

文章目录 一、PCHMI环境配置二、PCHMI连接S7&#xff08;PLC&#xff09;三、标签与按钮的使用总结 一、PCHMI环境配置 创建一个新项目 打开项目属性&#xff0c;更改输出路径为"bin\binexe"下 工具箱新建个选择卡&#xff0c;我们命名为PCHMI 鼠标右键【选择项】…

第三方调试助手的与S7-1200 PLC的通信

1、概述 西门子S7-1200 PLC支持多种协议通过以太网通讯方式&#xff0c;如OPC、TCP、S7、MODBUS-TCP等。TCP方式相比其它协议&#xff0c;具有更多的灵活性&#xff0c;更快的数据响应等优点&#xff0c; 需要PLC与电脑还有其他设备进行TCP通讯&#xff0c;使用TCP调试助手与…

TIA 博图 使用 S7通讯 Put Get 对两台PLC进行通讯

1.打开设备组态-属性-找到防护与安全&#xff1a; 把允许来自远程的PUT/GET 通讯访问✔&#xff0c;两台PLC都是这样&#xff0c;把组态下载进去。 2.设备与网络中&#xff0c;用端口1把两台设备连在一起&#xff1a; 两台设备需要在同一个网段里面 3.在PLC3新建一个DB块&#…

文心一言 VS 讯飞星火 VS chatgpt (23)-- 算法导论4.2 5题

五、V.Pan 发现一种方法&#xff0c;可以用 132 464 次乘法操作完成 68 x 68 的矩阵相乘&#xff0c;发现另一种方法&#xff0c;可以用 143 640 次乘法操作完成 70 x 70 的矩阵相乘&#xff0c;还发现一种方法&#xff0c;可以用155 424次乘法操作完成 72 x 72 的矩阵相乘。当…

【Python爬虫项目实战二】Chatgpt还原验证算法-解密某宝伪知网数据接口

目录 🐱背景🐱工具🐱分析流程🐔登陆分析🐔检索分析🐔模拟HTML代码请求🐔 解析HTML🐔 再次分析🐟分析js算法🐟 拿下furl🐟拿下sfname🐟拿下sfname🐔 构造请求🐔再次瓶颈🐔分析cookie🐟 成功演示🐱总结

[云炬python3玩转机器学习]6-2模拟梯度下降法

模拟梯度下降法 In [1]: import numpy as np import matplotlib.pyplot as plt import datetime;print (Run by CYJ,,datetime.datetime.now()) In [2]: plot_x np.linspace(-1., 6., 141) plot_xOut[2]: array([-1. , -0.95, -0.9 , -0.85, -0.8 , -0.75, -0.7 , -0.65…

OneFlow源码解析:静态图与运行时

作者&#xff5c;郑建华 更新&#xff5c;许啸宇、张文骁、成诚 OneFlow静态图的训练效率远高于动态图&#xff08;eager模式&#xff09;。本文试图通过一个简单例子&#xff0c;结合v0.8.0版本的代码&#xff0c;解读一下静态图和运行时的实现机制。 在开始之前&#xff0c;建…

infer源码阅读之yolo.cu

目录 yolo.cu注意事项一、2023/3/30更新前言1.宏定义2.Norm3.后处理3.1 affine_project3.2 decode3.2.1 decode_common3.2.2 decode_v8 3.3 nms3.4 invoker 4.预处理5.decode_mask6.AffineMatrix7.InferImpl7.1 adjust_memory7.2 preprocess7.3 load7.4 forwards 8.其它9.拓展之…

【爬虫实例】从B站和某论文网站分析python爬虫的一般编写思路———To someone

问题背景 好久没写爬虫了&#xff0c;前两天友人来问我python能不能爬论文&#xff0c;能不能告诉她爬虫的基本运行原理是什么&#xff0c;跑起来是什么样子。 我一看&#xff0c;论文爬取——爬虫最实用的场景之一&#xff0c;这不拿捏&#xff1f; 于是便尝试现场演示一番。…

【Metaverse系列一】元宇宙的奥秘

你有没有想过逃离闷热的会议室&#xff0c;瞬间移动到马尔代夫的沙滩上开会&#xff1f;开完会&#xff0c;纵身跳入大海和美人鱼捉迷藏。然后一个鲤鱼打挺直冲云霄&#xff0c;进入天宫一号开展科学研究&#xff0c;发现微重力环境下韭菜的长势喜人&#xff0c;而且在特定光照…

科大讯飞版ChatGPT测评:很好很强大

大家好&#xff0c;我是黄海广。 今天我体验到了科大讯飞版本的ChatGPT&#xff0c;这个产品凭借其强大的功能和出色的性能&#xff0c;超出了我对国产大模型的预期。 一、产品简介 这个模型全名叫讯飞星火认知大模型&#xff0c;官方是这么解释这个产品的&#xff1a; “科大讯…

七大语言模型PK,ChatGPT内容基线测评稳居第一

随着ChatGPT的爆火与流行&#xff0c;大型语言模型&#xff08;LLM&#xff09;与生成式人工智能&#xff08;AIGC&#xff09;不断跃入大众视野&#xff0c;随之也带来了许多内容风险隐患。 近日&#xff0c;知道创宇内容安全专家对互联网上流行的7款大型语言模型进行了全面和…