3个版本

0.9.5 2023年6月14日
0.9.4 2023年6月14日
0.9.2 2023年6月12日

#1995网络编程

MIT许可证

21KB
377 代码行

ADS代理

build-main

这是一个贝加斯ADS代理,可以解决具有相同IP地址的多个TCP连接问题。

使用方法

从GitHub发布页面下载二进制文件或使用cargo install ads-proxy安装,然后运行ads-proxy

ADS proxy utility

Usage: ads-proxy [OPTIONS] <PLC_ADDR>

Arguments:
  <PLC_ADDR>  PLC address, e.g. 172.18.0.10:48898

Options:
  -d, --debug
          Debug mode
  -b, --buffer-size <BUFFER_SIZE>
          Buffer size (maximum size of a AMS packet) [default: 65536]
  -q, --queue-size <QUEUE_SIZE>
          Queue size (cached packets per connection) [default: 128]
  -r, --route-ams-net-id <ROUTE_AMS_NET_ID>
          Optional ams net id route, e.g. 10.10.10.10.1.1
  -u, --username <USERNAME>
          Optional PLC username (to add route)
  -p, --password <PASSWORD>
          Optional PLC password (to add route)
      --route-host <ROUTE_HOST>
          Optional Proxy hostname (hostname or ip address, detected from PLC connection)
  -l, --listen-addr <LISTEN_ADDR>
          Proxy listen address [default: 127.0.0.1:48898]
  -h, --help
          Print help
  -V, --version
          Print version

在pyads中连接到ads-proxy。例如,在主机上的客户端1和2

  • PLC ams_net_id=192.168.0.10.1.1
  • 客户端1 ams_net_id=10.10.10.10.1.1
  • 客户端2 ams_net_id=10.10.10.10.1.2

可能需要在shell命令中添加路由条目-r或在PLC配置中,参见默认用户和密码

ads-proxy -r 10.10.10.10.1.1 192.168.0.10:48898
import pyads

# x=1 or 2, process instance should have a unique ams net id
pyads.set_local_address("10.10.10.10.1.x")  

plc1 = pyads.Connection(ams_net_id="192.168.0.10.1.1", ams_net_port=851, ip_address="127.0.0.1")
with plc1:
    ...

# app can create multiple ADS connections
# the packets will be sent in ONE tcp connection in a process instance
plc2 = pyads.Connection(ams_net_id="192.168.0.10.1.1", ams_net_port=851, ip_address="127.0.0.1")
with plc2:
    ...

工作原理

client 1        --|
10.10.10.10.1.1   |
                  | multi-connections            one connection
client 2        ---------------------> ads-proxy --------------> PLC
10.10.10.10.1.2   |                    a.b.c.d          route 10.10.10.10.1.1
                  |                                            a.b.c.d
client n        --|   
10.10.10.10.x.y

许可证

MIT

依赖项

~9–20MB
~246K SLoC