异步IO实现ISO-TP (ISO 15765-2)
项目描述
此包实现了 ISO-TP,作为 asyncio 传输层,在 CAN 上进行,允许通过任何数量的连接同时接收和发送消息。
原始 CAN 通信使用 python-can,它为许多不同的 CAN 接口和操作系统提供兼容性。
如果已加载 SocketCan ISO-TP 模块 并且使用 Python 3.7+,则在可能的情况下将传输委托给内核以提高时间性能。使用 'socketcan' 接口。如果失败,将使用原始 CAN 作为后备。
来自 can-utils 的 isotpserver 也可以用于在 TCP/IP 上桥接 SocketCan ISO-TP 连接。使用 'isotpserver' 接口和 'host:port' 作为通道。
为什么是异步的?
异步编程简化了一些可能的用例
单个连接上的全双工接收和发送。
同时在多个连接上进行通信。
功能寻址,其中发送一个请求,然后所有节点响应,然后按到达顺序处理响应。
实现或模拟多个服务器。
无需处理所有线程,以及所需的锁定机制。
安装
从 PyPI 安装
$ pip install aioisotp==0.1.1
文档
可以使用 Sphinx 构建基本文档
$ python setup.py build_sphinx
快速入门
下面是一个使用基于回调的协议实现的 echo 服务器示例,以及作为顺序读取器和写入器流实现的客户端。
import asyncio
import aioisotp
class EchoServer(asyncio.Protocol):
def connection_made(self, transport):
self.transport = transport
def data_received(self, data):
# Echo back the same data
self.transport.write(data)
async def main():
network = aioisotp.ISOTPNetwork('vcan0',
interface='virtual',
receive_own_messages=True)
with network.open():
# A server that uses a protocol
transport, protocol = await network.create_connection(
EchoServer, 0x1CDADCF9, 0x1CDAF9DC)
# A client that uses streams
reader, writer = await network.open_connection(
0x1CDAF9DC, 0x1CDADCF9)
writer.write(b'Hello world!')
response = await reader.read(4095)
assert response == b'Hello world!'
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
UDS
本包旨在启用使用需要ISO-TP的其他协议,其中最常见的是UDS。可以使用第三方库(如udsoncan或pyvit)来编码和解码有效负载。
import aioisotp
import udsoncan
...
reader, writer = await network.open_connection(0x1CDAF9DC, 0x1CDADCF9)
# Construct and send request
request = udsoncan.Request(
udsoncan.services.ReadDataByIdentifier, data=b'\xF1\x90')
writer.write(request.get_payload())
# Wait for response and decode the payload
payload = await reader.read(4095)
response = udsoncan.Response.from_payload(payload)
print(response)
print(response.data)
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
aioisotp-0.1.1.tar.gz (9.7 kB 查看哈希值)
构建分发
aioisotp-0.1.1-py3-none-any.whl (14.3 kB 查看哈希值)
关闭
aioisotp-0.1.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 27bcffe39835e937e7be2f3374e613399d2c95631b324d292caf1f5a18f829bd |
|
MD5 | 4b3e34615e034d790906a0d6298c915a |
|
BLAKE2b-256 | bdcd09dda8536f05cd00e350e8ee217594e29fee57e495769fc4aa0fee13afba |
关闭
aioisotp-0.1.1-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f998284978a7a41a5b527fdcf1555fe7996fd98e80b48dbe95c005df1ddf1b4a |
|
MD5 | fb50f706373a2f038887551655bc59e3 |
|
BLAKE2b-256 | ea38946a69888f76627b4e311b1ee3d834306245dad3d52c8916822dab8e5296 |