Twincat ADS 报文分析(Sum Write)

一、报文分析工具

1,抓包工具

倍福官网下载:TF6010 | TwinCAT 3 ADS Monitor | Beckhoff Worldwide

或者网盘下载:链接:https://pan.baidu.com/s/188GY9zuIrDFMXiTqky4MWg 
提取码:a9k2

抓包工具安装在ADS通讯的机器上,比如我的环境:

在开发机中编写一个模块A、B通讯的程序,然后下载到工控机中,那么抓包工具需要安装在工控机上(而不是开发机上)。

2,浮点与16进制相互转换工具

链接:https://pan.baidu.com/s/1X4qol__ff50ShNJUh3KAYA 
提取码:cu8z

浮点类型数据在内存中按IEEE 754存储,人工将浮点数转换成16进制很麻烦,所以需要借助这个转换工具。

如果待分析的报文中,没有浮点类型的数据,就不需要下载该工具了。

二、抓包

1,设置过滤规则

过滤规则中有AMS netid和port,可以在电脑的右下角点Twincat图标查看:Router->Change AMS NetId。

2,设置缓冲区大小

3,点开始抓包

三、报文分析

1,目标

用AdsReadWriteReq函数写一个完整的BasicControl结构体,结构体中有个Postion(double类型),将该变量值设置为1300,通过报文分析写入是否正确。

执行的接口函数:

AdsReadWriteReq(m_Addr, MoveAxisCAInvokeID, ADSIGRP_SUMUP_WRITE, 1, 4, sizeof(TDataParAxis), &BasicControl[idx]);

函数原型:

virtual	int	AdsReadWriteReq( AmsAddr& rAddr, ULONG invokeId, ULONG indexGroup,
									ULONG indexOffset, ULONG cbReadLength, ULONG cbWriteLength, PVOID pData );

从原型中可以看出 indexGroup = ADSIGRP_SUMUP_WRITE,indexOffset = 1,后面查找报文时用到。

Twincat定义的indexGroup ,见C:\TwinCAT\3.1\sdk\Include\Ads.h,ADSIGRP_SUMUP_WRITE = 0xF081

2,Postion偏移量,

BasicControl结构体如下:

Postion在结构体中的偏移是:24+8*7 = 80个字节。

Sum Write报文的格式:

n * ULONG[3]定义如下:

内容

长度

描述

首地址

4 bytes

数据写入的位置,也表示需要执行的命令类型

偏移量

4 bytes

数据写入的位置,也表示需要执行的命令参数

长度

4 bytes

以字节为单位,表示需要被写入的字节长度

IG、IO、Len(indexGroup,indexOffset,Length):从IG IO定义的变量位置开始,写Len长度的数据。

所以Postion在报文data区中的偏移是:n * ULONG[3] + 80 = 12 + 80 = 92 = 0x5C

3,报文中Postion的值

在已抓取的报文中,设置规则只显示indexGroup=0xF081的报文:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值