我在 TwinCAT3 中定义了两个结构,如下所示:
TYPE ADSUWDisplay :
STRUCT
sYarn : STRING;
sNextYarn : STRING;
lLength : REAL;
iPosition : INT;
sYarnSpec : STRING;
iPackageCount : INT;
iPackageTotalCount : INT;
iCount : INT;
iTotalCount : INT;
sUpcomingYarn : STRING;
sUpcomingYarnSpec : STRING;
sUWMessage : STRING;
sThreadUp : STRING;
END_STRUCT
END_TYPE
TYPE ADSRemoteDisplay :
STRUCT
iUW : INT;
iCount : INT;
sState : STRING
iStateNo : INT;
sRobotMessage : STRING;
adsUWDisplay : ARRAY[0..5] OF ADSUWDisplay;
END_STRUCT
END_TYPE
如您所见,ADSUWDisplay 嵌套在 ADSRemoteDisplay 中。
如何使用 PyADS 访问 ADSUWDisplay?
更具体地说,如何声明我的结构定义以在 pyads.connection.read_struct_by_name() 中使用?
请帮忙!
谢谢
您可以从 pyads 文档中读出如下结构:
使用参数
定义结构,使用structure_def
定义数组的大小。array_size
>>> structure_def = (
("i", pyads.PLCTYPE_INT, 1),
("s", pyads.PLCTYPE_STRING, 1)
)
>>> symbol = plc.get_symbol("MyStructure", structure_def=structure_def, array_size=2)
>>> symbol.write([{"i": 1, " "s": "foo"}, {"i": 2, "s": "bar"}])
>>> symbol.read()
[{"i": 1, " "s": "foo"}, {"i": 2, "s": "bar"}]
不确定如何定义嵌套结构。我想你可以尝试在
structure_def
中添加嵌套元组,例如:
structure_def = (
("i", pyads.PLCTYPE_INT, 1),
(
("s1", pyads.PLCTYPE_STRING, 1),
("s2", pyads.PLCTYPE_STRING, 1)
)
)
据我检查代码,似乎不能有嵌套结构。该代码检查类型,如果它不是预定类型之一,则返回错误。 Se 函数 dict_from_bytes in
https://pyads.readthedocs.io/en/latest/_modules/pyads/ads.html
也许如果你将它定义为字节数组并在 python 中解析它。