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.mzph.cn/news/675566.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day7(2024/2/8)

mainui.h(第二个界面) #ifndef MAINUI_H #define MAINUI_H#include <QWidget>namespace Ui { class MainUi; }class MainUi : public QWidget {Q_OBJECTpublic:explicit MainUi(QWidget *parent nullptr);~MainUi();public slots:void main_ui();private:Ui::MainUi *u…

Rust 格式化输出

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、format! 宏二、fmt::Debug三、fmt::Display四、? 操作符 循环打印 前言 Rust学习系列-本文根据教程学习Rust的格式化输出&#xff0c;包括fmt::Debug&…

MATLAB环境下基于深层小波时间散射网络的ECG信号分类

2012年&#xff0c;法国工程学院院士Mallat教授深受深度学习结构框架思想的启发&#xff0c;提出了基于小波变换的小波时间散射网络&#xff0c;并以此构造了小波时间散射网络。 小波时间散射网络的结构类似于深度卷积神经网络&#xff0c;不同的是其滤波器是预先确定好的小波…

【leetcode热题100】最大矩形

给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵&#xff0c;找出只包含 1 的最大矩形&#xff0c;并返回其面积。 示例 1&#xff1a; 输入&#xff1a;matrix [["1","0","1","0","0"],["1",&quo…

C语言操作符超详细总结

文章目录 1. 操作符的分类2. 二进制和进制转换2.1 2进制转10进制2.1.1 10进制转2进制数字 2.2 2进制转8进制和16进制2.2.1 2进制转8进制2.2.2 2进制转16进制 3. 原码、反码、补码4.移位操作符4.1 左移操作符4.2 右移操作符 5. 位操作符&#xff1a;&、|、^、~6. 逗号表达式…

从github上拉取项目到pycharm中

有两种方法&#xff0c;方法一较为简单&#xff0c;方法二用到了git bash&#xff0c;推荐方法一 目录 有两种方法&#xff0c;方法一较为简单&#xff0c;方法二用到了git bash&#xff0c;推荐方法一方法一&#xff1a;方法二&#xff1a; 方法一&#xff1a; 在github上复制…

复制和粘贴文本时剥离格式的5种方法(MacWindows)

您可能每天复制和粘贴多次。虽然它是一个非常方便的功能&#xff0c;但最大的烦恼之一就是带来了特殊的格式。从网络上获取一些文本&#xff0c;您经常会发现粘贴到文档中时&#xff0c;它保持原始样式。 我们将展示如何使用一些简单的技巧在不格式化的情况下复制和粘贴。 1.…

下载已编译的 OpenCV 包在 Visual Studio 下实现快速配置

自己编译 OpenCV 挺麻烦的&#xff0c;配置需要耗费很长时间&#xff0c;编译也需要很长时间&#xff0c;而且无法保证能全部编译通过。利用 OpenCV 官网提供的已编译的 OpenCV 库可以节省很多时间。下面介绍安装配置方法。 1. OpenCV 官网 地址是&#xff1a;https://opencv…

C++初阶:容器(Containers)vector常用接口详解

介绍完了string类的相关内容后&#xff1a;C初阶&#xff1a;适合新手的手撕string类&#xff08;模拟实现string类&#xff09; 接下来进入新的篇章&#xff0c;容器vector介绍&#xff1a; 文章目录 1.vector的初步介绍2.vector的定义&#xff08;constructor&#xff09;3.v…

WebSocket+Http实现功能加成

WebSocketHttp实现功能加成 前言 首先&#xff0c;WebSocket和HTTP是两种不同的协议&#xff0c;它们在设计和用途上有一些显著的区别。以下是它们的主要特点和区别&#xff1a; HTTP (HyperText Transfer Protocol): 请求-响应模型&#xff1a; HTTP 是基于请求-响应模型的协…

阿里云幻兽帕鲁服务器有用过的吗?搭建简单啊

玩转幻兽帕鲁服务器&#xff0c;幻兽帕鲁Palworld多人游戏专用服务器一键部署教程&#xff0c;阿里云推出新手0基础一键部署幻兽帕鲁服务器教程&#xff0c;傻瓜式一键部署&#xff0c;3分钟即可成功创建一台Palworld专属服务器&#xff0c;成本仅需26元&#xff0c;阿里云百科…

了解海外云手机的多种功能

随着社会的高度发展&#xff0c;海外云手机成为商家不可或缺的工具&#xff0c;为企业出海提供了便利的解决方案。然而&#xff0c;谈及海外云手机&#xff0c;很多人仍不了解其强大功能。究竟海外云手机有哪些功能&#xff0c;可以为我们做些什么呢&#xff1f; 由于国内电商竞…

Vue2中v-for 与 v-if 的优先级

在Vue2中&#xff0c;v-for 和 v-if 是常用的指令&#xff0c;它们在前端开发中非常有用。但是&#xff0c;当我们在同一个元素上同时使用这两个指令时&#xff0c;就需要注意它们的优先级关系了。 首先&#xff0c;让我们了解一下v-for和v-if的基本用法。 v-for 是Vue的内置…

问题:必须坚持以中国式现代化推进中华民族伟大复兴,既不走封闭僵化的老路,也不走 #媒体#知识分享

问题&#xff1a;必须坚持以中国式现代化推进中华民族伟大复兴&#xff0c;既不走封闭僵化的老路&#xff0c;也不走 A、中国特色社会主义道路 B、改革开放之路 C、改旗易帜的邪路 D、中国式现代化之路 参考答案如图所示

Git详细讲解

文章目录 一、Git相关概念二、本地分支中文件的添加 、提交2.1 文件状态2.2 创建Git仓库2.2.1 git init2.2.2 git clone 2.3 添加操作(git add)2.4 提交操作&#xff08;git commit&#xff09;2.5 撤销操作2.5.1 撤销 add操作2.5.2 撤销 commit操作2.5.3 覆盖上一次的commit操…

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

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

【开源】JAVA+Vue.js实现社区买菜系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.1.1 数据中心模块2.1.2 菜品分类模块2.1.3 菜品档案模块2.1.4 菜品订单模块2.1.5 菜品收藏模块2.1.6 收货地址模块 2.2 可行性分析2.3 用例分析2.4 实体类设计2.4.1 菜品分类模块2.4.2 菜品档案模块2.4.3…

哈希表(Hash Table)-----运用实例【通过哈希表来管理雇员信息】(java详解) (✧∇✧)

目录 一.哈希表简介&#xff1a; 实例介绍&#xff1a; 类的创建与说明&#xff1a; 各功能图示&#xff1a; 1.class HashTab{ }; 2. class EmpLinkedList{ }&#xff1b; 3. class Emp{ }&#xff1b; 4.测试&#xff1a; 运行结果&#xff1a; 最后&#xff0c;完整…

关于数字图像处理考试

我们学校这门科目是半学期就完结哦&#xff0c;同学们学习的时候要注意时间哦。 选择题不用管&#xff0c;到时候会有各种版本的复习资料的。 以下这些东西可能会是大题的重点&#xff1a; 我根据平时代码总结的&#xff0c;供参考 基本操作&#xff1a; 1.读图&#xff1a;…

【LeetCode】37. 解数独(困难)——代码随想录算法训练营Day30

题目链接&#xff1a;37. 解数独 题目描述 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&…