嵌入式(三十):modbus站点设计

2、modbus是适用于现场总线控制系统的协议。modbus中,通过协议来规定同一时间最多只有一个设备发送。通过主机控制从机,只有主机发送信息给相应从机,从机才能发送信息。从机不能自己开启一个通信过程。
3、modbus中将每个节点抽象为:
在这里插入图片描述在这里插入图片描述
a、节点ID在网络中唯一,但可以不连续
b、寄存器均视为16bit数据
c、线圈均视为1bit数据
d、寄存器、线圈的物理意义(物理实现)由节点自由定义
4、modbus站点设计实例:
a、板子有一个id号,一个字节,编号为1-255,0为广播站号
b、每个节点有多个寄存器,每个寄存器有多个地址。
c、线圈可以记录一个信号的翻转
d、将modbus做在com口上,9600 8 n 1,将计算机作为主机
e、发送数据帧时,字节之间需要连续。如果一个数据帧的两个字节间超过1.5字节时间,可能导致其它节点误以为是2个数据帧(小于1.5ms);
f、发送数据时,总线上的帧与帧(无论谁发出的)之间最少间隔4字节时间(大于4ms);
g、主机发送指令格式:
1字节目的设备地址+1字节功能码+N字节数据+2字节CRC16(校验)
①、1字节目的设备地址:ID号,取值范围:0(广播),1-247(一般节点),248-255(它用)
②、1字节功能码:指示做何操作。(黑体为主要常用功能码,一般需要实现)
即:01、02、03、04、05、06、0F、10(十六进制)
或: 1、2、3、4、5、6、15、16(十进制)
01:读n个连续输出bit(读多线圈,即可读/可写物理量)
02:读n个连续输入bit(读多状态值,即只读物理量)(注:编程时01、02可合并简化)
03:读n个连续输出字(读多个16bit寄存器,可读/可写物理量)
04:读n个连续输入字(读多个16bit状态值,只读物理量)(注:编程时03、04可合并简化)
05:写1个输出bit(写1个线圈)
06:写1个输出字(写1个寄存器)
0F:写n个输出bit(写n个线圈)
10:写n个输出字(写n个寄存器)
③、N字节数据
读包含:寄存器首地址,数据数量;
写包含:寄存器首地址,数据数量及数据
特别注意:寄存器地址在不同设备中编码是不完全相同的。所以,组态软件选不同设备发出的地址信息也是不一样的。
如MODBUS RTU中,寄存器(或线圈)计数从0开始,而组态软件中计数从1开始。所以,组态软件中序号为1的寄存器(或线圈),产生的ModBus协议地址为 0000。组态软件中的序号需要-1,才是ModBus协议中产生的地址。
④、2字节CRC16: 循环冗余校验,校验从目的地址到数据区最后-个字节,计算多项式码为A001(Hex),详情看modbus协议简述。
h、从机响应详见modbus协议简述
i、简单地讲就是一个多字节的双机通信,只不过协议被规定了。
5、SPI、I2C串行通信接口:
a、SPI接口是在同一块电路板上不同的系统之间进行通信。
b、串行总线时序协议:
①、串行、同步、全双工(4线) 。数据输出、数据输入、时钟、cs,主控器如果想和其他的设备通信连接方式为
在这里插入图片描述
②、CS高有效,选中芯片。CS为低时,芯片进入等待
③、主控件发时钟,在CLK上升沿主控件DI接收数据,DO输出数据,下降沿从空间DI接收数据
④、可将DI、DO连在一起,3线、半双工
⑤、总线连接方式
6、I2C串行总线接口:
a、总线结构
在这里插入图片描述
b、I2C串行总线开始、停止条件:
开始条件:SCL为高时,SDA由高到低
停止条件:SCL为高时,SDA由低到高
一般情况下,SDA只在SCL为低时变化
c、I2C串行总线时序协议:
输入数据需要在SCL为低时给出
输出数据在SCL变低后输出
d、I2C串行总线数据传输过程
注:A:总线空闲 B:开始条件 C:停止条件 D:数据有效
应答:每个有效接收器件在收到一个字节后,需发出一个“应答” (一个额外的时钟,应答器件将SDA拉低)
在这里插入图片描述
e、器件地址=4bit器件码+3bit物理地址
4bit器件码: AT24C32 1010
AD7416 1001
3bit物理地址:由 A2 A1 A0 引脚配置
f、实用技术:
用通用端口进行模拟部分串行接口方法(因为没有相应的接口)
基本思想方法
体系结构问题
当前可能:SPI、PS2、I2C、UART
微控器速度、开销与模拟接口性能问题
应用举例:
阀门控制器的系统配置数据
路由器配置时的串行通信
语音教室设备设计中的键盘鼠标

猜你喜欢

转载自blog.csdn.net/qq_40851744/article/details/106437059
今日推荐