C#使用TCP-S7协议读写西门子PLC(四)

接上一篇,我们连接PLC并握手成功,并且封装生成读写PLC的命令

C#使用TCP-S7协议读写西门子PLC(三)-CSDN博客

这里我们进行读写基础数据类型、读取DB块的字符串、宽字符串、以及一系列连续数组。

新建部分类文件SiemensS7ProtocolUtil.Integrated.cs

主要方法

读取任意连续字节数据, 任意多个Byte读取--每次最多读取200个字节,如果超过200,自动分多次读取

public OperateResult<byte[]> ReadSerialData(PlcRegisterCategory plcRegisterCategory, ushort offsetAddress, ushort dbNumber, int readByteCount) 

写入任意连续的字节数组,每次写入400个字节,如果多于400个,分多次写入

public OperateResult WriteSerialData(PlcRegisterCategory plcRegisterCategory, ushort offsetAddress, ushort dbNumber, byte[] data)

读取一种基础数据类型

public OperateResult<T> ReadData<T>(PlcRegisterCategory plcRegisterCategory, ushort offsetAddress, ushort dbNumber) 

写入一种基础数据类型

public OperateResult WriteData<T>(PlcRegisterCategory plcRegisterCategory, ushort offsetAddress, ushort dbNumber, T data)

读取连续Real【Float】数组

public OperateResult<float[]> ReadSerialRealArray(PlcRegisterCategory plcRegisterCategory, ushort offsetAddress, ushort dbNumber, int realDataCount) 

写连续Real数组

public OperateResult WriteSerialRealArray(PlcRegisterCategory plcRegisterCategory, ushort offsetAddress, ushort dbNumber, float[] realArray) 

写入字符串

public OperateResult DB_WriteString(ushort dbNumber, ushort offsetAddress, int maxLength, string writeString)

读取字符串

public OperateResult<string> DB_ReadString(ushort dbNumber, ushort offsetAddress, byte maxLength)

