C#上位机与三菱PLC的通信03--MC协议之A-1E报文解析

news2025/1/17 13:50:11

1、MC协议帧 

MC协议可以在串口通信,也可以在以太网通信,有A-1E和Qna-3E两种模式,这两种都是三菱PLC通信协议中比较常用的两种,一般我们使用比较多的是以太网通信,对于FX5U系列/Q系列/Qna系列/L系列的PLC,通常会使用QnA兼容3E帧,对于FX3U系列,我们需要加以太网模块,采用A兼容1E帧。

A-1E是三菱PLC通信协议中最早的一种,它是一种基于二进制通信协议的协议,适用于三菱FX系列PLC和A系列PLC。该协议支持点对点通信和多点通信,可以实现PLC之间的数据交换和远程监控等功能。

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

2、A-1E协议介绍

1、读取数据的报文结构

可以看到读取数据发送12个字节,响应4个字节,各个字节的意义如下(0x表示16进制),注意响应并不一定是4个字节,如果读取长度不是一个,则响应肯定大于4个字节,具体看后面的实例操作,总之结构就是如下表示:

 

2、写入数据的报文结构

可以看到写入数据发送14个字节,响应2个字节,各个字节的意义如下(0x表示16进制),注意请求不一定是14个字节,如果写入的长度不止一个长度,则报文字节肯定大于14,总之报文结构如下:

 3、软元件分类及访问规则

注意这个操作方式中的bit和word,bit就是一个位,二进制中的位bit,0或1算一个位,word叫字,一个字就16位,就是2个字节,一个字节是8位,2个字节就是16位,也就是16个bit,在C#中就是2个ascii码,比如01就是2个字节,就是一个word,简单讲就是word占2个字节,另外0X是16进制的表示。

4、命令类型(功能码,副头部)

上述不管是读取还是写入的请求报文中,第一个字节是功能码,也就是指命令类型,A-1E的命令类型具体如下:

0x00 批量位读取

0x01 批量字读取

0x02 批量位写入

0x03 批量字写入

0x04 随机位写入

0x05 随机字写入

注意响应报文中的状态码00表示正常

3、模拟器介绍

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

