跳转到主要内容

一个无I/O的Python实现,用于Highway Addressable Remote Transducer Protocol(高速公路可寻址远程传感器协议)。

项目描述

hart-protocol

PyPI Conda black ver log

这是一个无I/O的Python实现,用于Highway Adressable Remote Transducer Protocol

介绍

这个Python包包含用于与HART外围设备通信的编码和解码字节串的工具。HART已通过多种传输层实现,如Bell 202、RS485、以太网等。为了追求简单性和可重用性,此包不包含任何接口功能。使用类似于pySerial的传输。阅读sans I/O宣言以获取更多关于此设计模式的相关动机。

简要来说,HART是一种由多个设备制造商支持的开放式工业自动化协议。HART有“地址”的概念,这样许多外围设备可以共享相同的通信通道。HART对多个控制器的支持有限,存在通用的手持式控制器。HART外围设备响应编号命令,可以将其视为原始的远程过程调用。标准指定了应由任何外围设备支持的多个通用命令,还有所谓的“通用”命令,许多外围设备都实现了这些命令。强烈建议您检查您自己的外围设备文档——实现可能不一致。除了通用和通用命令外,您的外围设备可能还实现了许多特定于设备的命令。

本包旨在提供对所有通用和通用命令的完整和准确支持。此外,本包还提供打包和提取特定于设备命令的通用命令数据的工具。本包故意设计得简单且范围狭窄。除README之外,没有其他文档。如果您发现任何错误或缺失的功能,请向GitHub仓库提交问题或PR。

发送命令

以下函数返回字节数组,可以将其馈送到您的传输层。

通用命令

command function
0 read_unique_identifier(address)
1 read_primary_variable(address)
2 read_loop_current_and_percent(address)
3 read_dynamic_variables_and_loop_current(address)
6 write_polling_address(address, new_short_address)
11 read_unique_identifier_associated_with_tag(tag)
12 read_message(address)
13 read_tag_descriptor_date(address)
14 read_primary_variable_information(address)
15 read_output_information(address)
16 read_final_assembly_number(address)
17 write_message(address, message)
18 write_tag_descriptor_date(address, tag, descriptor, date)
19 write_final_assembly_number(address, number)

常用实践命令

command function
37 set_primary_variable_lower_range_value(address, value)
38 reset_configuration_changed_flag(address)
42 perform_master_reset(address)
48 read_additional_transmitter_status(address)
50 read_dynamic_variable_assignments(address)
59 write_number_of_response_preambles(address, number)
66 toggle_analog_output_mode(address)
67 trim_analog_output_zero(address)
68 trim_analog_output_span(address)
123 select_baud_rate(address, rate)

以下方式可以生成任意的附加命令字节数组。这是一个针对Brooks GF40质量流量计的特定于设备的命令,它接受一个IEEE-754浮点数以及一个唯一代码。

import struct
import hart_protocol
code = 0
value = 32.1
data = struct.pack(">Bf", code, value)
command = hart_protocol.pack_command(address=123, command_id=236, data=data)

解析响应

所有响应都解析为命名元组。每个单独的响应都将具有以下键。

通用响应

key value
address <int>
bytecount <int>
command <int>
command_name <str>
data <bytes>
full_response <bytes>
device_status <bytes>
response_code <bytes>

您可以根据外围设备的具体情况解析原始的data。某些标准响应的解析如下所示。

响应 0

key value
command_name "read_unique_identifier"
command 0
device_id <bytes>
hardware_revision_level <int>
manufacturer_device_type <bytes>
manufacturer_id <int>
number_response_preamble_charachters <int>
software_revision_level <int>
transmitter_specific_command_revision_level <int>
universal_command_revision_level <int>

响应 1

key value
command_name "read_primary_variable"
command 1
primary_variable <float>

响应 11

key value
command_name "read_unique_identifier"
command 11
device_id <bytes>
hardware_revision_level <int>
manufacturer_device_type <bytes>
manufacturer_id <int>
number_response_preamble_charachters <int>
software_revision_level <int>
transmitter_specific_command_revision_level <int>
universal_command_revision_level <int>

许多其他通用和常用响应也进行了解析..., 尝试一下吧!

集成示例

>>> import hart_protocol
>>> import serial
>>>
>>> port = serial.Serial("/dev/ttyUSB0", 19200, timeout=0.1)
>>> port.parity = "O"
>>> port.stopbits = 1
>>> tag = hart_protocol.tools.pack_ascii("06C22300517"[-8:])
>>> port.write(hart_protocol.universal.read_unique_identifier_associated_with_tag(tag))
>>>
>>> unpacker = hart_protocol.Unpacker(port)
>>> for msg in unpacker:
...     print(msg)
...
>>>

维护者

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

hart_protocol-2023.6.0.tar.gz (12.2 kB 查看哈希值)

上传于 源代码

构建分发

hart_protocol-2023.6.0-py3-none-any.whl (10.9 kB 查看哈希值)

上传于 Python 3

支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面