西门子PLC模块岳阳市代理商---湖南省西门子授权供应商
- 供应商
- 广东湘恒智能科技有限公司
- 认证
- 西门子PLC
- 西门子伺服电机
- 西门子触摸屏
- 西门子电缆
- 西门子变频器
- 西门子模块
- 联系电话
- 13510737515
- 手机号
- 13185520415
- 联系人
- 董海波
- 所在地
- 惠州大亚湾澳头石化大道中480号太东天地花园2栋二单元9层01号房(仅限办公)
- 更新时间
- 2025-03-07 08:00
本文总结关于 modbus 相关的知识,浅显易懂,旨在对 modbus有一个很直观的了解。如有错误,欢迎修改意见和建议。什么是协议在了解什么是modbus之前,我们先来看下什么是协议。协议是一个汉语词汇,读音为xiéyì,意思是共同计议,协商;经过谈判、协商而制定的共同承认、共同遵守的文件。简单地说,在我们的单片机之间互相通信,以及单片机和上位机通信中,规定了不同的内容规范,这个规范是通信的双方都需要遵守的,这样就可以实现两者的通信。而这个协议规范可以有很多种,来适应不同的设备以及通信要求等,我们常见的就有iic spi uart 串口通信协议等等。而 modbus 也是一个串行通信协议。什么是 rs-485rs-232我们在看modbus的时候,经常会看到485串口,232串口,这些是什么呢?rs232,rs485是一种电平标准。数据在通信双方之间传输,本质是传输物理的电平,比方说传输5v的电压-1v的电压信号,这些物理信号在传输过程中会受到很多干扰,比方说你传输一个5v的电压,到了接收端可能就变成了4.8v,并且通信的双方高低电平的参考电压可能不同。那么这个时候就需要一个电平标准,来判断多少v的电压是高电平1,多少v的电压是低电平 0,这就诞生了 rs-485 rs-232rs232:是电子工业协会(electronicindustries association,eia)制定的异步传输标准接口,同时对应着电平标准和通信协议(时序),其电平标准:+3v~+15v对应0,-3v~-15v对应1。全双工逻辑1:-15v–5v逻辑0:+3v–+15vrs485:rs485是一种串口接口标准,为了长距离传输采用差分方式传输,传输的是差分信号,抗干扰能力比rs232强很多。两线压差为-2~-6v表示0,两线压差为+2~+6v表示1。半双工逻辑1:+2v~+6v逻辑0:-2v~-6v注意485的电平指的是485-a和485-b两根传输线,两线间的电压差。而不是传输线上的电压。也就是 rs-485电平标准确定传输过来的数据是 0 还是 1,在此基础上,这些字节数据根据 modbus通信协议来进行数据的交互传输。硬件层协议:解决0和1的可靠传输,常有rs232、rs485、can、iic、spi…软件层协议:解决传输目的,常有modbus、tcp/ip、canopen …modbus 协议说明modbus诞生于1979年莫迪康公司后来被施耐德电气公司收购。modbus提供通用语言用于彼此通信的设备和设备。modbus已经成为工业领域通信协议的业界标准,并且现在是工业电子设备之间常用的连接方式。modbus作为目前工业领域应用zui广泛的协议。zui简单的说,modbus就是一个总线通信协议,像iicspi这种,但是他不依赖于硬件总线。modbus之所以使用广泛,是有他的优点的:modbus协议标准开放、公开发表且无版权要求modbus协议支持多种电气接口,包括rs232、rs485、tcp/ip等,还可以在各种介质上传输,如双绞线、光纤、红外、无线等modbus协议消息帧格式简单、紧凑、通俗易懂。用户理解和使用简单,厂商容易开发和集成,方便形成工业控制网络举一个简单的例子,我们常用的iic通信协议,需要在物理上连接iic总线,然后加上拉电阻,规定好物理层的高低电平。而modbus协议是一种应用层报文传输协议,协议本身并没有定义物理层,定义了控制器能够认识和使用的消息结构,不管它们是经过何种网络进行通信的。所以能够适应多种电气接口,因此使用非常广泛。modebus通信过程注意,modbus是一主多从的通信协议。modbus通信中只有一个设备可以发送请求。其他从设备接收主机发送的数据来进行响应,从机是任何外围设备,如i/o传感器,阀门,网络驱动器,或其他测量类型的设备。从机处理信息后用modbus 将其数据发送给主站。也就是说, modbus不能同步进行通信,主机在同一时间内只能向一个从机发送请求,总线上每次只有一个数据进行传输。即主机发送,从机应答,主机不发送,总线上就没有数据通信。从机不会自己发送消息给主机,只能回复主机发送的消息请求。并且,modbus并没有忙机制判断,比方说主机给从机发送命令,从机没有收到或者正在处理其他东西,这时候就不能响应主机,因为modbus 的总线只是传输数据,没有其他仲裁机制,所以需要通过软件的方式来判断是否正常接收。举例现在,我们来探讨 modbus数据传输的方式,可以简单地理解成打电话。并且是单向通信的打电话。主机发送数据,首先需要从机的电话号码(区分每个从机,每个地址必须唯一),告诉从机打电话要干什么事情,然后是需要发送的内容,zui后再问问从机,我说的话你都听清楚了没有呀,没有听错吧?然后从机这里,得到了主机打过来的电话,从机回复主机需要的内容,主机得到从机数据。这样就是一个主机到从机的通信过程。就好比老师和你打电话,老师拨通了你的电话号,然后老师跟你说,小王呀,我这里需要你给我发东西,发的内容是上周的一周总结,你说好的,然后打开你电脑的文件夹,把你的周报发给老师,这就是一个通信过程。modbus存储区既然从机存储数据,那么肯定要有一个存储区,那就需要文件操作,我们都知道这文件可以分为只读(-r)和读写(-wr)两种类型。并且存储的数据类型可以分为:布尔量 和 16位寄存器。布尔量,比如io口的电平高低,灯的开关状态等。16位寄存器,比如传感器的温度数据,存储的密码等。modbus协议规定了4个存储区 分别是 0 1 3 4区,其中0区和4区是可读可写,1区和3区是只读。modbus还给每个区都划分了地址范围。主机向从机获取数据时,只需要告诉从机数据的起始地址,还有获取多少字节的数据,从机就可以发送数据给主机。modbus数据模型规定了具体的地址范围,每一个从机,都有实际的物理存储,跟modbus的存储区相对应,主机读写从机的存储区,实际上就是对从机设备对应的实际存储空间进行读写。modbus协议类型在上面我们已经说明了 modbus可以在各种介质上传输,那么他的传输模式也分为三种:包括ascii、rtu(远程终端控制系统)、tcp三种报文类型。串行端口存在多个版本的modbus协议,而zui常见的是下面四种:modbus-rtumodbus-asciimodbus-tcpmodbusplusmodbusrtu是一种紧凑的,十六进制表示数据的方式,modbus ascii是一种采用ascii码表示数据,并且每个8bit字节都作为两个ascii字符发送的表示方式。rtu格式后续的命令/数据带有循环冗余校验的校验和,而ascii格式采用纵向冗余校验的校验和。modbus协议使用串口传输时可以选择rtu或ascii模式,并规定了消息、数据结构、命令和应答方式并需要对数据进行校验。ascii模式采用lrc校验,rtu模式采用16位crc校验。通过以太网传输时使用tcp,这种模式不使用校验,因为tcp协议是一个面向连接的可靠协议。当然常用的就是rtu模式,ascii一般很少举一个简单的例子,如果我们需要发送一个数字10 那么rtu模式下,只需要发送0x0a 总线上传输数据形式为:00001010而ascii码模式则将数据1和0转为’1’和’0’,需要发送0x31(1)0x30(0)两个字节数据。总线上传输数据形式为:0011 0001 00110000详细的我们等下再阐述modbus-rtu协议modbus报文帧结构一个报文就是一帧数据,一个数据帧就一个报文:指的是一串完整的指令数据,本质就是一串数据。modbus报文是指主机发送给从机的一帧数据,其中包含着从机的地址,主机想执行的操作,校验码等内容。modbus协议在串行链路上的报文格式如下所示:帧结构= 从机地址 + 功能码 + 数据 +校验从机地址: 每个从机都有唯一地址,占用一个字节,范围0-255,其中有效范围是1-247,其中255是广播地址(广播就是对所有从机发送应答)功能码:占用一个字节,功能码的意义就是,知道这个指令是干啥的,比如你可以查询从机的数据,也可以修改从机的数据,所以不同功能码对应不同功能.数据: 根据功能码不同,有不同功能,比方说功能码是查询从机的数据,这里就是查询数据的地址和查询字节数等。校验:在数据传输过程中可能数据会发生错误,crc检验检测接收的数据是否正确。modbus功能码modbus规定了多个功能,那么为了方便的使用这些功能,我们给每个功能都设定一个功能码,也就是指代码。modbus协议同时规定了二十几种功能码,但是常用的只有8种,用于对存储区的读写,如下表所示:当然我们用的zui多的就是03 和 06 一个是读取数据,一个是修改数据。crc校验错误校验(crc)域占用两个字节包含了一个16位的二进制值。crc值由传输设备计算出来,然后附加到数据帧上,接收设备在接收数据时重新计算crc值,然后与接收到的crc域中的值进行比较,如果这两个值不相等,就发生了错误。比如主机发出01 06 00 01 00 17 98 04, 98 04 两个字节是校验位,那么从机接收到后要根据 01 06 00 01 0017 再计算crc校验值,从机判断自己计算出来的crc校验是否与接收的crc校验(9804主机计算的)相等,如果不相等那么说明数据传输有错误,这些数据就不能要。crc校验流程:1、预置一个16位寄存器为0ffffh(全1),称之为crc寄存器。2、把数据帧中的第一个字节的8位与crc寄存器中的低字节进行异或运算,结果存回crc寄存器。3、将crc寄存器向右移一位,zui高位填以0,zui低位移出并检测。4、如果zui低位为0:重复第三步(下一次移位);如果zui低位为1:将crc寄存器与一个预设的固定值(0a001h)进行异或运算。5、重复第三步和第四步直到8次移位。这样处理完了一个完整的八位。6、重复第2步到第5步来处理下一个八位,直到所有的字节处理结束。7、zui终crc寄存器的值就是crc的值。此外还有一种利用预设的表格计算crc的方法,它的主要特点是计算速度快,但是表格需要较大的存储空间,该方法此处不再阐述。