利用C#和Snap7工具模拟S7通信(包含DB地址讲解)

之前写过一篇用KepServerEx做模拟S7的通信数据,参考链接:

通过C#和KepServer完成模拟S7协议通信_c# 与kepserver-CSDN博客

但KepServerEx是收费的,而且模拟的DB块超过64就不行了,当然Snap7在本文中也是只能模拟DB1、DB2和DB3的数据,但Snap7提供了C#版的运行程序,完全可以根据需要修改源码完成要模拟的DB块(由于有一个项目需要,我已经尝试过修改源码成功模拟DB100、DB101、DB102和DB103的数据,后面有空再把代码分享出来)

本文中Snap7工具下载链接:https://download.csdn.net/download/zxy13826134783/89451661

如果失效了也可以从官网下载:Snap7 Homepage

下载1.4.1版本

里面有很多东西,本文只用到clientdemo.exe和serverdemo.exe,通过搜索文件夹就能找到

准备工作完毕,正式开始本文的内容,步骤如下:

1  打开serverdemo.exe程序,然后点击start,如下图:

可以看到下面输出"Server started"的字样,表示启动成功了,但我在虚拟机中点击Start会报没有权限的错误,防火墙也关了,具体原因不明,如下图:

先来熟悉一下serverdemo.exe中的DB块,可以看到可以模拟DB1、DB2和DB3的数据

上图中第1个红色方框的十六进制地址为0000,第2个红色方框十六进制的地址为000F,第3个红色方框十六进制的地址为0012,地址排布相信你能看得懂

2 接着打开客户端工具clientdemo.exe,验证serverdemo.exe是不是好使,输入本机ip: 127.0.0.1,然后点击Connect按钮,如下图:

接着往erverdemo.exe端的DB1中的地址0000写入4,在clientdemo中的具体操作如下:

3  打开visual studio 

3.1 新建名为S7Demo的控制台项目,.net framework选择4.8

3.2 通过nuget安装S7netplus,版本选择最新,如下图:

3.3  新增测试代码如下:

class Program{static void Main(string[] args){Plc plc = new Plc(CpuType.S7400, "127.0.0.1", 0, 0);plc.Open();if (plc.IsConnected){Console.WriteLine("连接成功");byte b = 22;plc.Write("DB1.DBB0", b);Console.WriteLine("修改后的值为:" + plc.Read("DB1.DBB0"));}else{Console.WriteLine("连接失败");}Console.ReadLine();}}

代码中的地址"DB1.DBB0"代表的含有如下:

解释:

DB1:表示编号为1的数据块

DBB:是“Data Block Byte”的缩写,表示数据块中的字节

0:是字节的偏移地址。在数据块中,每个字节都有一个唯一的偏移地址,从0开始

注意:1个字节等于8个bit(位)

对应到的地址是DB1地址块的十六进制地址0000,erverdemo工具是这个位置:

运行C#程序,运行结果如下:

erverdemo工具的16是十六进制的,对应到的10机制数是22

当然咯,换成如下的代码,结果也是一样的

class Program{static void Main(string[] args){Plc plc = new Plc(CpuType.S7400, "127.0.0.1", 0, 0);plc.Open();if (plc.IsConnected){Console.WriteLine("连接成功");byte b = 22;//plc.Write("DB1.DBB0", b);//Console.WriteLine("修改后的值为:" + plc.Read("DB1.DBB0"));plc.WriteBytes(DataType.DataBlock, 1, 0, new byte[] { b });}else{Console.WriteLine("连接失败");}Console.ReadLine();}}

4  把前面的变量b的类型从bool 修改为int,再来观察一下结果,先把serverdemo中的数据还原为0,代码如下:

static void Main(string[] args){Plc plc = new Plc(CpuType.S7400, "127.0.0.1", 0, 0);plc.Open();if (plc.IsConnected){Console.WriteLine("连接成功");int b = 22;plc.Write("DB1.DBB0", b);Console.WriteLine("修改后的值为:" + plc.Read("DB1.DBB0"));}else{Console.WriteLine("连接失败");}Console.ReadLine();}

运行结果如下:

从上图中可以看出,十进制值22已经写到DB1块中的地址0003了,为什么呢?因为C#中的int类型的数据是占4个字节的,S7netplus库会自动识别对应的数据类型,然后进行写入。

5  往地址DB1.DBX1.1写入数据

DB1.DBX1.1地址解释:

DB1 是数据块的编号

DBX 表示数据块中的位(Data Block Bit),第一个1 是字节的偏移地址,而第二个 1 是该字节中的位偏移,即为地址DB1.DBB1的第二位(由于1个字节有8位)

(大白话解释为操作DB1数据块的第2个字节中的第2位)

C#代码如下:

