OPBTPython 脚本使用手册
1. 文档概述
1.1 什么是 OPBTPython?
OP-BTS 是全球首款在设备端运行 Python 的读表光电头(Optical Probe for Meter Communication)。它不依赖电脑或手持设备即可独立工作:内置芯片和 16MB 可访问存储,让您用自己写的 Python 脚本完成读表任务,一键运行即可。
作为读表设备,OP-BTS 配合脚本功能后,您可以编写简单脚本来读取电表数据、在设备上显示或通过蓝牙发送,并将结果保存到内置存储。通过 Windows 应用或蓝牙上传脚本后,直接在光电头上运行。设备支持透明传输、自动波特率检测(Mode E / Mode C)、蓝牙 5.0、长续航,并支持 Android、iOS、Windows、macOS 和 Linux。
OPBTPython 即运行在 OP-BTS 上的 Python 脚本环境,基于 PikaPython 内核,在设备资源范围内提供轻量级 Python 支持,让您用熟悉的语法和库完成读表与数据处理。
1.2 在 OP-BTS 上能用 OPBTPython 做什么?
- 交互式运行:通过串口或蓝牙连接,进入 Python 交互环境,边试边调试。
- 脚本下载运行:用专用的Windows应用OpBtFileManager编译并管理脚本,在光电头上直接执行。
- 文件系统运行:将脚本存放在设备存储中,实现脱机读表、数据保存与定时任务。
1.3 手册使用说明
本手册包含快速入门、基础语法、标准库、设备 API 和实用示例。交互式终端的使用说明见 终端的使用。可通过目录或示例索引快速跳转到需要的章节。
2. 快速开始
2.1 环境准备
在开始写脚本、下载或交互运行之前,请先准备好以下环境和连接方式,按您的使用场景任选其一即可。
硬件与连接
- OP-BTS 设备:确保固件支持 OPBTPython(可参考产品说明或联系厂商确认)。
- 连接方式:
- 光电头端对接:使用USB接口工装光电头通过与 OP-BTS 对接通信,设定与设备的一样波特率参数。
- 蓝牙连接:在电脑或手机端与 OP-BTS 配对后,可进行脚本下载或蓝牙端交互。
电脑端软件(任选)
- OpBtFileManager(推荐):厂商提供的 Windows 客户端,用于连接设备、上传并运行脚本、查看输出,支持串口对接,蓝牙虚拟串口,蓝牙SPP和BLE方式的连接。
- 串口/终端工具:若使用 USB 串口或虚拟串口,可选用任意串口调试助手、终端软件(如 PuTTY、SecureCRT、或厂商推荐的工具),用于发送命令、进入 Python 交互模式或查看输出。需在工具中正确选择对应串口及波特率。
手机端(可选)
- 若通过蓝牙连接,可在 Android 或 iOS 上使用支持 SPP/BLE 的调试应用与 OP-BTS 通信,进行脚本下载或交互式运行(具体以厂商提供的移动端说明为准)。
2.2 脚本下载和运行方式
Windows应用程序OpBtPythonManager下载和运行
- 应用程序介绍和获取方式:可从设备文档或官网获取(下载链接)。
- 应用程序界面说明:连接设备后,选择脚本文件编译后,点击下载即可下载到设备指定目录"/py"。
- 使用步骤:连接设备 → 选择脚本文件 → 点击下载 → 等待完成。
- 下载状态显示和错误处理:应用程序会显示下载进度;若失败,请检查连接与串口/蓝牙配置。
- 脚本执行:可以在软件界面点击运行脚本,也可以在设备
MENU的SCRIPTS中找到相应的脚本直接运行。
2.3 第一个脚本示例
opbt.device.SetOutputMode(1) # 输出到蓝牙端
print('Hello OPBTPython!')
2.4 交互式运行
激活交互式模式
通过串口工具或终端工具向设备发送命令,必须是整行数据一起发送,每行末尾需要加回车换行符:
固件版本大于4.68:
OP>2
即发送字符串 OP>2 后跟回车换行(\r\n)。
旧固件版本小于4.68,则需要发送2条命令:
OP>1
{"PythonRunMode":1}
命令说明
上面命令发送后会启动 Python 交互式终端,并返回提示符 >>>。
重要:输出端口选择
- 若 从光电头端(串口) 发送
OP>2\r\n,则后续所有 Python 交互式输出都会发送到 光电头端。 - 若 从蓝牙端 发送
OP>2\r\n,则后续所有 Python 交互式输出都会发送到 蓝牙端。
使用方法与退出
- 在
>>>提示符后输入 Python 代码,按回车执行。 - 输入
exit()可退出交互式模式并重启设备(固件版本大于4.60,其它固件版本请看设备无响应中的方法一)。
异常处理
- 代码错误会有错误提示,会返回错误信息。
- 中断当前代码段的运行:按住设备左键,接着按住右键,这时候红灯亮,然后松开右键,保持左键3秒以上可中断当前代码的运行。
设备无响应
- 方法一:则尝试先按住左键,再按住右键,超过3秒,设备将断电。
- 方法二:按住中键20秒,设备将关机。
详细功能说明见 终端的使用(交互式运行)。
3. OPBTPython基础语法
OPBTPython 支持 Python3 标准语法的子集。
3.1 支持的语法特性
- 数据类型:int、float、str、bool、list、dict、tuple、bytes
- 控制流:if、elif、else、while、for
- 函数定义:def,支持默认参数、可变参数、关键字参数
- 类定义:class,支持继承
- 模块导入:import、from … import
3.2 运算符
支持 +、-、*、/、==、!=、>、<、>=、<=、%、**、//、&、|、and、or、not、in 等。
3.3 简要示例
# 变量与类型
a = 1
b = "hello"
c = [1, 2, 3]
# 条件与循环
if a > 0:
print(b)
for x in c:
print(x)
4. 标准库介绍
本设备脚本环境包含以下标准库模块:PikaStdLib、time、struct、os、math等。 详细库文档请参考:API库文档
4.1 PikaStdLib
- 用途:提供内存管理等功能
- 内嵌示例:
import PikaStdLib
mem = PikaStdLib.MemChecker()
mem.max() # 打印最大内存占用
mem.now() # 打印当前内存占用
4.2 time 模块
- 用途:延时与时间。
- 内嵌示例:
import time
time.sleep_ms(500) # 延时 500 毫秒
4.3 struct 模块
- 用途:二进制数据打包与解包。
- 内嵌示例:
import struct
buf = struct.pack('hh', 1, 2)
a, b = struct.unpack('hh', buf)
4.4 os 模块
- 用途:文件与路径操作(依赖平台)。
- 内嵌示例:
import os
p = os.path
p.join('dir', 'file.txt')
4.5 math 模块
- 用途:数学函数。
- 内嵌示例:
import math
math.sqrt(2)
math.sin(0)
5. OP-BTS 设备 API 详解
设备脚本通过 opbt 模块访问硬件功能。OPBT硬件设备操作API库文档
5.1 输出模式
| API | 说明 | 内嵌示例 |
|---|---|---|
opbt.device.SetOutputMode(mode) |
设置输出设备(0 自动,1 蓝牙,2 光电头,3 LCD) | opbt.device.SetOutputMode(1) |
opbt.device.GetOutputMode() |
获取当前输出模式 | m = opbt.device.GetOutputMode() |
5.2 串口
| API | 说明 | 内嵌示例 |
|---|---|---|
opbt.device.UartConfig(baudrate, parity, DataBit, StopBit) |
配置串口 | opbt.device.UartConfig(9600,"N",8,1) |
opbt.device.UartSendByte(ch) |
发送一字节 | opbt.device.UartSendByte(65) |
opbt.device.UartGetByte() |
读取一字节,无数据返回 -1 | ch = opbt.device.UartGetByte() |
opbt.device.UartSendString(buf, len) |
发送字符串(阻塞) | opbt.device.UartSendString("Hi",2) |
opbt.device.UartSendStringNoWait(buf, len) |
发送字符串(非阻塞) | opbt.device.UartSendStringNoWait("Hi",2) |
opbt.device.UartSendBytes(buf, len) |
发送字节(跳过协议头) | 见设备文档 |
opbt.device.TransparentModeOn()/Off() |
透明传输开关 | opbt.device.TransparentModeOn() |
opbt.device.IecAutoOn()/Off() |
IEC 自动波特率开关 | opbt.device.IecAutoOn() |
5.3 LED 与按键
| API | 说明 | 内嵌示例 |
|---|---|---|
opbt.device.LedSet(leds, mode) |
设置 LED(mode: 0 关 1 开 2 闪 4 快闪 8 翻转) | opbt.device.LedSet(0x02,1) |
opbt.device.LedBlink(leds, cnt, duty, time) |
LED 闪烁 | opbt.device.LedBlink(0x02,10,50,300) |
opbt.device.GetKeyStatus() |
读取按键(位 1 右键,位 2 中键) | k = opbt.device.GetKeyStatus() |
5.4 系统与延时
| API | 说明 | 内嵌示例 |
|---|---|---|
opbt.device.SystemProcess() |
系统进程,需周期调用(如配合 LedBlink) | opbt.device.SystemProcess() |
opbt.device.Sleep(ms) |
延时毫秒 | opbt.device.Sleep(100) |
5.5 LCD
| API | 说明 | 内嵌示例 |
|---|---|---|
opbt.device.LcdClear() |
清屏 | opbt.device.LcdClear() |
opbt.device.LcdTextColor(fc, bc) |
设置前景色、背景色 | opbt.device.LcdTextColor(0xF800,0x0000) |
opbt.device.LcdTextXY(x, y) |
设置文本坐标(x 0–19,y 0–4) | opbt.device.LcdTextXY(0,0) |
opbt.device.LcdPrint(str_p) |
显示字符串 | opbt.device.LcdPrint("Hello") |
opbt.device.LcdFill(xsta, ysta, xend, yend, color) |
填充矩形 | opbt.device.LcdFill(0,0,10,10,0xFFFF) |
更多参数与颜色值请参考 ScriptDoc/cn/cn_module-opbt-device.md 与设备文档。
6. 实用示例索引
主手册仅提供索引,详细示例见各示例文档。
6.1 OP-BTS 设备示例
- OP-BTS设备示例:LED、串口、LCD、按键、透明传输、IEC 自动波特率及综合应用。
6.2 OPBTPython 内建功能示例
6.3 标准库模块示例
7. 调试和故障排除
- 内存监控:使用
MemChecker()的max()、now()观察内存占用。 - 常见错误:检查 import 是否为本设备支持的模块;串口/蓝牙是否连接;输出模式是否与使用的端口一致。
- 调试技巧:先用
print()或 LCD 输出关键变量;交互式模式下可逐行执行命令排查。
8. 附录
8.1 API 快速参考
见第 5 节表格及设备 API 文档。
8.2 颜色值参考(LCD)
| 颜色名 | 十六进制 |
|---|---|
| White | 0xFFFF |
| Black | 0x0000 |
| Red | 0xF800 |
| Green | 0x07E0 |
| Blue | 0x001F |
| Yellow | 0xFFE0 |
8.3 LED 位掩码参考
| 位掩码 | 说明 |
|---|---|
| 0x01 | 左红 |
| 0x02 | 左绿 |
| 0x04 | 左蓝 |
| 0x08 | 右红 |
| 0x10 | 右绿 |
| 0x20 | 右蓝 |
| 0x40 | 保留 |