通过ADS协议实现与beckhoff控制器的以太网通讯

最近公司安排给我一个新活,通过ADS协议完成与beckhoff的通讯。相对于modbusTCP协议来说,ADS协议支持句柄访问,通过句柄访问到数据,这样上位机的编程就更为灵活了。

ADS在传输层上使用的是TCP协议,这样数据的传输就更为可靠了。同样在数据通讯时需要TCP的三次握手,这里要注意,传输层上绑定的端口号是48898,而不是beckhoff提供RealTimeSystem1中所说的801,注意那个801是在应用层上所使用的端口号。至于为什么是48898,不想说了,因为我也不知道。

在TCP建立好连接之后,我们就可以愉快的进行通讯啦,废话不多说,咱们直接看ADS报文吧,先抓一条正常ADS通讯的以太网报文,这是一条通过地址发出的读请求指令。

00 01 05 16 a7 69 74 d4 35 22 d4 14 08 00 45 00 00 5a 02 14 40 00 40 06 45 2c a9 fe 60 d1 a9 fe 3e 90 04 0c bf 02 ad 3d 7e 47 05 c8 c9 c5 50 18 ff ff 09 34 00 00 00 00 2c 00 00 00 05 16 a7 68 01 01 21 03 a9 fe a4 a3 01 01 76 80 02 00 04 00 0c 00 00 00 00 00 00 00 01 00 00 00 20 40 00 00 00 00 00 00 01 00 00 00

看着别晕哈,分析下

00 01 05 16 a7 69 74 d4 35 22 d4 14 08 00 -----------------------MAC层

45 00 00 5a 02 14 40 00 40 06 45 2c a9 fe 60 d1 a9 fe 3e 90 -----------------IP层

04 0c bf 02 ad 3d 7e 47 05 c8 c9 c5 50 18 ff ff 09 34 00 00 ----------------------TCP层

00 00 2c 00 00 00 05 16 a7 68 01 01 21 03 a9 fe a4 a3 01 01 76 80 02 00 04 00 0c 00 00 00 00 00 00 00 01 00 00 00 20 40 00 00 00 00 00 00 01 00 00 00--------------AMS层

别的不多说,只要AMS报文。

---------------------------------AMS报文解析-------------------------------------------------

00 00 2c 00 00 00 -------------------头信息

05 16 a7 68 01 01--------------------目的AMS地址 

21 03 ---------------------------目的端口

a9 fe a4 a3 01 01 -----------------源AMS地址

76 80 -------------------------源端口

02 00 -------------------------命令号CmdID

04 00 -------------------------状态标志StateFlag

0c 00 00 00 ----------------命令长度cbData

00 00 00 00 ----------------错误号

01 00 00 00 ----------------序号

20 40 00 00 ----------------组索引GroupIndex

00 00 00 00 ----------------偏移量OffsetIndex

01 00 00 00----------------读写长度Lenth

好了,一目了然,下面就解释一下各个部分的含义(此处是自己的理解,如有问题,请批评指正)

头信息:第三、四个字节表示从目的AMS地址开始的报文长度,其他啥意思我也不知道

目的AMS地址:beckhoff控制器的AMS地址

目的端口:所谓的801端口

源AMS地址:本机的AMS地址,这里建议本机首先安装twincat软件,然后手动设置一个AMS地址,之后通讯的源AMS地址都用这个地址就可以了

源端口号:我随便设置的一个值

命令号:读写命令号,02是读,03是写

状态标志:这个在下面再说。

命令长度:从组索引开始的报文长度

错误号:顾名思义

序号:貌似没啥用,赋值0x01就行吧

组索引:beckhoff提供的变量区的索引 M区对应0x4020

偏移量:顾名思义

读写长度:这里的单位是字节

这里我说说状态标志StateFlags,两个字节共16bit,其中最高字节表示是否为广播发送,高字节的其他位应该是保留,这里我不确定。低字节共8位,每一个bit代表一个含义,从最低位到最高位的顺序所表达的含义分别是:respone; no return; ADS command; system command; high priority command; timestamp added; udp command: init command。

我在调试的时候发现了一个问题,编写的程序在别的电脑上就不能正常运行,通过抓包发现,每当我建立一次TCP连接的时候,控制器会自动发送报文将连接断开,导致后续的AMS报文无法被发送,目前正在解决这个问题。

以上都是本人在调试ADS协议时的一些心得,全是个人理解,有不准确的地方希望大家可以批评指正。

  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值