 class Program{static void Main(string[] args){Plc plc = new Plc(CpuType.S7400, "127.0.0.1", 0, 0);plc.Open();if (plc.IsConnected){Console.WriteLine("连接成功");bool b =true;plc.Write("DB1.DBX1.1", b);Console.WriteLine("修改后的值为:" + plc.Read("DB1.DBX1.1"));}else{Console.WriteLine("连接失败");}Console.ReadLine();}}

程序运行结果如下:

图中的十六进制02转换为二进制为00000010,刚好是DB1数据块的第2个字节中的第2位为1。

由于是对二进制的位进行操作,修改的值只能是true或者false值,如果把上面的b变量的bool类型修改为int类型则代码会报错

好了,本文的内容到此结束。

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

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

相关文章

玄机平台流量特征分析-常见攻击事

前言 熟悉常见的攻击流量特征,我们就可以通过主机的一个流量情况来判断主机遭受了何种攻击。这里来看看玄机平台的一道题目。 步骤1.1 这里需要我们找出恶意扫描者,也就是黑客的ip。下载好附件之后用wiresharke打开,直接筛选http协议的流量…

2-9 基于matlab的传递矩阵计算轴的模态

基于matlab的传递矩阵计算轴的模态,包括模态频率和模态振型,可设置轴的结构参数。程序已调通,可直接运行。 2-9 传递矩阵计算轴的模态 模态频率 - 小红书 (xiaohongshu.com)

ETL可视化工具 DataX -- 简介( 一)

引言 DataX 系列文章: ETL可视化工具 DataX – 安装部署 ( 二)ETL可视化工具 DataX – DataX-Web安装 (三) 1.1 DataX 1.1.1 Data X概览 DataX 是阿里云DataWorks数据集成的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现…

【Go语言精进之路】构建高效Go程序:了解string实现原理并高效使用

🔥 个人主页:空白诗 🔥 热门专栏:【Go语言精进之路】 文章目录 引言一、Go语言的字符串类型1.1 字符串的定义1.2 字符串的零值可用1.3 字符串的不可变性1.4 字符串的拼接1.5 字符串的常用方法1.6 实际使用示例 二、字符串的内部表…

多路h265监控录放开发-(1)建立head窗口并实现鼠标拖动整个窗口

头文件: //鼠标事件 用于拖动窗口//一下三个函数都是QWidget的可重载成员函数void mouseMoveEvent(QMouseEvent* ev) override;void mousePressEvent(QMouseEvent* ev) override;void mouseReleaseEvent(QMouseEvent* ev) override; 源文件: / /// 鼠标…

今年的618,似乎很平淡!

电商平台取消预售制度的第一个大促,快递业表现如何? 今年的618大促与往年有些不同,自4月起,天猫、京东、快手等主流平台相继官宣取消预售,打出“现货开卖”标签,这意味着消费者不用再被“烧脑”的优惠计算…

RoboDK试用期间提示无效或过期的许可证

问题描述 RoboDK下载下来在试用期间提示如下信息,不知道什么原因 临时解决方法 将C:\Users\${username}\AppData\Roaming\RoboDK该目录下的文件全部删除掉,便可以正常使用RoboDK应用了,但是等软件关闭后还是会出现上面的问题,…

【JAVA开发笔记】实战演练,如何用EasyExcel导出表格,并且自定义合并单元格

目录 1. 前言 2. EasyExcel简介 3. EasyExcel简单导出案例讲解 3.1 EasyExcel依赖引入 3.2 测试类创建 3.3 Excel导出实现 4. EasyExcel合并单元案例讲解 4.1 实现自定义合并策略 4.2 使用自定义合并策略 5. 总结 1. 前言 项目上,需将一个列表数据导出Ex…

简易开发一个app

即时设计网站 即时设计 - 可实时协作的专业 UI 设计工具 需要先设计好UI界面 上传到codefun 首次需要安装 自动生成代码 打开hb软件 新建项目 打开创建的项目 删除代码 复制代码过去 下载图片 将图片放到文件夹里 改为这种格式 index.vue 如果不需要uni-app导航栏可以修改 …

ECharts 词云图案例二:创意蒙版应用

ECharts 词云图案例二:创意蒙版应用 引言 在数据可视化领域,ECharts 以其强大的功能性和灵活性,成为开发者和设计师的首选工具之一。继上一篇关于 ECharts 词云图的详细介绍后,本文将探索词云图的进阶应用——使用蒙版来创造更具…

生产看板管理系统内容有哪些?

相信很多做生产管理的朋友都会遇到如下问题,我就在想,是否能一个创建“透明的”的工作场所?让员工和管理者能够实时查询生产进度,及时发现生产中的问题。 生产进度难追踪 生产过程不透明 生产决策缺乏数据支持 ——能&#xf…

Blurry - hackthebox

简介 靶机名称:Blurry 难度:中等 靶场地址:https://app.hackthebox.com/machines/605 本地环境 靶机IP :10.10.11.19 linux渗透机IP(kali 2024.2):10.10.16.17 windows渗透机IP(windows11&#xff0…

虚拟机怎么额外搭建两个Redis节点,配置多个 Redis 实例

前提条件 在开始之前,请确保你已经具备以下条件: 一台已安装 Redis 的虚拟机。虚拟机上已安装基本的 Linux 工具(例如 FinalShell)。 步骤二:配置额外的 Redis 实例 接下来,我们将配置两个新的 Redis 实…

frp安装与配置

个人从网上杂乱的信息中学习、试错,记录自己成功配置的方法,避免遗忘 一、frp的下载 因目前无法下载,仅保留下载方法,版本号根据实际修改,目前使用0.54版,不同系统下载不同文件。 wget https://github.c…

【前端取不到cookie的的原因】http-only

某条cookie有http-only属性时,下面两种方法都取不到,还是改需求吧,别取了 1、 npm install js-cookie --save import Cookies from js-cookie let cookieValue Cookies.get(name)2、document.cookie

ChatGPT的问题与回复的内容导出(Chorme)

我给出两种方式,第一种方式无使用要求,第二种方式必须安装Chorme 个人更推荐第二种方式 第一种方式:使用chatgpt自带的数据导出 缺点:会将当前未归档的所有聊天记录导出,发送到你的电子邮箱中 第二种方式&#xff1a…

大模型技术工程师:抓住时代机遇,成为行业精英_

伴随AI大模型的火热,中国科技大厂们正在掀起一场「跑步AI化」的风暴。从顶层战略到业务线重构,AI无疑已成为大厂们押注未来的新故事。 大模型时代已经到来 大模型已成为全球竞争热点,一个大模型时代已经到来。 大模型具备三个特点&#xf…

智能网站管理系统

智能网站管理系统,即智能化的网站管理工具,是为了提高网站管理效率和简化操作流程而开发的一种软件系统。它集合了各种先进的技术和功能,为网站管理员提供了一套强大而可靠的解决方案。 智能网站管理系统的核心功能是网站内容管理。传统的网站…

css设置滚动条样式;滚动条设置透明

滚动条透明代码 .resizable-div {resize: both;/* 允许水平和垂直调整大小 */overflow: auto;/* 确保内容超出边界时出现滚动条 */ } /* 滚动条整体样式 */ .resizable-div::-webkit-scrollbar {width: 4px; /* 竖直滚动条宽度 */height: 4px; /* 水平滚动条高度 */ }/* 滚动条…

探索C嘎嘎的奇妙世界:第十四关---STL(string的模拟实现)

1. string类的模拟实现 1.1 经典的string类问题 上一关已经对string类进行了简单的介绍,大家只要能够正常使用即可。在面试中,面试官总喜欢让学生自己来模拟实现string类,最主要是实现string类的构造、拷贝构造、赋值运算符重载以及析构函数…