C#——使用S7netplus包实现西门子s7协议

news2024/12/26 22:00:57

使用S7netplus包实现西门子s7协议

S7netplus是一个用于与Siemens S7 PLC进行通信的C#库。它提供了一种简单的方式来读取和写入PLC中的数据。

安装

可以通过NuGet包管理器来安装。

S7netplus的使用

一、连接
// CpuType:PLC的CPU型号,咱用的这个设备1200 西门子1212C
// ip:PLC的ip地址
// rack:机台号的位置(plc知识)
// slot:插槽号的位置(plc知识)
// public Plc(CpuType cpu, string ip, short rack, short slot)
Plc plc = new Plc(CpuType.S71200, "192.168.102.202", 0, 1);
try { 
    // 打开连接
    myPlc.Open();
    // 是否连接成功
    Console.WriteLine(myPlc.IsConnected);
    if (myPlc.IsConnected)
    {
        MessageBox.Show("打开连接成功");
    }
} 
catch(Exception ex)
{
    MessageBox.Show("打开失败:" + ex.Message);
}

二、断开plc
    if (myPlc != null && myPlc.IsConnected)
    {
      myPlc.Close();
    }
    else
    {
      MessageBox.Show("请先连接PLC");
    }

三、数据写入和读取
    // public void Write(string variable, object value)
    // variable:PLC具体写入变量的名称("DB1.DBX0.0", "DB20.DBD200", "MB20", "T45", etc)
    // value:写入的具体的值
    
    // 写
    plc.Write("M10.1", True);  // 写入布尔值
    // 读
    plc.Read("M10.1");

四、实例
using S7.Net;
 
class Program
{
    static void Main()
    {
        // 创建plc对象
        // 所连接的西门子设备是s7-1200
        // 参数1: cpu类型 , 参数2: ip地址 , 参数3: 机架号 , 参数4: 插槽号
        var plc = new Plc(CpuType.S7300, "192.168.1.10", 0, 2); // 创建一个Plc实例
 
        try
        {
            plc.Open(); // 打开连接
 
            if (plc.IsConnected)
            {
                ushort data = (ushort)plc.Read("DB1.DBW10"); // 从DB1块的DBW10地址读取一个字
                Console.WriteLine($"Original value: {data}");
 
                plc.Write("DB1.DBW10", (ushort)1234); // 写入一个新的值到DB1块的DBW10地址
                data = (ushort)plc.Read("DB1.DBW10"); // 再次读取确认写入
                Console.WriteLine($"New value: {data}");
            }
        }
        catch (Exception e)
        {
            Console.WriteLine($"An error occurred: {e.Message}");
        }
        finally
        {
            if (plc.IsConnected)
            {
                plc.Close(); // 关闭连接
            }
        }
    }
}

