michaelsthr/pyvse

GitHub: michaelsthr/pyvse

用于与 IFM VSE100/VSA004 振动传感器通信的 Python SDK,支持高频加速度数据的采集、流式传输与导出。

Stars: 1 | Forks: 0

# pyvse 用于 IFM VSE100 / VSA004 加速度传感器的 Python SDK。通信协议为逆向工程获得。与 IFM 无关,也未获得其认可。 ## 安装 ``` pip install pyvse ``` **依赖项:** `numpy`(必需),`pandas` + `matplotlib`(可选,用于导出/可视化)。 ## 快速入门 ### 单次采集 ``` import pyvse with pyvse.connect("192.168.0.1") as client: data = client.raw("50K").collect(seconds=5.0) data.to_csv("run1.csv") df = data.to_dataframe() # pandas DataFrame: time_s, accel_g arr = data.to_numpy() # np.ndarray shape (N,), unit: g ``` ### 实时流 ``` import pyvse with pyvse.connect("192.168.0.1") as client: for frame in client.raw("50K").stream(batch_size=700): print(frame.g_values.mean()) # np.ndarray shape (700,), unit: g ``` ### 流式传输到 CSV(内存高效) ``` import pyvse with pyvse.connect("192.168.0.1") as client: with pyvse.CSVSink("run1.csv", sample_rate=50_000) as sink: for frame in client.raw("50K").stream(): sink.push(frame.g_values) ``` ### 流式传输到 PlotJuggler ``` import pyvse with pyvse.connect("192.168.0.1") as client: with pyvse.PlotJugglerSink() as pj: # default: 127.0.0.1:9870 UDP for frame in client.raw("50K").stream(): pj.push_all(frame.g_values) # one UDP message per sample ``` ## API 参考 ### `pyvse.connect(host, port=3321, timeout=5.0) → VSEClient` 返回一个上下文管理器。使用 `with` 以确保干净地断开连接。 ### `VSEClient` | 方法 | 返回值 | 描述 | |--------|---------|-------------| | `raw(rate="50K")` | `RawCommand` | rate:`"50K"` 或 `"100K"` | ### `RawCommand` | 方法 | 返回值 | 描述 | |--------|---------|-------------| | `collect(seconds)` | `RawData` | 采集固定长度的数据 | | `stream(batch_size=700)` | `Iterator[RawFrame]` | 实时流;持续运行直到被中断 | ### `RawData` | 属性 / 方法 | 描述 | |--------------------|-------------| | `g_values` | `np.ndarray`,形状为 `(N,)`,float64,单位:g | | `sample_rate` | `int`,Hz | | `time_axis` | 以秒为单位的 `np.ndarray` 时间戳 | | `to_numpy()` | 返回 `g_values` | | `to_dataframe()` | 包含 `time_s` 和 `accel_g` 列的 pandas DataFrame | | `to_csv(path)` | 写入包含 `time_s` 和 `accel_g` 列的 CSV 文件 | ### `RawFrame` | 属性 | 描述 | |-----------|-------------| | `g_values` | `np.ndarray`,形状为 `(batch_size,)`,float64,单位:g | | `sample_rate` | `int`,Hz | ### `CSVSink(path, sample_rate)` 对流友好的 CSV 写入器。用作上下文管理器,每帧调用 `.push(g_values)`。 ### `PlotJugglerSink(host="127.0.0.1", port=9870)` 通过 UDP JSON 流将数据推送到 PlotJuggler。 | 方法 | 描述 | |--------|-------------| | `push(g_values, channel="accel_g")` | 将批次均值作为单条消息发送 | | `push_all(g_values, channel="accel_g")` | 将每个样本作为单独的消息发送 | ### 异常 | 异常 | 何时抛出 | |-----------|-------------| | `VSEConnectionError` | TCP 连接失败时 | | `VSETimeoutError` | Socket 读取超时时 | | `VSEProtocolError` | 设备返回意外响应时 | | `VSEError` | 所有 pyvse 错误的基类 | ## 免责声明 通过观察设备通信独立开发的实现。与 IFM 无关,也未获得其认可。
标签:Python, 传感器, 命令控制, 工业控制, 数据采集, 无后门, 物联网, 状态监测, 逆向工具