精华内容
下载资源
问答
  • MODBUS通信异常

    2020-08-10 10:42:10
    MODBUS通信问题 硬件CM25 板子 200 smart 示波器 施耐德ATV71驱动器 软件 step 7 串口助手 问题:CM25与200 smart 通信时间总是在step 7中设置主站超时时间的时间。例如:主站超时设置3000ms, 首先200 smart发送...

    MODBUS通信问题
    硬件CM25 板子 200 smart 示波器 施耐德ATV71驱动器
    软件 step 7 串口助手
    问题:CM25与200 smart 通信时间总是在step 7中设置主站超时时间的时间。例如:主站超时设置3000ms, 首先200 smart发送数据CM25 迅速做出响应,之后间隔3000ms才能发送下一组数据。正常情况下非常迅速的进行数据交换。
    解决:CM25 与 200 smart 通信数据正常无误,但是使用示波器抓取信号是发现一组不该有的波形(如图),
    在这里插入图片描述

    伏值在-0.5左右。而RS485 通信AB两端电压差在正负0.2-6V左右, 逻辑“1” +(0.2 - 6)V ,逻辑“0”-(0.2 - 6)V。虽然出现在-0.5V左右不会对数据产生什么影响,但是存在隐患。
    之后尝试使用施耐德ATV71驱动器 进行MODBUS通信,无异常波形。
    由此判定CM板子有问题,之后我们又检查硬件电路,如果硬件有问题,它的每组波形图都会受到影响。之后我们使用示波器通道2 检测RS485通信芯片使能端发现如图波形。
    在这里插入图片描述

    CM接收是正常的但是在发送完毕之后使能应下拉但CM板还是保持高电平,由此推断可能ARM控制通信芯片使能端有问题。至于为什么会出现这种异常波形,我们推断可能PLC在发送数据是与使能端叠加从而产生这种异常波形。

    经过改软件程序之后没有在出现异常波形,但是会出现间隔(大约在十几毫秒左右)使能状态为0,原因不明确,目前个人认为是CM25中MODBUS协议有问题。
    还有如图所示不符合MODBUS通信协议的问题
    在这里插入图片描述
    在这里插入图片描述

    在发送完成之后每一组间隔时间不一样,有长有短,正常应该是固定3.5帧左右,时间长短差别不大才是正确的波形,这些问题我们会进一步的修改。

    展开全文
  • 目录前言MODBUS通信模式串口层面Modbus ASCII通信格式数据格式Modbus RTU互联网层面Modbus TCP 前言 初步了解了MODBUS协议(https://blog.csdn.net/weixin_45024950/article/details/112836614),现在具体学习通信...

    前言

    初步了解了链接: MODBUS协议.现在具体学习通信模式。
    这篇文章在学习过程中作为总结,如有错误,请多指教。

    MODBUS通信模式

    MODBUS目前有串口形式的Modbus RTU、Modbus ASCII,以及互联网层面的Modbus TCP。

    串行链路

    Modbus RTU、Modbus ASCII,都是使用的异步串行通信。在报文形式上有所不同。
    modbus在串行链路上每一帧数据长度不超过256字节。
    ASCII模式的优点在于允许一帧数据字符之间可以停顿,但是传输时间较长。
    RTU模式要求一帧数据连续传送,不能间断。传输速度高于ASCII模式。

    Modbus ASCII

    通信格式

    ASCII模式下,每一个字符传送格式

    说明
    起始位1位
    数据数据长度7位,低位先发送
    校验位1位(有校验),0位(无校验)
    停止位1位(有校验),2位(无校验)
    波特率用户自选

    在该模式下发送一个字符需要10位二进制。

    数据格式

    起始码地址码功能码数据区校验码停止码
    01-F7功能码N个字符LRCCR LF
    1字符2字符2字符n个字符两字符两字符

    地址码00是广播模式
    ASCII模式之所以叫ASCII模式,就是因为他发送数据数按照ASCII码表来发送的。这也就解释了为什么数据是一个字节,但长度是两位字符。比如地址码为01表示一号从机,但是在发送的时候,发送的是’0’ 和 ‘1’ 。这样一来实际的发送长度就是两个字符。这样就可以更加直观的看到发送的帧信息。
    个人理解就是发送的时候把数据串转化成了字符串,在串口助手里面接收区用文本模式查看。
    起始码和停止码在ASCII中都有对应

    DECOCTHEXBIN缩写/符号HTML实体描述
    580723A00111010::Colon
    100120A00001010LF
Line Feed (换行键)
    130150D00001101CR
Carriage Return (回车键)
    LRC

    LRC是校验格式。
    校验的范围:从地址码到数据区所有数据。
    算法:相邻2个16进制符相加求和。
    校验码:取其和的低8位的补码为校验码。

    起始码地址码功能码数据区校验码停止码
    010321 02 00 02LRCCR LF

    求和 H01+H03+H21+ H02 +H00 +H02 = H29
    H29补码HD7
    LRC校验应该是HD7,发送时为’D’ ‘7’。
    在这里插入图片描述

    Modbus RTU

    通信格式

    RTU模式下,每一个字符传送格式

    说明
    起始位1位
    数据数据长度8位,低位先发送
    校验位1位(有校验),0位(无校验)
    停止位1位(有校验),2位(无校验)
    波特率用户自选选

    在该模式下发送一个字符需要11位二进制。

    数据格式

    起始码地址码功能码数据区校验码停止码
    至少3.5字符间隔时间01-F7功能码0-252字节CRC至少3.5字符间隔时间
    间隔时间1字节1字节0-252字节2字节(先发校验码低八位再发高八位)间隔时间

    RTU模式的帧定义不再是和ASCII模式一样以特殊字符作为起始和结尾,而是用间隔时间来区分每一帧数据。
    RTU模式采用的校验码是CRC,校验码是16位的,需要两字节。
    RTU模式直接发送信息,不需要转换成ASCII模式,所以同样波特率下要比ASCII快两倍左右。在串口助手里,用HEX模式查看,收到的数据就是发送的数据。
    字符间隔时间:RTU模式下传送一个字符需要11位二进制,至少3.5倍取4倍的话,就是44个二进制位。如果在9600波特率下,连续两帧信息之间需要间隔44/9600秒,也就是4.584毫秒。
    在传输一帧信息时,两个字符之间间隔时间不能大于1.5个字符传送时间,否则会发生错误。

    CRC

    循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。
    在这里只说明modbus rtu 模式中 CRC 计算步骤。
    校验的范围:从地址码到数据区所有数据。
    计算CRC码的步骤为:
    异或:相同为0,不同为1

    起始码地址码功能码数据区校验码停止码
    间隔010321 02 00 02CRC间隔
    1. 预置16位寄存器为十六进制FFFF(11111111 11111111)。称此寄存器为CRC寄存器;
    2. 把第一个8位数据与16位CRC寄存器的低位相异或,把结果放于CRC寄存器;
    3. 把寄存器的内容右移一位(朝低位),用0填补最高位,检查最低位;
    4. 如果最低位为0:重复第3步(再次移位);
      如果最低位为1:CRC寄存器与多项式A001(1010 0000 0000 0001)进行异或;
    5. 重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理;
    6. 重复步骤2到步骤5,进行下一个8位数据的处理;
    7. 最后得到的CRC寄存器即为CRC码。
    8. 将高低字节互换得到modbus CRC。
      写了一个C语言代码(VC++6.0)。
    #include<stdio.h>
    
    unsigned int GetCrcData(unsigned char *buffer, unsigned int len);
    
    void main(void)
    {
    
    	unsigned char report[6] = {0x01, 0x03, 0x21, 0x02, 0x00, 0x02};//模拟接收到的数据
    	GetCrcData(report, 6);
    }
    
    unsigned int GetCrcData(unsigned char *buffer, unsigned int len)
    {
    	unsigned int CRC = 0XFFFF;//16位crc寄存器预置
    	unsigned int i = 0, j = 0;//计数
    	unsigned char CRC_L,CRC_H;//CRC码高低8位
    
    	for (i = 0; i < len; i++)//循环计算每个数据
    	{
    		CRC = buffer[i] ^ CRC;//将八位数据与crc寄存器异或
    		for (j = 0; j < 8; j++)//循环计算数据的
    		{
    			if ((CRC & 0X0001) == 1)//判断右移出的是不是1,如果是1则与多项式进行异或。
    			{
    				CRC >>= 1;//先将数据右移一位
    				CRC ^= 0xa001;//与多项式进行异或
    			}
    			else//如果是0
    			{
    				CRC >>= 1;//直接移出
    			}
    		}
    	}
    
    	CRC_L = CRC;//crc的低八位
    	CRC_H = CRC >> 8;//crc的高八位
    	printf("CRC_L = %hX, CRC_H = %hX \r\n", CRC_L, CRC_H);
    
    	return CRC;
    }
    

    运行结果
    在这里插入图片描述
    结果正确

    网络链路

    通信格式

    Modbus TCP/IP 是基于TCP协议的通信方式。

    TCP

    TCP是TCP/IP体系中非常复杂的协议,这里只介绍主要特点。

    1. TCP是面向连接的运输层协议。在使用tcp连接前,需要建立tcp连接。传输数据结束后,需要释放之前建立的tcp连接。
    2. 每一条TCP连接只能有两个端点,是一对一的。建立tcp连接需要知道双方的IP地址和端口号,其中从机(服务器)端口为502,主机(客户端)端口大于1024。
    3. TCP提供可靠交付服务。通过tcp传输数据,无差错、不丢失、不重复、并且按顺序到达
    4. TCP提供全双工通信

    Modbus TCP/IP

    Modbus TCP/IP是对于连接至TCP/IP网络的Modbus TCP/IP客户机和服务器之间的通信方式。
    对于那些不支持tcp连接的设备,需要使用网关。
    modbus tcp 可以有多个客户机(主机)。
    Modbus TCP模式主机(客户机)主动发起通信,主机(客户机)作为tcp客户端。从机(服务器)作为tcp服务器。
    在这里插入图片描述

    数据格式

    TCP/IP上的MODBUS数据帧格式为:

    MBAP报文头功能码数据
    7字节1字节最大252字节

    功能码和数据与串行链路上一致。
    MODBUS TCP数据帧与串行数据帧区别:
    在这里插入图片描述

    MBAP报头文:

    长度描述客户机服务器
    事物处理标识符2字节modbus请求/响应事物处理识别码。理解为报文的序列号,一般每次通信之后就要加1以区别不同的通信数据报文。客户机启动服务器复制
    协议标识符2字节00 00表示ModbusTCP协议客户机启动服务器复制
    长度2字节以下字节的数量。包含单元标识符,功能码,数据。客户机启动服务器响应
    单元标识符1字节串行链路上或其他主线上服务器的识别码。理解成地址码客户机启动服务器复制

    由于使用的是tcp模式,所以不用再需要校验位,认为数据传输一定正确。
    MBAP报头文中的单元标识符,理解成设备地址,也就不再需要地址码。

    展开全文
  • 原标题:Modbus通信协议详解 Modbus协议概述:1.定义:通信设备双方通过共同遵从一组约定,从而使数据可在网络上进行相互传输。打个比方,不同国家不同母语的两个人,如果要实现交流,就必须以大家都熟悉的一种通用...

    原标题:Modbus通信协议详解

    863cc66ee44e16bdcebfe926a9e5d8ff.png

    Modbus协议概述:

    1.定义:

    通信设备双方通过共同遵从一组约定,从而使数据可在网络上进行相互传输。

    打个比方,不同国家不同母语的两个人,如果要实现交流,就必须以大家都熟悉的一种通用语言来交流,比如英语。同样数据的格式只有一致,通信双方才能正常传输。

    2.层次划分:

    国际上通用的协议划分有tcp/ip四层模型和osi七层模型两种,MODBUS协议在两种模型中对应如下:

    c526bb7ddc72d0890d990f9906e9288b.png

    Modbus通信协议

    1.概念

    Modbus协议建立在串行接口之上,在PLC等工控领域有比较广泛的应用。Modbus支持传统的RS-232、RS-422、RS-485和以太网设备多种电气接口,还可以在各种介质上传送,如双绞线、光纤、无线等。

    2. Modbus通信模型

    aa7aab7d0f8bf6dc97f5d27a7461660e.png

    佰马科技相关产品Modbus设置

    佰马科技提供的工业级无线DTU和无线路由器作为透传产品,支持TCP、UDP、MODBUS、MQTT等主流常用的协议,这里介绍下MODBUS设置功能:

    015ecbaafc20beaa47db32a936a79ed4.png

    1.MODBUS RTU:

    串口RTU和网络RTU一样,就是一个是串口发,一个是网络发:

    网络RTU:DTU连服务器,DTU当客户端,服务器调试助手发命令到DTU

    串口RTU: DTU连服务器,DTU当客户端,串口发命令到DTU

    2. Modbus TCP:是指DTU当Server端,上位机当客户端连过来返回搜狐,查看更多

    责任编辑:

    展开全文
  • 文件资源主要有: 1.MODBUS调试助手 2.V6-RS485 MODBUS从站例程 3.V6-RS485 MODBUS主站例程 4.MODBUS虚拟设备和通信协议规范
  • ModBus协议通过串口助手进行数据采集与转换 ModBus RTU通信协议 RTU协议中的指令由地址码(一个字节),功能码(一个字节),起始地址(两个字节),数据(N个字节),校验码(两个字节)五个部分组成,其中数据又由...

    ModBus协议通过串口助手进行数据采集与转换


    ModBus RTU通信协议

    RTU协议中的指令由地址码(一个字节),功能码(一个字节),起始地址(两个字节),数据(N个字节),校验码(两个字节)五个部分组成,其中数据又由数据长度(两个字节,表示的是寄存器个数,假定内容为M)和数据正文(M乘以2个字节)组成,而RTU协议是采用3.5个字节的空闲时间作为指令的起始和结束,一般而言,只有当从机返回数据或者主机写操作的时候,才会有数据正文,而其他时候比如主机读操作指令的时候,没有数据正文,只需要数据长度即可。(本章的讨论只涉及寄存器的读写,其他比如线圈的读写指令我们暂时不涉及)。在此我们通过两个指令(0x03H:读多个寄存器指令以及0x10H:写多个寄存器指令)来解释Modbus RTU协议。在此我们使用的RTU设备是深圳市国科伟业通信技术有限公司的ND-1084型485总线I/O模块。

    ModBus在串口助手中的使用

    展开全文
  • 本人查找了很多资料,终于理解了CRC校验码的原理及在CSDN中找到一个有关CRC校验的一个源程序,通过理解及分析,最终写出了这个基于MFC框架下的"串口助手+CRC校验(可用于PLC中ModBus通信)”,已通过串口测试,能正常...
  • 串口通信理论与实例: 读取串口 C#实例代码 串口调试软件 RS232/RS485 上下位机通信原理 Modbus通信编程规范(中文) CRC校验
  • Modbus协议  Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备...
  • 利用STM32F1实现Modbus实现多台从机的通信,可以利用PC机串口助手下发指令,然后通过232回传数据。经过测试,可以在一个主机6个从机的系统中稳定运行
  • Modbus串口通信

    热门讨论 2013-04-15 16:00:29
    Modbus Poll C# 源代码,支持虚拟通信,与Modbus Slave通讯。-Modbus Poll C# source code, support for virtual communication, and Modbus Slave communications.
  • 单片机MODBUS通信源代码

    千次阅读 2018-08-10 17:36:26
    由于是做自动化的因此最近做了一块单片机的板子要作为MODBUS从站来与上面的触摸屏进行显示功能还不是很完善但是MODBUS功能的模块程序已经写好经过测试基本可以用。 具体要求是下面有2个AI和4个DO量需要检测和控制,...
  • 485_modbus通信,stm32f4.

    2021-02-17 14:19:39
    modbus调试助手中,发送写寄存器内容,给单片机,单片机接收到数据,再通过串口1发送到XCOM串口助手,显示数据,同时在modbus调试精灵中,读寄存器,读到设置的数值。 目前只测试了0x06和0x03的作用。 0x05位...
  • A,B_Modbus通信模块中文手册_MVI56_MCM, 开发及设计的最好助手,最新版本是英文的,中文的只到2003年
  • modbus调试助手 qt源码 可以tcp 或者串口通信
  • C# modbus RTU 通信实例

    2015-12-01 18:04:53
    简单实现串口modbus rtu数据发送,显示发送缓冲区内容
  • 使用三菱FX5UPLC采用Modbus TCP 方式,FX5U访问FX5U或者访问其他Modbus TCP通信的仪器仪表设备 在编写通信的时候请详细看说明文档。
  • 摘要:昨天有小伙伴在群里问关于Modbus通信协议的,大家都比较积极地解答,所以今天果子哥总结一下关于Modbus相关的知识,适合正在入门的小伙伴“食用”。同样还是理论+实战的方式,欢迎留...
  • 使用C# Modbus RTU串口通信

    热门讨论 2017-01-10 13:23:33
    使用C# Modbus RTU串口通信 支援Modbus RTU 封包格式 自動計算CRC 測試工具
  • 摘要:昨天有小伙伴在群里问关于Modbus通信协议的,大家都比较积极地解答,所以今天果子哥总结一下关于Modbus相关的知识,适合正在入门的小伙伴“食用”。同样还是理论+实战的方式解答,大佬勿喷。 1.什么是Modbus? ...
  • Modbus 调试助手的使用(一)

    万次阅读 2019-11-16 14:06:16
    上一篇文章提到Modbus协议包括ASCII、RTU、TCP三种,这次和大家分享的是Modbus调试助手使用TCP协议的设置。TCP协议下有Server和Client,两个都需要设置,不然只有一个也无法通信啊~ 遥想当年我连网络调试助手也不会...
  • 标准Modbus TCP通信测试工具,两个测试工具主要用于plcModbus TCP通信测试,可分别可是客户端和服务器端 测试环境:西门子SMART s7-200 PLC
  • 本文将使用一个NuGet公开的组件技术来实现一个ModBus RTU的客户端,方便的对Modbus rtu的服务器进行读写,这个服务器可以是电脑端C#设计的,也可以是PLC实现的,也可以是其他任何支持这个通信协议的服务器。...
  • 现代变频器通常支持以从站网络通信的方式实现速度给定。现针对一台已完成接线和电机基本参数设定,且试运行正常的变频器,尝试通过配置通信参数实现同控制器的RS-485 modbus RTU通信
  • 用vb.net写的modbus通信上位机小程序,可以实现读,写寄存器和线圈的功能。
  • RS485通信Modbus调试精灵

    热门讨论 2012-12-31 12:00:02
    RS485通信Modbus调试精灵,用于调试MODBUS协议的单片机或设备等。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 579
精华内容 231
关键字:

modbus通信助手