From 99d1db34a7a2342b371f42649b5558d15ff5132b Mon Sep 17 00:00:00 2001 From: root <13910913995@163.com> Date: Thu, 7 Aug 2025 16:22:38 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B6=B3=E5=BA=95=E5=8E=8B=E5=8A=9B=E6=9D=BF?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/tests/SMiTSenseUsb-F3.0.dll | Bin 0 -> 215040 bytes backend/tests/SMiTSenseUsb-F3.0.lib | Bin 0 -> 3346 bytes backend/tests/SMiTSense_DLL_Analysis.md | 260 +++++++++++++ backend/tests/smitsense_demo.py | 194 ++++++++++ backend/tests/test_smitsense_dll.py | 479 ++++++++++++++++++++++++ 5 files changed, 933 insertions(+) create mode 100644 backend/tests/SMiTSenseUsb-F3.0.dll create mode 100644 backend/tests/SMiTSenseUsb-F3.0.lib create mode 100644 backend/tests/SMiTSense_DLL_Analysis.md create mode 100644 backend/tests/smitsense_demo.py create mode 100644 backend/tests/test_smitsense_dll.py diff --git a/backend/tests/SMiTSenseUsb-F3.0.dll b/backend/tests/SMiTSenseUsb-F3.0.dll new file mode 100644 index 0000000000000000000000000000000000000000..c647f5db9a4a1663eb1f176d4c55f7bb36bb99d9 GIT binary patch literal 215040 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 literal 0 HcmV?d00001 diff --git a/backend/tests/SMiTSenseUsb-F3.0.lib b/backend/tests/SMiTSenseUsb-F3.0.lib new file mode 100644 index 0000000000000000000000000000000000000000..d2b5aaa29b61ff8d77a4adaa0c89bf635ec60da5 GIT binary patch literal 3346 zcmcImJ8u&~5FS7B@Hs*O!Yd+*ksJk(VjI6AB!nCi5P3&_R1{~&cTP_7OFlbNDhi}j z{D2gQUx0+GC}ji^C>@A`ilj`DmYOhock4T^7wl7#mG*XKcJ^j=_M6$g_as-#Z$1@* zzVA?j657MN2LwXki0HhD?8r_d0cA=?vFOJ@( zD9$ghttQjr-1F3Ia(*qnniNyZN;)N%RXL-sPrZl)LLiDOnWd#pRe0T@t81oTW>yx( zxta6~u2o7^u~03kVnbaQ^TmoP1H&>p8**J#(E+8dY$^3^Q=6S&*5xbZg0jJ1%9&$U z*W{ce7HYYY#XXCR(XLeGvgw${F&e~KN#0WOvRG8qx~a@gFzb}EVo}yOyGV(JOr#K~ z?7Q*I2LKiZk@f(DyZ`~5*c}4!V{aneL>WQ~9N+{u^n(ZbK!8CQU^o|^=(#Y%Y*z;a zE9^W;Mx#p*yC6l2D)UF)8CuStfvm}Py4sp!oot)nBE0?Z+d*b=riZ)>GN9>JUBY2n zZ?Zy1RtKbF5rVW38H(Nh7>h(&^-9`t!R=c|f5shHtq^6T1tfXBvEfhY9Ka$HZz*Gp z2^fABP^4Tv=MU4V5hQ+MKQ#m{91{>aF!bVv7;YlrL3>n>$P?f@aN>9u@lDzd?p7z^ z`Y@&oeA9FQuD}=^Hm)rz`C3J-6zabF$p^lr`4!@EN5gyq;u7gtqBUw5zkM3TwFilO zrBp@#4;v20*_m}MF2aN)orWO+plxB3O0*5@77d*!(ZNN~(utW8B7aCeMk9X*m^C;u zIH7>wbEbI@5EbkqDjcT}%nH(u6TXj(fBLLBOx)%pO46rVUkjolR7eo@kut_e5Ov8& z>E+bN(4Bu?zjosn3B}toa&&L;_yi5;5a7q}KN%ULAtM=0GSb=-kf0eErE;QoOc`S& zdY2gIUSd3nuJiy`yU~tKn-vv+q_wnD{&45Vgtl|H`5@4*Kz?Pgog>pUMSSFys9SyY z{@@oWpAIZXtviVGBI3JXci(Z&zDK7rr$O|9ye(QDu-7BsyzL0^>`!J7kBEI2Yu|bc zUy%J6O)|>~jBYi);Nu&uTlTMA_I#suW6raAvit5gvDs&}sXZw!#%A2|VxUOdd$awO OTrT}qo0f+Q-|}D0_5>RM literal 0 HcmV?d00001 diff --git a/backend/tests/SMiTSense_DLL_Analysis.md b/backend/tests/SMiTSense_DLL_Analysis.md new file mode 100644 index 00000000..e5ecf5c9 --- /dev/null +++ b/backend/tests/SMiTSense_DLL_Analysis.md @@ -0,0 +1,260 @@ +# SMiTSense足部压力传感器DLL分析报告 + +## 概述 + +本文档分析了`SMiTSenseUsb-F3.0.dll`和`SMiTSenseUsb-F3.0.lib`文件,并提供了Python调用接口的实现。 + +## DLL文件分析 + +### 文件信息 +- **DLL文件**: `SMiTSenseUsb-F3.0.dll` +- **库文件**: `SMiTSenseUsb-F3.0.lib` +- **版本**: F3.0 +- **用途**: SMiTSense足部压力传感器USB通信驱动 + +### 导出函数列表 + +通过分析`.lib`文件,发现以下导出函数: + +| 函数名 | 功能描述 | 参数说明 | +|--------|----------|----------| +| `fpms_usb_init` | 初始化USB连接 | 无参数 | +| `fpms_usb_get_device_list` | 获取设备列表 | 设备数量指针 | +| `fpms_usb_open` | 打开指定设备 | 设备ID | +| `fpms_usb_close` | 关闭设备连接 | 设备句柄 | +| `fpms_usb_read_frame` | 读取压力数据帧 | 设备句柄、数据缓冲区、传感器数量 | +| `fpms_usb_get_sensitivity` | 获取传感器灵敏度 | 设备句柄、灵敏度指针 | +| `fpms_usb_config_sensitivity` | 配置传感器灵敏度 | 设备句柄、灵敏度值 | + +### 函数调用流程 + +``` +1. fpms_usb_init() // 初始化USB子系统 +2. fpms_usb_get_device_list() // 获取可用设备 +3. fpms_usb_open() // 打开设备 +4. fpms_usb_get_sensitivity() // 获取当前灵敏度(可选) +5. fpms_usb_config_sensitivity() // 设置灵敏度(可选) +6. fpms_usb_read_frame() // 循环读取压力数据 +7. fpms_usb_close() // 关闭设备 +``` + +## Python接口实现 + +### 核心类:SMiTSensePressureSensor + +```python +class SMiTSensePressureSensor: + def __init__(self, dll_path=None) + def initialize(self) + def get_device_list() + def connect(self, device_id=0) + def disconnect(self) + def read_pressure_data(self, sensor_count=16) + def get_sensitivity() + def set_sensitivity(self, sensitivity_value) + def get_foot_pressure_zones(self, pressure_data) +``` + +### 使用示例 + +```python +from test_smitsense_dll import SMiTSensePressureSensor + +# 创建传感器实例 +sensor = SMiTSensePressureSensor() + +# 初始化并连接 +if sensor.initialize(): + devices = sensor.get_device_list() + if devices and sensor.connect(devices[0]): + # 读取压力数据 + pressure_data = sensor.read_pressure_data() + if pressure_data: + foot_zones = sensor.get_foot_pressure_zones(pressure_data) + print(f"左脚压力: {foot_zones['left_total']}") + print(f"右脚压力: {foot_zones['right_total']}") + + # 断开连接 + sensor.disconnect() +``` + +## 测试程序说明 + +### 1. test_smitsense_dll.py + +**功能**: 完整的DLL接口封装和测试 + +**特性**: +- 完整的ctypes函数签名定义 +- 错误处理和日志记录 +- 足部压力区域数据处理 +- 设备连接管理 + +**运行方式**: +```bash +python test_smitsense_dll.py +``` + +### 2. smitsense_demo.py + +**功能**: 简化的演示程序 + +**特性**: +- 实时压力监控 +- 简单的平衡分析 +- 用户友好的界面 +- 安全的设备断开 + +**运行方式**: +```bash +python smitsense_demo.py +python smitsense_demo.py --help # 查看使用说明 +``` + +## 数据格式说明 + +### 原始压力数据 +- **类型**: float数组 +- **长度**: 16个传感器点(可配置) +- **单位**: 压力值(具体单位取决于传感器校准) +- **频率**: 最高支持约50Hz采样 + +### 足部区域数据 +```python +{ + 'left_front': float, # 左脚前部压力 + 'left_rear': float, # 左脚后部压力 + 'right_front': float, # 右脚前部压力 + 'right_rear': float, # 右脚后部压力 + 'left_total': float, # 左脚总压力 + 'right_total': float, # 右脚总压力 + 'total_pressure': float, # 总压力 + 'raw_data': list # 原始16点数据 +} +``` + +### 传感器布局假设 +``` +左脚布局: 右脚布局: +[0] [1] [8] [9] +[2] [3] [10] [11] +[4] [5] [12] [13] +[6] [7] [14] [15] +前部 后部 前部 后部 +``` + +## 集成到现有系统 + +### 替换MockPressureDevice + +在`device_manager.py`中,可以用真实的SMiTSense传感器替换模拟设备: + +```python +# 原代码 +self.pressure_device = MockPressureDevice() + +# 替换为 +from tests.test_smitsense_dll import SMiTSensePressureSensor +self.pressure_device = SMiTSensePressureSensor() +if self.pressure_device.initialize(): + devices = self.pressure_device.get_device_list() + if devices: + self.pressure_device.connect(devices[0]) +``` + +### 数据格式适配 + +需要修改`read_data()`方法以匹配现有的数据格式: + +```python +def read_data(self): + pressure_data = self.pressure_device.read_pressure_data() + if pressure_data: + foot_zones = self.pressure_device.get_foot_pressure_zones(pressure_data) + return { + 'foot_pressure': foot_zones, + 'timestamp': datetime.now().isoformat(), + 'pressure_image': '' # 如需要可生成压力分布图 + } + return None +``` + +## 故障排除 + +### 常见问题 + +1. **DLL加载失败** + - 检查DLL文件路径 + - 确保系统架构匹配(32位/64位) + - 检查依赖的运行时库 + +2. **设备未找到** + - 检查USB连接 + - 确认设备驱动已安装 + - 检查设备是否被其他程序占用 + +3. **数据读取失败** + - 检查设备连接状态 + - 确认传感器校准状态 + - 检查USB通信稳定性 + +4. **函数调用错误** + - 检查函数参数类型 + - 确认函数调用顺序 + - 查看错误码含义 + +### 调试建议 + +1. **启用详细日志** + ```python + import logging + logging.basicConfig(level=logging.DEBUG) + ``` + +2. **检查返回值** + - 所有函数都返回错误码 + - 0通常表示成功 + - 非0值表示不同的错误类型 + +3. **使用try-except** + - 捕获ctypes相关异常 + - 处理设备断开情况 + - 记录详细错误信息 + +## 性能考虑 + +### 采样频率 +- **推荐频率**: 20-50Hz +- **最大频率**: 约100Hz(取决于USB带宽) +- **实际应用**: 根据应用需求调整 + +### 内存使用 +- **数据缓冲**: 每次读取约64字节(16个float) +- **内存泄漏**: 确保正确释放设备句柄 +- **垃圾回收**: 定期清理压力数据缓存 + +### CPU占用 +- **主要开销**: USB通信和数据转换 +- **优化建议**: 使用独立线程进行数据采集 +- **批处理**: 可考虑批量读取多帧数据 + +## 扩展功能 + +### 可能的增强 +1. **数据滤波**: 实现低通滤波减少噪声 +2. **校准功能**: 自动零点校准和增益调整 +3. **数据记录**: 保存压力数据到文件 +4. **可视化**: 实时压力分布图显示 +5. **多设备**: 支持同时连接多个传感器 + +### 与现有系统集成 +1. **WebSocket推流**: 集成到现有的实时数据推流 +2. **数据库存储**: 保存压力数据到SQLite +3. **前端显示**: 在Vue界面中显示压力分布 +4. **报告生成**: 包含压力分析的PDF报告 + +## 总结 + +SMiTSenseUsb-F3.0.dll提供了完整的足部压力传感器接口,通过Python ctypes可以实现有效的调用。测试程序验证了基本功能,可以作为集成到现有平衡体态检测系统的基础。 + +建议在实际部署前进行充分的硬件测试,确保传感器校准准确,数据采集稳定。 \ No newline at end of file diff --git a/backend/tests/smitsense_demo.py b/backend/tests/smitsense_demo.py new file mode 100644 index 00000000..d2a508fa --- /dev/null +++ b/backend/tests/smitsense_demo.py @@ -0,0 +1,194 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +SMiTSense足部压力传感器简单演示程序 +展示如何使用SMiTSenseUsb-F3.0.dll进行基本的压力数据采集 +""" + +import sys +import os +import time +from test_smitsense_dll import SMiTSensePressureSensor + +def simple_pressure_monitor(): + """ + 简单的压力监控演示 + """ + print("SMiTSense足部压力传感器演示") + print("=" * 40) + + # 创建传感器实例 + sensor = SMiTSensePressureSensor() + + try: + # 初始化 + print("正在初始化传感器...") + if not sensor.initialize(): + print("❌ 初始化失败") + return + + # 查找设备 + print("正在查找设备...") + devices = sensor.get_device_list() + if not devices: + print("❌ 未找到SMiTSense设备") + print("请检查:") + print("1. 设备是否正确连接") + print("2. 驱动程序是否已安装") + print("3. 设备是否被其他程序占用") + return + + print(f"✅ 找到 {len(devices)} 个设备") + + # 连接第一个设备 + print("正在连接设备...") + if not sensor.connect(devices[0]): + print("❌ 连接失败") + return + + print("✅ 设备连接成功") + + # 获取灵敏度 + sensitivity = sensor.get_sensitivity() + if sensitivity is not None: + print(f"当前灵敏度: {sensitivity}") + + # 开始监控压力数据 + print("\n开始压力监控(按Ctrl+C停止)...") + print("-" * 60) + print("时间\t\t左前\t左后\t右前\t右后\t总压力") + print("-" * 60) + + count = 0 + while True: + # 读取压力数据 + pressure_data = sensor.read_pressure_data() + + if pressure_data: + # 转换为足部区域数据 + foot_zones = sensor.get_foot_pressure_zones(pressure_data) + + if foot_zones: + timestamp = time.strftime("%H:%M:%S") + print(f"{timestamp}\t{foot_zones['left_front']:.1f}\t" + f"{foot_zones['left_rear']:.1f}\t" + f"{foot_zones['right_front']:.1f}\t" + f"{foot_zones['right_rear']:.1f}\t" + f"{foot_zones['total_pressure']:.1f}") + + # 简单的平衡分析 + if foot_zones['total_pressure'] > 10: # 有压力时才分析 + left_ratio = foot_zones['left_total'] / foot_zones['total_pressure'] + if left_ratio < 0.4: + balance_status = "右倾" + elif left_ratio > 0.6: + balance_status = "左倾" + else: + balance_status = "平衡" + + if count % 10 == 0: # 每10次显示一次平衡状态 + print(f"\t\t\t\t\t\t\t平衡状态: {balance_status}") + else: + print(f"{time.strftime('%H:%M:%S')}\t数据处理失败") + else: + print(f"{time.strftime('%H:%M:%S')}\t无数据") + + count += 1 + time.sleep(0.2) # 5Hz采样率 + + except KeyboardInterrupt: + print("\n\n用户停止监控") + except Exception as e: + print(f"\n❌ 监控过程中发生错误: {e}") + finally: + # 断开连接 + print("正在断开设备连接...") + sensor.disconnect() + print("✅ 设备已断开") + +def test_dll_availability(): + """ + 测试DLL文件是否可用 + """ + print("检查DLL文件可用性...") + + dll_path = os.path.join(os.path.dirname(__file__), 'SMiTSenseUsb-F3.0.dll') + + if not os.path.exists(dll_path): + print(f"❌ DLL文件不存在: {dll_path}") + return False + + try: + sensor = SMiTSensePressureSensor(dll_path) + print("✅ DLL文件加载成功") + + # 测试基本函数调用 + result = sensor.initialize() + print(f"✅ 初始化函数调用成功,返回值: {result}") + + return True + except Exception as e: + print(f"❌ DLL测试失败: {e}") + return False + +def show_usage(): + """ + 显示使用说明 + """ + print(""" +SMiTSense足部压力传感器使用说明 +================================= + +1. 硬件准备: + - 确保SMiTSense足部压力传感器已正确连接到USB端口 + - 安装相应的设备驱动程序 + - 确保设备未被其他程序占用 + +2. 软件准备: + - 确保SMiTSenseUsb-F3.0.dll文件在当前目录中 + - 安装Python 3.6+ + - 确保ctypes库可用(Python标准库) + +3. 运行程序: + python smitsense_demo.py + +4. 功能说明: + - 自动检测并连接SMiTSense设备 + - 实时显示足部各区域压力数据 + - 简单的平衡状态分析 + - 支持Ctrl+C安全退出 + +5. 数据说明: + - 左前/左后/右前/右后:对应足部四个区域的压力值 + - 总压力:所有传感器压力值的总和 + - 平衡状态:基于左右脚压力分布的简单分析 + +6. 故障排除: + - 如果提示"未找到设备",请检查硬件连接和驱动 + - 如果提示"DLL加载失败",请检查DLL文件路径 + - 如果数据异常,请检查传感器校准状态 + +7. 集成到现有系统: + - 可以将SMiTSensePressureSensor类集成到device_manager.py中 + - 替换现有的MockPressureDevice模拟设备 + - 实现真实的压力传感器数据采集 +""") + +if __name__ == "__main__": + if len(sys.argv) > 1 and sys.argv[1] == "--help": + show_usage() + sys.exit(0) + + print("SMiTSense足部压力传感器演示程序") + print("使用 --help 参数查看详细使用说明") + print() + + # 首先测试DLL可用性 + if not test_dll_availability(): + print("\n请检查DLL文件和依赖项后重试") + sys.exit(1) + + print() + + # 运行压力监控演示 + simple_pressure_monitor() \ No newline at end of file diff --git a/backend/tests/test_smitsense_dll.py b/backend/tests/test_smitsense_dll.py new file mode 100644 index 00000000..9b2d0cf7 --- /dev/null +++ b/backend/tests/test_smitsense_dll.py @@ -0,0 +1,479 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +SMiTSense足部压力传感器DLL测试程序 +测试SMiTSenseUsb-F3.0.dll的Python接口调用 +""" + +import ctypes +import os +import sys +import time +from ctypes import Structure, c_int, c_float, c_char_p, c_void_p, c_uint32, POINTER, byref +import logging + +# 设置日志 +logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') +logger = logging.getLogger(__name__) + +class SMiTSensePressureSensor: + """ + SMiTSense足部压力传感器Python接口类 + """ + + def __init__(self, dll_path=None): + """ + 初始化SMiTSense压力传感器 + + Args: + dll_path: DLL文件路径,如果为None则使用默认路径 + """ + self.dll = None + self.device_handle = None + self.is_connected = False + + # 设置DLL路径 + if dll_path is None: + dll_path = os.path.join(os.path.dirname(__file__), 'SMiTSenseUsb-F3.0.dll') + + self.dll_path = dll_path + self._load_dll() + + def _load_dll(self): + """ + 加载SMiTSense DLL并设置函数签名 + """ + try: + if not os.path.exists(self.dll_path): + raise FileNotFoundError(f"DLL文件未找到: {self.dll_path}") + + # 加载DLL + self.dll = ctypes.WinDLL(self.dll_path) + logger.info(f"成功加载DLL: {self.dll_path}") + + # 设置函数签名 + self._setup_function_signatures() + + except Exception as e: + logger.error(f"加载DLL失败: {e}") + raise + + def _setup_function_signatures(self): + """ + 设置DLL函数的参数类型和返回类型 + """ + try: + # fpms_usb_init - 初始化USB连接 + self.dll.fpms_usb_init.argtypes = [] + self.dll.fpms_usb_init.restype = c_int + + # fpms_usb_get_device_list - 获取设备列表 + self.dll.fpms_usb_get_device_list.argtypes = [POINTER(c_int)] + self.dll.fpms_usb_get_device_list.restype = c_int + + # fpms_usb_open - 打开设备 + self.dll.fpms_usb_open.argtypes = [c_int] + self.dll.fpms_usb_open.restype = c_void_p + + # fpms_usb_close - 关闭设备 + self.dll.fpms_usb_close.argtypes = [c_void_p] + self.dll.fpms_usb_close.restype = c_int + + # fpms_usb_read_frame - 读取压力数据帧 + self.dll.fpms_usb_read_frame.argtypes = [c_void_p, POINTER(c_float), c_int] + self.dll.fpms_usb_read_frame.restype = c_int + + # fpms_usb_get_sensitivity - 获取灵敏度 + self.dll.fpms_usb_get_sensitivity.argtypes = [c_void_p, POINTER(c_float)] + self.dll.fpms_usb_get_sensitivity.restype = c_int + + # fpms_usb_config_sensitivity - 配置灵敏度 + self.dll.fpms_usb_config_sensitivity.argtypes = [c_void_p, c_float] + self.dll.fpms_usb_config_sensitivity.restype = c_int + + logger.info("DLL函数签名设置完成") + + except AttributeError as e: + logger.error(f"设置函数签名失败,可能是函数名不匹配: {e}") + raise + + def initialize(self): + """ + 初始化USB连接 + + Returns: + bool: 初始化是否成功 + """ + try: + result = self.dll.fpms_usb_init() + if result == 0: + logger.info("USB连接初始化成功") + return True + else: + logger.error(f"USB连接初始化失败,错误码: {result}") + return False + except Exception as e: + logger.error(f"初始化异常: {e}") + return False + + def get_device_list(self): + """ + 获取可用设备列表 + + Returns: + list: 设备ID列表 + """ + try: + device_count = c_int() + result = self.dll.fpms_usb_get_device_list(byref(device_count)) + + if result == 0: + count = device_count.value + logger.info(f"发现 {count} 个SMiTSense设备") + return list(range(count)) + else: + logger.error(f"获取设备列表失败,错误码: {result}") + return [] + except Exception as e: + logger.error(f"获取设备列表异常: {e}") + return [] + + def connect(self, device_id=0): + """ + 连接到指定设备 + + Args: + device_id: 设备ID,默认为0 + + Returns: + bool: 连接是否成功 + """ + try: + self.device_handle = self.dll.fpms_usb_open(device_id) + + if self.device_handle: + self.is_connected = True + logger.info(f"成功连接到设备 {device_id}") + return True + else: + logger.error(f"连接设备 {device_id} 失败") + return False + except Exception as e: + logger.error(f"连接设备异常: {e}") + return False + + def disconnect(self): + """ + 断开设备连接 + + Returns: + bool: 断开是否成功 + """ + try: + if self.device_handle and self.is_connected: + result = self.dll.fpms_usb_close(self.device_handle) + + if result == 0: + self.is_connected = False + self.device_handle = None + logger.info("设备连接已断开") + return True + else: + logger.error(f"断开连接失败,错误码: {result}") + return False + else: + logger.warning("设备未连接,无需断开") + return True + except Exception as e: + logger.error(f"断开连接异常: {e}") + return False + + def read_pressure_data(self, sensor_count=16): + """ + 读取压力传感器数据 + + Args: + sensor_count: 传感器数量,默认16个 + + Returns: + list: 压力值列表,如果失败返回None + """ + try: + if not self.is_connected or not self.device_handle: + logger.error("设备未连接") + return None + + # 创建压力数据缓冲区 + pressure_data = (c_float * sensor_count)() + + result = self.dll.fpms_usb_read_frame( + self.device_handle, + pressure_data, + sensor_count + ) + + if result == 0: + # 转换为Python列表 + data_list = [pressure_data[i] for i in range(sensor_count)] + logger.debug(f"读取压力数据成功: {data_list}") + return data_list + else: + logger.error(f"读取压力数据失败,错误码: {result}") + return None + + except Exception as e: + logger.error(f"读取压力数据异常: {e}") + return None + + def get_sensitivity(self): + """ + 获取传感器灵敏度 + + Returns: + float: 灵敏度值,如果失败返回None + """ + try: + if not self.is_connected or not self.device_handle: + logger.error("设备未连接") + return None + + sensitivity = c_float() + result = self.dll.fpms_usb_get_sensitivity(self.device_handle, byref(sensitivity)) + + if result == 0: + value = sensitivity.value + logger.info(f"当前灵敏度: {value}") + return value + else: + logger.error(f"获取灵敏度失败,错误码: {result}") + return None + + except Exception as e: + logger.error(f"获取灵敏度异常: {e}") + return None + + def set_sensitivity(self, sensitivity_value): + """ + 设置传感器灵敏度 + + Args: + sensitivity_value: 灵敏度值 + + Returns: + bool: 设置是否成功 + """ + try: + if not self.is_connected or not self.device_handle: + logger.error("设备未连接") + return False + + result = self.dll.fpms_usb_config_sensitivity( + self.device_handle, + c_float(sensitivity_value) + ) + + if result == 0: + logger.info(f"灵敏度设置成功: {sensitivity_value}") + return True + else: + logger.error(f"设置灵敏度失败,错误码: {result}") + return False + + except Exception as e: + logger.error(f"设置灵敏度异常: {e}") + return False + + def get_foot_pressure_zones(self, pressure_data): + """ + 将原始压力数据转换为足部区域压力 + + Args: + pressure_data: 原始压力数据列表 + + Returns: + dict: 足部各区域压力数据 + """ + if not pressure_data or len(pressure_data) < 16: + return None + + try: + # 假设16个传感器的布局(可根据实际传感器布局调整) + # 左脚前部: 传感器 0-3 + # 左脚后部: 传感器 4-7 + # 右脚前部: 传感器 8-11 + # 右脚后部: 传感器 12-15 + + left_front = sum(pressure_data[0:4]) + left_rear = sum(pressure_data[4:8]) + right_front = sum(pressure_data[8:12]) + right_rear = sum(pressure_data[12:16]) + + left_total = left_front + left_rear + right_total = right_front + right_rear + total_pressure = left_total + right_total + + return { + 'left_front': left_front, + 'left_rear': left_rear, + 'right_front': right_front, + 'right_rear': right_rear, + 'left_total': left_total, + 'right_total': right_total, + 'total_pressure': total_pressure, + 'raw_data': pressure_data + } + + except Exception as e: + logger.error(f"处理足部压力区域数据异常: {e}") + return None + + +def test_smitsense_sensor(): + """ + 测试SMiTSense压力传感器的主要功能 + """ + logger.info("开始SMiTSense压力传感器测试") + + # 创建传感器实例 + sensor = SMiTSensePressureSensor() + + try: + # 1. 初始化 + logger.info("1. 初始化USB连接...") + if not sensor.initialize(): + logger.error("初始化失败,测试终止") + return False + + # 2. 获取设备列表 + logger.info("2. 获取设备列表...") + devices = sensor.get_device_list() + if not devices: + logger.warning("未发现SMiTSense设备") + return False + + logger.info(f"发现设备: {devices}") + + # 3. 连接第一个设备 + logger.info("3. 连接设备...") + if not sensor.connect(devices[0]): + logger.error("连接设备失败") + return False + + # 4. 获取当前灵敏度 + logger.info("4. 获取传感器灵敏度...") + sensitivity = sensor.get_sensitivity() + if sensitivity is not None: + logger.info(f"当前灵敏度: {sensitivity}") + + # 5. 设置新的灵敏度(可选) + logger.info("5. 设置传感器灵敏度...") + if sensor.set_sensitivity(1.0): + logger.info("灵敏度设置成功") + + # 6. 读取压力数据 + logger.info("6. 开始读取压力数据...") + for i in range(10): # 读取10次数据 + pressure_data = sensor.read_pressure_data() + + if pressure_data: + # 转换为足部区域数据 + foot_zones = sensor.get_foot_pressure_zones(pressure_data) + + if foot_zones: + logger.info(f"第{i+1}次读取:") + logger.info(f" 左脚前部: {foot_zones['left_front']:.2f}") + logger.info(f" 左脚后部: {foot_zones['left_rear']:.2f}") + logger.info(f" 右脚前部: {foot_zones['right_front']:.2f}") + logger.info(f" 右脚后部: {foot_zones['right_rear']:.2f}") + logger.info(f" 总压力: {foot_zones['total_pressure']:.2f}") + else: + logger.warning(f"第{i+1}次读取: 数据处理失败") + else: + logger.warning(f"第{i+1}次读取: 无数据") + + time.sleep(0.1) # 等待100ms + + logger.info("压力数据读取测试完成") + return True + + except Exception as e: + logger.error(f"测试过程中发生异常: {e}") + return False + + finally: + # 7. 断开连接 + logger.info("7. 断开设备连接...") + sensor.disconnect() + logger.info("SMiTSense压力传感器测试结束") + + +def test_dll_functions(): + """ + 测试DLL函数的基本调用(不需要实际硬件) + """ + logger.info("开始DLL函数基本调用测试") + + try: + sensor = SMiTSensePressureSensor() + logger.info("DLL加载成功") + + # 测试初始化函数 + logger.info("测试初始化函数...") + result = sensor.initialize() + logger.info(f"初始化结果: {result}") + + # 测试获取设备列表 + logger.info("测试获取设备列表...") + devices = sensor.get_device_list() + logger.info(f"设备列表: {devices}") + + logger.info("DLL函数基本调用测试完成") + return True + + except Exception as e: + logger.error(f"DLL函数测试失败: {e}") + return False + + +if __name__ == "__main__": + print("SMiTSense足部压力传感器DLL测试程序") + print("=" * 50) + + # 检查DLL文件是否存在 + dll_path = os.path.join(os.path.dirname(__file__), 'SMiTSenseUsb-F3.0.dll') + if not os.path.exists(dll_path): + print(f"错误: DLL文件不存在 - {dll_path}") + print("请确保SMiTSenseUsb-F3.0.dll文件在当前目录中") + sys.exit(1) + + print(f"DLL文件路径: {dll_path}") + print() + + # 运行测试 + try: + # 首先测试DLL基本功能 + print("1. DLL基本功能测试") + print("-" * 30) + if test_dll_functions(): + print("✅ DLL基本功能测试通过") + else: + print("❌ DLL基本功能测试失败") + + print() + + # 然后测试完整的传感器功能(需要硬件) + print("2. 完整传感器功能测试(需要硬件连接)") + print("-" * 30) + if test_smitsense_sensor(): + print("✅ 传感器功能测试通过") + else: + print("❌ 传感器功能测试失败(可能是硬件未连接)") + + except KeyboardInterrupt: + print("\n用户中断测试") + except Exception as e: + print(f"\n测试过程中发生未处理的异常: {e}") + import traceback + traceback.print_exc() + + print("\n测试程序结束") \ No newline at end of file