求助:通过TCP向函数发生器发送大自定义波形失败
大波形TCP传输至函数发生器失败问题
我通过TCP连接向函数发生器发送最多50000个数据点的自定义大波形时遇到异常:小波形(≤200个数据点)可正常传输,但大波形无法完整写入EMEMory——要么仅部分数据写入成功,要么设备加载的仍是旧波形。推测问题出在socket.socket.sendall()函数处理大数据量的环节。
使用的是OWON XDG系列波形发生器的SCPI协议文档。
相关代码片段:
def load_waveform(self, waveform): """ Load a custom waveform into the function generator. """ waveform = np.round(waveform) waveform = [int(val) for val in waveform] data = bytearray() for val in waveform: data.extend(val.to_bytes(2, byteorder='little', signed=True)) byte_count = len(data) header = f"#{len(str(byte_count))}{byte_count}".encode() chunk_size = 20 # Sending data in larger chunks for efficiency start_time = time.time() try: self._connection.sendall(b"DATA:DATA EMEMory," + header) for i in range(0, len(data), chunk_size): self._connection.sendall(data[i:i + chunk_size]) print("--- %s seconds ---" % (time.time() - start_time)) except Exception as e: print(f"Error loading waveform: {e}")
已尝试但无效的方法:
- 调整数据块大小并在每个块发送后添加小延迟,试图避免设备缓冲区过载
- 为部分发送或错误情况添加重试机制
- 在发送头部数据后添加延迟,确保设备处理完头部再发送波形数据
内容的提问来源于stack exchange,提问作者stnrl
相关产品推荐
相关产品推荐

