1. 环境准备搞懂树莓派和倍福ADS通信的基础如果你手头有一个树莓派又想让它和工业自动化领域的“大脑”——倍福Beckhoff的PLC控制器——说上话那你来对地方了。我这些年折腾过不少树莓派和工业设备通信的项目发现很多朋友卡在第一步环境没搭对。这就像你想用手机打电话结果发现SIM卡都没插或者插错了卡槽那肯定打不通。简单来说树莓派和倍福控制器之间的通信主要依赖一种叫做ADSAutomation Device Specification的协议。你可以把它想象成一种工业设备专用的“语言”。倍福控制器天生就会说这种语言而我们的树莓派需要安装一个“翻译官”才能听懂和回应。这个“翻译官”就是倍福官方提供的ADS库AdsLib以及配套的工具。在开始动手之前你得先搞清楚几件事这能帮你避开至少一半的坑。首先是网络环境。树莓派和倍福控制器必须在一个“可以互相找到”的网络里。最常见、也最推荐新手的方式就是让它们俩直接通过网线连接或者连接在同一个小型交换机上并设置到同一个网段。比如倍福控制器的默认IP常常是169.254.254.142那么你的树莓派最好也设置一个类似169.254.254.xxx的IP地址。这里有个关键点子网掩码必须一致通常都是255.255.255.0。我见过太多通信失败最后发现就是笔记本或者树莓派的子网掩码设成了255.255.0.0或者别的导致设备之间“看不见”对方。其次你需要准备一个已经安装好操作系统的树莓派。我强烈推荐使用官方的Raspberry Pi OS以前叫Raspbian特别是对于新手它的兼容性和社区支持是最好的。确保你的系统已经更新到最新并且可以通过终端SSH或者直接接显示器键盘进行操作。最后你需要在倍福控制器那边做一些准备主要是确认它的ADS服务已经开启并且记下它的AMS NetId和IP地址这两个信息是后续所有通信的“门牌号”。2. 在树莓派上编译和安装ADS库好了网络环境检查无误树莓派也准备就绪接下来我们就要给树莓派装上那个关键的“翻译官”——ADS库。这个过程有点像在Linux电脑上编译安装一个软件别怕跟着步骤走一步步来很稳。2.1 获取官方ADS库源代码首先我们需要把官方的ADS库代码“下载”到树莓派上。官方代码托管在GitHub上所以我们用git命令来克隆。打开树莓派的终端输入以下命令git clone https://github.com/Beckhoff/ADS.git这个命令会在你当前的目录下创建一个名为ADS的文件夹里面就是所有的源代码。如果提示git命令未找到你需要先安装它sudo apt install git。下载完成后进入这个目录cd ADS2.2 安装编译工具链ADS库的编译需要一些工具主要是meson构建系统和ninja构建工具。Raspberry Pi OS 默认可能没有安装它们。我们来一次性装好所有需要的依赖sudo apt update sudo apt install -y meson ninja-build g pkg-config这里g是C编译器pkg-config用来帮助查找库文件。执行这条命令后系统会自动下载并安装这些工具。安装完成后你可以用meson --version和ninja --version来验证是否安装成功。2.3 配置和编译ADS库现在进入最核心的编译环节。我们使用meson来配置编译环境并指定一个构建目录通常叫buildmeson setup build执行这个命令后meson会检查你的系统环境并生成编译所需的文件。你会看到终端输出一系列信息包括编译器版本、构建类型等。只要最后没有报错比如找不到某个依赖库就说明配置成功了。接下来使用ninja在build目录下进行实际编译ninja -C build-C build参数告诉ninja进入build目录工作。编译过程会持续一会儿屏幕上会滚动显示编译进度。当看到类似[26/26] Linking target AdsLibTest这样的输出并且最后没有错误信息时就表示编译成功了此时在build目录下已经生成了我们需要的库文件如libAdsLib.so和几个可执行工具其中最重要的就是adstool。2.4 验证安装编译完成后我们可以快速测试一下编译出的工具是否正常。进入build目录运行adstool看看cd build ./adstool --help如果屏幕上打印出了一长串帮助信息列出了addroute、delroute、listroutes等命令的用法那么恭喜你树莓派上的“翻译官”已经成功就位了。这一步的顺利完成为后续的通信配置打下了坚实的基础。我建议你在继续之前花点时间浏览一下adstool --help的输出熟悉一下后面会用到的几个命令参数这能让你更清楚自己在做什么。3. 核心配置添加ADS路由Route库装好了工具也有了但直接通信还不行。因为ADS协议不仅认IP地址更认一个叫做AMS NetId的唯一标识。为了让倍福控制器认识我们的树莓派我们需要在控制器里“登记”一下树莓派的信息这个过程就叫添加路由。这是整个配置中最关键、也最容易出错的一步。3.1 理解AMS NetId和路由你可以把整个ADS网络想象成一个公司。倍福控制器是公司的总部每个设备比如树莓派是分公司。IP地址就像是分公司的街道地址而AMS NetId则是公司在工商局注册的唯一社会信用代码。总部控制器要和分公司树莓派通信光知道街道地址不够必须在总部的通讯录里登记这个分公司的社会信用代码才行。这个“登记”操作就是添加路由。一个典型的AMS NetId长这样169.254.254.66.1.1。它通常由设备的IP地址169.254.254.66加上固定的后缀.1.1构成。而倍福控制器自己的NetId通常是169.254.254.142.1.1。在添加路由时我们需要告诉控制器“嘿有一个NetId为169.254.254.66.1.1、IP地址为169.254.254.66的新设备叫树莓派以后它的消息请接收一下。”3.2 在树莓派上执行添加路由命令添加路由的操作必须在能够与倍福控制器通信的设备上发起。很多时候大家会尝试从一台办公电脑比如一台Windows笔记本上去添加树莓派的路由但这经常会失败。为什么因为控制器需要验证发起请求的设备是否有权限而办公电脑可能并不在控制器的“信任列表”里。最可靠的方法就是直接在树莓派本身上向控制器添加关于它自己的路由。这样请求源树莓派的IP和要添加路由的目标IP是一致的控制器更容易接受。我们使用刚才编译好的adstool工具来完成这个操作。命令格式如下./adstool 控制器IP addroute --addr树莓派IP --netid树莓派NetId --password1 --routename自定义路由名你需要把尖括号里的内容替换成你自己的实际信息。举个例子假设倍福控制器IP169.254.254.142树莓派IP169.254.254.66树莓派NetId169.254.254.66.1.1你想给这个路由起个名字叫Raspberry_Pi那么完整的命令就是./adstool 169.254.254.142 addroute --addr169.254.254.66 --netid169.254.254.66.1.1 --password1 --routenameRaspberry_Pi这里有几个参数需要特别注意--password1这是倍福ADS的默认路由添加密码。在实际工业环境中这个密码可能被修改过如果默认的1不行你需要向设备管理员询问正确的密码。--routename这个名字可以任意取只是为了在控制器路由列表里好识别建议用有意义的英文。执行这条命令后如果成功通常不会有太多输出或者只提示“Route added successfully”。如果失败会明确报错比如“Connection refused”网络不通、“Password incorrect”密码错误等。3.3 验证路由是否添加成功添加命令执行后怎么知道真的成功了呢有两个方法。第一可以再次使用adstool列出控制器上的所有路由./adstool 169.254.254.142 listroutes如果输出列表中能看到你刚刚添加的Raspberry_Pi并且其状态是活跃的那就没问题。第二个更直接的方法就是进行实际的通信测试这也是我们下一步要做的。我个人的经验是90%的ADS通信问题都出在路由配置上要么是NetId格式不对要么是IP地址不在同一网段要么就是密码错误。所以请务必仔细核对命令中的每一个参数。4. 通信测试与故障排除路由添加成功后就到了最激动人心的环节实际通信测试。这一步我们会真正让树莓派和倍福控制器“握手”并验证数据能否正确交换。同时我也会把调试过程中最常见的几个“坑”和解决方法分享给你这些都是我实测中踩过的。4.1 使用link_test进行基础连通性测试在官方ADS库的示例代码中有一个非常实用的程序叫link_test。它编译后位于ADS/example目录下的build文件夹里如果你按照示例的meson流程编译了示例。这个程序会尝试与指定的控制器建立ADS连接并执行一些简单的读写操作是检验通信链路是否畅通的“试金石”。运行测试前确保你还在树莓派上并且位于link_test程序所在的目录。运行命令通常很简单./link_test一个正常工作的link_test程序其输出会包含以下关键信息Default ADS NetID和Default ADS IPV4这显示的是程序自动检测到的、或者代码中硬编码的本地设备即树莓派的NetId和IP。这里有个重要细节有时你会发现这里显示的IP地址并不是你手动为树莓派设置的静态IP比如169.254.254.66而是一个别的地址比如169.254.254.88。这其实很正常也解释了为什么有时从其他电脑添加路由会失败。这个地址是程序从树莓派的网络接口中自动选择的它取决于系统当前活跃的网络连接。这告诉我们ADS通信中控制器最终认的是实际发起连接的那个网络接口的IP而不是你主观上“希望”的那个IP。所以确保你用来运行adstool和link_test的网络接口比如有线网卡eth0的IP设置正确至关重要。Target ADS NetID和Target ADS IPV4这是你要连接的目标控制器的信息。如果连接成功你会看到后续的测试输出例如反复打印Motor enabled!或Drive motor accelerate:0这样的模拟数据。这表示读写操作都成功了。如果运行后没有任何错误程序持续输出测试数据那么恭喜你树莓派与倍福控制器的ADS通信已经完全配置成功了4.2 常见错误代码1861分析与解决在实际操作中一次成功固然好但遇到问题才是常态。最常见的错误就是ADS错误1861。当你在link_test或自己的程序中看到这个错误通常意味着“控制器不认识你或者你找不到控制器。”这个错误可以细分为两个方向的问题排查思路如下方向一网络层不通“找不到控制器”这表现为link_test程序根本无法启动或者在尝试连接时立即超时失败。你需要检查物理连接网线是否插好树莓派和控制器之间的交换机是否工作正常IP设置双方IP是否在同一网段如169.254.254.x子网掩码是否完全相同必须都是255.255.255.0我遇到过好几次笔记本虚拟机桥接网络后子网掩码变了导致怎么都连不上。基础网络连通性在树莓派上ping一下控制器的IP例如ping 169.254.254.142。如果能ping通说明网络层是好的如果ping不通那就回到前两步检查网络配置和硬件。方向二ADS路由层不通“控制器不认识你”这表现为能ping通但link_test报1861错误。这说明网络通了但ADS服务拒绝了连接。你需要检查路由是否成功添加用./adstool 控制器IP listroutes命令确认你的树莓派是否在路由列表中且名称、NetId、IP是否正确。NetId和IP是否匹配确认你添加路由时使用的--netid参数其前半部分IP是否与--addr参数以及树莓派当前实际使用的IP一致。不一致是导致失败的常见原因。密码是否正确确认添加路由时使用的--password参数是否正确。在开发或测试环境默认是1但在已经运行的生产环境管理员可能已修改密码。在正确设备上添加路由正如前面强调的尽量在树莓派本身上执行adstool addroute命令。从第三方电脑添加可能会因为源地址不同而导致控制器侧验证不通过。4.3 进阶调试工具与技巧除了link_testadstool本身还有其他有用的调试命令。比如./adstool 控制器IP info可以获取控制器的状态信息。在编写自己的应用程序时务必充分利用ADS库提供的错误代码和日志功能。在代码中检查每一个Ads函数调用的返回值而不是假设它总是成功。另外一个非常实用的技巧是在倍福控制器的TwinCAT环境中查看路由。如果你能访问到控制器的桌面打开TwinCAT System Manager在“Routes”选项卡里你可以图形化地看到所有已注册的路由设备。在这里你可以直接删除错误的路由或者验证树莓派的路由是否真的处于“Active”状态。图形化界面提供的信息往往比命令行更直观。最后保持耐心按照“物理层 - 网络层 - ADS路由层 - 应用层”的顺序逐层排查。大部分问题都能在前期细致的配置中得到解决。当你第一次看到link_test成功跑起来那些模拟的电机数据开始滚动输出时那种成就感会让你觉得所有的折腾都是值得的。这标志着你的树莓派已经正式获得了与工业控制核心对话的能力接下来你就可以基于ADS库开发更复杂的数据采集、状态监控甚至控制逻辑了。