分类 python 下的文章

乌班图com操作报错集锦

如果是报错误2,一般是没有找到对应的设备地址
解决方法1
1.安装软件

在命令行sudo apt-get install cutecom进行命令行安装

2.启动

在命令行中输入cutecom进行启动

3.串口配置

启动程序后,对于设备通过USB连接到电脑的,可以在Device中更改为/dev/ttyUSB0,其它配置根据实际来设定

解决方法2
找到自己的设备地址
可以试试以下命令
dmesg | grep ttyS*
dmesg | tail
ls /dev/serial/by-id/
一般默认是/dev/ttyUSB0
[Errno 2] could not open port port0: [Errno 2] No such file or directory: 'port0
如果是报错误13,是因为没有足够的操作权限只有root用户和属于dialout组的用户会有读写权限
[Errno 13] could not open port /dev/ttyUSB0: [Errno 13] Permission denied: '/dev/ttyUSB0'
解决方法一 永久生效
sudo usermod -aG dialout user //user替换为自己的用户名
reboot //必须要重启一下才会生效
解决方法二 临时生效
sudo chmod -R 777 /dev/ttyUSB0

Windows下搭建OpenCV开发环境

Windows下搭建环境步骤

下载并安装Python3

配置python3环境变量

   设置两个环境变量

    D:\Python39\Scripts

    D:\Python39

通过pip命令安装nump、matplotlib、opencv库

    python -m pip --version  查看pip的版本号

    python -m pip install --upgrade pip 升级pip命令

    python -m pip install numpy matplotlib opencv-python 安装库文件

    python -m pip install opencv-contrib-python

注意事项:执行命令时,windows下为pip, mac下为pip3.

python实现的modbus协议栈485

modbus_tk是使用python实现的modbus协议栈,通过调用modbus_tk可以很方便的实现modbus通信。
在VS CODE中需要先通过pip安装modbus_tk库,其方法可参见:vscode 如何导入python库

下载对应pip
pip install modbus_tk

modbus_tk支持以下功能码:

功能码 编号 含义
READ_COILS H01 读线圈
READ_DISCRETE_INPUTS H02 读离散输入
READ_HOLDING_REGISTERS H03 读寄存器
READ_INPUT_REGISTERS H04 读输入寄存器
WRITE_SINGLE_COIL H05 写单一线圈
WRITE_SINGLE_REGISTER H06 写单一寄存器
WRITE_MULTIPLE_COILS H15 写多个线圈
WRITE_MULTIPLE_REGISTERS H16 写多寄存器
python程序需要进行两部分配置:串口配置和modbus协议配置。

导入库和串口配置:

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

设定串口为从站

master = modbus_rtu.RtuMaster(serial.Serial(port="COM1",
baudrate=9600, bytesize=8, parity='N', stopbits=1))
master.set_timeout(5.0)
1
2
3
4
5
6
7
8
9
modbus协议配置(举例):

读线圈 01H 1站号 地址2 长度5

out1 = master.execute(1, cst.READ_COILS, 2, 5) #长度指读取的寄存器数,寄存器从指定地址起连续读取
print(out1) #输出读取的结果

读保持寄存器 01H 2站号 地址1 长度6

out2 = master.execute(2, cst.READ_HOLDING_REGISTERS, 1, 6)
print(out2) #输出读取的结果

写单一线圈 05H 1站号 地址8 写入值1

master.execute(1, cst.WRITE_SINGLE_COIL, 8, output_value=1)

写单一寄存器 06H 1站号 地址4 写入值500

master.execute(1, cst.WRITE_SINGLE_REGISTER, 4, output_value=500)

示例代码

-- coding: utf_8 --

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

def mod(PORT="com2"):

red = []
alarm = ""
try:
    # 设定串口为从站
    master = modbus_rtu.RtuMaster(serial.Serial(port=PORT,
                                                baudrate=9600, bytesize=8, parity='N', stopbits=1))
    master.set_timeout(5.0)
    master.set_verbose(True)

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

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

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

if name == "__main__":

mod()