自定义引擎支持包.综合服务
子系统 恩吉。综合服务 之间提供交互 AnyMath 和外部硬件通过客户端程序和支持包。
您可以扩展*Engee子系统的功能。集成*通过开发我们自己的自定义支持包。 支持包是一个Python模块,它在客户端程序中运行,并在 AnyMath .
使*Engee子系统。集成*可以使用自定义包, AnyMath 用Julia语言自动为它们生成代码。 这允许您直接从 命令行 AnyMath
或者从街区。
技术是这一机制的核心。 RPC(远程过程调用)。 您正在调用Julia中的一个函数,该函数通过网络将参数传递给客户端计算机。 在那里,您的支持包使用这些参数执行相应的Python函数,并将结果返回到 AnyMath .
执行架构
了解代码执行的分布方式非常重要:
Python代码*在客户端程序过程中直接在用户计算机上执行; Julia*代码在子系统中执行 AnyMath 并协调互动。
例如,当调用:
using Main.EngeeDeviceManager.Devices.EXTDEVICE
device = EXTDEVICE.Extdevice()
device.function()
Julia-代码在 AnyMath ,而Python是一个函数 功能() -在客户端计算机上,其结果返回到 AnyMath .
开发自定义支持包
自定义支持包可以实现为:
*设备(设备)*是一个任意用户定义的类,它不是*设计来直接执行模型仿真的 *AnyMath 并且在运行时不使用其内部数据进行计算。 它为块和脚本提供了自定义方法。 有关开发自定义设备支持包的详细信息,请参阅 开发自定义设备支持包.
*目标(目标)*是一个自定义类,它*与模型交互 AnyMath ,从其接收数据进行处理并在另一个平台(微控制器,独立计算机等)上执行。). 有关目标开发的详细信息,请参阅 开发自定义嵌入式系统支持包.
可用的Python包
在开发自定义支持包时,您可以使用所有标准Python包以及以下第三方包:
可用Python包列表
| 包裹 | 资料描述 |
|---|---|
aiohttp |
异步HTTP客户端/服务器框架(asyncio) |
自动闪光 |
删除未使用的导入和变量 |
强盗 |
静态Python代码安全分析器 |
[医]贝特型 |
运行时快速混合类型检查 |
黑色 |
一个不妥协的代码格式化程序 |
证明;证明 |
Mozilla的CA捆绑包 |
cffi |
用于从Python调用C代码的外部函数接口 |
doc格式,doc格式 |
根据PEP257格式化文档字符串 |
高射炮8 |
模块化源代码检查器:pep8,pyflakes和其他 |
gpib-ctypes |
PYTHON的GPIB接口,使用ctypes实现 |
隐藏 |
Hidapi的Ctypes绑定 |
httpx |
下一代HTTP客户端 |
intelhex |
用于操作英特尔十六进制文件的Python库 |
伊斯特 |
用于排序Python导入的实用程序/库 |
jinja2 |
一个非常快速和富有表现力的模板引擎 |
jupyter-客户端 |
Jupyter协议实现和客户端库 |
jupyter-核心 |
Jupyter基本包 |
jwcrypto的 |
JOSE Web标准的实施 |
mdurl |
标记URL实用程序 |
味精背包 |
MessagePack序列化器 |
多区 |
多领域的实施 |
n.麻木,麻木 |
Python中计算数组的基本包 |
订购-套装 |
记住其顺序的OrderedSet |
n.贴片,贴片 |
用于更改动态链接器和RPATH ELF可执行文件的实用程序 |
路径规格 |
用于匹配gitignore样式中的文件路径的实用程序 |
平台,平台 |
确定合适的平台特定目录 |
[医]疯狂 |
使用Python类型提示进行数据验证 |
大西洋-核心 |
Pydantic验证和序列化的主要功能 |
pydantic-设置 |
使用Pydantic管理设置 |
[医]皮杜诺克利 |
Arduino-cli周围的包装器 |
[医]火花香 |
被动Python程序检查器 |
[医]皮莫德总线 |
Python中的全功能Modbus协议栈 |
[医]皮塞里亚 |
Python串口扩展 |
[医]皮乌斯布 |
来自Python的USB访问模块 |
[医]皮维萨 |
Gpib、RS232、TCPIP和USB工具的PYTHON VISA绑定 |
皮维萨-py |
VISA库的纯Python实现 |
[医]皮亚姆 |
Python的YAML解析器和发射器 |
[医]pyzmq |
0mq的Python绑定 |
n.redis |
Python客户端用于Redis数据库和键值存储 |
请求 |
Python中人的HTTP |
设置工具 |
轻松下载、构建、安装、更新和删除Python包。 |
汤姆尔 |
Python库为汤姆的明显,最小的语言 |
鹿untokenize |
将令牌转换为源代码(同时保留空格) |
urllib3 |
具有线程安全连接池、文件发送和其他功能的HTTP库 |
|
对于自定义RPC类,必须继承自 数据结构必须继承自 *所有方法必须包含参数和返回值的完整类型注释。*例如:
如果没有注释,系统将无法正确生成Julia代码并在Python和Julia之间转换数据类型。 用于从块调用的方法不应以 嵌入式系统支持包(目标)应位于 设备支持包必须位于 |
上传自定义包到Engee。综合服务
在客户端程序中 恩吉。综合服务 按照以下步骤操作:
-
打开硬件状态窗口。
-
选择选项卡 «扩展».

