ISO-TP的异步实现(ISO 15765-2)

aioisotp的Python项目详细描述


这个包作为asyncio传输层在can上实现ISO-TP, 允许同时接收和发送任意号码的消息 关系。

raw-can通信使用python-can,这为许多 不同的can接口和操作系统。

如果加载了socketcanISO-TP module并使用了python 3.7+,则传输是 如果可能,委派给内核以获得更好的计时性能。 使用“socketcan”接口。如果不成功,raw可以用作回退。

来自can-utils的isotpserver也可以用来桥接socketcan iso-tp 通过TCP/IP连接。 使用“isotpserver”接口和“host:port”作为通道。

为什么是异步的?

异步编程简化了一些可能的用例:

  • 在一个连接上进行全双工接收和传输。
  • 同时在多个连接上通信。
  • 功能寻址,其中一个请求被发送,所有节点都响应, 然后在响应到达时进行处理。
  • 实现或模拟多个服务器。

不需要使用它所需的所有锁定机制来处理线程。

安装

从pypi安装:

$ pip install aioisotp==0.1.1

文档

可以使用sphinx生成基本文档:

$ python setup.py build_sphinx

快速启动

下面是一个使用基于回调的 协议和作为顺序读写器流实现的客户端。

importasyncioimportaioisotpclassEchoServer(asyncio.Protocol):defconnection_made(self,transport):self.transport=transportdefdata_received(self,data):# Echo back the same dataself.transport.write(data)asyncdefmain():network=aioisotp.ISOTPNetwork('vcan0',interface='virtual',receive_own_messages=True)withnetwork.open():# A server that uses a protocoltransport,protocol=awaitnetwork.create_connection(EchoServer,0x1CDADCF9,0x1CDAF9DC)# A client that uses streamsreader,writer=awaitnetwork.open_connection(0x1CDAF9DC,0x1CDADCF9)writer.write(b'Hello world!')response=awaitreader.read(4095)assertresponse==b'Hello world!'loop=asyncio.get_event_loop()loop.run_until_complete(main())

UDS

此包旨在启用需要 ISO-TP标准。其中最常见的是uds。像udsoncan这样的第三方库 或者pyvit可用于对有效载荷进行编码和解码。

importaioisotpimportudsoncan...reader,writer=awaitnetwork.open_connection(0x1CDAF9DC,0x1CDADCF9)# Construct and send requestrequest=udsoncan.Request(udsoncan.services.ReadDataByIdentifier,data=b'\xF1\x90')writer.write(request.get_payload())# Wait for response and decode the payloadpayload=awaitreader.read(4095)response=udsoncan.Response.from_payload(payload)print(response)print(response.data)

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

推荐PyPI第三方库


热门话题
java PUT请求提供415不支持的媒体类型   JavaMockito:如何在不模拟所有参数的情况下轻松地存根一个方法   java如何将NameValuePair传递给安卓中的另一个活动?   servalet java中的tomcat错误   java Android手机无法连接到eclipse   nullpointerexception在Java中如何将null转换为false?   Java中的http代理身份验证   java如何确保最新版本的JAR与JNLP应用程序一起使用?   简单Java代码上的性能大内存占用   列出AWS EC2实例上运行的服务上的对象时,java 403访问被拒绝   java创建一个类,当创建一个新实例时,它会被添加到一个hasmap中   LookupService中的java getLocation方法返回null   java获取要在ListView中显示的ArrayList字符串编号/位置