MAC-EX 连接与主机管理¶
MacExClient 是同步客户端,端口默认 7727。建议以 with 管理连接生命周期,避免在多个线程上同时复用同一个请求连接。
init¶
MacExClient.__init__(host: str | None=None, port: int=DEFAULT_EX_PORT, timeout: float=15.0, *, hosts: list[str] | None=None) -> None
| 参数 | 类型 | 默认值 | 含义 |
|---|---|---|---|
host |
str \| None |
None |
优先主机的裸地址;MAC 的 hosts 非 None 时优先使用 hosts,EX/MAC-EX 将 host 置于候选首位。 |
port |
int |
DEFAULT_EX_PORT |
TCP 端口;MAC 默认 7709,EX/MAC-EX 默认 7727。 |
timeout |
float |
15.0 |
读写或探活超时,单位秒。 |
hosts |
list[str] \| None |
None |
候选主机列表;省略时使用各客户端自己的内置/配置主机池。 |
构造/返回客户端实例;实际业务仍须确认目标主机支持所需命令。from_best_host 选主机,不把所有协议能力探测一遍。
from_best_host¶
MacExClient.from_best_host(hosts: list[str] | None=None, port: int=DEFAULT_EX_PORT, timeout: float=15.0, ping_timeout: float=5.0) -> 'MacExClient'
| 参数 | 类型 | 默认值 | 含义 |
|---|---|---|---|
hosts |
list[str] \| None |
None |
候选主机列表;省略时使用各客户端自己的内置/配置主机池。 |
port |
int |
DEFAULT_EX_PORT |
TCP 端口;MAC 默认 7709,EX/MAC-EX 默认 7727。 |
timeout |
float |
15.0 |
读写或探活超时,单位秒。 |
ping_timeout |
float |
5.0 |
选择主机时探活超时,单位秒。 |
构造/返回客户端实例;实际业务仍须确认目标主机支持所需命令。from_best_host 选主机,不把所有协议能力探测一遍。
ping_all¶
MacExClient.ping_all(hosts: list[str] | None=None, port: int=DEFAULT_EX_PORT, timeout: float=5.0) -> list[tuple[str, float]]
| 参数 | 类型 | 默认值 | 含义 |
|---|---|---|---|
hosts |
list[str] \| None |
None |
候选主机列表;省略时使用各客户端自己的内置/配置主机池。 |
port |
int |
DEFAULT_EX_PORT |
TCP 端口;MAC 默认 7709,EX/MAC-EX 默认 7727。 |
timeout |
float |
5.0 |
读写或探活超时,单位秒。 |
返回按延迟升序的 (host, seconds) 列表,延迟单位秒;不要把探活成功等同于所有市场/命令可用。
connect¶
无业务参数。
返回 None。connect 建立连接,close 释放连接;disconnect 是 close 的语义别名。ensure_connected 的实际检查范围见下节。
close¶
无业务参数。
返回 None。connect 建立连接,close 释放连接;disconnect 是 close 的语义别名。ensure_connected 的实际检查范围见下节。
disconnect¶
无业务参数。
返回 None。connect 建立连接,close 释放连接;disconnect 是 close 的语义别名。ensure_connected 的实际检查范围见下节。
ensure_connected¶
无业务参数。
返回 None。connect 建立连接,close 释放连接;disconnect 是 close 的语义别名。ensure_connected 的实际检查范围见下节。
主机、重试与属性¶
默认 MAC_EX_HOSTS,不使用普通 EX 配置池;每次连接后执行 0x2454 登录。ensure_connected 只在 _connected 为 False 时建连,并非每次发心跳验证。业务请求 TransportError 时重连、重新登录并重试一次;当前主机仍排在候选首位,不能保证失败后一定切换到别台。当前没有公开 host/healthy_hosts 属性。
使用示例¶
from eltdx.ex import MacExClient
with MacExClient() as client:
result = client.instruments(33, count=5)
print(result)
错误处理¶
传输失败通过 TransportError 及其子类传播,协议解码失败可抛 ProtocolError;参数检查也可能抛 ValueError、TypeError 或 struct.error,当前并未统一封装所有参数错误。空列表/None/0 也需根据单页规则解释,不把缺数据当作请求成功且覆盖完整。