Read / Write array variable#

int1dArrVar : ARRAY[0..4] OF INT;
from py_ads_client import ARRAY, INT, ADSClient, ADSSymbol

plc_ip = "192.168.88.20"
plc_ams_net_id = "192.168.88.20.1.1"
local_ams_net_id = "192.168.88.100.1.1"

client = ADSClient(local_ams_net_id=local_ams_net_id)
client.open(target_ams_net_id=plc_ams_net_id, target_ip=plc_ip)

symbol = ADSSymbol(name="GVL.int1dArrVar", plc_t=ARRAY(INT, 5))
client.write_symbol(symbol=symbol, value=[1, 2, 3, 4, 5])
sensors = client.read_symbol(symbol)
assert sensors == [1, 2, 3, 4, 5]

client.close()

Mutiple level array data types are supportted.

int2dArrVar : ARRAY[0..4] OF ARRAY[0..1] OF INT;
str2dArrVar : ARRAY[0..4] OF ARRAY[0..1] OF STRING(10);
from py_ads_client import ARRAY, INT, STRING, ADSClient, ADSSymbol

plc_ip = "192.168.88.20"
plc_ams_net_id = "192.168.88.20.1.1"
local_ams_net_id = "192.168.88.100.1.1"

client = ADSClient(local_ams_net_id=local_ams_net_id)
client.open(target_ams_net_id=plc_ams_net_id, target_ip=plc_ip)

int2dArraySymbol = ADSSymbol(name="GVL.int2dArrVar", plc_t=ARRAY(ARRAY(INT, 2), 5))
client.write_symbol(symbol=int2dArraySymbol, value=[[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]])
int2dArrValue = client.read_symbol(int2dArraySymbol)
assert int2dArrValue == [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]

string2dArraySymbol = ADSSymbol(name="GVL.str2dArrVar", plc_t=ARRAY(ARRAY(STRING(10), 2), 5))
client.write_symbol(symbol=string2dArraySymbol, value=[["a", "b"], ["c", "d"], ["e", "f"], ["g", "h"], ["i", "j"]])
str2dArrValue = client.read_symbol(string2dArraySymbol)
assert str2dArrValue == [["a", "b"], ["c", "d"], ["e", "f"], ["g", "h"], ["i", "j"]]

client.close()

Complex array data types are supportted, such as struct array, string array, etc.

{attribute 'pack_mode' := '1'}
TYPE SensorInfo:
STRUCT
    name: STRING(30);
    value: REAL;
    updateTime: DT;
END_STRUCT
END_TYPE

{attribute 'qualified_only'}
VAR_GLOBAL
    sensorInfoArrVar: ARRAY[0..2] OF SensorInfo;
END_VAR
from datetime import datetime, timezone

from py_ads_client import ARRAY, DATE_AND_TIME, REAL, STRING, STRUCT, ADSClient, ADSSymbol

plc_ip = "192.168.88.20"
plc_ams_net_id = "192.168.88.20.1.1"
local_ams_net_id = "192.168.88.100.1.1"

client = ADSClient(local_ams_net_id=local_ams_net_id)
client.open(target_ams_net_id=plc_ams_net_id, target_ip=plc_ip)

structArrValues = [
    {"name": "top", "value": 100.0, "updateTime": datetime(2020, 2, 7, 12, 25, 1, tzinfo=timezone.utc)},
    {"name": "middle", "value": 200.0, "updateTime": datetime(2020, 2, 7, 12, 35, 2, tzinfo=timezone.utc)},
    {"name": "bottom", "value": 300.0, "updateTime": datetime(2020, 2, 7, 12, 55, 3, tzinfo=timezone.utc)},
]

symbol = ADSSymbol(
    name="GVL.sensorInfoArrVar",
    plc_t=ARRAY(STRUCT(fields=[("name", STRING(30)), ("value", REAL), ("updateTime", DATE_AND_TIME)]), 3),
)
client.write_symbol(symbol=symbol, value=structArrValues)
values = client.read_symbol(symbol)
assert values == structArrValues

client.close()