不同类型数据的读取示例

    Console.WriteLine("--------------bool-------------------");
    // 位读取,也就是读取布尔值
    bool b = (bool)plc.Read("DB21.DBX0.0");
    Console.WriteLine(b);
    b = (bool)plc.Read("DB21.DBX0.1");
    Console.WriteLine(b);
    // 参数:区域类型,db块编号,开始读取字节位置,读取数据类型,读取个数,[位地址]
    var ab = plc.Read(DataType.DataBlock, 21, 0, VarType.Bit, 4,1);
    Console.WriteLine(ab);
    
    Console.WriteLine("--------------byte-------------------");
    byte b1 = (byte)plc.Read("DB21.DBB1");
    Console.WriteLine(b1);
    b1 = (byte)plc.Read(DataType.DataBlock, 21, 1, VarType.Byte, 1);
    Console.WriteLine(b1);
    
    Console.WriteLine("--------------word-------------------");
    ushort us1 = (ushort)plc.Read("DB21.DBW2");
    Console.WriteLine(us1);
    us1 = (ushort)plc.Read(DataType.DataBlock, 21, 2, VarType.Word, 1);
    Console.WriteLine(us1);
    
    Console.WriteLine("--------------DWord-------------------");
    uint i1 = (uint)plc.Read("DB21.DBD4");
    Console.WriteLine(i1);
    i1 = (uint)plc.Read(DataType.DataBlock, 21, 4, VarType.DWord, 1);
    Console.WriteLine(i1);
    
    
    Console.WriteLine("--------------USInt-------------------");
    b1 = (byte)plc.Read("DB21.DBB1");
    Console.WriteLine(b1);
    b1 = (byte)plc.Read("DB21.DBB8");
    Console.WriteLine(b1);
    b1 = (byte)plc.Read(DataType.DataBlock, 21, 8, VarType.Byte, 1);
    Console.WriteLine(b1);
    
    Console.WriteLine("--------------SInt-------------------");
    sbyte b2 = (sbyte)(byte)plc.Read("DB21.DBB9");
    Console.WriteLine(b2);
    b2 = (sbyte)(byte)plc.Read(DataType.DataBlock, 21, 9, VarType.Byte, 1);
    Console.WriteLine(b2);
    
    
    Console.WriteLine("--------------UInt-------------------");
    ushort us = (ushort)plc.Read("DB21.DBW10");
    Console.WriteLine(us);
    us = (ushort)plc.Read(DataType.DataBlock, 21, 10, VarType.Word, 1);
    Console.WriteLine(us);
    
    Console.WriteLine("--------------Int-------------------");
    short s = (short)(ushort)plc.Read("DB21.DBW12");
    Console.WriteLine(s);
    
    
    Console.WriteLine("--------------UDInt-------------------");
    uint ui = (uint)plc.Read("DB21.DBD14");
    Console.WriteLine(ui);
    ui = (uint)plc.Read(DataType.DataBlock, 21, 14, VarType.DWord, 1);
    Console.WriteLine(ui);
    
    Console.WriteLine("--------------DInt-------------------");
    int i = (int)(uint)plc.Read("DB21.DBD18");
    Console.WriteLine(i);
    i = (int)plc.Read(DataType.DataBlock, 21, 18, VarType.DInt, 1);
    Console.WriteLine(i);
    
    
    Console.WriteLine("--------------Real-------------------");
    float f = ((uint)plc.Read("DB21.DBD22")).ConvertToFloat();
    Console.WriteLine(f);
    f = (float)plc.Read(DataType.DataBlock, 21, 22, VarType.Real, 1);
    Console.WriteLine(f);
    
    
    Console.WriteLine("--------------LReal-------------------");
    double d = (double)plc.Read(DataType.DataBlock, 21, 26, VarType.LReal,1);
    Console.WriteLine(d);
    
    
    Console.WriteLine("--------------DateTime-------------------");
    DateTime t = (DateTime)plc.Read(DataType.DataBlock, 21, 44, VarType.DateTimeLong, 1);
    Console.WriteLine(t);

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

write_sdc和write_script区别

文章目录 一、set_disable_clock_gating_check二、write_sdc和write_script区别1. write_sdc2. write_script 一、set_disable_clock_gating_check set_disable_clock_gating_check对指定的cell/pin/lib_cell/lib_pin设置是否进行clock gating的时序检查。 对于工具插入或者…

C语言——计算1-1/2+1/3-...+1/99-1/100+...相似题目集合

题目一&#xff1a; #include<stdio.h> #include<math.h>int main() {int n 1;float sum 0, term 1, sign 1;while (fabs(term) > 1e-4){term sign / n;sum term;sign -sign;n;}printf("sum%f", sum);return 0; } 题目二&#xff1a; #include…

服务器数据恢复—Raid故障导致存储中数据库数据丢失的数据恢复案例

服务器存储数据恢复环境&故障情况&#xff1a; 一台光纤存储中有一组由16块硬盘组成的raid。 该存储出现故障导致数据丢失。RAID中2块盘掉线&#xff0c;还有1块盘smart状态为“警告”。 服务器存储数据恢复过程&#xff1a; 1、通过该存储自带的存储管理软件将当前存储的完…

关于之前写的一篇“快速构建MES系统”引发的争议,后续来了~~

之前因写了一篇用低代码开发平台快速搭建MES系统&#xff0c;结果被大量的网友骂得体无完肤&#xff0c;不过&#xff0c;默默点赞、默默收藏、默默分享的用户还是大有人在。 在某些方面&#xff0c;或许在语言表达上不够精确&#xff0c;不够准确&#xff0c;这里也给各位看官…

免费微博批量取关工具

下载地址&#xff1a;https://pan.quark.cn/s/1d507dcfffe9 软件功能 批量删除微博批量取消关注批量移除粉丝批量取消收藏批量取消赞批量删除评论

<数据集>停车场空位识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;12416张 标注数量(xml文件个数)&#xff1a;12416 标注数量(txt文件个数)&#xff1a;12416 标注类别数&#xff1a;2 标注类别名称&#xff1a;[space-empty, space-occupied] 序号类别名称图片数框数1space-occ…

科技驱动健康,景联文科技提供高质量高血压数据采集

当前&#xff0c;穿戴手表市场呈现出快速发展趋势&#xff0c;已成为可穿戴设备领域的一个重要组成部分。市场上智能手表的厂商包括小米、华为、苹果、步步高、vivo、努比亚、三六零、科大讯飞、等。 高血压数据采集可为高血压的预防提供支持&#xff0c;持续监测可以帮助用户及…

云原生课程-k8s基础系列-k8s实战之pod详解

