From 64be6d7c7a4e78bd405c83c6f53f0d0d065252cf Mon Sep 17 00:00:00 2001 From: louis Date: Thu, 13 Aug 2026 14:28:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=97=AE=E9=A2=98.md?= =?UTF-8?q?=EF=BC=8C=E4=B8=94=E6=96=B0=E5=A2=9Edata=5Flogger.py=E7=94=BB?= =?UTF-8?q?=E5=9B=BE=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PcControl.py | 5 +- __pycache__/PcControl.cpython-313.pyc | Bin 0 -> 32749 bytes __pycache__/config.cpython-313.pyc | Bin 0 -> 2912 bytes __pycache__/controllers.cpython-313.pyc | Bin 0 -> 9317 bytes __pycache__/data_logger.cpython-313.pyc | Bin 0 -> 8591 bytes __pycache__/flow_control.cpython-313.pyc | Bin 0 -> 18267 bytes config.py | 11 +- data_logger.py | 189 +++++++++++++++++++++++ logs/flow_control.log | 3 + main.py | 21 +++ 问题.md | 7 +- 11 files changed, 226 insertions(+), 10 deletions(-) create mode 100644 __pycache__/PcControl.cpython-313.pyc create mode 100644 __pycache__/config.cpython-313.pyc create mode 100644 __pycache__/controllers.cpython-313.pyc create mode 100644 __pycache__/data_logger.cpython-313.pyc create mode 100644 __pycache__/flow_control.cpython-313.pyc create mode 100644 data_logger.py create mode 100644 logs/flow_control.log diff --git a/PcControl.py b/PcControl.py index 59fd2ea..400ed89 100644 --- a/PcControl.py +++ b/PcControl.py @@ -771,10 +771,7 @@ class MT2AM8Client: # Map the full travel range to the configured analog-output range. # The lower endpoint must include volthege_min; otherwise position 0 # produces raw value 0 and is rejected by write_analog_output(). - raw_value = int( - volthege_min - + voltage_distance / x_max * (volthege_max - volthege_min) - ) + raw_value = int( voltage_distance / x_max * volthege_max ) # print(f"设置电机行程为 {voltage_distance},模拟量输出值 {raw_value}") return self.write_analog_output(channel, raw_value) diff --git a/__pycache__/PcControl.cpython-313.pyc b/__pycache__/PcControl.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b50871e17ae1cf8300ec63c7ef6acddb312a037c GIT binary patch literal 32749 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 literal 0 HcmV?d00001 diff --git a/__pycache__/controllers.cpython-313.pyc b/__pycache__/controllers.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..94db4edde8afd2857b061fb6fbf54ae22aece1cd GIT binary patch literal 9317 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 MtMPn7U@js0e}i2?l>h($ literal 0 HcmV?d00001 diff --git a/__pycache__/flow_control.cpython-313.pyc b/__pycache__/flow_control.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1d02d59ebce899480feabcf7f92b27b6bacf288e GIT binary patch literal 18267 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 next_status_time or result.status != "OK": logger.info(format_status(result)) @@ -200,6 +208,19 @@ def run(target_flow_slm): except Exception: exit_code = max(exit_code, 5) logger.exception("断开 MT2-AM8 时发生异常") + + if recorder is not None: + try: + image_path = recorder.finalize() + logger.info("控制数据已保存:%s", recorder.csv_path) + if image_path is not None: + logger.info("三联曲线图已保存:%s", image_path) + else: + logger.warning("本次运行没有采样点,因此未生成曲线图") + except Exception: + recorder.close() + exit_code = max(exit_code, 7) + logger.exception("保存控制数据曲线图失败;CSV 数据仍保留") logger.info("程序结束,退出码=%d", exit_code) return exit_code diff --git a/问题.md b/问题.md index e3ef3c1..0542926 100644 --- a/问题.md +++ b/问题.md @@ -1,3 +1,6 @@ 1.PcControl.py中set_motor_position方法对于电机行程到模拟量的映射是否考虑了volthege_min不为0的情况?原版未考虑,现版暂时考虑了进去 -2.最大行程是1000还是1062.5?PcControl.py中是1000,而controllers.py中是1062.5 -3.init_v预置初始阀门开度是否有用到?read_motor_position读取电机行程,现在是否能做到? \ No newline at end of file +答:读取数据时考虑了。写入数据无需考虑。 +2.最大行程是1000还是1062.5?PcControl.py中是1000,而controllers.py中是1062.5。 +答:统一改为1000. +3.init_v预置初始阀门开度是否有用到?read_motor_position读取电机行程,现在是否能做到? +答:可以读取电机行程,尚未拉取最新PcControl.py。 \ No newline at end of file