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

C#使用 ModeBusTCP读取汇川Easy521PLC

Modbus TCP是一种基于以太网TCP/IP的Modbus协议变种,它允许Modbus协议在以太网网络上运行,使得设备之间可以通过IP网络交换数据。Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准,广泛应用于工业自动化领域。

 #region  ModBusTCP 地址解释
 /* 00 01->事务标识符,随意指定
  00 00->协议标识符,Modbus TCP协议标识符为0x0000
  00 06->报文长度,表示后面的报文长度为6个字节
  01->广播地址
  03->功能码  0x01   读输出线圈
              0x02    读离散输入
              0x03    读保持寄存器
              0x04    读输入寄存器
              0x05    写单个线圈
              0x06    写单个保持寄存器
              0x0F    写多个线圈
              0x10    写多个保持寄存器
 00 64 读写地址高八位 低八位
 00 01 寄存器数量 
 */

using System;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Threading.Tasks;namespace ModbusTcpExample
{class Program{static void Main(string[] args){MBTCP mBTCP = new MBTCP();mBTCP.MDConnection("192.168.1.2", 502);}}class MBTCP{private bool ConnectionStatus = false;NetworkStream stream;//ModBusTCP启动public void MDConnection(string ipAddress, int port){try{TcpClient client = new TcpClient(ipAddress, port);stream = client.GetStream();ConnectionStatus = true;}catch (Exception e){Console.WriteLine("TCP connection failed: " + e.Message);ConnectionStatus = false;}}//读单个D寄存器public int ReadRegister(int address){if (ConnectionStatus){try{#region  ModBusTCP 地址解释/* 00 01->事务标识符,随意指定00 00->协议标识符,Modbus TCP协议标识符为0x000000 06->报文长度,表示后面的报文长度为6个字节01->广播地址03->功能码  0x01   读输出线圈0x02    读离散输入0x03    读保持寄存器0x04    读输入寄存器0x05    写单个线圈0x06    写单个保持寄存器0x0F    写多个线圈0x10    写多个保持寄存器00 64 读写地址高八位 低八位00 01 寄存器数量 */#endregionbyte H = (byte)((address >> 8) & 0xFF);byte L = (byte)(address & 0xFF);byte[] request = new byte[] { 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x03, H, L, 0x00, 0x01 };stream.WriteAsync(request, 0, request.Length);  // 发送请求报文  byte[] response = new byte[12]; // 根据实际情况调整长度stream.ReadAsync(response, 0, response.Length);int decimalValue = (response[9] << 8) | response[10];return decimalValue;}catch (Exception e){Console.WriteLine("TCP connection failed: " + e.Message);ConnectionStatus = false;return 888;}}else{Console.WriteLine("TCP connection failed");return 888;}}//写单个D寄存器public bool WriteRegister(int address, int Wvalue){if (ConnectionStatus){try{byte H = (byte)((address >> 8) & 0xFF);byte L = (byte)(address & 0xFF);byte WH = (byte)((Wvalue >> 8) & 0xFF);byte WL = (byte)(Wvalue & 0xFF);byte[] request = new byte[] { 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x06, H, L, WH, WL };stream.WriteAsync(request, 0, request.Length);  // 发送请求报文  byte[] response = new byte[12]; // 根据实际情况调整长度return false;}catch (Exception e){Console.WriteLine("TCP connection failed: " + e.Message);ConnectionStatus = false;return false;}}else{Console.WriteLine("TCP connection failed");return false;}}//读多个M寄存器public bool[] ReadMixeds(int address, int quantity){bool[] MB = new bool[quantity];if (ConnectionStatus){try{byte H = (byte)((address >> 8) & 0xFF);byte L = (byte)(address & 0xFF);byte QH = (byte)((quantity >> 8) & 0xFF);byte QL = (byte)(quantity & 0xFF);byte[] request = new byte[] { 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x02, H, L, QH, QL };stream.WriteAsync(request, 0, request.Length);  // 发送请求报文  byte[] response = new byte[10 + quantity / 8]; // 根据实际情况调整长度stream.ReadAsync(response, 0, response.Length);Console.WriteLine("Received response:");foreach (var b in response){Console.Write(b.ToString("X2") + " ");}//bool[] MB = new bool[quantity];Console.WriteLine("\nMMMMReceived response:");int MT = 0;for (int n = 0; n < quantity / 8 + 1; n++){for (int i = 0; i < 8 && MT < quantity; i++){MB[MT] = ((response[9 + n] >> i) & 0x01) != 0;//int F = MT + address;//Console.WriteLine("M{0}.{1}", F, MB[MT]);MT++;}}return MB;}catch (Exception e){Console.WriteLine("TCP connection failed: " + e.Message);ConnectionStatus = false;return MB;}}else{Console.WriteLine("TCP connection failed");return MB;}}//写单个M寄存器public bool WriteMixed(int address, bool Wvalue){if (ConnectionStatus){try{byte H = (byte)((address >> 8) & 0xFF);byte L = (byte)(address & 0xFF);byte WByte = 0x00;if (Wvalue) { WByte = 0x01; }byte[] request = new byte[] { 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x05, H, L, 0x00, WByte };stream.WriteAsync(request, 0, request.Length);  // 发送请求报文  byte[] response = new byte[12]; // 根据实际情况调整长度return true;}catch (Exception e){Console.WriteLine("TCP connection failed: " + e.Message);ConnectionStatus = false;return false;}}else{Console.WriteLine("TCP connection failed");return false;}}}}

相关文章:

C#使用 ModeBusTCP读取汇川Easy521PLC

Modbus TCP是一种基于以太网TCP/IP的Modbus协议变种&#xff0c;它允许Modbus协议在以太网网络上运行&#xff0c;使得设备之间可以通过IP网络交换数据。Modbus由MODICON公司于1979年开发&#xff0c;是一种工业现场总线协议标准&#xff0c;广泛应用于工业自动化领域。 #regio…...

PostgreSQL的postgres主进程

PostgreSQL的postgres主进程 在PostgreSQL数据库系统中&#xff0c;主要的后台进程各司其职&#xff0c;保证数据库的高效运行。其中&#xff0c;主进程postgres&#xff08;也称为Postmaster&#xff09;是整个数据库的核心&#xff0c;它负责管理和协调所有其他后台进程&…...

Java实现K个排序链表的高效合并:逐一合并、分治法与优先队列详解

Java实现K个排序链表的高效合并&#xff1a;逐一合并、分治法与优先队列详解 在算法和数据结构的学习中&#xff0c;链表是一个非常基础但又极具挑战的数据结构。尤其是当面对合并多个排序链表的问题时&#xff0c;如何在保证效率的前提下实现代码的简洁与高效&#xff0c;往往…...

Xinstall揭秘:高效App推广背后的黑科技

在移动互联网时代&#xff0c;App的运营推广成为了开发者们最为关注的话题之一。然而&#xff0c;随着市场竞争的加剧&#xff0c;推广难度也越来越大。这时候&#xff0c;一款名为Xinstall的品牌走进了我们的视线&#xff0c;它以其独特的技术和解决方案&#xff0c;为App推广…...

星巴克VS瑞幸,新王、旧王之争给新CEO带来哪些启示

“变化是生命的元素&#xff0c;求变是生命的力量”&#xff0c;马克吐温曾这样解释生命。而商场上何尝不是如此&#xff0c;正因为世异则事异&#xff0c;求变也是企业的常态。 近日&#xff0c;星巴克官宣布莱恩尼科尔(Brian Niccol)将于9月9日接替拉什曼纳拉辛汉(Laxman Na…...

C语言 | Leetcode C语言题解之第354题俄罗斯套娃信封问题

题目&#xff1a; 题解&#xff1a; int cmp(int** a, int** b) {return (*a)[0] (*b)[0] ? (*b)[1] - (*a)[1] : (*a)[0] - (*b)[0]; }int maxEnvelopes(int** envelopes, int envelopesSize, int* envelopesColSize) {if (envelopesSize 0) {return 0;}qsort(envelopes, …...

大型俄罗斯国际展览会介绍

今天分享一些在俄罗斯比较知名的国际展览会&#xff0c;以下展会大多为一年一届&#xff0c;具体展出时间大家可去网上查询了解&#xff0c;充分利用合适的展会&#xff0c;无疑是企业拓展市场、塑造品牌、对接资源、紧跟行业趋势的重要途径。 1、俄罗斯国际食品展览会 展览地…...

CST软件仿真案例:圆极化平板天线仿真02

本期继续完成一款圆极化Patch天线的仿真实例。读者可以完整的了解到怎么用CST微波工作室&#xff0c;完成对一款天线建模、设置到仿真分析的完整过程。 本期中&#xff0c;我们要设计的圆极化天线尺寸如下图所示&#xff1a; 本期内容是接着上期部分开始。首先先完成仿真实例0…...

【前端】vue监视属性和计算属性对比

首先分开讲解各个属性的作用。 1.计算属性 作用&#xff1a;用来计算出来一个值&#xff0c;这个值调用的时候不需要加括号&#xff0c;会根据依赖进行缓存&#xff0c;依赖不变&#xff0c;computed的值不会重新计算。 const vm new Vue({el:#root,data:{lastName:张,firstNa…...

探索提示工程 Prompt Engineering的奥妙

一、探索提示工程 Prompt Engineering 1. 介绍通用人工智能和专用人工智能 人工智能&#xff08;AI&#xff09;可以分为通用人工智能&#xff08;AGI&#xff09;和专用人工智能&#xff08;Narrow AI&#xff09;。AGI是一种能够理解、学习和执行任何人类可以完成的任务的智…...

算法阶段总结1

阶段总结 通过今天晚上的这场div2我深刻的意识到&#xff0c;光是会找窍门是远远不够的&#xff0c;你得会基础的建图&#xff0c;dp&#xff0c;高级数据结构&#xff0c;你这样才可以不断的提升自己&#xff0c;不可以一直在一个阶段停留下去&#xff0c;构造题可以刷下去&a…...

前端宝典之七:React性能优化实战精华篇

本文主要讲解实战项目中React性能优化的方法&#xff0c;主要分为三个大的方面&#xff1a;减少不必要的组件更新、组件优化以及tree-shaking&#xff0c;共11个方法 一、减少不必要组件更新 以下是一些可以避免在 React 提交阶段进行不必要重新渲染的方法&#xff1a; 1、使…...

【Dash】feffery_antd_components 简单入门示例

一、简单了解 feffery_antd_components 简称 fac &#xff0c;是一个基于 Ant Design 的 Dash 第三方组件&#xff0c;由Feffery 老师开源维护的 Python 网页开发组件库&#xff0c;它具有丰富的页面常用交互组件功能&#xff0c;使开发者可以使用纯Python的方式快速构建现代…...

JAVA学习-练习试用Java实现“路径交叉”

问题&#xff1a; 给定一个整数数组 distance 。从 X-Y 平面上的点 (0,0) 开始&#xff0c;先向北移动 distance[0] 米&#xff0c;然后向西移动 distance[1] 米&#xff0c;向南移动 distance[2] 米&#xff0c;向东移动 distance[3] 米&#xff0c;持续移动。也就是说&#…...

element组件封装

1.上传组件 <!--文件上传组件--> <template><div class"upload-file"><el-uploadref"fileUpload"v-if"props.type default":action"baseURL other.adaptationUrl(props.uploadFileUrl)":before-upload"h…...

Mysql (面试篇)

目录 唯一索引比普通索引快吗 MySQL由哪些部分组成&#xff0c;分别用来做什么 MySQL查询缓存有什么弊端&#xff0c;应该什么情况下使用&#xff0c;8.0版本对查询缓存由上面变更 MyISAM和InnoDB的区别有哪些 MySQL怎么恢复半个月前的数据 MySQL事务的隔离级别&#xff…...

【python】深入探讨python中的抽象类,创建、实现方法以及应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…...

微前端传值

在微前端架构中&#xff0c;不同子应用之间通过 postMessage 进行通信是一种常见的做法。这种方式允许不同源的窗口之间进行安全的信息交换。 下面是如何使用 postMessage 在微前端环境中发送和接收消息的示例。 步骤 1: 发送消息 假设您有一个主应用&#xff08;host app&a…...

《学会 SpringBoot · 依赖管理机制》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…...

全网行为管理软件有哪些?5款总有一款适合你的企业!

如今企业越来越依赖互联网进行日常运营和业务发展&#xff0c;网络行为管理变得日益重要。 为了确保网络安全、提高员工工作效率、避免敏感信息外泄等问题&#xff0c;企业往往需要借助全网行为管理软件来监控和管理内部网络的使用情况。 本文将为您介绍五款热门的全网行为管理…...

从零开始:用STM32CubeMX+Keil5开发计算器的5个关键陷阱与解决方案

从零开始&#xff1a;用STM32CubeMXKeil5开发计算器的5个关键陷阱与解决方案 当你第一次尝试用STM32CubeMX和Keil5开发一个计算器时&#xff0c;可能会觉得这不过是几个简单数学运算的组合。但真正动手后&#xff0c;你会发现从工具链配置到算法实现&#xff0c;处处都是"…...

【LE Audio】PACS精讲[2]: 服务层核心逻辑,玩转音频能力发布与交互

在上一篇的内容里【LE Audio】PACS精讲[1]: 吃透基础规则,解锁音频能力发布核心逻辑,我们吃透了PACS的基础规则,从一致性要求、协议兼容、GATT交互约定到术语体系,搭建起了PACS的知识地基。而PACS的服务层,正是这些基础规则落地的核心载体,是蓝牙音频设备作为服务器对外发…...

Dobby跨平台编译技术指南:从环境配置到多架构部署实践

Dobby跨平台编译技术指南&#xff1a;从环境配置到多架构部署实践 【免费下载链接】Dobby a lightweight, multi-platform, multi-architecture hook framework. 项目地址: https://gitcode.com/gh_mirrors/do/Dobby 一、基础认知&#xff1a;Hook框架与跨平台编译基础 …...

G-Helper:华硕ROG笔记本性能调校的轻量级解决方案

G-Helper&#xff1a;华硕ROG笔记本性能调校的轻量级解决方案 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址: h…...

【同态加密实战】从Paillier到BFV:算法原理与编码艺术深度解析

1. 同态加密&#xff1a;数据隐私保护的魔法钥匙 想象一下&#xff0c;你有一把能锁住数据的魔法钥匙——即使数据被锁在箱子里&#xff0c;别人依然可以对箱子里的数据进行计算&#xff0c;而无需打开箱子看到原始内容。这就是同态加密的神奇之处。作为密码学领域的"圣杯…...

用Python+WeChatOpenDevTools搞定微信小程序数据抓取:以‘六六找房’为例(附完整源码)

Python逆向解析微信小程序数据实战&#xff1a;以租房平台为例 微信小程序因其便捷性已成为许多服务的主要入口&#xff0c;但数据获取却常让开发者头疼。不同于传统网页爬虫&#xff0c;小程序的数据接口往往经过加密处理&#xff0c;常规请求难以直接获取有效信息。本文将分享…...

智能客服原型开发:OpenClaw+Qwen3-32B搭建对话系统

智能客服原型开发&#xff1a;OpenClawQwen3-32B搭建对话系统 1. 为什么选择这个技术栈&#xff1f; 去年我接手了一个智能客服系统的预研项目&#xff0c;客户要求两周内交付可演示的原型。传统方案需要前后端开发、对话引擎集成、工单系统对接&#xff0c;时间根本不够。最…...

【技术演进】从GPT-1到GPT-4:大语言模型的核心突破与演进图谱

1. 从GPT-1到GPT-4&#xff1a;技术演进的起点与飞跃 2018年诞生的GPT-1就像刚学会走路的孩子——它能理解简单的文本指令&#xff0c;但经常答非所问。当时这个仅有1.17亿参数的模型&#xff0c;采用了最基础的Transformer解码器架构&#xff0c;通过"预测下一个词"…...

嵌入式LCD轻量级驱动库:双缓冲与脏区域优化

1. 项目概述Lctrl_Lcd是一个面向嵌入式平台的轻量级 LCD 显示控制库&#xff0c;其设计目标并非替代完整的图形框架&#xff08;如 LVGL 或 emWin&#xff09;&#xff0c;而是为裸机&#xff08;Bare-Metal&#xff09;或实时操作系统&#xff08;RTOS&#xff09;环境下的中低…...

告别地图切换卡顿:优化OpenLayers加载天地图瓦片的性能与体验指南

告别地图切换卡顿&#xff1a;优化OpenLayers加载天地图瓦片的性能与体验指南 在WebGIS项目开发中&#xff0c;地图加载速度和操作流畅度直接影响用户体验。当项目上线后&#xff0c;用户反馈地图切换卡顿、加载缓慢时&#xff0c;开发者往往需要深入底层优化才能解决问题。本文…...