当前位置: 首页 > news >正文

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"

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • FlinkCDC 3.2.0 新增优点 Pattern Replacement in routing rules
  • docker 学习笔记
  • 初识爬虫1
  • 数据结构————栈的讲解(超详细!!!)
  • 基于SpringBoot的租房网站系统
  • AutoDL云计算GPT-SoVITS-TTS语音声色克隆语音合成
  • Rasa: Rasa Core中的相关概念及用法
  • Oracle数据恢复—Oracle数据库误删除表数据如何恢复数据?
  • WPF UpdateSourceTrigger属性
  • 使用 Milvus、vLLM 和 Llama 3.1 搭建 RAG 应用
  • STL和C++11
  • vscode设置vue标签不换行
  • 捕获和处理异常非常重要
  • 使用 C++ 获取系统时间
  • 【EI稳定,马来亚大学主办】2024年计算机与信息安全国际会议(WCCIS 2024,9月27-29)
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Apache的80端口被占用以及访问时报错403
  • CentOS7 安装JDK
  • ES6 ...操作符
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • Python学习之路16-使用API
  • Shell编程
  • underscore源码剖析之整体架构
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • windows-nginx-https-本地配置
  • windows下如何用phpstorm同步测试服务器
  • yii2权限控制rbac之rule详细讲解
  • 对象引论
  • 删除表内多余的重复数据
  • 收藏好这篇,别再只说“数据劫持”了
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • MyCAT水平分库
  • ​MySQL主从复制一致性检测
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #Linux(权限管理)
  • #知识分享#笔记#学习方法
  • (k8s)kubernetes集群基于Containerd部署
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (转载)Linux 多线程条件变量同步
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .axf 转化 .bin文件 的方法
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .net 反编译_.net反编译的相关问题
  • .NET 通过系统影子账户实现权限维持
  • .NET8 动态添加定时任务(CRON Expression, Whatever)
  • .net反混淆脱壳工具de4dot的使用
  • .NET开发人员必知的八个网站
  • .NET中GET与SET的用法
  • @Conditional注解详解
  • @ModelAttribute注解使用
  • @TableLogic注解说明,以及对增删改查的影响