上下位机通讯协议_机器视觉软件开发系列--三菱PLC的MC通信协议分析和实现(一)...

大家好,今天我来说一下上位机与三菱PLC的通信协议MC协议。

MC协议概述

官方的定义:MC通讯协议,就是对方设备通过C24或者E71模块与PLC 的CPU软元件数据和程序的读出/写入PLC用的通讯方式的名称。

以上听得拗口,口语化表达的意思就是:PC电脑通过C24模块或者E71模块,按照一定的数据格式,读写PLC软元件的过程。

在三菱PLC的通讯设置端,如下图所示,通信协议设置中有很多种类型。第一种是无顺序协议,这是直接通过TCP/UDP发送数据给PC上位机端,上位机也只直接发送数据,这种情况下PLC要去解析数据格式,相对来说比较麻烦, 我只做过与松下PLC直接按照无协议通讯做过项目,对方的工程师调试这个无协议搞了一周,比较繁琐,不推荐使用。

上下位机通讯协议_机器视觉软件开发系列--三菱PLC的MC通信协议分析和实现(一)..._第1张图片

GX Developer 设置MC协议

还有就是MC协议,我写的程序是参考《Q系列MELSEC通讯协议参考手册(中文).pdf》写的,协议可以参见我CSDN博客中https://download.csdn.net/download/yangchuang1992/10911284

上下位机通讯协议_机器视觉软件开发系列--三菱PLC的MC通信协议分析和实现(一)..._第2张图片

MC协议类型表格

对象模块中C24代表串口(RS232 RS485),E71代表网口通信,这个要看具体的PLC那端通信是串口还是网口。串口 通讯帧(数据格式)有四种,QnA兼容3C帧,QnA兼容4C帧,QnA兼容2C帧,A兼容1C帧,形式对应着1~5,对应着PLC中就是上上图中的下拉列表中的格式1到5。数据格式有ASCII代码和二进制代码,那上面最多可以组合出10种通讯格式, 那是不是我们都要实现呢?

QnA兼容3C帧、QnA兼容4C帧、QnA兼容3E帧可以访问Q/QnA PLC CPU 全部软元件和全部文件。

QnA兼容2C帧,可以访问QnA PLC CPU软元件和全部文件

A 兼容 1C 帧 A 兼容 1E 帧 ,可以访问QnA PLC CPU软元件和全部文件

综上,我们串口使用QnA兼容3C帧,网口QnA兼容3E帧,可以覆盖Q/QnA系列的PLC读取。

我这里只说寄存器D的读写操作

ASCII模式如下

  • 1. 串口QnA兼容3C帧格式(格式1,2,3,4都行),

使用格式3来读寄存器说明报文

由于串口数据不能一次性发送,数据是分多次发送的, 所以一个完整的帧数据有起始和结尾符标记, STX =0X02 表示开始 ETX=0X03表示结尾符, 代表一帧数据完成。

上下位机通讯协议_机器视觉软件开发系列--三菱PLC的MC通信协议分析和实现(一)..._第3张图片

写入PLC报文

要注意这里的寄存器编号要是6位,不足补0, 读取个数是十六进制表示

正常回复:

上下位机通讯协议_机器视觉软件开发系列--三菱PLC的MC通信协议分析和实现(一)..._第4张图片

正常返回报文

其中,数据部分有大小端区分,如果数据超过了65535,就要用2个字表示,高低位要互换

异常回复:

上下位机通讯协议_机器视觉软件开发系列--三菱PLC的MC通信协议分析和实现(一)..._第5张图片

异常返回报文

其中出错编码可以在PLC相关手册中查询。

使用格式3来写寄存器写说明报文

上位机写入数据:

上下位机通讯协议_机器视觉软件开发系列--三菱PLC的MC通信协议分析和实现(一)..._第6张图片

写入PLC数据报文

正常返回:

上下位机通讯协议_机器视觉软件开发系列--三菱PLC的MC通信协议分析和实现(一)..._第7张图片

写入正常报文

异常返回:

  • 2.QnA 兼容 3E 帧

读数据:

上下位机通讯协议_机器视觉软件开发系列--三菱PLC的MC通信协议分析和实现(一)..._第8张图片

读数据报文

正常返回

上下位机通讯协议_机器视觉软件开发系列--三菱PLC的MC通信协议分析和实现(一)..._第9张图片

正常返回报文

异常返回


写数据:

上下位机通讯协议_机器视觉软件开发系列--三菱PLC的MC通信协议分析和实现(一)..._第10张图片

写数据报文

正常返回

上下位机通讯协议_机器视觉软件开发系列--三菱PLC的MC通信协议分析和实现(一)..._第11张图片

正常返回报文

异常返回

上下位机通讯协议_机器视觉软件开发系列--三菱PLC的MC通信协议分析和实现(一)..._第12张图片

异常返回报文

/// 读取的数据

private int ReadMitNWord(string strIoName, int nNum, ref string result)

{

int nRet = PLCReturn.PLC_OK;

if (null == _Connection)

throw new Exception("PLC连接对象位null");

string sendData = "";

if (_Connection.ConnectType() == "COM")

{

sendData = string.Format("{0}{1}0000D*{2}{3:X4}{4}

你可能感兴趣的:(上下位机通讯协议,松下plc上位机程序,松下plc上位机软件,用mc协议的话,要在程序里写报文吗)