首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >实时仿真 — 数据采集器

实时仿真 — 数据采集器

作者头像
联远智维
发布2025-12-25 15:01:28
发布2025-12-25 15:01:28
540
举报
文章被收录于专栏:联远智维联远智维

实时仿真的核心为:通过传感器获取物理世界的局部状态(温度、变形和压力等),后续基于实时仿真进行推理,进而为智能装备提供完备的信息输入,最终实现物理感知。

在无人机安全监测领域,通过传感器获取系统的负载情况,后续基于实时仿真,推断结构在极端工作环境下的实时变形特征,确保无人系统的安全可靠(应用于载人飞行器的安全监测)。

近来,我们单独将力学传感器及对应的采集模块列出来,通过Demo实例展示产品的性能,具体如下图所示,实例中采用的小球重量为0.7g;重力传感器的量程为5kg,实验中将小球从空中抛下的时候,接触瞬间出现翻滚等行为。

重力传感器具体测量的信号如图2所示,在小球于传感器接触前,数据采集模块的读数处于稳定状态,接触瞬间,传感器能够准确捕捉接触期间的力学变化过程,具有很好的精度。

数据采集模块与传感器的具体实例:

数据采集模块的尺寸为:65mm*35mm*24mm,具体如下图所示:

具体的采集代码为:

代码语言:javascript
复制
import minimalmodbus
import serial
import struct
import time
# 串口配置
ser = serial.Serial('COM5', baudrate=19200, bytesize=8, parity='N', stopbits=1, timeout=1)
sensor_vibration = minimalmodbus.Instrument(ser, slaveaddress=1)
# 从机地址为 1
# 保存文件路径output_file = 'i32_values.txt'
# 将无符号 32 位整数转换为有符号 32 位整数
def u32_to_i32(u32: int) -> int:
    return struct.unpack(">i", u32.to_bytes(4, byteorder="big", signed=False))[0]

# 循环连续采集数据并保存到文件
def continuous_sampling():
    with open(output_file, 'a') as file:  # 打开文件并追加写入
        while True:            
            try:                
                # 读取寄存器 1002 和 1003                
                reg_1002 = sensor_vibration.read_register(registeraddress=1002, functioncode=3)                
                reg_1003 = sensor_vibration.read_register(registeraddress=1003, functioncode=3)                
                # 合并寄存器值,假设 reg_1002 为高位,reg_1003 为低位                
                u32_value = (reg_1002 << 16) | reg_1003  # 合并为 32 位无符号整数                
                # 转换为有符号 32 位整数                
                i32_value = u32_to_i32(u32_value)                
                # 打印结果                
                #print(f"Reg1002 (高16位) = 0x{reg_1002:04X}")                
                #print(f"Reg1003 (低16位) = 0x{reg_1003:04X}")                
                #print(f"合并的 32-bit HEX = {u32_value:08X}")                
                #print(f"转换为有符号整数 = {i32_value}")                
                # 将值写入文本文件                
                file.write(f"{i32_value}\n")                
                # 等待 50ms                
                time.sleep(0.05)            
            except Exception as e:                
                print(f"发生错误: {e}")                
                break
if __name__ == '__main__':   
    continuous_sampling()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-12-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 轻量化结构分析与设计 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档