手机网站设计小程序,拿网站的文章做外链,平面设计公司招聘,cn域名建网站目录
modbus RTU通讯协议#xff1a; pmbus通讯协议#xff1a; modbus RTU通讯协议#xff1a;
主要应用功能#xff1a;
规范了软件变量#xff0c;访问功能码#xff0c;给不同工程师开发的不同产品有统一的通讯标准
帧结构简单#xff0c;占用带宽少#xff0c…目录
modbus RTU通讯协议 pmbus通讯协议 modbus RTU通讯协议
主要应用功能
规范了软件变量访问功能码给不同工程师开发的不同产品有统一的通讯标准
帧结构简单占用带宽少编程简单通讯响应速度快可以适配别家公司通讯上位机。
一主机多从机可达247有crc校验功能对工业控制领域有着极好的适应性。
传输异常从设备会告知主设备
参考资料
变量类型
线圈Coils用于表示设备的开/关状态通常控制输出如电机启停、灯开关等1 位读/写可读和可写读取0x01 写入0x05, 0x0F
离散输入Discrete Inputs用于表示设备的输入状态如传感器、按钮等只读1 位只读读取0x02
保持寄存器Holding Registers用于存储设备的控制参数、配置数据或实时数据如温度、湿度、速度等16 位2 字节读/写可读和可写读取0x03 写入0x06, 0x10
输入寄存器Input Registers用于存储设备的输入数据如传感器测量值只读16 位2 字节只读读取0x04 功能码
0x01读取线圈Read Coils读取指定范围内的线圈状态0 或 1只读二进制数据线圈
0x02读取离散输入Read Discrete Inputs读取指定范围内的离散输入状态0 或 1只读二进制数据离散输入
0x03读取保持寄存器Read Holding Registers读取指定范围内的保持寄存器数据16位寄存器的值只读16位数据保持寄存器
0x04读取输入寄存器Read Input Registers读取指定范围内的输入寄存器数据16位寄存器的值只读16位数据输入寄存器
0x05写单个线圈Write Single Coil写入单个线圈的状态0 或 1读/写二进制数据线圈
0x06写单个保持寄存器Write Single Register写入单个保持寄存器的值16位数据读/写16位数据保持寄存器
0x0F写多个线圈Write Multiple Coils写入多个线圈的状态多个 0 或 1读/写二进制数据线圈
0x10写多个保持寄存器Write Multiple Registers写入多个保持寄存器的值多个 16位数据读/写16位数据保持寄存器
物理接口规范 Modbus RTU通信通常基于RS-232或RS-485串行通信标准这些标准决定了数据传输的电气特性。为保证设备间正确的物理连接和数据传输必须清楚接口规范。 RS-232适用于短距离通信通常用于单一设备通信。 RS-485适用于长距离、高噪声环境并且支持多从机的通信。Modbus RTU协议常用RS-485进行设备间通信。
注意点
地址空间设计 合理规划地址Modbus协议有不同的地址空间线圈、离散输入、保持寄存器、输入寄存器每个设备的每种类型数据都有其特定的地址范围。需要根据项目需求合理规划每个变量的地址避免地址冲突。 线圈Coils地址范围 0x0000 - 0x07FF离散输入Discrete Inputs地址范围 0x1000 - 0x17FF保持寄存器Holding Registers地址范围 0x4000 - 0x47FF输入寄存器Input Registers地址范围 0x3000 - 0x37FF 设备地址唯一性每个从设备都应该有唯一的地址通常为1-247主设备通过该地址来区分不同的从设备。
通信速率和超时设置
波特率设置确保通信中主机和从机的波特率例如9600、19200等一致以保证数据的稳定传输。超时设置Modbus是一个实时协议主机和从机之间的通信应该考虑适当的超时时间。过短的超时时间可能导致通信失败而过长的超时时间会影响系统的响应性。重试机制在网络不稳定时可能会出现通讯中断设计时要有重试机制以防止丢失重要数据。
错误检测与处理
CRC校验Modbus RTU 使用 CRC循环冗余校验 来检查数据传输过程中是否发生错误。确保在开发中正确实现CRC算法。错误码Modbus协议会返回错误码主机需要根据返回的错误码进行相应的处理。常见错误码包括 0x01非法功能码0x02非法数据地址0x03非法数据值0x04设备故障 在编程时要确保主机能够正确识别并处理这些错误码。
数据类型和格式
数据类型的转换Modbus协议传输的数据是以16位寄存器为单位的对于不同的应用场景可能需要对数据进行字节顺序转换如大端/小端和数据类型转换如浮点数、整型数等。 大端/小端问题注意Modbus采用大端格式高字节在前但在某些平台或语言环境下可能需要转换为小端格式低字节在前。例如如果从机传输浮点数需要将两个寄存器的数据合并为一个32位浮点数。
并发与多从机支持
一主机多从机Modbus协议支持一主机与多从机的通信最大支持247个从机。如果项目需要同时控制多个从设备需要特别注意 每个从设备的地址应唯一。主机需要按照一定的顺序与从设备通信以防止总线冲突。考虑到从设备响应时间可能不同要在程序中设置合理的延时以确保稳定的通信。
干扰和噪声
噪声干扰Modbus RTU通常在串口上工作可能会受到电磁干扰EMI。确保使用的串口线缆和连接器能够有效屏蔽干扰同时合理布置通信线路避免长距离传输。信号衰减如果通信距离较长特别是RS-485需要考虑信号衰减的问题可能需要使用信号增强设备如RS-485信号放大器。
系统可靠性
冗余设计对于重要的控制系统考虑冗余设计。例如在主机或从机故障时系统能够自动切换到备用系统保证项目的高可用性。通信丢失处理设计通信丢失或数据丢失后的恢复机制例如超时重试或自动重启功能以确保设备在通讯中断后能尽快恢复正常。
pmbus通讯协议
主要应用功能
专门用于电源管理系统中的电源设备之间的数字化通信如电源模块、监控芯片和电池管理系统等
基于iic硬件外设通讯一主多从100k~3.4mbps可多主机需引入仲裁机制无优先级
参考资料
帧格式
读 START起始条件1起始信号表示通信开始SDA拉低SCL保持高电平。
从设备地址17位设备地址 1位读标志1表示读操作。
命令字节1主设备指定的命令字节表示需要执行的读取操作例如读取电压。
ACK1发送命令字节后接收方发送ACK应答表示命令字节已正确接收。
数据字节N从设备返回的数据字节通常是多个字节例如电压、温度等。
NACK1数据接收完毕后主设备发送NACK告诉从设备停止数据传输。
STOP停止条件1停止信号表示通信结束SDA从低电平跳到高电平SCL保持高电平。
写 START起始条件1起始信号表示通信开始SDA拉低SCL保持高电平。
从设备地址17位设备地址 1位写标志0表示写操作。
命令字节1主设备指定的命令字节表示需要执行的操作例如设置电压。
数据字节N根据命令传输1到多个字节的数据例如设置输出电压。
ACKN每个字节传输后接收方发送ACK应答表示该字节已正确接收。
STOP停止条件1停止信号表示数据传输完毕SDA从低电平跳到高电平SCL保持高电平。
常见变量定义表格
变量名称作用命令字节内存大小单位说明VOUT (输出电压)电源模块的输出电压0x212毫伏mV包含低字节和高字节用于设置或读取电源的输出电压。IOUT (输出电流)电源模块的输出电流0x222毫安mA包含低字节和高字节用于设置或读取电源的输出电流。VIN (输入电压)电源模块的输入电压0x232毫伏mV包含低字节和高字节用于设置或读取电源的输入电压。POUT (输出功率)电源模块的输出功率0x242毫瓦mW包含低字节和高字节用于读取电源的输出功率。TEMP (温度)电源模块的温度0x862摄氏度℃包含低字节和高字节表示电源的当前温度值。FAULT_STATUS (故障状态)电源模块的故障状态0x781无单位一个字节的状态字表示电源模块的当前故障状态。STATUS_WORD (状态字)电源模块的综合状态包括过流、过压、欠压等故障信息0x032无单位包含低字节和高字节表示电源的状态包括故障标志。CONTROL (控制)电源的控制命令开启、关闭或重启电源等操作0x011无单位一个字节表示电源的控制命令如启动、关闭电源等操作。TON_DELAY (开机延迟)电源的开机延迟时间0x312毫秒ms包含低字节和高字节表示开机延迟的时间单位为毫秒。TOFF_DELAY (关机延迟)电源的关机延迟时间0x322毫秒ms包含低字节和高字节表示关机延迟的时间单位为毫秒。VOUT_OV_FAULT_LIMIT (输出电压过压保护限制)设置输出电压的过压保护阈值0x452毫伏mV包含低字节和高字节用于设置输出电压的过压保护阈值。VOUT_UV_FAULT_LIMIT (输出电压欠压保护限制)设置输出电压的欠压保护阈值0x462毫伏mV包含低字节和高字节用于设置输出电压的欠压保护阈值。IOUT_OC_FAULT_LIMIT (输出电流过流保护限制)设置输出电流的过流保护阈值0x472毫安mA包含低字节和高字节用于设置输出电流的过流保护阈值。IOUT_UC_FAULT_LIMIT (输出电流欠流保护限制)设置输出电流的欠流保护阈值0x482毫安mA包含低字节和高字节用于设置输出电流的欠流保护阈值。VIN_OV_FAULT_LIMIT (输入电压过压保护限制)设置输入电压的过压保护阈值0x492毫伏mV包含低字节和高字节用于设置输入电压的过压保护阈值。VIN_UV_FAULT_LIMIT (输入电压欠压保护限制)设置输入电压的欠压保护阈值0x4A2毫伏mV包含低字节和高字节用于设置输入电压的欠压保护阈值。VOUT_OV_WARN_LIMIT (输出电压过压警告阈值)设置输出电压的过压警告阈值0x592毫伏mV包含低字节和高字节用于设置输出电压的过压警告阈值。VOUT_UV_WARN_LIMIT (输出电压欠压警告阈值)设置输出电压的欠压警告阈值0x5A2毫伏mV包含低字节和高字节用于设置输出电压的欠压警告阈值。IOUT_OC_WARN_LIMIT (输出电流过流警告阈值)设置输出电流的过流警告阈值0x5B2毫安mA包含低字节和高字节用于设置输出电流的过流警告阈值。IOUT_UC_WARN_LIMIT (输出电流欠流警告阈值)设置输出电流的欠流警告阈值0x5C2毫安mA包含低字节和高字节用于设置输出电流的欠流警告阈值。MFR_TEMP (制造商温度)读取设备的温度通常与故障或状态有关0x862摄氏度℃包含低字节和高字节用于查询设备的温度。MFR_VIN (制造商输入电压)读取设备的输入电压值0x872毫伏mV包含低字节和高字节用于查询设备的输入电压。MFR_VOUT (制造商输出电压)读取设备的输出电压值0x882毫伏mV包含低字节和高字节用于查询设备的输出电压。MFR_IOUT (制造商输出电流)读取设备的输出电流值0x892毫安mA包含低字节和高字节用于查询设备的输出电流。MFR_POWER (制造商功率)读取设备的输出功率值0x8B2毫瓦mW包含低字节和高字节用于查询设备的输出功率。
仲裁机制
在iic多主机通信时因为总线同一时间内只能有一个设备在发数据这个时候就需要引入仲裁机制在多设备同时通讯时最后只留下1个设备其余设备下次再竞争。简单来说假设有AB两个设备同时往数据线SDA上发送数据它们都会实时监控线路上的电平来确保数据是否发送正确当A设备发送1B设备发送0这时SDA上就会是0因为低电平有更强的驱动能力),此时A设备就会知道数据线有其他设备在用将不再发送数据等待下一次数据线空闲即使有n多个设备在竞争都是从头一个一个位开始竞争谁出0时其他出1的都自动退出竞争等待下一次直到只剩一个设备在发数据。
仲裁的详细步骤如下 数据传输的启动 在I²C总线上的多个主设备同时尝试发送数据时它们都会生成时钟信号SCL并开始通过SDA线发送数据位bit。 总线监控 每个主设备都会在每一位数据发送时实时监控SDA线的电平确保它发送的数据与总线上实际的电平一致。SDA线的电平是由主设备驱动的。当主设备向总线发送数据时它会拉低0或拉高1SDA线。 发生冲突时的检测 如果一个主设备试图向总线发送1拉高SDA而另一个主设备却试图发送0拉低SDA就发生了冲突。监测到冲突在这个过程中每个主设备都会监听到SDA线上的实际状态。如果它发送的数据与SDA线的状态不一致说明有其他主设备正在控制总线因此发生了冲突。 决定仲裁优先级 SDA线上的状态决定优先级在I²C协议中低电平0具有更高的优先级原因是SDA线由主设备拉低时电流驱动较强。如果一个主设备发现SDA线上的电平与自己预期的不同它就会停止数据传输放弃对总线的控制并让其他主设备继续控制总线。 放弃与重试 当发生冲突时失败的主设备会立刻停止传输退出当前的总线控制并等待一段随机时间后重新尝试访问总线。胜出的主设备将继续占用总线完成其数据传输。
iic通讯原理
I²C通信基于主从Master-Slave模型通信过程中包含两个主要角色
主设备Master发起通信、控制时钟和数据流的设备。从设备Slave响应主设备请求的设备。
I²C的时序
I²C的数据传输是基于时钟SCL控制的同步通信。数据SDA在时钟的控制下同步传输时钟由主设备提供。具体的数据传输过程如下 起始条件START 主设备拉低 SDA 线在 SCL 高电平时发出起始信号。起始条件标志着通信的开始。 从设备地址和读/写操作 主设备会发送一个包含从设备地址和读/写标志位的数据。设备地址通常是7位或10位通常是7位。读/写标志位R/W0 表示写操作1 表示读操作。 数据传输 数据按字节8位进行传输SDA 在 SCL 的上升沿采样每传输一个字节时都要保证 SDA 在时钟的上升沿之前保持稳定。 应答信号ACK/NACK 每次发送一个字节后接收方无论是主设备还是从设备必须发送一个应答信号 ACK 或 NACK表示数据是否成功接收。 停止条件STOP 主设备通过拉高 SDA 线在 SCL 高电平时发出停止信号表示通信结束。
什么是ACK和NACK
ACKAcknowledge和 NACKNo Acknowledge是I²C通信中至关重要的信号它们在每个字节传输后接收方无论是主设备还是从设备都会对接收到的字节进行确认。
ACK应答信号
ACK 是接收方对发送的字节的确认表示数据字节已成功接收。具体来说
ACK信号 是通过 SDA 线在 SCL 时钟上升沿时传递的。在接收到数据字节后接收方会将 SDA 拉低0表示已正确接收数据。
过程
主设备或从设备发送完一个字节的数据后接收方无论是主设备还是从设备必须发送 ACK 信号。如果接收方已经接收到数据并准备好接收下一个字节SDA 被拉低。
例子
主设备发送设备地址后从设备返回 ACK表示设备地址已接收并准备好与主设备通信。主设备发送数据字节后从设备返回 ACK表示数据字节已成功接收。
NACK不应答信号
NACK 是接收方对数据传输的否定响应表示接收到的字节没有被正确接收或者接收方已经不再准备接收更多数据。通常NACK 用来标识通信结束或数据传输失败。
过程
接收方在接收到字节后拉高 SDA1表示 NACK表明不再接收数据。在读取数据时主设备通过发送 NACK 信号来结束数据接收指示接收过程已经完成。
例子
主设备在读取数据时读取完所有期望的字节后会发送 NACK表示不再继续读取。如果从设备出现错误或无法接收数据可能会发送 NACK。
详细时序示例如何理解ACK/NACK
我们通过具体的时序图来理解 ACK 和 NACK 的工作原理。以下是数据传输的时序图
ACK的时序
假设主设备向从设备发送数据字节接收方从设备通过 ACK 确认接收到数据字节。
SCL: ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
SDA: → → → → → ← ← → 数据字节 ACK
SCL时钟线每个上升沿同步采样数据。SDA数据线。数据字节主设备或从设备发送的8位数据。ACK接收方通过将 SDA 拉低来发送 ACK表示字节已正确接收。
NACK的时序
如果主设备或从设备不再需要接收更多数据它会通过 NACK 来终止数据传输。
SCL: ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
SDA: → → → → → → → ↑ 数据字节 NACK
NACK接收方通过将 SDA 拉高来发送 NACK表示不再接收数据。
典型读写操作
在主设备读取数据的情况下主设备会在最后一个数据字节后发送 NACK然后发送 STOP 信号结束通信。
主设备读取数据的过程
发送命令字节例如设备地址接收方发送 ACK。读取数据字节接收方发送 ACK表示继续传输数据。读取完最后一个字节接收方发送 NACK表示结束读取。主设备发送 STOP 信号表示通信结束。
注意点
1. 协议的兼容性和设备选择
设备兼容性首先确保所选的PMBus设备支持所需的命令和功能。不同的电源管理设备可能实现了不同的PMBus命令集或具有不同的功能扩展。地址设置PMBus设备通常通过硬件配置如跳线或拨码开关或软件配置来设置设备地址。确保主设备能够正确识别从设备的地址。支持的PMBus版本PMBus协议有多个版本如1.1、1.2、2.0等不同版本的设备支持的命令集和功能可能有所不同。确保你的主设备和从设备兼容同一版本。
2. 通信速率和时序
时钟频率SCLPMBus通常基于I²C通信协议因此时钟频率需要考虑通信速率的要求。I²C的标准频率为100 kHz标准模式快速模式为400 kHz。如果设备支持高速通信可能需要选择合适的速率。时序和响应时间PMBus的通信帧可能需要一定的时间来处理和响应。在进行通信时需要考虑每个命令的处理时间以及从设备的响应时间尤其是在高速传输时确保每个数据字节都能被正确读取。
3. 电源噪声和信号完整性
电源噪声PMBus设备通常涉及电源管理功能电源噪声可能会干扰信号传输尤其是在传输较长距离或存在较强电磁干扰的环境中。确保系统设计考虑到电源去耦和滤波以避免噪声影响通信。信号完整性在高频率下I²C信号可能受到串扰或衰减的影响特别是长线缆传输时。可以采用合理的布线和信号调节例如使用终端电阻来保证信号质量避免通信错误。
4. 数据完整性和错误处理
数据校验PMBus协议支持使用校验和来确保数据的完整性。在发送命令或数据时检查从设备是否返回ACK应答以确保数据传输没有丢失或损坏。错误处理在实际应用中可能会遇到通信失败、设备无响应等情况。需要在代码中实现错误检测和重试机制确保设备在发生通信异常时能够恢复正常工作。超时和重试机制在通信中如果没有及时收到ACK或者设备无响应可以设计超时和重试机制避免系统因设备故障或信号丢失导致功能丧失。
5. PMBus命令和数据格式
命令集确保使用的PMBus命令集符合所选设备的需求。不同的设备可能会支持不同的命令集常见的如读取电压、设置电流、读取温度等。检查设备文档了解每个命令的格式和数据长度。数据字节的解释PMBus中的每个命令可能会返回多个字节的数据如电压、电流、功率等每个数据字节通常采用二进制编码形式。需要理解如何解析这些数据并将其转换为物理量例如电压、功率等。
6. 通信协议细节
I²C与PMBus的关系PMBus是基于I²C协议实现的因此你需要理解I²C的基本通信原理尤其是ACK/NACK的处理机制、起始/停止信号等。在处理PMBus命令时I²C的时序和数据传输规则同样适用。设备地址和读/写操作PMBus使用7位设备地址加上读/写标志位。确保在发送命令时正确指定目标设备的地址并且在读取数据时使用正确的读/写操作标志。多设备支持如果系统中有多个PMBus设备需要确保每个设备的地址唯一且正确设置。并且在使用多个设备时要注意避免数据冲突。
7. 电源管理和效率
功率管理PMBus设备通常涉及功率转换和管理在设计时需要确保每个设备的电源输入稳定。设计中还需要考虑如何通过PMBus命令优化功率效率例如调整电压、电流等参数。状态监控和报警许多PMBus设备具备状态监控和报警功能如温度、过流、过压等。可以通过PMBus命令读取设备的状态信息获取设备的健康状况并进行相应的调节或报警处理。
8. 主设备与从设备的同步
主设备同步作为主设备你需要控制整个PMBus通信的时序和数据流。在通信过程中要确保每个命令的发送顺序和数据的读取都按照协议规范进行。从设备响应从设备需要在接收到命令后及时返回正确的响应。如果从设备响应错误或没有返回可能需要进行重试或错误处理。
9. 调试和测试
使用调试工具在PMBus通信过程中调试工具如逻辑分析仪、示波器等非常重要。通过这些工具可以监控I²C总线的通信时序检查数据传输的正确性和信号质量。模拟和测试在开发过程中使用模拟器来模拟PMBus设备和主设备之间的通信可以更容易地进行开发和调试。通过模拟可以确保不同命令的执行和响应符合预期。
10. 文档和规格说明书
设备手册确保阅读设备的规格说明书理解设备支持的命令集、数据格式、寄存器地址等。每个PMBus设备的操作可能有所不同文档提供了命令执行和数据解析的详细信息。协议版本检查所用设备支持的PMBus协议版本如1.2、2.0等不同版本之间可能有不同的功能和兼容性要求。