【C#使用S7.NET库读取和写入西门子PLC变量】
C#使用S7.NET库读取和写入西门子PLC变量
- 前言
- 使用S7.NET库读取
- 使用S7.NET库写入
前言
本来想用Wincc的接口给读和写Wincc,但是速度实在太感人了,所以不如直接读和写PLC的变量,这种方式速度瞬间快了不知道多少倍(经测试4000个变量几乎瞬间完成,应该1s左右,人感知不出来)。
网上找了好多资料,都写得比较分散。特别是关于字符串的读取和写入,写了好久才读写正常,把两种方式的代码分享出来。
使用S7.NET库读取
//使用S7.NET库___读取PLC变量public static string[] ReadPLC(int DbAddress,int StartByteAdr,int ByteCount,int Type){int i, j, k;int types = 2;int count;byte[] bytes=new byte[1000];//返回值当前设置最大1000,可自由设置string[] result=new string[1000];#region plc系列号+机架号+插槽号Plc MyPLC = new Plc(CpuType.S71500, "10.168.4.2", 0, 1);MyPLC.Open();#endregion//读取的是intif (Type == 1){types = 2;}//读取的是realelse if (Type == 2){types = 4;}//读取的是Stringelse if (Type == 3){types = 256;}//读取的是boolelse if(Type == 0){types = 1;}try{j = 0;if (types == 1){//读取BOOLfor (i = 0; i < Convert.ToInt16(ByteCount / 8 + 1); i++){for (k = 0; k <= 7; k++){result[j + k] = MyPLC.Read("DB" + DbAddress.ToString() + "." + "DBX" + (StartByteAdr + i).ToString() + "." + k.ToString()).ToString();if (result[j + k] == "True"){result[j + k] = "1";}else{result[j + k] = "0";}}j = j + 8;}}else if (types == 2 || types == 4){//读取字节bytes = MyPLC.ReadBytes(DataType.DataBlock, DbAddress, StartByteAdr, ByteCount * types);for (i = 0; i <= (ByteCount * types - types); i = i + types){if (types == 2){result[j] = S7.Net.Types.Int.FromByteArray(bytes.Skip(i).Take(types).ToArray()).ToString();}if (types == 4){result[j] = S7.Net.Types.Real.FromByteArray(bytes.Skip(i).Take(types).ToArray()).ToString();}j++;}}else if (types == 256){//读取字符串//读取字符串的长度for (i=0; i< ByteCount; i++){count = (byte)MyPLC.Read(DataType.DataBlock, DbAddress, StartByteAdr+i*22 + 1, VarType.Byte, 1);bytes = MyPLC.ReadBytes(DataType.DataBlock, DbAddress, StartByteAdr+i*22 + 2, count);result[j] = Encoding.Default.GetString(bytes);j++;}}}catch (Exception){MessageBox.Show("错误:读取PLC变量错误!");}MyPLC.Close();return result;}
使用S7.NET库写入
//使用S7.NET库___写入PLC变量public static void WritePLC(int DbAddress, int StartByteAdr, int ByteCount, int Type, string[] strings){int i,j;short ints;float floats;int types = 2;//最多1000个字节写入,可自由设置byte[] bytes = new byte[1000];#region plc系列号+机架号+插槽号Plc MyPLC = new Plc(CpuType.S71500, "10.168.4.2", 0, 1);MyPLC.Open();#endregion//写入的是intif (Type == 1){types = 2;}//写入的是realelse if (Type == 2){types = 4;}//写入的字符串else if (Type == 3){types = 256;}//读取的是boolelse if (Type == 0){types = 1;}try{if (types == 2){for (i = 0; i <= ByteCount-1; i++){ints = Convert.ToInt16(strings[i]);MyPLC.Write(DataType.DataBlock, DbAddress, StartByteAdr + i * types, ints); }}else if (types == 4){for (i = 0; i <= ByteCount-1; i++){floats = Convert.ToSingle(strings[i]);MyPLC.Write(DataType.DataBlock, DbAddress, StartByteAdr + i * types, floats);}}else if (types == 256){for (i = 0; i <= ByteCount - 1; i++){if (strings[i]!=null){//字符串转换成编码再转成字节bytes = Encoding.Default.GetBytes(strings[i]);//写入字节长度,用字节的数据类型MyPLC.Write(DataType.DataBlock, DbAddress, StartByteAdr + i * 22 + 1, (byte)bytes.Length);//依次写入MyPLC.Write(DataType.DataBlock, DbAddress, StartByteAdr + i * 22 + 2, bytes);}else{//字符串转换成编码再转成字节bytes = Encoding.Default.GetBytes("");//写入字节长度,用字节的数据类型MyPLC.Write(DataType.DataBlock, DbAddress, StartByteAdr + i * 22 + 1, (byte)bytes.Length);//依次写入MyPLC.Write(DataType.DataBlock, DbAddress, StartByteAdr + i * 22 + 2, bytes);}}}else if (types == 1){for (i=0; i <= ByteCount - 1; i=i+8){for (j=0;j<=7 && i+j<= ByteCount - 1; j++){if (strings[i + j]=="1"){MyPLC.WriteBit(DataType.DataBlock, DbAddress, StartByteAdr+i/8, j,true);}else{MyPLC.WriteBit(DataType.DataBlock, DbAddress, StartByteAdr+i/8, j, false);} } }}}catch (Exception){MessageBox.Show("写入PLC数据错误");}MyPLC.Close();}
相关文章:
【C#使用S7.NET库读取和写入西门子PLC变量】
C#使用S7.NET库读取和写入西门子PLC变量 前言使用S7.NET库读取使用S7.NET库写入 前言 本来想用Wincc的接口给读和写Wincc,但是速度实在太感人了,所以不如直接读和写PLC的变量,这种方式速度瞬间快了不知道多少倍(经测试4000个变量…...
蓝桥杯 游戏 6251 单调队列
传送门 0游戏 - 蓝桥云课 有了单调队列,在求解答案时:当我们需要对最大值的列表和最小值的列表进行俩俩组合,如果直接用两个f0r循环进行匹配,那么时间复杂度太大,容易超时。我们可以进行一个推导,假设最大…...
[250331] Paozhu 发布 1.9.0:C++ Web 框架,比肩脚本语言 | DeaDBeeF 播放器发布 1.10.0
目录 Paozhu 发布 1.9.0:C Web 框架,快速开发,比肩脚本语言DeaDBeeF 音乐播放器发布 1.10.0 版本! Paozhu 发布 1.9.0:C Web 框架,快速开发,比肩脚本语言 Paozhu (炮竹🧨) 是一个功…...
einsum函数
理解专家并行,需要了解einsum函数 import torch# 设置输入张量的维度:s 3 tokens, e 2 experts, c 2 capacity, m 4 embedding dim s, e, c, m 3, 2, 2, 4# 1. 输入 token 的嵌入向量 (s, m) reshaped_input torch.tensor([[1.0, 1.0, 1.0, 1.0],…...
gitee 配置git上传
Git入门?查看 帮助 , Visual Studio / TortoiseGit / Eclipse / Xcode 下如何连接本站, 如何导入仓库 简易的命令行入门教程: Git 全局设置: 以 176fuguM2项目为例 git config --global user.name "堕落圣甲虫" git config --global user.email "11…...
【电子通识】为什么电子元件的规格书常常要看英文版本
在我们查看电子器件规格书的时候,如果有中文版本和英文版本两种供我们选择,那我们常常需要查看英文版本,大家有想过这是为什么吗? 为什么英文规格书很重要? 电子元件规格书(Datasheet)常以英文版…...
Scala基础知识5
面向对象 Scala 的面向对象思想和 Java 的面向对象思想和概念是一致的。 Scala 中语法和 Java 不同,补充了更多的功能。 1.Scala包 基本语法:package 包名 Scala 包的三大作用(和 Java 一样) 1.区分相同名字的类。 2.当类很多…...
【图像处理基石】什么是RAW格式?
在图像处理中,RAW格式是一种未经处理、记录了相机传感器原始数据的图像文件格式。它保留了相机传感器捕捉到的全部原始信息,未经任何压缩或处理,因此被称为“原始数据”(Raw)。以下是关于RAW格式的详细解释:…...
AI Agent 实战:搭建个人在线旅游助手
AI Agent 实战:搭建个人在线旅游助手 本次实验中,我们将继续探索 Agent 的提示词,学习更加规范的提示词撰写方法。 本实验中你将掌握的知识点 使用 Dify 构建 Agent 的方法结构化的提示词撰写技巧变量的使用方法 1. 准备 在新建 Agent 之…...
【JavaScript】十四、轮播图
文章目录 实现一个轮播图,功能点包括: 自动播放鼠标经过暂时播放鼠标离开继续播放点击切换按钮手动切换 div盒子嵌套先写出静态HTML,再使用JS来修改样式和数据,渲染页面: <!DOCTYPE html> <html lang"…...
2025 全球音乐 AI 大模型对决:技术革新引领商业变革浪潮
未来的世界声音: 音乐产业如今正被 AI 技术推动着,开启一场智能革命的全新篇章。无论是旋律的诞生,还是工业化编曲的流程,AI 大模型都在以飞快的速度改变着行业的基本逻辑架构。在中国,昆仑万维依靠 Mureka 系列产品在…...
RabbitMQ详解,RabbitMQ是什么?架构是怎样的?
目录 一,RabbitMQ是什么? 二,RabbitMQ架构 2.1 首先我们来看下RabbitMQ里面的心概念Queue是什么? 2.2 交换器Exchange 2.3 RabbitMQ是什么? 2.4 重点看下优先级队列是什么? 三,RabbitMQ集群 3.1 普通集群模式 3.2 镜像队列集群 一,RabbitMQ是什么? 假设我们程序…...
Java 大视界 -- Java 大数据在智能教育自适应学习平台中的用户行为分析与个性化推荐(169)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
智能打印预约系统:微信小程序+SSM框架实战项目
微信小程序打印室预约系统,采用SSM(SpringSpringMVCMyBatis)经典框架组合。 一、系统核心功能详解 1. 智能化管理后台 用户数据看板打印店资源管理预约动态监控服务评价系统 2. 微信小程序端 智能定位服务预约时段选择文件…...
Redisson 操作 Redis Stream 消息队列详解及实战案例
目录 一、Redis Stream 概念 1.Redis消息队列-认识消息队列 2.Redis Stream特点 3.Redis Stream与RabbitMQ等消息队列的比较 二.Redis Stream基本操作命令 1.生产消息 2.消费消息 3.消费者组操作 4.确认消息处理 三、Redisson 操作 Stream 的核心 API 1. 获取流的API…...
【深度学习量化交易19】行情数据获取方式比测(1)——基于miniQMT的量化交易回测系统开发实记
我是Mr.看海,我在尝试用信号处理的知识积累和思考方式做量化交易,应用深度学习和AI实现股票自动交易,目的是实现财务自由~ 目前我正在开发基于miniQMT的量化交易系统——看海量化交易系统。 经常使用MiniQMT的朋友都知道,xtquant的…...
23种设计模式-结构型模式-代理
文章目录 简介问题解决方案代码核心设计要点 总结 简介 代理是一种结构型设计模式,让你能够提供对象的替代品或其占位符。代理控制着对于原对象的访问,并允许在把请求提交给对象前后进行一些处理。 问题 为什么要控制对于某个对象的访问呢?…...
Windows C++ 排查死锁
开发出来应用程序突然间卡死不动,如果其中是因为死锁问题卡列该如何排查 下面是一个简单的死锁例子 #include <iostream> #include <thread> #include <mutex>std::mutex a, b;void function_a() {std::lock_guard<std::mutex> _x(a);std:…...
ctfshow
1,web517 通过输入两个单引号让查询语句正常,判断是什么注入,使用的是什么字符 然后我们通过order by 判断回显位,进行一个联合查询注入 获取数据库名 ctfshow的sqli-labs和本地搭建最大的不同,就是show的flag不在当前…...
【AI论文】什么、如何、何处以及效果如何?大语言模型测试时缩放技术调研
摘要:随着预训练时代对计算(数据和参数)缩放的热情逐渐减退,测试时缩放(Test-Time Scaling, TTS),也被称作“测试时计算”,已成为一个备受瞩目的研究焦点。近期研究表明,…...
大模型学习一:deepseek api 调用实战以及参数介绍
一、说明 DeepSeek(杭州深度求索人工智能基础技术研究有限公司)是一家专注于大语言模型(LLM)研发的中国创新型科技公司,成立于2023年7月17日,由幻方量化孵化。其核心产品包括开源推理模型DeepSeek-R1、多模…...
C++ 编程指南33 - 使用模板来表达适用于多种参数类型的算法
一:概述 在 C 中,模板(Templates)提供了一种强大的泛型编程方式,使代码可以适用于不同的数据类型,而无需重复编写类似的逻辑。模板的主要目标是: 泛化能力(Generality)&a…...
MYSQL实现获取某个经纬度区域内的数据
1.创建表 2.插入表数据 INSERT INTO tf_sys.tf_location(name, longitude, latitude, location) VALUES (资料名称1, 114.437625, 16.016914, ST_GeomFromText(POINT(114.437625 16.016914))); INSERT INTO tf_sys.tf_location(name, longitude, latitude, location) VALUES (…...
《Python实战进阶》No39:模型部署——TensorFlow Serving 与 ONNX
第39集:模型部署——TensorFlow Serving 与 ONNX 摘要 在机器学习项目中,训练好的模型需要被部署到生产环境中才能发挥实际价值。本集聚焦于如何将模型高效地部署到生产环境,涵盖TensorFlow Serving和ONNX两种主流工具的使用方法。我们将从理…...
嵌入式调试进阶:从手动到自动的HardFault破案指南
今天和大家聊聊嵌入式开发中让无数新手头疼,但又避不开的HardFault。 还记得我刚入行那会儿,信誓旦旦改了几行代码,信心爆棚地烧录进板子。结果呢?灯!没!亮!调试器显示程序卡在了HardFault_Han…...
YOLOv11区域检测
TrackZone 使用Ultralytics YOLO11 -Ultralytics YOLO 文档 如何通过Ultralytics YOLO11 在Python 中使用 TrackZone? 只需几行代码,您就可以在特定区域设置对象跟踪,从而轻松将其集成到您的项目中。 import cv2from ultralytics import s…...
手工win提权土豆家族一键梭哈
手工提权 就是在没有工具使用的时候进行提权(或者是win版本过新导致的exp作者没更新等) 优点就是 随选随用 缺点就是非常繁琐(建议是先土豆梭哈然后再手工提权) 先进行信息收集(这边靶机以例子) 这个…...
在Qt中直接在构建目录下直接运行.exe文件报错问题分析
在Qt中直接在构建目录下直接运行.exe文件报错问题分析 在学习Qt的过程中遇到过一个问题,直接在Qt构建目录下运行生成的.exe文件时会报错。这和MFC有一定的差别,如果MFC是可以直接运行的。 这是怎么回事呢? 在 Qt 中直接运行构建目录下的 .…...
头戴式面捕头盔:高精度捕捉真人面部表情,赋能元宇宙多场景应用
随着元宇宙虚拟人与现实场景的不断交融,如何赋予虚拟人更加自然,灵动的表情成为了业内人员共同讨论的话题,尤其是在虚拟人直播,影视动画制作方面。在虚拟人直播间,丰富的面部表情可以赋予虚拟人更加生动的情感表达&…...
LLM大模型教程——什么是AI大模型
引言 当GPT-4展现出惊人的上下文理解能力,当Stable Diffusion创造出媲美人类画师的图像作品,当AlphaFold2破解蛋白质折叠密码——这些里程碑事件标志着人工智能发展进入大模型主导的新纪元。本综述将深入解析这一技术革命的核心载体——AI大模型。 一、AI 大模型是什么 概…...
