激光测距模块

2021-01-16  本文已影响0人  自由即孤独
import serial
import time
import serial.tools.list_ports
import modbus_tk
import modbus_tk.defines as cst
from modbus_tk import modbus_rtu

import pandas as pd
def save_data(d):
    save_data = [(time.time(),d)]
    labels = ['time','data']
    df = pd.DataFrame.from_records(save_data, columns=labels)
    df.to_csv('D:/testdata1.csv',mode='a',header=False,index = False)
def ModbusRTU_Master(portx):
    try:
        master = modbus_rtu.RtuMaster(serial.Serial(port=portx,baudrate=115200, bytesize=8, parity='N', stopbits=1))
        master.set_timeout(1.0)
        master.set_verbose(True)
        # 读保持寄存器
        read = master.execute(1, cst.HOLDING_REGISTERS, 0x2000, 1)  # 这里可以修改需要读取的功能码
        d = read[0]/1000
        save_data(d)
        print(d,"米")
        return d
    except Exception as exc:
        print(str(exc))


if __name__ == "__main__":
    portx = "COM3"
    
    while True:
        t1 = time.time()
        distance = ModbusRTU_Master(portx)
        if distance < 0.2:
            break
        print("time:",time.time()-t1)

功能代码:(cst)
1~255中1~21是常用的,以下是读写专用的功能码
READ_COILS = 01 读线圈,位操作
READ_DISCRETE_INPUTS = 02 读离散输入状态,位操作
READ_HOLDING_REGISTERS = 03 读保持寄存器,字操作
READ_INPUT_REGISTERS = 04 读输入寄存器,字操作
WRITE_SINGLE_COIL = 05 写单线圈,位操作
WRITE_SINGLE_REGISTER = 06 写单一寄存器,字操作
WRITE_MULTIPLE_COILS = 15 写多个线圈【强制多点线圈】,位操作
WRITE_MULTIPLE_REGISTERS = 16 写多寄存器【写乘法寄存器】,字操作

上一篇 下一篇

猜你喜欢

热点阅读