部分类SiemensS7ProtocolUtil.Integrated.cs相关源程序如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace PlcSiemesS7Demo
{/// <summary>/// 综合读写S7协议操作,/// 所有读操作都统一使用方法:ReadSerialData(PlcRegisterCategory plcRegisterCategory, ushort offsetAddress, ushort dbNumber, int readByteCount) /// 所有写操作都统一使用方法:WriteSerialData(PlcRegisterCategory plcRegisterCategory, ushort offsetAddress, ushort dbNumber, byte[] data)/// </summary>public partial class SiemensS7ProtocolUtil{/// <summary>/// 读取任意连续字节数据,因西门子PLC的每个DB块的最大偏移量是65535,因此最多读取65536个字节数据/// 任意多个Byte读取--每次最多读取200个字节,如果超过200,自动分多次读取/// </summary>/// <param name="plcRegisterCategory"></param>/// <param name="offsetAddress"></param>/// <param name="dbNumber"></param>/// <param name="readByteCount"></param>/// <returns></returns>public OperateResult<byte[]> ReadSerialData(PlcRegisterCategory plcRegisterCategory, ushort offsetAddress, ushort dbNumber, int readByteCount) {byte[] destArray = new byte[readByteCount];int pageSize = (readByteCount + 199) / 200;for (int i = 0; i < pageSize; i++){int byteCount = 200;//每次读取200个字节if (i + 1 == pageSize) //最后一次读取剩余字节{byteCount = readByteCount - 200 * i;}OperateResult<byte, int, ushort> resultAddress = AnalysisAddress(plcRegisterCategory, offsetAddress, dbNumber);OperateResult<byte[]> operateResult = Read(new OperateResult<byte, int, ushort>[] { resultAddress }, new ushort[] { (ushort)byteCount });if (!operateResult.IsSuccess) {return operateResult;}Array.Copy(operateResult.Content, 0, destArray, 200 * i, byteCount);offsetAddress += 200;}return OperateResult.CreateSuccessResult(destArray);}/// <summary>/// 写入任意连续的字节数组,每次写入400个字节,如果多于400个,分多次写入/// 因西门子PLC的每个DB块的最大偏移量是65535,因此最多写入65536个字节数据/// </summary>/// <param name="plcRegisterCategory"></param>/// <param name="offsetAddress"></param>/// <param name="dbNumber"

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

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

相关文章

C和指针:函数

函数定义 函数体就是一个代码块&#xff0c;它在函数被调用时执行。 类型 函数名(形式参数) 代码块 与函数定义相反&#xff0c;函数声明出现在函数被调用的地方。 函数声明 编译器是如何知道该函数期望接受的是什么类型和多少数量的参数。 原型 int *find_int( int key…

ASPICE评估全流程解析:汽车软件开发组织能力的系统化评估

ASPICE&#xff08;Automotive SPICE&#xff09;评估的过程是一个系统化和详尽的流程&#xff0c;旨在评估汽车软件开发组织在软件开发过程方面的能力。 以下是ASPICE评估过程的详细描述&#xff1a; 1. 评估准备阶段 a. 确定评估目标和范围 明确评估的目标&#xff0c;如评…

同时拥有独显和核显,怎么让应用程序选择使用哪个GPU?

看你现在使用的是核显还是独显 勾选上GPU引擎选项&#xff0c;后面便会标识你所使用的是哪种显卡&#xff0c;如果是独立显卡&#xff0c;就可以免去后续的操作&#xff1b;如果不是&#xff0c;那么请继续接下来的操作。 将你需要使用独显的程序换成gpu1&#xff08;独显&am…

Spring Boot 注解探秘:JSON 处理的魔法世界

Spring Boot 注解探秘&#xff1a;JSON 处理的魔法世界 首发2024-09-11 16:43潘多编程 在当今这个数据驱动的世界里&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;已经成为了数据交换的事实标准。无论是前端与后端的通信&#xff0c;还是系统间的服务交…

C# List定义和常用方法

栏目总目录 List的定义 列表&#xff08;List&#xff09;是一种常用的集合类型&#xff0c;它属于System.Collections.Generic命名空间。列表是一个有序集合&#xff0c;可以包含重复的元素&#xff0c;并且可以根据索引访问元素。 List< T > List<T> 是一个泛…

佰朔资本:未来钢铁行业产业格局有望稳中趋好

组织指出&#xff0c;未来钢铁作业工业格式有望稳中趋好&#xff0c;叠加当时部分公司已经处于价值小看区域&#xff0c;现阶段仍具结构性出资机会&#xff0c;尤其是拥有较高毛利率水平的优特钢企业和本钱管控力度强、具有规划效应的龙头钢企&#xff0c;未来存在估值修改的机…

git submodule sync

git submodule 是 Git 提供的一种功能&#xff0c;用于在一个 Git 仓库中嵌套另一个 Git 仓库。它可以帮助管理和跟踪外部项目或依赖项&#xff0c;特别是在以下场景中非常有用&#xff1a; 1. 管理外部依赖 当你的项目依赖于其他外部项目或库时&#xff0c;可以使用 git sub…

JavaEE:文件操作

文章目录 文件操作和IO文件系统操作File介绍属性构造方法方法 代码演示前四个listmkdirrenameTo 文件操作和IO 文件系统操作 创建文件,删除文件,创建目录,重命名… Java中有一个类,可以帮我们完成上述操作. 这个类叫做File类. File介绍 属性 这个表格描述了文件路径的分隔符…

应急响应实战---是谁修改了我的密码?

前言&#xff1a;此次应急响应为真实案例&#xff0c;客户反馈无法通过密码登录服务器&#xff0c;疑似服务器被入侵 0x01 如何找回密码&#xff1f; 客户服务器为windows server2019&#xff0c;运维平台为PVE平台&#xff1b;实际上无论是windows系统或者是linux系统&#…

ROS2 Control controller_interface说明

ROS2 Control controller_interface说明 文章目录 前言controller_interface说明Class ControllerInterfaceBaseClass ControllerInterface说明Class ChainableControllerInterface说明 semantic_components说明Class ForceTorqueSensorClass IMUSensorClass RangeSensor 参考 …

Jacoco的XML报告详解

使用jacococli完成jacoco测试报告生成后,会看到有一个.xml结尾的文件,这个就是xml格式的覆盖率报告。除了xml还有csv、html格式的报告,本文进介绍xml报告。 DTD文件 在介绍jacoco的xml报告之前,我们应该先看一下对应的DTD文件的内容。(DTD的全称为Document Type Definitio…

Java应用的数据库连接池连接池性能测试

Java应用的数据库连接池连接池性能测试 大家好&#xff0c;我是微赚淘客返利系统3.0的小编&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 数据库连接池的性能测试是确保Java应用能够高效运行的关键步骤。性能测试可以帮助我们评估连接池在高并发…

Rust 所有权 借用与引用

文章目录 发现宝藏1. 所有权&#xff08;Ownership&#xff09;2. 引用&#xff08;References&#xff09;2.1 不可变引用2.2 可变引用2.3 引用的规则 3. 悬垂引用&#xff08;Dangling References&#xff09;4. 借用&#xff08;Borrowing&#xff09;结论 发现宝藏 前些天…

个人学习笔记7-5:动手学深度学习pytorch版-李沐

#人工智能# #深度学习# #语义分割# #计算机视觉# #神经网络# 计算机视觉 13.10 转置卷积 例如&#xff0c;卷积层和汇聚层&#xff0c;通常会减少下采样输入图像的空间维度&#xff08;高和宽&#xff09;。然而如果输入和输出图像的空间维度相同&#xff0c;在以像素级分类…

【App】React Native

React Native 的优势&#xff1a; 开发体验好 用统一的代码规范开发移动端程序&#xff0c;不用关注移动端的差异.开发成本低 开发一次&#xff0c;可以生成 Android 和 IOS 俩个系统上的 App学习成本低 只要掌握 JavaScript 和 React 就可以进行移动端开发 React Native 的不…

【物联网技术大作业】设计一个智能家居的应用场景

前言&#xff1a; 本人的物联网技术的期末大作业&#xff0c;希望对你有帮助。 目录 大作业设计题 &#xff08;1&#xff09;智能家居的概述。 &#xff08;2&#xff09;介绍智能家居应用。要求至少5个方面的应用&#xff0c;包括每个应用所采用的设备&#xff0c;性能&am…

2023级JavaScript与jQuery

第三课&#xff1a;JavaScript对象编程 一.预习笔记 1.Date对象 对象创建&#xff1a;var myDatenew Date() 输出显示当前日期的标准时间 对象创建&#xff1a;var myDatenew Date(“2024/09/14”) 对象创建&#xff1a;var myDatenew Date(2024,9,14) 当前对象创建时&…

TiDB从0到1学习笔记(精华篇)

历时四个月&#xff0c;恭喜赵老师的《TiDB从0到1》 系列文章顺利完结&#xff0c;小编再次梳理一遍文稿&#xff0c;并附注解分享给大家。 整体架构 从 TiDB 1.0 到 8.0&#xff0c;TiDB 的体系结构一直在不断演进。接下来让我们一起看看整体架构的变化。 TiDB v1 TiDB v1&…

Windows 环境下 vscode 配置 C/C++ 环境

vscode Visual Studio Code&#xff08;简称 VSCode&#xff09;是一个由微软开发的免费、开源的代码编辑器。它支持多种编程语言&#xff0c;并提供了代码高亮、智能代码补全、代码重构、调试等功能&#xff0c;非常适合开发者使用。VSCode 通过安装扩展&#xff08;Extension…

node.js实现阿里云短信发送

效果图 实现 一、准备工作 1、官网直达网址&#xff1a; 阿里云 - 短信服务 2、按照首页提示依次完成相应资质认证和短信模板审核&#xff1b; 3、获取你的accessKeySecret和accessKeyId&#xff1b; 方法如下&#xff1a; 获取AccessKey-阿里云帮助中心 4、获取SignNa…