PLC method call#

PLC method define.

{attribute 'TcRpcEnable'}
METHOD echo : STRING(130)
VAR_INPUT
    user: STRING(20);
    message: STRING(100);
END_VAR

echo := CONCAT(CONCAT(user, ': '), message);

Python code to call the method.

method_handle = client.get_handle_by_name("MAIN.test#echo")

request_payload = encode_ams_payload(
    data={"user": "Alice", "message": "Hello World!"},
    plc_t=STRUCT(fields=[("user", STRING(20)), ("message", STRING(100))]),
)

response_type = STRING(130)

request = ADSReadWriteRequest(
    index_group=IndexGroup.SYMVAL_BYHANDLE,
    index_offset=method_handle,
    read_length=response_type.bytes_length,
    write_data=request_payload,
)

response = client._send_ams_packet(command=ADSCommand.ADSSRVID_READWRITE, payload=request.to_bytes())
assert isinstance(response, ADSReadWriteResponse)

response_message = decode_ams_payload(raw_data=response.data, plc_t=response_type)
print(response_message)

client.release_handle(method_handle)
client.close()