如何使用 PyADS 访问嵌套结构

问题描述 投票:0回答:2

我在 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() 中使用?

请帮忙!

谢谢

plc twincat structured-text twincat-ads
2个回答
0
投票

您可以从 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)
         )
     )

0
投票

据我检查代码,似乎不能有嵌套结构。该代码检查类型,如果它不是预定类型之一,则返回错误。 Se 函数 dict_from_bytes in

https://pyads.readthedocs.io/en/latest/_modules/pyads/ads.html

也许如果你将它定义为字节数组并在 python 中解析它。

© www.soinside.com 2019 - 2024. All rights reserved.