-
点击 «添加扩展».
-
选择包含要添加到客户端程序的自定义支持包的文件夹。

如果下载成功,客户端程序的诊断窗口中将显示一条消息。:
INFO: Расширение с именем extension было успешно загружено!
若要获取有关诊断窗口中找到的支持包类和方法的扩展信息,请在开发人员模式下运行客户端程序。:
engee-device-manager.exe -d
成功下载支持包后,诊断窗口中将显示其他信息。:

调试支持包
要调试支持包,请使用 主博客 -内置*Engee测井系统。综合服务*:
-
发射*Engee。开发人员模式下的集成*(
engee-设备管理器。exe-d)并在客户端程序的诊断窗口中查看日志。 -
通过
主博客从您的支持包的代码。例子::
logger.info("Connect {}:{}", host, port) logger.error("Read failed: {}", err)
集成日志记录系统的可用方法:
-
伐木工人。调试("消息")-调试信息; -
logger.info ("讯息")-资讯讯息; -
伐木工人。警告("讯息")-警告; -
伐木工人。错误("讯息")-错误。
消息将显示在客户端程序的诊断窗口中。 有关使用内置日志记录系统的示例,请参阅文章 开发自定义设备支持包。
在客户端程序界面中显示支持包状态
客户端程序显示 恩吉。综合服务#status【已安装硬件状态】:驱动是否加载,设备是否连接。 若要将有关支持包的信息添加到硬件状态窗口,请在device类中实现静态方法。 __get_机会_列表.
操作原理:
-
在启动时,客户端程序从包中导入所有模块。
设备和目标. -
为每个注册的类检查一个私有方法。
__get_机会_列表. -
如果找到该方法,则调用它并返回一个列表。
机会,机会. -
客户端程序每3秒轮询一次此列表,并在硬件状态窗口中显示信息。
字段 机会,机会:
-
钥匙-行的唯一标识符。 例子::"my_driver" -
[医]钥匙-界面中的标题。 例子::"MyDevice驱动程序:" -
值_键-状态文本。 例子::"加载"/"未加载" -
值_args-格式化值的参数。 例子::() -
颜色-指示颜色:"绿色","橙色","红色". 例子::"绿色" -
类别:-硬件状态窗口中的选项卡:-
"硬件"— «设备» -
"协议"— «协议» -
"软件"— «软件集成» (默认情况下) -
"嵌入式"— «嵌入式系统»
-
如果未指定字段,则类别由设备包的名称自动确定。
自定义设备支持包的示例:
from devices.base_device import BaseDevice
class MyDevice(BaseDevice):
@staticmethod
def __get_opportunity_list() -> list[BaseDevice.OpportunityStatus]:
status = BaseDevice.opportunity_status
driver_loaded = False
try:
import some_library # замените на вашу зависимость
driver_loaded = True
except ImportError:
pass
results = []
if driver_loaded:
results.append(status(
key="my_driver",
title_key="MyDevice driver:",
value_key="Loaded",
color="green",
category="hardware",
))
else:
results.append(status(
key="my_driver",
title_key="MyDevice driver:",
value_key="Not loaded",
color="orange",
category="hardware",
))
results.append(status(
key="my_device",
title_key="MyDevice status:",
value_key="Available",
color="green",
category="hardware",
))
return results
添加此方法后,支持包将出现在选项卡上 «设备» 在*Engee客户端程序中。整合*。
支持包的同步和使用 AnyMath
对于自定义支持包出现在 工程师。装置。 或 工程师。目标。,在命令行上运行 AnyMath :
using Main.EngeeDeviceManager
using Main.EngeeDeviceManager.UTILS_API
utils = UTILS_API.Utils()
UTILS_API.syncExtensions()
如果对方法签名进行了更改或添加了新方法,请调用 syncExtensions() 又来了。 同步后,支持包模块可用于 AnyMath .
每次运行客户端程序时,都会自动下载您的支持包。 如果不再需要,那么您可以将其从客户端程序中的启动中删除。:
