C#上位机与三菱PLC的通信05--MC协议之QnA-3E报文解析

1、MC协议回顾

MC是公开协议 ,所有报文格式都是有标准 ,MC协议可以在串口通信,也可以在以太网通信

串口:1C、2C、3C、4C

网口:4E、3E、1E

A-1E是三菱PLC通信协议中最早的一种,它是一种基于二进制通信协议的协议,适用于三菱FX系列PLC和A系列PLC。该协议支持点对点通信和多点通信,可以实现PLC之间的数据交换和远程监控等功能,该内容在前面已经介绍过,可以看这两个文章:C#上位机与三菱PLC的通信03--MC协议之A-1E报文解析-CSDN博客。

C#上位机与三菱PLC的通信04--MC协议之A-1E报文测试-CSDN博客

Qna-3E模式是三菱PLC通信协议中较新的一种,它是一种基于ASCII码通信协议的协议,适用于三菱Q系列PLC和FX5U系列PLC。该协议支持点对点通信和多点通信,可以实现PLC之间的数据交换、远程监控和远程编程等功能。

2、 Qna-3E协议介绍

 1、软元件(存储区)分类及访问规则 

注意2个问题:

1、bit和word,bit就是一个位,二进制中的位bit,0或1算一个位,word叫字,一个字就16位,就是2个字节,一个字节是8位,2个字节就是16位,也就是16个bit,简单讲就是word占2个字节,另外0X是16进制的表示,而float占4个字节。

2、小端处理

进行数据转换的时候需要注意, 西门子PLC的S7是大端处理,MC协议是小端处理,比如X区的代码是0x58 0x20,发送报文时需要变成0x20 0x58

2、命令类型

当发送报文时,命令是由主命令+子命令组合起来,比如成批读出,则是0x04 0x01 0x00 0x00,按小端处理的,所以应该是0x01 0x04 0x00 0x00。

3、模拟器介绍
 

这里我们介绍两个模拟器,所讲的模拟器就是一个三菱的MC服务器,也就是说是一台虚拟的PLC,如果没有模拟器,那就需要一台真实的PLC硬件,但是FX5U之类的PLC价格要好几K以上,屌丝者成本较大,承担不起,对于很多学习者,培训者,爱好者花大洋有些心疼,所以提供2个模拟器,这个模拟器就是一台真实的PLC设备。

 自研的模拟器,自定Logo,飞常屌,帅逼列

4、位bit与字word成批操作

骚等

5、位bit与字word随机读取

骚等

6、位bit与字word随机写入

骚等

3、Qna-3E报文解析

启动服务器

1、读字数据,读取D100开始的2个数据, short/ushort

 发送:50 00 00 FF FF 03 00 0C 00 0A 00 01 04 00 00 64 00 00 A8 02 00   
 5000,//请求副头部,固定50 00
 00,// 网络号,可变,根据PLC的设置
 FF,//PLC编号,固定值
 FF03,//目标模块IO编号,固定FF 03
 00,// 可变,目标模块站号
 0C00,  // 剩余字节长度,当前字节往后
 0A00,//PLC响应超时时间,以250ms为单位计算
 0104,// 成批读出,主命令
 0000,// 字操作
 640000,// 起始地址,100转换成16进制就是64,按小端处理占3个字节就是64 00 00 
 A8,// 区域代码 
 0200 //读取长度 

接收:D0 00 00 FF FF 03 00 06 00 00 00 23 00 1D 00
D0 00:响应副头部,固定D0 00
00:网络号
FF:PLC编号 
FF 03:目标模块IO编号,固定FF 03
00:目标模块站号 
06 00:响应数据长度,当前字节往后
00 00:结束代码,状态码,表示正常
23 00:一个Word数据,这是一个小端的格式,换成正常顺序是0023,转换成10进制就是35
1D 00:一个Word数据,这是一个小端的格式,换成正常顺序是001D,转换成10进制就是29

2、读取D102开始的1个字数据, 即float类型

发送:50 00 00 FF FF 03 00 0C 00 0A 00 01 04 00 00 66 00 00 A8 02 00  
 5000,//请求副头部,固定50 00
 00,// 网络号,可变,根据PLC的设置
 FF,//PLC编号,固定值
 FF03,//目标模块IO编号,固定FF 03
 00,// 可变,目标模块站号
 0C00,  // 剩余字节长度,当前字节往后
 0A00,//PLC响应超时时间,以250ms为单位计算
 0104,// 成批读出,主命令
 0000,// 字操作,子命令
 660000,// 起始地址102,102转换成16进制就是66,占3个字节,所以是00 00 64,然后按小端处理方式,最终就是66 00 00 。
 A8,// 区域代码 
 0200 //读取长度,为什么是2,不是1,不是一个float类型的数据吗?注意:一个float占2个长度,也就是说float占2个word的长度,通俗地说就是flaot占2个寄存器,word占1个寄存器。
 
接收:D0 00 00 FF FF 03 00 06 00 00 00 CD CC 94 41 
D0 00:响应副头部,固定D0 00
00:网络号
FF:PLC编号 
FF 03:目标模块IO编号,固定FF 03
00:目标模块站号 
06 00:响应数据长度,当前字节往后
00 00:结束代码,状态码
CD CC 94 41:一个float数据,这是一个小端的格式,转换成10进制就是18.6,这个工具软件是识别不了的,需要在程序代码中进行处理转换。 

3、读位数据,即X102开始的1个位(true/false)

发送:50 00 00 FF FF 03 00 0C 00 0A 00 01 04 01 00 02 01 00 9C 01 00  
 50,00,//请求副头部,固定50 00
 00,// 网络号,可变,根据PLC的设置
 FF,//PLC编号,固定值
 FF03,//目标模块IO编号,固定FF 03
 00,// 可变,目标模块站号
 0C00,  // 剩余字节长度,当前字节往后
 0A00,//PLC响应超时时间,以250ms为单位计算
 0104,// 成批读出,主命令
 0100,// 子命令 - 位操作 
 020100,// 起始地址,占3个字节,地址是102,用000102表示,因为是小端,前后颠倒,变成了   020100,这里的X区地址不需要转换成16进制,而是用10进制 ,注意这个坑
 9C// 区域代码 
 01,00 //读取长度 

接收:D0 00 00 FF FF 03 00 03 00 00 00 10 
D0 00:响应副头部,固定D0 00
00:网络号
FF:PLC编号 
FF 03:目标模块IO编号,固定FF 03
00:目标模块站号 
03 00:响应数据长度,当前字节往后
00 00:结束代码,状态码
10 : 这是一个小端的格式,转换成2进制00010000,前面的0001就是true

 4、读取字数据,即读取X100地址的int16类型数据,short或ushort类型的,如-79,35

发送:50 00 00 FF FF 03 00 0C 00 0A 00 01 04 00 00 00 01 00 9C 01 00  
 50,00,
 00,// 可变,根据PLC的设置
 FF,//PLC编号,固定值
 FF03,//目标模块IO编号,固定FF 03
 00,// 可变
 0C00,  // 剩余字节长度
 0A00,//超时时间
 0104,// 成批读出,主操作命令
 0000,// 子命令 - 字操作
 000100,// 起始地址,X区地址不要转换成16进制,用来的10进制,所以100用3个字节表示就是000100,小端处理前后倒置就是000100
 9C,// 区域代码   X
 0100 //读取长度    

接收:D0 00 00 FF FF 03 00 04 00 00 00 EE FF 
D0 00:响应副头部,固定D0 00
00:网络号
FF:PLC编号 
FF 03:目标模块IO编号,固定FF 03
00:目标模块站号 
04 00:响应数据长度,当前字节往后
00 00:结束代码,状态码
EE FF : 这是补码格式,转换成10进制-18,工具软件处理不了这个,需要在程序中处理

5、写入字数据,即按字写入地址为D200开始的2个数据short类型的,即111/222

发送:50 00 00 FF FF 03 00 10 00 0A 00 01 14 00 00 C8 00 00 A8 02 00 6F 00 DE 00 
 50 00,
 00,// 可变,根据PLC的设置
 FF,
 FF 03,
 00,// 可变
 10 00,  // 剩余字节长度
 0A 00,
 01 14,// 成批写入
 00 00,// 字操作
 C8 00 00,// 起始地址
 A8,// 区域代码 
 02 00, //写入长度

6F 00 DE 00  //具体的数据值,111转换成16进制就是6f,小端处理就是6f00,222小端处理就是de00
  

接收:D0 00 00 FF FF 03 00 02 00 00 00 
D0 00:响应副头部,固定D0 00
00:网络号
FF:PLC编号 
FF 03:目标模块IO编号,固定FF 03
00:目标模块站号 
02 00:响应数据长度,当前字节往后
00 00:结束代码,状态码

6、写入字数据,即按字写入地址为D112开始的1个数据,即float类型的13.9

发送:50 00 00 FF FF 03 00 10 00 0A 00 01 14 00 00 70 00 00 A8 02 00 66 66 5E 41  
5000,
00,// 可变,根据PLC的设置
FF,
FF03,
00,// 可变 
1000,  // 剩余字节长度
0A00,超时时间
0114,// 成批写入
0000,// 字操作 
700000,// 起始地址,占3个字节,112转换成16进制的小端格式是700000
A8,// 区域代码 
0200, //写入长度,float的长度是2个长度
66665e41//具体的数据值,float占4个字节,分别是66,66,5e,41

接收:D0 00 00 FF FF 03 00 02 00 00 00  
D0 00:响应副头部,固定D0 00
00:网络号
FF:PLC编号 
FF 03:目标模块IO编号,固定FF 03
00:目标模块站号 
02 00:响应数据长度,当前字节往后
00 00:结束代码,状态码

4、小结

创作不易,打字截图不易,整理思路不易,走过路过不要错过,点赞关注收藏又圈粉,共同致富。

创作不易,打字截图不易,整理思路不易,走过路过不要错过,点赞关注收藏又圈粉,共同致富。

创作不易,打字截图不易,整理思路不易,走过路过不要错过,点赞关注收藏又圈粉,共同致富。

欢迎转载,复制,抄习,分享,打印。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

windows10安装配置nvm以达到切换nodejs的目的

前言 各种各样的项目,各种node环境,还有node_modules这个庞然大物。。想想都觉得恐怖。 所以现在有了:nvm-切换node环境,pnpm–解决重复下载同样类库的问题。 下面将就如何在win10下配置进行说明 nvm下载配置 nvm的github下载地…

Flink从入门到实践(三):数据实时采集 - Flink MySQL CDC

文章目录 系列文章索引一、概述1、版本匹配2、导包 二、编码实现1、基本使用2、更多配置3、自定义序列化器4、Flink SQL方式 三、踩坑1、The MySQL server has a timezone offset (0 seconds ahead of UTC) which does not match the configured timezone Asia/Shanghai. 参考资…

kmeans聚类选择最优K值python实现

Kmeans算法中K值的确定是很重要的。 下面利用python中sklearn模块进行数据聚类的K值选择 数据集自制数据集,格式如下: 维度为3。 ①手肘法 手肘法的核心指标是SSE(sum of the squared errors,误差平方和), 其中,Ci是第…

微调LLM或使用RAG,开发RAG管道的12个痛点

论文地址:archive.is/bNbZo Pain Point 1: Missing Content 内容缺失 Pain Point 2: Missed the Top Ranked Documents 错过排名靠前的文档 Pain Point 3: Not in Context — Consolidation Strategy Limitations 不在上下文中 — 整合战略的局限性 Pain Point …

免费生成ios证书的方法(无需mac电脑)

使用hbuilderx的uniapp框架开发移动端程序很方便,可以很方便地开发出移动端的小程序和app。但是打包ios版本的app的时候却很麻烦,官方提供的教程需要使用mac电脑来生成证书,但是mac电脑却不便宜,一般的型号都差不多上万。 因此&a…

【Java面试】数据类型常见面试题

什么是包装类型 将基本类型包装进了对象中得到的类型 基本类型和包装类型有什么区别 用途不同:基本类型一般用于局部变量,包装类型用于其他地方存储方式不同:用于局部变量的基本类型存在虚拟机栈中的局部变量表中,用于成员变量…

火星符号运算 - 华为OD统一考试

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C 题目描述 已知火星人使用的运算符号为 #和$ 其与地球人的等价公式如下 x#y2*x3*y4 x$y3*xy2x y是无符号整数。地球人公式按照c语言规则进行计算。火星人公式中&#xff0…

基于鲲鹏服务器的LNMP配置

基于鲲鹏服务器的LNMP配置 系统 Centos8 # cat /etc/redhat-release CentOS Linux release 8.0.1905 (Core) 卸载已经存在的旧版本的安装包 # rpm -qa | grep php #查看已经安装的PHP旧版本# rpm -qa | grep php | xargs rpm -e #卸载已经安装的旧版,如果提示有…

113.路径总和 II

给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1: 输入:root [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum 22 输出&a…

RocketMQ(二):领域模型(生产者、消费者)

1 生产者(Producer) 本节介绍Apache RocketMQ 中生产者的定义、模型关系、内部属性、版本兼容和使用建议。 1.1 定义 生产者是Apache RocketMQ 系统中用来构建并传输消息到服务端的运行实体。 生产者通常被集成在业务系统中,将业务消息按照要…

513. 找树左下角的值 - 力扣(LeetCode)

题目描述 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 题目示例 输入: root [2,1,3] 输出: 1 解题思路 深度优先搜索 使用 depth 记录遍历到的节点的深度,result 记录深度在 depth 的最…

C++ 动态规划 记忆化搜索 滑雪

给定一个 R 行 C 列的矩阵,表示一个矩形网格滑雪场。 矩阵中第 i 行第 j 列的点表示滑雪场的第 i 行第 j 列区域的高度。 一个人从滑雪场中的某个区域内出发,每次可以向上下左右任意一个方向滑动一个单位距离。 当然,一个人能够滑动到某相…

C++:二叉搜索树模拟实现(KV模型)

C:二叉搜索树模拟实现(KV模型) 前言模拟实现KV模型1. 节点封装2、前置工作(默认构造、拷贝构造、赋值重载、析构函数等)2. 数据插入(递归和非递归版本)3、数据删除(递归和非递归版本…

【芯片设计- RTL 数字逻辑设计入门 15 -- 函数实现数据大小端转换】

文章目录 函数实现数据大小端转换函数语法函数使用的规则Verilog and Testbench综合图VCS 仿真波形 函数实现数据大小端转换 在数字芯片设计中,经常把实现特定功能的模块编写成函数,在需要的时候再在主模块中调用,以提高代码的复用性和提高设…

《MySQL 简易速速上手小册》第6章:MySQL 复制和分布式数据库(2024 最新版)

文章目录 6.1 设置和管理复制6.1.1 基础知识6.1.2 重点案例:使用 Python 设置 MySQL 主从复制6.1.3 拓展案例 1:自动故障转移6.1.4 拓展案例 2:设置双主复制 6.2 复制的类型和策略6.2.1 基础知识6.2.2 重点案例:使用 Python 设置半…

目标检测 | 卷积神经网络(CNN)详细介绍及其原理详解

前言:Hello大家好,我是小哥谈。卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习模型,主要用于图像识别和计算机视觉任务。它的设计灵感来自于生物学中视觉皮层的工作原理。CNN的核心思想是通…

极智一周 | 国产CPU系列汇总、鲲鹏、飞腾、平头哥 And so on

欢迎关注我的公众号 [极智视界],获取我的更多技术分享 大家好,我是极智视界,带来本周的 [极智一周],关键词:国产CPU系列汇总、鲲鹏、飞腾、平头哥 And so on。 邀您加入我的知识星球「极智视界」,星球目前…

一分钟了解电脑关机快捷键是什么!

在日常使用电脑的过程中,了解一些基本的快捷键是提高效率的关键之一。其中,电脑关机快捷键是一个方便且迅速的操作,使您可以在不用通过烦琐的菜单操作的情况下,快速关机电脑。在本文中,我们将探讨电脑关机快捷键是什么…

Linux——进程池(管道)

经过了管道的介绍之后,我们可以实现了进程间通信,现在我就来简单介 绍一下管道的应用场景——进程池。1. 引入 在我们的编码过程中,不乏会听到,内存池,进程池,空间配置器等等名词,这些是用来干…

NLP_神经概率语言模型(NPLM)

文章目录 NPLM的起源NPLM的实现1.构建实验语料库2.生成NPLM训练数据3.定义NPLM4.实例化NPLM5.训练NPLM6.用NPLM预测新词 NPLM小结 NPLM的起源 在NPLM之前,传统的语言模型主要依赖于最基本的N-Gram技术,通过统计词汇的共现频率来计算词汇组合的概率。然而…
最新文章