前言
由于项目中设备使用气体对容器进行充气。需要测试充气稳定性和一些管道堵塞等情况下防护措施。开发本套自动化测试方案。
一、试验器件
1、Arduino mega2560单片机 * 1
2、电磁阀 * 3
3、气体压力传感器 * 1
4、待测设备
二、试验方法
1、单片机写入程序,电脑USB串口对单片机发送串口指令分别执行电磁阀闭合以及压力传感器设备数据读取
2、对不同管路进行关闭
3、通过脚本实现每隔0.5秒读取一次压力传感器设备数值,然后记录在一个Excel列表中
4、通过程序对Excel列表中的数据进行折线图显示,分析充气稳定性
三、试验
1、搭建测试环境
四、控制和实现代码
import time
import serial
import openpyxl
from openpyxl import Workbook
import os
"""
以下是3个电磁阀控制代码
"""
"""
串口参数设置
"""
PORT = 'COM17' # 根据实际情况修改端口号
BAUDRATE = 9600 # 波特率
BYTESIZE = 8 # 数据位
PARITY = 'N' # 奇偶校验
STOPBITS = 1 # 停止位
TIMEOUT = 2 #
"""
指令参数设置
"""
END_MARKER = b"\xEF\xEF" # 结束标记
"""
压力采集控制
"""
command_barometric_pressure_sensor = b"\xFE\xFE\x02\x02\x04\xEF\xEF"
expected_barometric_pressure_sensor_response = b"\xFE\xFE\x04\x82"
LOOP_TIME = 30 # 实验持续时间(秒)
SAMPLE_INTERVAL = 0.5 # 传感器采样间隔(秒)
"""
文件参数设置
"""
EXCEL_FILENAME = "test_bunper_123_new20241016.xlsx"
# todo 电磁阀控制变量
# =============================打 开 电 磁 阀======================================
"""
电磁阀控制打开-----1号电磁阀
"""
command_open_magnetic_valve1 = b"\xFE\xFE\x04\x01\x01\x01\x07\xEF\xEF"
expected_open_magnetic_valve1_response = b"\xFE\xFE\x04\x81\x01\x01\x00"
"""
电磁阀控制打开-----2号电磁阀
"""
command_open_magnetic_valve2 = b"\xFE\xFE\x04\x01\x02\x01\x07\xEF\xEF"
expected_open_magnetic_valve2_response = b"\xFE\xFE\x04\x81\x02\x01\x00"
"""
电磁阀控制打开-----3号电磁阀
"""
command_open_magnetic_valve3 = b"\xFE\xFE\x04\x01\x03\x01\x07\xEF\xEF"
expected_open_magnetic_valve3_response = b"\xFE\xFE\x04\x81\x03\x01\x00"
"""
电磁阀控制打开-----4号电磁阀
"""
command_open_magnetic_valve4 = b"\xFE\xFE\x04\x01\x04\x01\x07\xEF\xEF"
expected_open_magnetic_valve4_response = b"\xFE\xFE\x04\x81\x04\x01\x00"
# =============================关 闭 电 磁 阀======================================
"""
电磁阀控制关闭-----1号电磁阀
"""
command_close_magnetic_valve1 = b"\xFE\xFE\x04\x01\x01\x00\x07\xEF\xEF"
expected_close_magnetic_valve1_response = b"\xFE\xFE\x04\x81\x01\x00\x00"
"""
电磁阀控制关闭-----2号电磁阀
"""
command_close_magnetic_valve2 = b"\xFE\xFE\x04\x01\x02\x00\x07\xEF\xEF"
expected_close_magnetic_valve2_response = b"\xFE\xFE\x04\x81\x02\x00\x00"
"""
电磁阀控制关闭-----3号电磁阀
"""
command_close_magnetic_valve3 = b"\xFE\xFE\x04\x01\x03\x00\x07\xEF\xEF"
expected_close_magnetic_valve3_response = b"\xFE\xFE\x04\x81\x03\x00\x00"
"""
电磁阀控制关闭-----4号电磁阀
"""
command_close_magnetic_valve4 = b"\xFE\xFE\x04\x01\x04\x00\x07\xEF\xEF"
expected_close_magnetic_valve4_response = b"\xFE\xFE\x04\x81\x04\x00\x00"
# 定义串口通信类
class SerialCommunicator:
def __init__(self, port):
"""
初始化串口设置
"""
self.ser = serial.Serial(
port=port, # 串口名称
baudrate=BAUDRATE, # 波特率
bytesize=BYTESIZE, # 数据位
parity=PARITY, # 校验位
stopbits=STOPBITS, # 停止位
timeout=TIMEOUT # 超时设置
)
self.ser.flushInput() # 清空输入缓冲区
self.ser.flushOutput() # 清空输出缓冲区
def send_data(self, data):
"""发送数据到串口"""
self.ser.write(data)
def receive_data(self):
"""从串口接收数据"""
buffer = bytearray()
start_time = time.time()
timeout = 1 # 设置超时时间
while time.time() - start_time < timeout:
count = self.ser.in_waiting
if count != 0:
recv = self.ser.read(count)
buffer.extend(recv) # 将新接收到的数据追加到缓冲区
# 检查是否包含预期的结束标记
if END_MARKER in buffer:
message, buffer = buffer.split(END_MARKER, 1)
return message
time.sleep(