学习资料参加左侧群信息
1.Modbus通信协议.pdf
2.Modbus调试精灵1.024.rar
3.主机源码.rar
4.育灵科技视频
1.硬件层协议 解决传输问题,相当于路
2.软件层协议
举例:
例如RS232 发送1是多少V,发送0是多少V
485协议
这个硬件芯片是厂商做到一起的,一般需要有一根控制线用开判断是哪种模式
1: 都是2.5V 没有压差
0:一个1.5V,一个3.5V 有一个压差
还有I2C,SPI 都是有自己的硬件协议,大同小异,都是一样的理解,很简单的
大致说下单工半双工
1.单工模式:方向只能朝一个方向去
2.半双工:通过协调可以实现两个方向的传输
485若想实现半双工的模式,需要软件层来指定
最简单的方式:引入一个主从模式,
--只有一个主机
-- 485的一个规则,任何时候,从机不能主动把数据发回来主机
所以软件层就是交通规则
--上电后主机和从机都需要一直处于监听状态
--任何一次的通讯都需要主机的发起
软件层比较常见的就是modbus协议
就是一种预先约定的格式,不用自己定义了,移植性好,适配性好
解决通用问题
基本模式
1.转为发送状态
2. ---首先,主机发出一组寻址命令帧,找谁,干什么
3.立刻转为接受状态,等待从机的执行回应,一定要有回应,也是按照modbus来回应
所以之后无论设计哪种协议,都是考虑两方面
硬件协议
软件协议
主要使用与一主多从的模式
modbus可以应用于很多硬件,232,i2c,spi,网线,都是可以的
所以说 基于485的modbus协议,其实是硬件加软件
网络就是多主机,can通信也是多主机模式
就是一个通过硬件的技术解决 ,防冲突载波监听技术
就是每次发都会自己仲裁下,知道仲裁成功才会开始发自己的数据
1.
但是485不具备,所以485只能有一个主机,从机必须有唯一的地址
就是写程序的人在从机中定义了一个变量,modbus的地址是从0 --- 247号
其中0号地址是广播地址,是主机保留的,若是包头是0的话,就是要把包发给所有的从设备,所以0号地址从机是不予回应的
从机回应主机的时候,需要加上自己的地址,不会干扰其他从机
2.数据结构,也就是modbus的主机寻址帧的高格式
---RTU方式 十六进制方式
0x03 00000011
---ASC方式 ---都是换算为ASSIC传送
0x03 分成两个0x30和0x33,需要传两次,所以效率是比较低的
计算机打印ASSIC码是32到126,所以会出现下边的方式,所以调试的时候很方便,可以外接一个显示器进去
RTU方式
怎么知道发送完毕,就是发送之后停止3.5个字符,接受数据停止时间超过3.5个字节,就认为主机寻址帧完成,开始停止
怎么计算:
例如:波特率 9600
每位数据传输的时间 :大约是4个微秒
若是停止没有3.5个字节时间,又发送指令,之前的指令是会被放弃的
这是RTU模式唯一的难点
RTU模式是没有开始与结束标志的,就是靠时间来约定,所以就需要硬件一个定时器,一个串口
有明确的开始的标志:先发一个0x3A,就是一个冒号 :
LRC模式
就是相加求和,除以256求余数(肯定是0到256的数),取反再加一,就是求补码的过程
结束符号 \r \n 就是 13 10
从机的反馈问题:
1.回应包的数据格式是一致的
2.正常的回应时,功能码与主机的功能码一致(1-127)
异常的回应:在收到的功能码加128,这也是程序判断的依据
从机的实现:
1.具备串口
2.具备毫秒级定时器