从配置文件中读取串口设备名、波特率、数据位、停止位等配置以 Modbus RTU 协议的 pH 在线监控仪为例,从数采仪发送数据采集指令至 pH 在线监控仪,采集 频率1秒/1次将采集到的 pH 在线监控仪的数据解析并保存至 sqlite 数据库中,
时间: 2024-05-15 20:19:18 浏览: 150
同时将数据实时展示在界面上。
首先需要读取配置文件中的串口设备名、波特率、数据位、停止位等配置信息,可以使用 Python 的 configparser 模块进行读取,示例代码如下:
```python
import configparser
# 读取配置文件
config = configparser.ConfigParser()
config.read('config.ini')
# 获取配置信息
port = config.get('serial', 'port')
baudrate = int(config.get('serial', 'baudrate'))
bytesize = int(config.get('serial', 'bytesize'))
parity = config.get('serial', 'parity')
stopbits = int(config.get('serial', 'stopbits'))
```
接下来需要使用 PySerial 模块打开串口设备,并发送数据采集指令至 pH 在线监控仪,示例代码如下:
```python
import serial
# 打开串口设备
ser = serial.Serial(port=port, baudrate=baudrate, bytesize=bytesize, parity=parity, stopbits=stopbits)
# 发送数据采集指令
ser.write(b'\x01\x03\x00\x00\x00\x01\x84\x0A')
```
发送数据采集指令后,pH 在线监控仪会返回一段数据,需要对返回的数据进行解析,获取 pH 值,示例代码如下:
```python
import struct
# 读取数据
data = ser.read(9)
# 解析数据
ph = struct.unpack('>f', data[3:7])[0]
```
得到 pH 值后,需要将数据保存至 sqlite 数据库中,可以使用 Python 自带的 sqlite3 模块进行操作,示例代码如下:
```python
import sqlite3
# 连接数据库
conn = sqlite3.connect('data.db')
cursor = conn.cursor()
# 创建数据表
cursor.execute('''CREATE TABLE IF NOT EXISTS data (timestamp INTEGER PRIMARY KEY, ph REAL)''')
# 插入数据
timestamp = int(time.time())
cursor.execute("INSERT INTO data (timestamp, ph) VALUES (?, ?)", (timestamp, ph))
conn.commit()
# 关闭数据库连接
conn.close()
```
最后需要在界面上实时展示采集到的 pH 值,可以使用 PyQt5 模块进行开发,示例代码如下:
```python
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
from PyQt5.QtGui import QFont
class Window(QWidget):
def __init__(self):
super().__init__()
# 创建控件
self.label = QLabel(self)
self.label.setFont(QFont('Arial', 50))
self.label.setAlignment(Qt.AlignCenter)
# 设置窗口大小
self.setGeometry(100, 100, 400, 300)
def set_ph(self, ph):
# 更新 pH 值
self.label.setText('pH: {:.2f}'.format(ph))
if __name__ == '__main__':
# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口
window = Window()
# 显示窗口
window.show()
# 进入事件循环
sys.exit(app.exec_())
```
在程序中增加一个定时器,每隔 1 秒钟读取一次 pH 值并更新界面,示例代码如下:
```python
from PyQt5.QtCore import QTimer
class Window(QWidget):
def __init__(self):
super().__init__()
...
# 创建定时器
self.timer = QTimer(self)
self.timer.timeout.connect(self.update_ph)
self.timer.start(1000)
def update_ph(self):
# 读取 pH 值
ser.write(b'\x01\x03\x00\x00\x00\x01\x84\x0A')
data = ser.read(9)
ph = struct.unpack('>f', data[3:7])[0]
# 更新界面
self.set_ph(ph)
```
阅读全文