Benewake(北醒) TFmini-i-485/TF02-i-485/TF03-485 雷达Modbus协议在Python上扫描波特率和站号的案例

实验目的

扫描已经忘记的波特率或站号的Modbus设备
测试产品:TFmini-i 485\TF02-i 485\TF03-485

测试环境

Window 10、Python 3.8.6

Python 库需求

serial 串口库(自带)
time 定时库(自带)
modbus_tk Modbus库(需要安装)

库安装说明

确保已经完整安装Python(并安装PIP)
打开CMD窗口输入以下指令

pip install modbus_tk

安装成功界面

在这里插入图片描述

例程:

# -*- coding: utf_8 -*-

# 2021-08-11 添加自动扫描COM口的程序 @1

import serial.tools.list_ports    #@1 获取COM口列表库

import serial
import modbus_tk
import modbus_tk.defines as cst
from modbus_tk import modbus_rtu
import time           #添加定时器
from time import *
import numpy as np

Baudrate = [9600,115200,19200,38400,57600]



# @1 start 获取现有COM口程序
ports = serial.tools.list_ports.comports()
for p in ports:
    print(p.device)
print(len(ports), 'ports found')

#time.sleep(1) #延时1s(可以不延时,方便看输出)
# @1 end


def mod(BAUDRATE,SlaveID):
    red = []
    alarm = ""
    try:
        # 设定串口为从站
        master = modbus_rtu.RtuMaster(serial.Serial(port=p.device,
                                                    baudrate=BAUDRATE, bytesize=8, parity='N', stopbits=1))
        master.set_timeout(0.05)  #50ms
        master.set_verbose(True)

        # 读保持寄存器
        red = master.execute(SlaveID, cst.READ_HOLDING_REGISTERS, 0, 2)  # 这里可以修改需要读取的功能码
        print(red)
        alarm = "正常"
        
       # return list(red), alarm
        return alarm

    except Exception as exc:
        #print(str(exc))
        alarm = (str(exc))
        

    return red, alarm  ##如果异常就返回[],故障信息


if __name__ == "__main__":

    print("开始扫描当前雷达站号和波特率,全部扫描结束时间为90S左右")
    print("雷达站号范围:1-100,波特率:9600、19200、38400、57600、115200")
    print("----------------------------------------")
    begin_time = time()
    for x in range(5):
        for y in range(1,100):
            z = mod(Baudrate[x],y)
            if z == '正常':
                print("当前波特率:",Baudrate[x],"当前站号:",y)
    end_time = time()
    run_time = end_time - begin_time
    print("查询运行时间:",run_time)

             

运行结果

在这里插入图片描述

注意事项:

1、确保雷达接线已经正确接在485转USB转接板上
2、确保雷达当前协议是Modbus
3、确保设备管理器已经有对应的COM口,且只有一个
在这里插入图片描述
如果有多个的话需要改一下PYTHON语句

 master = modbus_rtu.RtuMaster(serial.Serial(port='COM15',
                                                    baudrate=BAUDRATE, bytesize=8, parity='N', stopbits=1))
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值