并发无关串行API

serialio的Python项目详细描述


串行

Pypi version

一个python并发无关的串行线库。在

在处理通过串行线路和 简单的REQ-REP通信协议(示例: SCPI)。在

除了本地串行线,serialio还支持RFC2217协议上的串行线, 原始TCP套接字和tango。在

就RFC2217而言,它应兼容:

  • 具有telnet(RFC2217)和原始配置的ser2net网桥
  • G系列[ser2tcp]桥(RFC2217)

就探戈而言,它应该与探戈类兼容:

使用asyncio编写的基本实现,支持不同的并发模型:

  • 异步
  • 经典阻塞API(TODO)
  • 基于未来的API(TODO)

下面是对什么是forseen和实现什么的总结

ConcurrencyLocalRFC2217Raw TCPTango
asyncioYYYY
classic syncNNNN
conc. futuresNNNN

安装

在您最喜欢的python环境中:

pip install serialio

使用

异步

^{pr2}$

local serial line

importserialio.aio.posixsl=serialio.aio.posix.Serial("/dev/ttyS0")# or the equivalentsl=serialio.serial_for_url("serial:///dev/ttyS0")

raw TCP套接字

importserialio.aio.tcpsl=serialio.aio.tcp.Serial("lab1.acme.org:5000")# or the equivalentsl=serialio.serial_for_url("serial-tcp://lab1.acme.org:5000")

RFC2217(telnet)

importserialio.aio.rfc2217sl=serialio.aio.rfc2217.Serial("lab1.acme.org:5000")# or the equivalentsl=serialio.serial_for_url("rfc2217://lab1.acme.org:5000")

Tango

(需要pip install serialio[tango]安装)

importserialio.aio.tangosl=serialio.aio.tango.Serial("lab/01/serial-01")# or the equivalentsl=serialio.serial_for_url("tango://lab/01/serial-01")

经典(TODO)

fromserialio.aio.tcpimportSerialsl=Serial("lab1.acme.org",5000)reply=sl.write_readline(b"*IDN?\n")print(reply)

在同期期货(待办事项)

fromserialio.sio.tcpimportSerialsl=Serial("lab1.acme.org",5000,resolve_futures=False)reply=sl.write_readline(b"*IDN?\n").result()print(reply)

serial的API差异

  • 基于协程的API
  • open()在使用串行线之前,必须显式地调用协同例程
  • 通过函数而不是属性(即: await ser_line.set_XXX(value)而不是{} (例如:await ser_line.set_baudrate()
  • 自定义eol字符(serial固定为b"\n"
  • 包含的REQ/REP原子函数(write_read()系列)

特点

串行串行对象的主要目标是促进通信 把仪器连接到串行线路上。在

最常见的情况包括需要REQ/REP的仪器 语义与ASCII协议,如SCPI。在这些情况下,大多数命令 在主机和 仪器。在

REQ-REP语义

很多仪器都有请求-应答协议。连载 提供帮助完整的write_read族方法,简化通信 用这些仪器。在

自定义下线

在基于行的协议中,有时人们会认为\n不是一个好的下线字符。 可以使用不同的下线字符自定义serialio。 例如,XIA-PFCU总是 答复为;\r\n,因此我们可以使用以下代码段对其进行配置:

sl=serialio.serial_for_url("serial:///dev/ttyS0",eol=b";\r\n")awaitsl.open()

初始EOL字符可以在任何readline方法中被覆盖。 示例:

awaitsl.write_readline(b"*IDN?\n",eol=b"\r")

TODO:写这一章

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在数据库中存储密码的java加密方法   java正则表达式否定整个正则表达式   java为什么要得到这个Hashmap输出?   看不到玻璃鱼爪哇SE 6   类对象包装器中的Java基本数据字段   java从文本文件中读取整数并存储到单独的变量中?(扫描仪)   优化大型Java数据阵列的处理和管理   如何使用Java XML包装类创建对象   java为ExecutorService invokeAll()创建包装器   java如何在Android Studio 1.0.0中设置Facebook SDK?获取SDK位置未找到错误   java在尝试从线程启动动画时调用了FromErrorThreadException   java根据哈希确认文件内容   通过java在neo4j中获取索引值相同的所有节点?   java为什么我的Validare邮政编码(布尔)程序返回false?   java会话自动从servlet/jsp生成,尽管存在以下条件:<%@page session=“false”%>   创建新LANsocket时拒绝java连接   java如何多线程更新由sql代码更新的数据库?   安卓 Java使用类作为集合来添加项   安卓为什么我的清单文件不声明java包?