TwinCAT ADS controller
Contents
Allows to communicate with Beckhoff TwinCAT ADS PLCs and other equipment.
As TwinCAT ADS does not allow to connect more than a single client from a single machine (IP), the service instances require TwinCAT ADS bridge to be deployed for each TwinCAT system.
Setup
Use the template EVA_DIR/share/svc-tpl/svc-tpl-controller-ads.yml:
# TwinCAT ADS controller gateway service
command: svc/eva-controller-ads
bus:
path: var/bus.ipc
config:
ads:
bridge_svc: eva.bridge.ads1
ams_netid: 192.168.1.100.1.1
#ams_port: 851
# Allow SUMUP write and write_read requests (default: true)
# Set false for ADS servers which unsupport this feature
#bulk_allow: true
# PLC ping interval, in seconds, default: timeout / 2
#ping_interval: 1
# panic on critical errors in X seconds after happened (0 - panic immediately)
panic_in: 0
# Allows the service to restart (send "stop" RPC call to) the mapped ADS
# bridge on panic. This can be required to fix ADS connection/AMS routes in
# certain cases
#restart_bridge_on_panic: false
# Uncomment to disable ADS status check for the target
#check_ready: false
# default retry attempts for all operations (0 - no retries, give up if the
# first attempt fails)
retries: 2
# an optional delay betwen writing symbols and verifying written value
#verify_delay: 0.1
# event queue size, pull events ARE DROPPED on overflow. consider ALWAYS
# having queue size > max possible symbols pulled
queue_size: 32768
# ttl cache for pull events (sec, skip non-modified)
pull_cache_sec: 3600
# PLC pull interval, in seconds
pull_interval: 1
# pull symbols and parse maps
#
#pull:
#pull an array
#- symbol: test_arrays.test_float_array
#map:
#- idx: 0 # payload index, starting from zero
# oid: sensor:tests/test0
#- idx: 4
#oid: sensor:tests/test1
#value_delta: 0.5 # report event only if the new value difference is >=
#transform:
#- func: multiply # multiply the value by N
#params: [ 1000 ]
#- func: divide # divide the value by N
#params: [ 1000 ]
#- func: round # round the value to N digits after comma
#params: [ 2 ]
#- func: calc_speed # use the value as calc-speed gauge (with N seconds delta)
#params: [ 1 ]
#- func: invert # invert the value between 0/1
# #params: []
# pull a symbol
#- symbol: test_arrays.test_float_array[5]
#map:
#- oid: sensor:tests/test2
# action queue size, per item, actions on overflow are not dropped but wait
# their attempt to enter the queue. The core marks an action as failed if it
# does not enter the queue for <action timeout> seconds
action_queue_size: 32
# verify written data for actions
actions_verify: true
# OID map for actions
#action_map:
#unit:tests/u1:
#symbol: test_arrays.test_float_array[0]
timeout:
# startup timeout should be slightly langer than default to allow the
# controller prepare connection pool and request pull/action handles
startup: 10
user: nobody
react_to_fail: true
Create the service using eva-shell:
eva svc create eva.controller.ads1 /opt/eva4/share/svc-tpl/svc-tpl-controller-ads.yml
or using the bus CLI client:
cd /opt/eva4
cat DEPLOY.yml | ./bin/yml2mp | \
./sbin/bus ./var/bus.ipc rpc call eva.core svc.deploy -
(see eva.core::svc.deploy for more info)
EAPI methods
See EAPI commons for the common information about the bus, types, errors and RPC calls.
action
Description |
Executes a mapped unit action |
Parameters |
See Unit actions |
Returns |
See Unit actions |
kill
Description |
Attempts to terinate/cancel all actions for a unit |
Parameters |
See Unit actions |
Returns |
See Unit actions |
terminate
Description |
Attempts to terminate/cancel a unit action |
Parameters |
See Unit actions |
Returns |
See Unit actions |
var.get
Description |
Get symbol from ADS |
Parameters |
required |
Returns |
Symbol value, single or list |
Name |
Type |
Description |
Required |
i |
String |
symbol name |
yes |
timeout |
f64 |
Max operation timeout |
no |
retries |
u8 |
Retry attempts |
no |
var.set
Description |
Set symbol on ADS |
Parameters |
required |
Returns |
nothing |
Name |
Type |
Description |
Required |
i |
String |
symbol name |
yes |
value |
Any |
value to set |
yes |
verify |
bool |
Read the symbol back and verify its value |
no |
timeout |
f64 |
Max operation timeout |
no |
retries |
u8 |
Retry attempts |
no |
var.set_bulk
Description |
Set symbols on ADS in bulk |
Parameters |
required |
Returns |
Operation status: failed-to-set symbols list or an empty dict |
Name |
Type |
Description |
Required |
i |
Vec<String> |
symbol names |
yes |
values |
Vec<Any> |
values to set |
yes |
verify |
bool |
Read the symbols back and verify their values |
no |
timeout |
f64 |
Max operation timeout |
no |
retries |
u8 |
Retry attempts |
no |
Return payload example:
{
"failed": [ "var1" ]
}