当前位置: 首页 > news >正文

python实现TCP Socket控制测试仪器

python实现TCP Socket控制测试仪器

  • 说明
  • 前提条件
    • 代码

说明

本例是用python实现TCP Socket,最终目的是为了控制LCR电容测试仪器。

前提条件

  • 测试仪器 配备了以太网接口,支持TCP/IP协议栈
    • 用户可以通过IP地址和端口号连接到仪器,建立TCP通信
  • Python及socket包

代码

# 导入依赖包
import socket# 获取socket套接字对象:供后续通信
def get_socket(ip_str, port):# 设置默认超时时间:避免网络通信卡死。若5秒内未能完成操作(如连接、读取数据),会抛出异常socket.setdefaulttimeout(5)# 创建一个基于 IPv4 的 TCP 套接字,支持点对点可靠连接tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# ip地址 和 端口 进行连接server_addr = (ip_str, port)    # 具体地址和端口得看仪器tcp_socket.connect(server_addr)# tcp_socket.recv_into()return tcp_socket# 发送仪器指令:socket套接字对象, 仪器命令字符串
def socket_send_cmd(tcp_socket, cmd):# 构建待发送命令字符串,命令以"\r\n"结尾:LCR仪器通常以标准通信协议(如 SCPI)解析命令,要求命令以 \r\n(回车+换行)结束。send_str = cmd + "\r\n"# 使用sendall将数据完整发送至远端设备,即便数据量较大,也能确保发送完成tcp_socket.sendall(send_str.encode('utf-8'))# 发送空字节以确保发送结束tcp_socket.send(b"")# 获取仪器返回结果:socket套接字对象
def socket_read_result(tcp_socket):while True:  # 无限循环,直到读取到完整结果try:global read_buf_g   # 声明全局变量,用于存储读取的缓冲数据result = tcp_socket.recv(256).decode('utf-8')   # 从套接字中读取最多256字节数据if "\n" in result:  # 判断是否接收到完整行数据符号\n(行以“\n”换行符结束)# 缓冲“\n”后的信息留给下一次拼接完整信息tmp = result[result.find("\n")+1:]  # +1:是为了去掉\n# 拼接完整返回信息:# 将前面缓冲的数据 跟 这次读取数据‘\n’ 前面的数据 拼接result = read_buf_g + result[:result.find("\n")]# 把上面缓冲的信息放在全局变量中,方便下次获取read_buf_g = tmp# 退出循环,返回结果break# 如果本次接收信息还没有完整信息标志\n的话,则把信息加入缓存当中read_buf_g += resultexcept Exception:print("34 read timeout")    # 若发生异常(如超时),打印提示信息并继续尝试读取continuereturn result# 本例LCR电容测试仪器的ip设为 169.254.1.22,端口为5025
ser_dev = get_socket("169.254.1.22",5025)
# 发生测量指令(SCPI指令)
socket_send_cmd(ser_dev, ":FETC?")
# 获取结果
rd_data = socket_read_result(ser_dev)
# 打印结果
print(rd_data)
http://www.lryc.cn/news/493312.html

相关文章:

  • 51c自动驾驶~合集38
  • 电脑显示器拔插DVI线后副屏不显示
  • Bash脚本常用命令
  • 《Unity Shader 入门精要》高级纹理
  • vue3实现自定义导航菜单
  • [2024年3月10日]第15届蓝桥杯青少组stema选拔赛C++中高级(第二子卷、编程题(2))
  • EDA软件研发的DevOps平台
  • 从单机缓存到分布式缓存那些事
  • [Ubuntu20] Gym入门,Mujoco
  • Linux(ubuntu)系统的一些基本操作和命令(持续更新)
  • 【NLP高频面题 - 分布式训练】ZeRO1、ZeRO2、ZeRO3分别做了哪些优化?
  • android 安全sdk相关
  • NVR监测软件EasyNVR多个NVR同时管理:录播主机的5条常见问题与解决办法
  • Z2400027基于Java+SpringBoot+Mysql+thymeleaf引擎的图书馆管理系统的设计与实现 代码 论文
  • 完美解决Docker pull时报错:https://registry-1.docker.io/v2/
  • A051-基于Spring Boot的网络海鲜市场系统的设计与实现
  • 【组件】前端ElementUi 下拉Tree树形组件 带模糊搜索自动展开高亮功能 树结构 封装为组件使用
  • Blender 运行python脚本
  • 递归:求fib数列的第n项,前几项是1,1,2,3,5,每一项都等于前面两项的和:JAVA
  • 三分钟快速掌握——Linux【vim】的使用及操作方法
  • Wrapper包装类
  • MySQL高级(六):全局锁、表锁和行锁
  • 【CLIP】3: semantic-text2image-search允许局域网访问
  • FPGA实现GTP光口视频转USB3.0传输,基于FT601+Aurora 8b/10b编解码架构,提供3套工程源码和技术支持
  • docker搭建nginx
  • Java 17的新特性及其对现代Java开发的影响
  • 【Flink】快速理解 FlinkCDC 2.0 原理
  • 使用R的数据包快速获取、调用各种地理数据
  • scrapy豆瓣爬虫增强-批量随机请求头
  • 基于华为昇腾910B,实战InternLM个人小助手认知微调