1、HslCommunicationDemo-v11.8.1

 这个是一个强大的工业通信工具,在业界有很高的知名度,具体信息看这个地址(  http://www.hslcommunication.cn/):

胡工科技

胡工科技

2、本人自研的模拟器,自定Logo,飞常屌,帅逼列

3、为什么要模拟器?

上面介绍的2个模拟器与三菱gx work3自带的gx simulator3的模拟器有什么不同?

simulator3是模拟运行PLC程序的,它没有提供任何外界接口供外部应用程序调用,串口也好,网口也好,都没有,也就是说外部的应用程序,java,C#,python等无法与simulator3通讯,你写一个通信程序是无法与simulator3通信,从而无法读取和写入Plc程序,当然如果你有真家伙,那是例外,所以上面的2个模拟器就是真实的虚拟PLC硬件,小伙伴们,能明白这个意思吗?

4、你有真家伙,设备PLC的TCP参数方法如下

1、下载 GX Works3

这个过程在前面的文章已介绍过。

C#上位机与三菱PLC的通信01--搭建仿真环境

2、新建工程,选择自己的 PLC 型号,这里用的是 FX5U 系列

3、设置 PLC 以太网端口

 4、测试plcl连接

5、把配置写入 PLC 

跳出弹窗,全部选择 “是”,写入完成之后需要给 PLC 断电重启 

4、工具软件

因为是需要发送tcp的报文,无论是A-1E还是Qna-3E,它们都是网络报文,需要TCP网络通信,所以这个工具软件就是发送和接收报文,从而达到分析报文的目的。这个远程主机地址就是Plc的IP地址,远程主机端口就是PLC的端口,PLC作为TCP服务器,工具软件作为TCP客户端。

TCP面向连接,提供可靠交付,有流量控制、拥塞控制面向字节流(从上层传下的数据进行分割,分割成合适运输的数据块)只能是一对一连接。 

3、A-1E报文解析

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

 

 

发送:01 FF 0A 00 64 00 00 00 20 44 02 00,占12个字节

01:副头部,也叫功能码,也叫命令类型(0x00 批量位读取、0x01 批量字读取、0x02 批量位写入、0x03 批量字写入、0x04 随机位写入、0x05 随机字写入)

FF:PLC编号

0A 00:超时时间,超时时间是以单位:250ms。 

64 00 00 00:地址占4个字节,要读取的地址是100,换成16进制就是64,那为什么是64 00 00 00,这里需要掌握什么是小端处理,小端是三菱的数据设置方式,也有其他PLC是大端处理,大端与小端格式是什么意思,自行百度消化,小端的意思是低位放前面,高位放后面,64用4个字节来表示的话就是00 00 00 64,按小端处理的要求就是前后倒置,所以是64 00 00 00

20 44:存储区,查前面的表就是44 20,同样按小端处理,高位放后面,低位放前面,就变成了20 44。

02 00:读取2个数据,长度是2,长度占2个字节,所以是00 02,按小端处理要求就是02 00

响应:81 00 19 00 26 00 ,占6个字节

81:副头部
00:状态码,表示正常
19 00:要将1900变成0019,为什么了?刚才说了是小端处理,那么得到的数据19是低位,00是高位,所以是0019,即19,它换成10进制就是25。
26 00 :同样2600就是38 。

与实际数据一致,读取成功。

 

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

 

 
发送:01 FF 0A 00 66 00 00 00 20 44 04 00  

01:副头部,也叫功能码,也叫命令类型(0x00 批量位读取、0x01 批量字读取、0x02 批量位写入、0x03 批量字写入、0x04 随机位写入、0x05 随机字写入)

FF:PLC编号

0A 00:超时时间,超时时间是以单位:250ms。 

66 00 00 00:地址占4个字节,要读取的地址是102,换成16进制就是66 

20 44:存储区,查前面的表就是44 20,同样按小端处理,高位放后面,低位放前面,就变成了20 44。

04 00:读取1个float类型的数据,占4个字节,所以是00 04,按小端处理要求就是04 00,word占2个字节,float占4个字节,记住就搞定了。

接收:81 00 33 33 35 42 00 00 00 00 

81:副头部
00:状态码,表示正常
33 33 35 42:这个是字节byte,不能直接看出是45.3,它需要在程序代码中进行处理,比如代码Console.WriteLine(BitConverter.ToSingle(temp));//字节数组转换成float数据,这个工具软件不能处理,所以你看到的是33 33 35 42。

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

发送:00 FF 0A 00 10 00 00 00 20 4D 01 00 

 00:副头部,也叫功能码,也叫命令类型(0x00 批量位读取、0x01 批量字读取、0x02 批量位写入、0x03 批量字写入、0x04 随机位写入、0x05 随机字写入)

FF:PLC编号

0A 00:超时时间,超时时间是以单位:250ms。 

10 00 00 00:地址占4个字节,要读取的地址是16,换成16进制就是10

20 4D:存储区,查前面的表就是4D 20,同样按小端处理,高位放后面,低位放前面,就变成了20 4D。

01 00:读取1个bool类型的数据,占1个字节,所以是01 00 

接收:80 00 10  
80:副头部
00:状态码,表示正常成功
10:10是一个字节,其中1就是true,后面的0不要用了,同样的,这个工具软件处理不了,需要在程序代码中处理,但结果一定是OK的。

4、通过A1E进行字的写入,即向 D20,D21写入34,45

先看报文结构,再开始搞事。

发送:03 FF 0A 00 14 00 00 00 20 44 02 00 22 00 2D 00  

03:副头部,也叫功能码,也叫命令类型(0x00 批量位读取、0x01 批量字读取、0x02 批量位写入、0x03 批量字写入、0x04 随机位写入、0x05 随机字写入)

FF:PLC编号

0A 00:超时时间,超时时间是以单位:250ms。 

14 00 00 00:地址占4个字节,要读取的地址是20,换成16进制就是14

20 44:存储区,查前面的表就是44 20,同样按小端处理,高位放后面,低位放前面,就变成了20 44。

02 00:写入长度2个

22 00:要写入的数据是34,换成16进制就是22,用2个字节表示就是0022,按小端处理要求就是2200

2D 00:要写入的数据是45,换成16进制就是2D,用2个字节表示就是002D,按小端处理要求就是2D00

接收:83 00 
83:副头部
00:状态码,表示正常成功 

5、通过A1E向 D30 写入一个Float数据24.5,一个float占4个字节

 

发送:03 FF 0A 00 1E 00 00 00 20 44 02 00 00 00 C4 41 

03:副头部,也叫功能码,也叫命令类型(0x00 批量位读取、0x01 批量字读取、0x02 批量位写入、0x03 批量字写入、0x04 随机位写入、0x05 随机字写入)

FF:PLC编号

0A 00:超时时间,超时时间是以单位:250ms。 

1E 00 00 00:地址占4个字节,要读取的地址是30,换成16进制就是1E

20 44:存储区,查前面的表就是44 20,同样按小端处理,高位放后面,低位放前面,就变成了20 44。

02 00:写入长度2个,为什么不是01而是02,因为float占2个word的长度。

00 00 C4 41:要写入的数据是24.5,换成字节就是C4 41 

接收:83 00 

83:副头部
00:状态码,表示正常成功 

4、小结

 到目前为止,还没有网上有哪个文章有我如此的报文分析,操作实例,一大批都是抄来抄去,仅以此文章献给最爱的粉丝,希望对各位大师有些启示。

原创真的不容易,走过路过不要错过,点赞关注收藏又圈粉,共同致富。

原创真的不容易,走过路过不要错过,点赞关注收藏又圈粉,共同致富。

原创真的不容易,走过路过不要错过,点赞关注收藏又圈粉,共同致富。

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

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

相关文章

求职|基于Springboot的校园求职招聘系统设计与实现(源码+数据库+文档)

校园求职招聘系统目录 目录 基于Springboot的校园求职招聘系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、企业信息管理 3、公告类型管理 4、公告信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选…

大型秒杀中如何减库存?JAVA 架构知识

目前来看,业务系统中最常见的就是预扣库存方案,像你在买机票、买电影票时,下单后一般都有个“有效付款时间”,超过这个时间订单自动释放,这都是典型的预扣库存方案。而具体到秒杀这个场景,应该采用哪种方案…

【MATLAB源码-第138期】基于matlab的D2D蜂窝通信仿真,对比启发式算法,最优化算法和随机算法的性能。

操作环境: MATLAB 2022a 1、算法描述 D2D蜂窝通信介绍 D2D蜂窝通信允许在同一蜂窝网络覆盖区域内的终端设备直接相互通信,而无需数据经过基站或网络核心部分转发。这种通信模式具有几个显著优点:首先,它可以显著降低通信延迟&…

Springboot+vue的社区养老服务平台(有报告)。Javaee项目,springboot vue前后端分离项目

演示视频: Springbootvue的社区养老服务平台(有报告)。Javaee项目,springboot vue前后端分离项目 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的社区养老服务平台,采用M(model&…

【初中生讲机器学习】6. 分类算法中常用的模型评价指标有哪些?here!

创建时间:2024-02-07 最后编辑时间:2024-02-09 作者:Geeker_LStar 你好呀~这里是 Geeker_LStar 的人工智能学习专栏,很高兴遇见你~ 我是 Geeker_LStar,一名初三学生,热爱计算机和数学,我们一起加…

c语言实现io多路复用(select),进程,线程并发服务器

io多路复用&#xff08;select&#xff09;代码 #include<myhead.h> #include <sys/select.h> #define PORT 8888 #define IP "192.168.250.100" int main(int argc, char const *argv[]) { //创建套接字int sfd socket(AF_INET, SOCK_STREAM, 0…

华为云账号注销之后账号下的域名丢了怎么办?记录一次域名转移权限的经历

背景 我之前在阿里云上买了个域名&#xff0c;有效期10年的&#xff0c;然后在2023年1月末转移到华为云了&#xff0c;交了一年的域名费用&#xff0c;买了一个一年的华为云服务器 一年之后&#xff0c;华为云的服务器也到期了&#xff0c;我就想着参加新用户计划&#xff0c…

Spring IoC容器详解

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 基本概念 Spring IoC容器是Spring框架的核心组件&#xff0c;它实现了控制反转&#xff08;Inversion of Control&#xff0c;IoC&#xff09;的设计原则。IoC是一种编程思…

计算一个时间序列中的元素属于一年中的第几季度

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 计算一个时间序列中的元素 属于这一年中的第几季度 Series.dt.quarter [太阳]选择题 以下代码的输出结果中正确的是? import pandas as pd ts pd.Series(pd.date_range("2024-02…

MFC实现遍历系统进程

今天我们来枚举系统中的进程和结束系统中进程。 认识几个API 1&#xff09;CreateToolhelp32Snapshot 用于创建系统快照 HANDLE WINAPI CreateToolhelp32Snapshot( __in DWORD dwFlags, //指定快照中包含的系统内容__in DWORD th32P…

springboot项目热部署实现(Spring Boot DevTools方式)

文章目录 Spring Boot DevTools简介Spring Boot DevTools原理spring Boot Devtools优缺点Spring Boot DevTools集成步骤第一步&#xff1a;添加maven依赖第二步&#xff1a;IDEA热部署配置 Spring Boot DevTools简介 Spring Boot DevTools是Spring Boot提供的一个开发工具&…

《动手学深度学习(PyTorch版)》笔记7.7

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过&…

Linux探秘之旅:透彻理解路径、命令与系统概念

目录 如何远程连接 远程登录简明指南 linux区别 1.严格区分大小写 2.linux的命令返回结果判断 3.如何查看网络信息 4.关于后缀名&#xff08;Linux不关心文件后缀&#xff09; 4.1 需要记忆的后缀 5.echo命令 6.linux一切皆文件 6.1比如磁盘的文件 6.2可执行文件 …

数字图像处理(实践篇)四十七 OpenCV-Python 高动态范围HDR

目录 一 HDR 二 实践 高质量的图像具备的要素如下: ①分辨率 图像中的像素数量。在特定屏幕尺寸下,分辨率越高,像素越多,显示的细节更精细。 ②位深度

“Hopf Oscillator-Based Gait Transition for A Quadruped Robot“代码复现

paper链接&#xff1a;https://ieeexplore.ieee.org/abstract/document/7090642/ import math import numpy as np import matplotlib.pyplot as plt# 设置中文显示 plt.rcParams[font.sans-serif] [SimHei] # 设置中文字体为黑体 plt.rcParams[axes.unicode_minus] False …

今年春节,德施曼成“春晚御用”智能锁,亮相总台春晚直播间

总台春晚&#xff0c;是每年春节期间的最大热点。 今年除夕夜&#xff0c;高端智能锁品牌德施曼&#xff0c;不仅成为“春晚御用”智能锁&#xff0c;还将旗下的哨兵猫眼智能锁&#xff0c;卖到了总台春晚的直播间里。龙年春节&#xff0c;德施曼智能锁携手小红书《大家的春晚》…

Quorum NWR算法,鱼和熊掌也可兼得

众所周知在分布式系统中CAP&#xff0c;一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;、分区容错性&#xff08;Partition Tolerance&#xff09;三个指标不可兼得&#xff0c;只能在三个指标中选择两个。假如此时已经实现了一套AP型…

element ui表格手写拖动排序

效果图&#xff1a; 思路&#xff1a; 重点在于&#xff1a;拖动行到某一位置&#xff0c;拿到这一位置的标识&#xff0c;数据插入进这个位置 vueuse的拖拽hooks useDraggable 可以用&#xff1b;html5 drag能拖动行元素&#xff1b;mounsedown、mounsemove时间实现拖拽 页…

Linux下代码的运行

在Windows环境下&#xff0c;我们代码都是在集成开发环境下运行&#xff0c;也就是说代码的编辑、编译、调试、运行都在一个软件上&#xff0c;而在Linux环境下这些都是分开执行的。 Linux编辑器-vim vim是一款多模式编辑器&#xff0c;vim有很多模式&#xff0c;最常用的三个…

完美运营的最新视频打赏系统及附带教程

(购买本专栏可免费下载栏目内所有资源不受限制,持续发布中,需要注意的是,本专栏为批量下载专用,并无法保证某款源码或者插件绝对可用,介意不要购买) 优于市面上95%的打赏系统,与其他打赏系统相比,功能更加强大,完美运营且无bug。支付会调、短链接生成、代理后台、价…