pod是可以在k8s中创建和管理的&#xff0c;最小的可部署的计算单元&#xff0c;pod(就像在豌豆荚中&#xff09;是一组&#xff08;一个或多个&#xff09;容器&#xff1b;这些容器共享存储&#xff0c;网络&#xff0c;以及怎样运行这些容器的声明。 创建pod kubectl run my…

【VScode编辑器】VScode基本使用全面讲解

1&#xff0c;VScode是什么&#xff1f; Visual Studio Code 简称 VS Code&#xff0c;是一款跨平台的、免费且开源的现代轻量级代码编辑器。它功能强大&#xff0c;提供了丰富的功能和扩展性&#xff0c;几乎支持主流开发的特性。 VSCode里面有对应的插件安装功能&#xff0c;…

基于51单片机的智能车库系统proteus仿真

地址&#xff1a; https://pan.baidu.com/s/1Pw9pbytbYqCoecGxSFNqpg 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMicroelectro…

【网络爬虫篇】逆向实战—某东:滑块验证码(逆向登录)2024.8.7最新发布,包干货,包详细

【网络爬虫篇】更多优秀文章借鉴&#xff1a; 1. 使用Selenium实现黑马头条滑块自动登录 2. 使用多线程采集爬取豆瓣top250电影榜 3. 使用Scrapy爬取去哪儿网游记数据 4. 数据采集技术综合项目实战1&#xff1a;国家水稻网数据采集与分析 5. 数据采集技术综合项目实战2&#x…

电子画册设计源码系统:轻松制作各行各业在线画册展示 带完整的安装代码包以及搭建教程

在信息化时代&#xff0c;传统的纸质画册已经无法满足现代人的阅读需求。而电子画册具有信息更新迅速、展示方式多样、交互性强等优点&#xff0c;能够更好地满足用户对于信息的获取和展示需求。同时&#xff0c;随着移动互联网的普及&#xff0c;用户对于在线浏览和分享的需求…

GEE:设置自定义风格底图

作者&#xff1a;CSDN _养乐多_ 本文将介绍如何在 Google Earth Engine &#xff08;GEE&#xff09;平台上&#xff0c;设置底图风格。结果如下图所示&#xff0c; 文章目录 一、代码二、完整代码链接 一、代码 以下代码将GEE的底图根据自己的需求设置风格。 var land { …

为啥https比http慢

Https有ssl的握手 HTTP没有 HTTPS TCP 和HTTP 的TCP 时间差不是很大 HTTPS请求中,ssl所占的时间比例是请求时间总和93.37%, HTTPS请求中,ssl的请求会是tcp请求的14倍,而HTTP中没有这个问题 建议:对安全要求不是很高的,不要使用https请求 图例

【漏洞复现】PowerPMS——APPGetUser——SQL注入

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 PowerPMS 是一个集成的企业管理系统,涵盖了财务管理、销售管理、…

常见八股面试题:Dubbo 和 Spring Cloud Gateway 有什么区别?

大家好&#xff0c;我是鸭鸭&#xff01; 此答案节选自鸭鸭最近弄的面试刷题神器面试鸭&#xff0c;更多大厂常问面试题&#xff0c;可以点击进行阅读哈&#xff01; 目前这个面试刷题神器刚出&#xff0c;有网页和小程序双端可以阅读&#xff01; 回归面试题&#xff01; …

Android中的Binder

binder是Android平台的一种跨进程通信&#xff08;IPC&#xff09;机制&#xff0c;从应用层角度来说&#xff0c;binder是客户端和服务端进行通信的媒介。 ipc原理 ipc通信指的是两个进程之间交换数据&#xff0c;如图中的client进程和server进程。 Android为每个进程提供了…

中值定理适用题型

探讨f 和 f’用 拉格朗日中值定理探讨f与f的高阶导数泰格公式探讨 f, g 和 f’, g’柯西中值定理探讨 f’0罗尔定理、费马定理f0零点定理 延伸&#xff1a; 拉格朗日中值定理的重要作用之一:用 f’ 的大小来限定 f 的变化幅度大小

快团团供货团长帮卖团长如何反向核销订单?

一、功能说明 当已核销的订单需要处理退款时&#xff0c;可以先操作反向核销&#xff08;取消核销&#xff09;&#xff0c;再处理退款。 二、具体操作步骤 在商品核销中找到出想要“反向核销”的订单&#xff0c;在本次核销中点“-”号&#xff0c;再点击批量核销即可。 注意&…

【每日刷题】Day96

【每日刷题】Day96 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. LCP 44. 开幕式焰火 - 力扣&#xff08;LeetCode&#xff09; 2. 1022. 从根到叶的二进制数之和 - …