S7Net 读写西门子1500

news/2024/11/14 12:41:16/

1.首先在nuget中安装S7NetPlus 

 下面是读写方法

更多信息可以参考

Home · S7NetPlus/s7netplus Wiki · GitHub

下面的代码测试了Bool,Int,DInt,LReal四中类型。操作PLC感觉比较麻烦。测了好几天才成功。

环境 win10纯净版+博途V17+PLC1200 

using CompoundingDeviceWeb.Helper;
using S7.Net;
using System.Diagnostics;namespace CompoundingDeviceWeb.Communication
{public class S7Net{public static S7Net? Instance;public static bool IsConnected { get; set; }public static bool IsAvailable { get; set; }private Plc plc;/*bool DBXDint DBDReal DBWDBD是双字、DBW是字、DBB是字节Siemens C#
BOOL bool
BYTE byte
WORD short / ushort
DWORD int / uint
INT short / ushort
DINT int / uint
REAL float
LREAL double*/public static S7Net GetInstance(){if (Instance == null){Instance = new S7Net();}return Instance;}public async void Connect(){string PLCIP = AppSettingsHelper.Configuration["PLC:IP"];plc = new Plc(CpuType.S71500, PLCIP, 0, 1);try{plc.Open();Debug.WriteLine($"PLC Connect {plc.IsConnected} ");IsConnected = plc.IsConnected;}catch (Exception ex){LogHelper.Error(ex.Message);IsConnected = false;}finally{//IsAvailable =Debug.WriteLine("PLC Connect");SendPLCConnectStatus();}}public string PLCRead(string type, int DB, int startByteAdr, byte bitAdr = 0){if (plc == null || !IsConnected){Connect();}string Result = "";switch (type.ToUpper()){case "BOOL":Result = ((bool)plc.Read(DataType.DataBlock, DB, startByteAdr, VarType.Bit, 1,bitAdr)).ToString();break;case "BYTE":Result = ((byte)plc.Read(DataType.DataBlock, DB, startByteAdr, VarType.Byte, 1)).ToString();break;case "INT":Result = (plc.Read(DataType.DataBlock, DB, startByteAdr, VarType.Int, 1)).ToString();break;case "DINT":Result = ((Int32)plc.Read(DataType.DataBlock, DB, startByteAdr, VarType.DInt, 1)).ToString();break;case "LREAL":Result = ((double)plc.Read(DataType.DataBlock, DB, startByteAdr, VarType.LReal, 1)).ToString();break;}SendPLCConnectStatus();return Result;}public string PLCWrite(string type, int DB, int startByteAdr,string value, byte bitAdr = 0){if (plc == null || !IsConnected){Connect();}string Result = "";switch (type.ToUpper()){case "BOOL":plc.Write(DataType.DataBlock, DB, startByteAdr, bool.Parse(value),bitAdr);break;case "BYTE":plc.Write(DataType.DataBlock, DB, startByteAdr, value, bitAdr); break;case "INT":                   plc.Write(DataType.DataBlock, DB, startByteAdr, (ushort)(int.Parse(value)));break;case "DINT":plc.Write(DataType.DataBlock, DB, startByteAdr, Int32.Parse(value));break;case "LREAL":double MyData = Convert.ToDouble(value);plc.Write(DataType.DataBlock, DB, startByteAdr, MyData);break;}return Result;}}
}

另外博途要设置 允许远程操作否则S7Net会报错!

 报错的信息也有说要设置下面。我这里是设置上面就OK了

 


http://www.ppmy.cn/news/307224.html

相关文章

【S7协议解析】

目录 S7协议解析前言:框架介绍1、0xF0建立通信(Setup communication)2、解析userdata 包 (我是根据我抓的包顺序进行解析所以第二个就是到这个了)3、0x04 读数据操作(Read Var)4、0x05写入值 Wr…

西门子S7-200或Smart200编程指令讲解——时钟与网络

上一讲我们讲了位逻辑指令,那个是基本的入门指令,这一节我们将会讲解全部的西门子200指令. 1.时钟指令 时钟指令分别为读实时时钟和设置实时时钟 ,如图1-1 1. EN是指令使能,为1指令才有效; 2. T是时间缓冲区&#xff0…

S7-PLCSIM Advanced V4.0安装步骤和使用入门

S7-PLCSIM Advanced V4.0安装步骤和使用入门 如下图所示,大家可以在官网上下载安装包, 在安装包中点击“Start.exe”开始安装,如下图所示,如果这时弹出窗口提示需要重启电脑,这里选择“No”, 然后按照下面步骤删除注册表其中的一项,然后再次点击安装即可, 删除上…

S7-1200和S7-1500位逻辑指令

---| |---:常开触点 常开触点的激活取决于相关操作数的信号状态。当操作数的信号状态为“1”时,常开触点将关闭,同时输出的信号状态置位为输入的信号状态。当操作数的信号状态为“0”时,不会激活常开触点,同时该指令输…

西门子S7-1200组态PROFINET

1、首先参照官方给的帮助文档,里面有各种情况下的处理方式和组态教程S7-1200PROFINET通信 2、如果要组态第三方的 PROFINET gateway,比如PROFINET转RS485网关,就需要按照如下的方法进行操作 以sibotech的TS-181为例 通用串口(两…

S7-1200PLC与MCGS触摸屏通讯

一、西门子1200PLC 1、以TIA V15为例,创建工程并组态完成,设置PLC的IP。在”防护与安全”—“连接机制”—勾选“允许来自远程对象的PUT/GET通讯访问” 2、创建一个与触摸屏通讯的数据块,以DB2为例;并取消“优化块访问”。 3、在…

西门子PLC的S7协议报文解析说明

我们以S7的1500系列来查看握手和读取、写入【字Word或者位Bit】命令报文 以下报文不做说明时都是十六进制字节。 西门子PLC需要连接成功后发送两次握手命令方可进行读写通信。 西门子PLC的S7协议的头由四个字节组成.。 第一个字节数固定为03,第二个字节数固定为00 第三个字…

西门子S7-1200使用PN口总线控制V90伺服

目录 1、项目拓扑图 2、新建测试工程。 3、V90伺服的GSD文件安装。 4、设备组态。 5、插入轴模块。 6、伺服设置。 7、调试。 8、PLC程序对轴控制 1、项目拓扑图 PN口,即西门子ProfiNet网口。测试使用S7-1200系列的1211C控制器。项目拓扑图如下&#xff1a…