Python Modbus_tk slave invalid CRC request 问题研究

在树莓派上使用modbus_tk进行Master-Slave通信测试时遇到CRC错误。在多字节寄存器写操作中,Slave总是返回"Invalid CRC request"。通过日志发现Master发送的报文被Slave错误地解析为两个请求。参考GitHub上的讨论,调整interframe_multiplier和interchar_multiplier参数(如interframe_multiplier=20,interchar_multiplier=5),在9600波特率下减少了CRC错误。问题得到临时解决,但未探究其底层原因。
摘要由CSDN通过智能技术生成

1 测试背景

最近在研究树莓派的过程中,尝试用它来做一个Slave返回终端的数据状态。参照modbus_tk中的例子建立起了Master 和 Slave 的测试环境。Master 建立在win10 virtualbox的树莓派x86虚拟机中,Slave用的是树莓派3B。两者都是终端模式下在参照例子的基础上简单修改了一下便开始了测试。串口设备用的是FDTI的USB转串口。

2 Master例子

#!/usr/bin/env python
# -*- coding: utf_8 -*-
"""
 Modbus TestKit: Implementation of Modbus protocol in python

 (C)2009 - Luc Jean - luc.jean@gmail.com
 (C)2009 - Apidev - http://www.apidev.fr

 This is distributed under GNU LGPL license, see license.txt
"""

import serial
import time

import modbus_tk
import modbus_tk.defines as cst
from modbus_tk import modbus_rtu

PORT = “/dev/ttyUSB0"
#PORT = '/dev/ttyp5'

def main():
    """main"""
    logger = modbus_tk.utils.create_logger("console")

    try:
        #Connect to the slave
        master = modbus_rtu.RtuMaster(
            serial.Serial(port=PORT, baudrate=9600, bytesize=8, parity='N', stopbits=1, xonxoff=0)
        )
        master.set_timeout(5.0)
        master.set_verbose(True)
        logger.info("connected")
		for i in range(20):
             logger.info(master.execute(1, cst.READ_HOLDING_REGISTERS, 0, 10))
             time.sleep(0.5)
             logger.info(master.execute(1, cst.WRITE_M
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值