C#上位机与三菱PLC的通信07--使用第3方通讯库读写数据

2024-02-19 14:44

本文主要是介绍C#上位机与三菱PLC的通信07--使用第3方通讯库读写数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、通讯库介绍

mcprotocol 是一个基于 Node.js 的三菱 PLC MC 协议通信库,具有以下特点:

支持多种三菱 PLC MC 协议的设备,如 FX3U、Q03UDECPU、QJ71E71 等。

支持多种功能码和数据类型,如读取线圈(M)、读取寄存器(D)、写入寄存器(D)、读取扩展寄存器(D*)、读取位寄存器(X/Y)、读取字寄存器(W)等。

支持多种通信方式,如 TCP、UDP、串口等。

代码结构清晰,易于扩展和二次开发。支持 Promise、async/await 等语法糖,提高开发效率。

mcprotocol 的主要功能是实现与三菱 PLC MC 协议设备之间的数据交互,例如读取设备上的某个寄存器的值,并将其传递给 Node.js 应用程序。在使用该库进行开发时,需要先连接到 PLC 设备,然后使用库提供的接口进行数据读写操作。 

通讯协议库是一种软件开发工具,用于实现PLC与其他设备之间的通讯功能。三菱PLC通讯协议库是一款专门为三菱PLC开发的通讯协议库,可以实现PLC与上位机、HMI、SCADA系统等设备之间的数据交换和通讯。

三菱PLC通讯协议库具有以下主要功能:

(1)数据读写功能:可以实现对PLC内部数据的读写操作,包括读取PLC内部寄存器的值、写入数据到PLC内部寄存器等。

(2)报警处理功能:可以实时监测PLC的报警信息,并将报警信息传输给上位机或其他设备进行处理。

(3)远程监控功能:可以实现对PLC的远程监控和控制,可以通过上位机或HMI实时查看和操作PLC的运行状态。

(4)数据传输功能:可以实现PLC与其他设备之间的数据传输,包括实时数据传输、历史数据传输等。

2、开干

这节继续使用上节的VS2022的项目,增加一个方法 MCProtocolLibTest(),具体怎么创建项目,见上节的过程。C#上位机与三菱PLC的通信04--MC协议之A-1E报文测试

1、引入通讯库

2、连接PLC

3、启动服务器

4、读取数据

1、读取D100地址开始的2个int类型数据

2、 通过A1E进行D102的双字 DWord(Float) 读取,即读取float类型--4Byte 

  /// <summary>/// 第3方通讯库测试/// </summary>/// <exception cref="NotImplementedException"></exception>private static async void MCProtocolLibTest(){McProtocolTcp mcProtocolTcp = new  McProtocolTcp("192.168.1.7", 6000,  McFrame.MC1E);await mcProtocolTcp.Open();if (mcProtocolTcp.Connected){Console.WriteLine("连接成功!"); Console.WriteLine("读取D100地址开始的2个int类型数据");var result1 = await mcProtocolTcp.ReadDeviceBlock(PlcDeviceType.D, 100, 2);for (int i = 0; i < result1.Length; i++){//每2个字节一组byte[] temp = new byte[2];temp[0] = result1[i];temp[1] = result1[++i];Console.WriteLine(BitConverter.ToInt16(temp, 0));//字节数组转换成int16数据}Console.WriteLine("读取D102地址开始的1个float类型数据");var result2 = await mcProtocolTcp.ReadDeviceBlock(PlcDeviceType.D, 102, 2);for (int i = 0; i < result1.Length; i++){//每4个字节一组byte[] temp = new byte[4];temp[0] = result2[i];temp[1] = result2[++i];temp[2] = result2[++i];temp[3] = result2[++i];Console.WriteLine(BitConverter.ToSingle(temp, 0));//字节数组转换成float数据}}}

 

3、通过A1E进行位的读取M16,M区的地址要转换成16进制,即读取bool类型数据

5、写入数据

这篇关于C#上位机与三菱PLC的通信07--使用第3方通讯库读写数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/724999

相关文章

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时

MySQL 强制使用特定索引的操作

《MySQL强制使用特定索引的操作》MySQL可通过FORCEINDEX、USEINDEX等语法强制查询使用特定索引,但优化器可能不采纳,需结合EXPLAIN分析执行计划,避免性能下降,注意版本差异... 目录1. 使用FORCE INDEX语法2. 使用USE INDEX语法3. 使用IGNORE IND