串口通信的通信协议

串口通信可以使用多种协议,这些协议规定了数据格式、传输速率、错误检测和校正等方面的规则。以下是一些常见的串口通信协议:

  1. RS-232:这是一种非常古老的串行通信协议,广泛用于计算机和外部设备之间的通信。它定义了信号电平、接口机械特性和电路的电气特性。
  2. RS-485:这是一种差分信号传输的串行通信协议,适合于长距离和噪声环境下的通信。它支持多点连接,即多个设备可以连接到同一条总线上。
  3. RS-422:与RS-485类似,也是一种差分信号传输的协议,但它只支持点对点的通信。
  4. UART (Universal Asynchronous Receiver/Transmitter):UART是一种硬件设备,用于实现异步串行通信。它并不严格定义通信协议,而是提供了一种发送和接收串行数据的方法。UART通信可以使用多种协议,如RS-232、RS-485等。
  5. SPI (Serial Peripheral Interface):SPI是一种高速的、全双工、同步的通信协议,通常用于微控制器和外围设备之间的通信。
  6. I2C (Inter-Integrated Circuit):I2C是一种多主多从的同步通信协议,通常用于连接低速的周边设备芯片。
  7. 1-Wire:由Dallas Semiconductor公司开发,适用于单个数据线的低速通信,常用于温度传感器等简单设备。
  8. IrDA (Infrared Data Association):IrDA是一种红外通信协议,用于无线数据传输。
  9. Modbus:Modbus是一种常用的串行通信协议,广泛用于工业领域。它定义了数据帧的格式和通信的规则,常用于连接工业设备。

Modbus是一种串行通信协议。Modbus协议分为三种通信方式:Modbus RTU、Modbus ASCII以及Modbus TCP。
通讯格式,即:波特率(1秒钟传送的位数,也是通讯速率)、检验方式、数据位、停止位; 要求:9600 N 8 1 (N 无校验位)

Modbus RTU的编码方式及帧结构:
RTU 模式下,Modbus 数据通过二进制码进行传输,一个字节数据由一个起始位、八个数据位、一个奇偶校验位和一个停止位组成。
RTU 模式下,每个 Modbus 数据帧由一个起始位、一个设备地址、一个功能码、一个或多个数据字节、一个 CRC 校验和和一个停止位组成。数据帧长度固定,通常为 11 个字符,结构如下: 从站地址 功能码 数据 CRC-16
其中,从站地址和功能码描述了Modbus命令的类型,数据包含要读取或写入的寄存器地址和数量,CRC-16是ModBus校验码,用于检测传输中的错误。

PLC寄存器与modbus地址对应关系: 8000 D0-D7999(PLC) 0-1F3F(modbus十六进制地址)

例如: 发送:01 03 17 70 00 02 C0 64 01为从机地址。03为功能码,代表读取寄存器。17
70代表从寄存器0x1770(即D6000)开始读。00 02代表读取两个byte。 C0 64为校验码。 回值: 01 03 02 01
48 XX XX(1H/1P)
01为从机地址。03为功能码,代表读取寄存器。02代表有两byte数据。01和48分别是这两byte数据。XX XX 为校验码。 01 48
转换后得到1H 01 50 转换后得到1P

Python部分代码:

基础报文

sendbytes = '01 03 00 40 00 01'
# 生成CRC16校验码
CRC = CRC()
crc, crc_H, crc_L = CRC.CRC16(sendbytes)

# 生成完整报文
sendbytes = sendbytes + ' ' + crc_L + ' ' + crc_H
print(sendbytes)

# 连接端口 'com6', 超时0.8,比特率9600、8字节、无校验、停止位1
com = serial.Serial(port="com6", baudrate=9600, timeout=0.8, bytesize=8, parity='N', stopbits=1)
if com.is_open:
    print("port open success")
    # 将hexstr导入bytes对象  报文需要是字节格式
    sendbytes = bytes.fromhex(sendbytes)
    # 发送报文
    com.write(sendbytes)
    print(com.readall())
    5.需要试试Modbus通信的功能,以及setupDiags的功能。暂时用Atlas自带的commbuilder实现通信,看能否成功。等待验证结果。
  1. USB (Universal Serial Bus):虽然USB是一种并行接口,但它也可以用于串行通信。USB协议复杂,支持多种速度和配置,广泛用于计算机和外部设备之间的连接。
    这些协议各有特点,适用于不同的应用场景。在选择串口通信协议时,需要考虑通信距离、数据速率、环境噪声、设备兼容性等因素。
    SWD(Serial Wire Debug)是一种用于调试和编程微控制器的两线接口协议。它是ARM公司开发的一种串行通信协议,用于替代传统的JTAG(Joint Test Action Group)接口,以实现更低的引脚数要求和更高的性能。
    11.** SWD**接口使用两根线:一根是数据线(SWDIO),用于传输数据和命令;另一根是时钟线(SWCLK),用于同步数据传输。SWD支持双向通信,可以实现以下功能:
  1. 调试:通过SWD接口,调试器可以访问微控制器的寄存器和内存,设置断点,读取和写入数据,以及控制程序的执行。
  2. 编程:使用SWD接口可以对微控制器的闪存进行编程,烧录新的固件。
  3. 测试:SWD接口可以用于生产测试,以确保微控制器的功能正常。

SWD协议支持多种速度,通常比JTAG更快,并且可以使用更少的引脚,这使得它非常适合于空间受限的应用。SWD通常与SWO(Serial Wire Output)线一起使用,SWO是一个单向线,用于输出调试信息,如跟踪数据和系统日志。
SWD接口是ARM Cortex-M系列微控制器的一部分,但也可能被其他微控制器和处理器架构所采用。它是一种高效的通信协议,被广泛用于嵌入式系统的开发和生产过程中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值