资讯动态

TwinCAT 3 AdsGitServer版本管理与协同踩坑指南

发布时间:2026/10/28 3:54:56 来源:尧图企业网站定制
简介《TwinCAT 3 AdsGitServer的使用.pdf》面向使用Beckhoff TwinCAT 3开展PLC开发的自动化工程师及协同开发团队聚焦3.1.4024版本起集成于开发环境的Git功能帮助读者理解如何将控制器作为Git Server在不依赖外部Git客户端的情况下完成PLC程序版本管理。文档围绕Multiuser启用、Git Server初始化、提交与拉取、版本差异比较、历史版本回退等操作展开并覆盖第二台PC从控制器装载不同版本PLC程序、上传源程序以及初始化失败、双版本提交冲突等排错场景兼顾基础配置与团队协作实践。资源包共1个PDF文件大小约1.77MB篇幅紧凑便于对照实验环境逐节查阅。已有373人学习下载可作为TwinCAT版本控制入门、协同开发流程梳理和现场问题排查的参考资料。1. 先别急着装 GitTwinCAT 3.1.4024.15 的 AdsGitServer 是个版本坑TwinCAT 3 AdsGitServer 这个名字很容易让人误以为要在开发机上另装一套 Git我第一次按外部 Git 的思路准备环境时就在版本上翻了车。它其实是 TwinCAT 3.1.4024 集成的 Mini Git Server控制器就是仓库端开发环境里直接提交、取版本、看差异。版本不对时服务列表里根本看不到 TwinCAT3 AdsGitServerMultiuser Explorer 也连不上仓库。这个场景在单机改 PLC 程序时感知不强一旦第二台 PC 要同步、要回退装错版本就会把项目拖进“代码到底哪版对”的黑匣子。适合正在用 TwinCAT 3.1.4024.15 做 PLC 协同开发、又不想额外维护一套 Git 服务的自动化工程师。2. 准备与安装TC31-FULL-Setup 与 XAR 端的服务检查这套环境最容易出问题的地方不是点“安装”而是版本、硬件和安装端三件事没有对齐。开发 PC 装的是 XAE控制器装的是 XAR两个安装包名字只差几个字母装反了或者只装一边后面 Multiuser Explorer 里的 ADS Route 能看见控制器但 Git 仓库就是起不来。我一般会先把控制器切到 Config 模式备份当前 PLC 项目再动安装包这样即使服务起不来也有后悔药。2.1 版本和硬件先对齐别拿第三方 PC 硬上输入资料里给的实测环境是控制器 Windows 7 Embedded、TwinCAT 3.1.4024.15开发 PC1 和 PC2 都是 Windows 10、TwinCAT 3.1 Build 4024.15。手册没有把硬件卡得很死但实测结论很直接控制器尽量用与 TwinCAT 配套的 IPC/EPC第三方 PC 上总会出现驱动、路由或服务方面的问题。开发端和控制器端最好保持 XAE 与 XAR 同版本Build 越高越好不要一个 4024.15、一个 4024.10 硬凑。角色操作系统TwinCAT 版本安装包说明控制器Windows 7 / 10XAR 3.1.4024.15 或以上TC31-XAR-Setup.3.1.4024.15.exe提供 AdsGitServer 仓库端开发 PC1Windows 10XAE 3.1.4024.15TC31-FULL-Setup.3.1.4024.15.exe编程、提交、比较开发 PC2Windows 10XAE 3.1.4024.15TC31-FULL-Setup.3.1.4024.15.exe协同测试、装载远程版本TwinCAT 3 AdsGitServer 和标准 Git 的差别也要提前认清它包含在 TC3.1.4024 安装包里不需要单独下载 Git 安装包控制器要求 XAR 4024.15、Windows 7/10开发环境要求 XAE 4024.15、Windows 7/10版本追踪支持PLC 代码对比能集成 TwinCAT Project Compare以 TC3 PLC 编程环境方式比较。标准 Git 做不到 PLC 代码的 XML 级比较这一点在选型时别抱错期待。提示控制器硬件和开发 PC 的版本表先抄下来后面加路由、查服务、看仓库路径都要用。版本不一致时先升到同一 Build再排查其它问题。2.2 安装包落地开发 PC 装 FULL控制器装 XAR安装动作本身不复杂关键是端别装错。开发 PC 上运行TC31-FULL-Setup.3.1.4024.15.exe控制器上运行TC31-XAR-Setup.3.1.4024.15.exe。FULL 包带开发环境XAR 包带运行端AdsGitServer 随对应安装包自动安装不需要再找单独的 Git Server 安装程序。安装完成后重启服务列表里应该能看到 TwinCAT 3 System Service 和 TwinCAT3 AdsGitServer。# 开发 PC 和控制器上都可执行确认两个服务处于 Running Get-Service | Where-Object { $_.Name -match TwinCAT 3 System Service|TwinCAT3 AdsGitServer } | Select-Object Name, Status, StartType这段命令只做一件事把名字里带 TwinCAT 系统服务和 AdsGitServer 的条目筛出来看Status是不是RunningStartType是不是自动。如果服务名匹配不到先用Get-Service *TwinCAT*看完整服务名再按实际名字启动。控制器上如果只有系统服务、没有 AdsGitServer优先回看 XAR 安装包版本是不是 3.1.4024.15 或以上而不是急着去改防火墙。安装完成后不要直接进 PLC 项目提交。先在控制器上确认服务状态再在开发 PC 上打开 TwinCAT XAE看工具菜单里能不能正常进入选项设置。服务没起来时后面的 Init local and Remote 会表现为无响应、报错或者仓库 URL 空白很容易被误判成项目属性问题。2.3 加路由和确认两个服务路由是 AdsGitServer 的通信入口。控制器和开发 PC 要在可互通网段开发 PC 的 TwinCAT 路由编辑器里添加控制器 IP 和 AMS NetId添加时再次确认控制器操作系统是 Windows 7 或 Windows 10、TwinCAT 版本是 3.1.4024.15 或以上。路由加好后Multiuser Explorer 的 ADS Route 下拉框里应该能选到目标控制器选不到时先回路由编辑器看状态不要直接去点 Init。服务存在但没运行时可以在管理员 PowerShell 里手动拉起# 服务存在但未运行时先启动再观察是否自动停止 Start-Service -Name TwinCAT3 AdsGitServer Start-Service -Name TwinCAT 3 System Service Get-Service -Name TwinCAT3 AdsGitServer, TwinCAT 3 System Service | Select-Object Name, Status, StartTypeStart-Service只是把当前服务拉起来Get-Service用来确认启动后没有立刻退出。如果启动后几秒又变成Stopped常见原因是安装包端不对、控制器系统版本不满足或者安装后没有重启。我一般会把StartType设成自动避免下次重启控制器后还要手动补一次。路由和服务都正常后再做一次小验证在开发 PC 上打开 TwinCAT XAE从视图菜单进入 Multiuser Explorer看 ADS Route 能不能列出控制器。能列出但仓库下拉框为空属于仓库名还没填完全列不出控制器才是路由或服务问题。这个顺序能少走很多弯路。3. TwinCAT 环境配置源码管理选 Git 与 Project Compare 插件安装只解决“服务在不在”环境配置才决定“版本比较能不能看”。TwinCAT 里有两个设置特别容易被跳过一是源代码管理插件要选 Git二是 TwinCAT Project Compare 要导出 Git 插件配置。少做一步History 里能看到版本号但双击红色 POU 时打不开分屏代码或者比较时打开的不是 Git Server 上存的源代码。3.1 工具选项里把源代码管理切到 Git从主菜单进入 Tools - Options找到 Source Code Control 设置界面把源代码管理使用的插件选为 Git。这个选项不是装饰项只有选 Git后续版本比较时才会打开 Git Server 上存的源代码并用集成的 TwinCAT 3.1 Project Compare Tool 界面显示和比较。选成 None 或其它插件History 界面可能仍然能列出提交记录但 Compare 的行为会不对。操作顺序可以按下面走打开 TwinCAT XAE进入 Tools - Options。找到 Source Code Control把插件切到 Git。点确定后关闭并重新打开 XAE让插件配置生效。新建或打开一个 PLC 项目确认 Multiuser Explorer 能正常打开。这一步的原理不复杂AdsGitServer 把控制器作为 Git Server开发 PC 通过 ADS 通道读写仓库TwinCAT 的版本比较工具需要知道“当前用哪个版本控制插件”才会去 Git 仓库取对应版本的文件。插件选错时History 里的版本号还在但比较工具拿不到正确的源文件表现就像是“历史版本丢了”。3.2 TwinCAT Project Compare 的用户工具配置Project Compare 的配置入口不在 XAE 主菜单里而是从编程 PC 的 TC3 图标点 Tool选择 TwinCAT Project Compare打开比较工具后再进主菜单 Tool - Configure User Tools。这里要做的是 Export Configuration选择 Git 插件启用默认的全局 git 配置。输入资料里把这个动作放在环境设置里实际装的时候很容易漏漏了之后最典型的症状是History 能看Compare 也能弹窗但红色 POU 双击没有分屏代码。操作顺序从 TC3 图标进入 Tool - TwinCAT Project Compare。在比较工具主菜单选择 Tool - Configure User Tools。点击 Export Configuration。选择 Git 插件启用默认的全局 git 配置。关闭比较工具再重新打开拿一个已有历史版本的项目试一次 Compare。这里没有需要手写配置文件的地方重点是“导出配置”这个动作要把 Git 插件带进去。导出后比较工具才知道去哪个 Git 上下文里取版本。配置完成后History 里选中一项或两项右键 Compare只选一项表示该项与当前版本比较选两项表示两项之间比较。差异分新增、删除和逻辑修改不同处红色标记双击红色 POU 能看到分屏代码。3.3 启用 Multiuser 前后的项目属性差异PLC 项目要进入 AdsGitServer 管理先在项目属性里启用 Multiuser。新建 TwinCAT 项目、添加 PLC 程序后打开 PLC 程序属性找到 Multiuser 相关开关并启用。现有 PLC 项目也可以做版本管理前提是知道控制器上的版本仓库名称然后从 Multiuser Explorer 的 Multiuser Repository 下拉菜单里选择已有仓库。这里有一个顺序要求在激活配置下载之前就进行 Git Server 初始化不要等程序已经下载运行了再回头补。启用前后差异可以对照下面这张表观察点未启用 Multiuser启用 Multiuser 并初始化后项目属性普通 PLC 项目带 Multiuser 标记关联 ADS Route 和仓库Login 行为直接下载运行每次 Login 可能要求填写 Update Message本地项目目录普通项目文件增加 Git 相关元数据含.git目录和配套文件控制器仓库无对应仓库默认仓库路径下生成以仓库名命名的文件夹History无版本记录按提交信息生成线性历史控制器上的默认版本仓库路径位于公共数据目录下末级文件夹是MultiuserRepository。不同安装环境里公共数据目录名可能不同实际排查时按安装后的目录定位不要照抄占位路径。仓库名就是初始化时在 Multiuser Repository 里填的字符串后面第二台 PC 同步时也要靠这个名称找仓库。注意现有项目如果已经知道控制器仓库名可以从下拉菜单直接选不知道仓库名时不要乱建同名仓库先到控制器公共数据目录下看MultiuserRepository里已有的文件夹名。4. 初始化与版本提交Multiuser Explorer 里的 Init 和 History初始化是这套环境的分水岭。Init 成功之前项目只是普通 PLC 项目Init 成功之后控制器上多一个版本仓库开发 PC 项目里多一套 Git 元数据之后每次 Login 时 TwinCAT 3.1/Boot 的内容变化都会引起仓库 Objects 文件夹更新。很多人第一次失败不是命令不会点而是本地或控制器上残留了上一次的 Git 设置Init 看着点了实际没有创建出干净仓库。4.1 Init local and Remote 到底创建了什么从主菜单 View - Other Windows - Multiuser Explorer 打开 Git 控制面板。先选 ADS Route再填 Multiuser Repository 名称点 Init local and Remote。正常情况下会弹出要求输入 Update Message 的窗体这是第一次向控制器上传程序填Init即可。初始化成功后界面上的 ADS Route 和 Multiuser Repository 会变成不可改动状态这是正常现象说明当前项目已经绑定到该控制器仓库。# 在控制器上查看默认版本仓库目录路径中的公共数据目录按实际安装替换 $repoRoot C:\ProgramData\厂商公共数据目录\MultiuserRepository Get-ChildItem -Force $repoRoot | Select-Object Name, Mode, LastWriteTime这段命令用来确认控制器仓库根目录是否存在、初始化时填的仓库名有没有生成对应文件夹。厂商公共数据目录是占位实际以安装后的公共数据目录为准Get-ChildItem -Force会连隐藏项一起列出。仓库根目录不必每次清空之前项目的仓库将来还可能使用要清理的是当前项目的绑定关系和控制器 Boot 残留。本地 PLC 项目路径下也会增加 Git 相关的 3 个文件和 1 个文件夹。这个变化可以用来判断 Init 是否真的落到了本地# 在 PLC 项目根目录执行确认本地是否生成 Git 元数据 Get-ChildItem -Force | Where-Object { $_.Name -match ^\.git } | Select-Object Name, Mode, LastWriteTime^\.git匹配的是以.git开头的条目通常能看到.git目录和配套文件。看不到时先不要反复点 Init回到 Multiuser Explorer 看 Status 里 Local 和 Remote 的状态。Status 和 Conflict 界面里的 Local 指开发 PC 上的项目文件夹Remote 指控制器上的版本仓库文件夹这两个概念后面判断冲突时一直要用。Multiuser Repository url 空白是常见现象选择 ADS Route 后对于新的 PLC 项目填写仓库名称url 一般会自动生成没有自动生成时删一个字符再重新加上url 就会刷新。这个名称就是将来控制器上的版本仓库文件夹名称不要随便改来改去。现有 PLC 项目如果已知仓库名直接从下拉菜单选不要新建一个近似名字。4.2 提交两个版本并看懂 History 比较控制器上的 Git Server 开始工作后每次 Login 控制器都会要求提交 Update 信息。Init 本身会产生一次初始提交后面再提交两个业务版本History 里就能看到清晰的线性记录。输入资料里的示例是第二次提交填V1.0 First Code新建变量 x代码写x:x1;第三次提交填V1.0.1 Change Data修改递增步长代码改成x:x2;。// V1.0 First Code新建变量 x步长为 1 x : x 1;// V1.0.1 Change Data修改递增步长步长改为 2 x : x 2;这两段 ST 代码只是用来制造可比较的差异重点不在业务逻辑而在 Update Message 和代码变化要对应。第一次填Init第二次填V1.0 First Code第三次填V1.0.1 Change Data版本号建议按“主版本.次版本.修订号 简短说明”写后面 History 里一眼能看出哪次改了什么。Update Message 不是备注它会成为 History 里的版本标题写“test”“111”后面根本没法回溯。提交完成后在 Multiuser Explorer 的 History 界面点 Show History能看到所有历史版本。选中一项右键 Compare 表示该项与当前版本比较选中两项表示两项之间比较。差异分新增、删除和逻辑修改不同处红色标记双击某个红色 POU可以显示分屏代码。这个比较界面依赖前面配置的 Git 插件和 Project Compare 用户工具配置漏了就会出现“能看历史、不能看代码”的半吊子状态。4.3 回退与用历史版本改当前代码历史版本不只是用来看。项目比较界面里选中某处不同点感叹号上方的 Accept Single、Accept Block 或 Accept All可以把历史版本中的部分内容接回当前 PLC 程序。Accept Single 接单处Accept Block 接一块Accept All 接全部。这个动作适合“旧版本里有一段逻辑是对的但当前版本不能整体回退”的场景比重写代码稳。整体恢复则用 Get this version。在项目比较界面右键选择 Get this version开发 PC 的当前 PLC 项目会恢复至该版本。系统会提示File has been changed outside the enviroment. Reload the new file?这里的 outside 指 Compare Tool 从 Git Server 获取了旧版本代码并修改了项目的 POU 文件。Reload 只是装载回来看看无论是否点 Reload代码都已经改变。提示Get this version 之前先把当前项目复制一份尤其是控制器还在运行、现场还在调试的时候。回退动作改的是开发 PC 项目文件不是控制器里的运行程序但项目文件被覆盖后同样需要时间恢复。4.4 非 TwinCAT 文件的版本管理边界非 TwinCAT 文件的版本管理不是 AdsGitServer 能处理的问题非代码类文件管理甚至也不是 Git 技术最擅长的部分。PLC 项目文件夹里除了代码还可能有程序说明、设备操作说明等文档这些文件 TwinCAT 没办法管理需要标准 Git 工具。对单个工程师的基本工作存档如果对 Git 命令不熟也没有在远程代码托管平台建账号可以借助常规 IDE 的团队资源管理器可视化界面做本地存储操作。# 在需要做本地版本管理的文档文件夹中执行不要对 PLC 项目文件夹执行 git init git add . git commit -m V1.0.1 2021.06.07 git log --oneline git reset --hard HEAD^git init只用于非 PLC 项目文件夹git add .把文档加入暂存区git commit生成本地版本git log --oneline看版本列表git reset --hard HEAD^回退到上一个版本。最后这条会覆盖工作区执行前先备份。非代码类文件在标准 Git 里可以看版本、可以回退但无法像 TwinCAT PLC 那样做代码级比较、合并和回退在 TwinCAT 3 XAE 里也看不到非 TwinCAT 文件的历史版本。这个边界要提前说清别把文档版本管理硬塞进 Multiuser 仓库。5. 多机协同与排查第二台 PC 装载、冲突状态和五条踩坑记录两台 PC 先后向同一个控制器提交版本才是 AdsGitServer 真正要解决的场景也是翻车最集中的地方。第一台 PC 本地有项目、控制器上有仓库第二台 PC 如果直接拿一份旧项目去 LoginStatus 里就会出现 Local 和 Remote 不一致。搞不清红色、绿色和LocalsBehindRemote的含义就容易把远程新版本覆盖掉。这一章把第二台 PC 的同步流程和五条踩坑记录放在一起。5.1 第二台 PC 如何从控制器同步仓库第二台笔记本同样安装 TC3.1.4024.15启动 TwinCAT XAE并添加到控制器的路由。第一步是拿到与 PLC 中正在运行的程序名一致的项目可以从第一台 PC 复制项目文件过来也可以从控制器读取 TwinCAT 项目。能不能读取 PLC 源代码不要紧因为第一台 PC 可能并没有下载源代码这一步的主要目的是让项目名对得上。接下来打开 Multiuser Explorer从 ADS Routes 里选择控制器从 Multiuser Repository 下拉菜单中选择目标仓库。点 Init Local and Remote系统会提示 Remote 中已经存在数据仓库要不要读取回复 Yes。这个过程会把控制器上的版本仓库同步到第二台笔记本然后就可以按第一台 PC 的步骤继续编程和调试。注意这里不是新建仓库而是“绑定已有远程仓库并同步”。同步完成后从 History 中装载当前版本再提交两个版本。第一次提交填V2.0 Change Para修改递增步长代码改为x:x10;第二次提交填V2.0.1 Second Code新建变量 y增加代码y:2*x;。History 里应该能看到第一台 PC 生成的两个版本以及第二台 PC 生成的两个版本。// V2.0 Change Para第二台 PC 修改步长 x : x 10;// V2.0.1 Second Code第二台 PC 新增变量 y x : x 10; y : 2 * x;这两段代码的变量名和步长是输入资料里的测试用例实际项目替换成自己的逻辑即可。关键是提交信息要能区分“谁在哪个版本改了什么”不要两台 PC 都写“修改”。History 是线性结构版本标题写清楚后面第一台 PC 拉取最新版本时才能判断该取哪一个。5.2 Status 与 Conflict 的状态判断第一台 PC 再次打开 Multiuser Explorer 查看 History会发现 Local 和 Remote 不一致。红色项通常是 Remote 新增的版本绿色项是当前 PC 保存的最新版本。颜色可能因界面主题有差异最终以文字状态为准。进入 Status 界面如果提示LocalsBehindRemote意思是本地程序版本比控制器上旧进入 Conflict 界面会提示本地丢失了远程若干次修改。界面或提示含义建议动作History 红色项Remote 新增版本先 Compare 看差异再决定是否 Get This VersionHistory 绿色项当前 PC 保存的最新版本不要误当成远程最新版Status: LocalsBehindRemote本地比控制器旧Get Latest 或选目标远程版本Conflict: 本地丢失远程修改本地未包含远程提交备份项目后 Accept 或 Get This VersionFile has been changed outsideCompare Tool 已改 POU确认后 Reload或拒绝本次装载点 Get Latest 时系统会提示程序从外部改动了并提示与当前代码的区别。这个提示不是故障而是 Compare Tool 从 Git Server 取版本后修改了本地 POU 文件。可以点 Accept 接受也可以拒绝关闭窗口不等于代码没变之前已经改过的文件仍然要按实际状态处理。要装载最新 Remote 版本V2.0.1在 History 里选中该版本右键 Get This Version系统提示代码从外部改变选“是”就能得到第二台 PC 上编辑的最新代码。注意Multiuser 文档没有展开讲用户授权但 ADS 通道本身支持 CA、PSK 和用户名/密码等安全方式。测试环境图省事可以无加密正式多人协同要把授权访问补上别把测试配置直接搬到现场。多人同时开发一个 PLC 程序的不同部分时所有开发人员对分工、代码编辑、上传、下载要提前约定。否则 History 可能变成一团乱麻最后还不如人工合并。单人开发时线性历史很清晰按时间顺序就能回忆起修改理由多人协同则要把“谁先提交、谁后拉取、冲突谁处理”写成规则。5.3 五条踩坑记录现象、原因、解决坑一Init 创建失败界面无反应或直接报错。现象是点 Init local and Remote 后没有生成仓库或者提示创建失败。原因通常是控制器侧或开发 PC 侧残留了以前的 Git 设置控制器 TwinCAT/3.1/Boot 里还有旧项目内容本地 PLC 项目下还留着旧的 Git 元数据或者仓库名与已有仓库冲突。解决时先把 Local 和 Remote 清掉控制器 TwinCAT/3.1/Boot 文件清空并重启本地项目先备份再手动删除项目下的.git目录和配套 Git 文件然后重新 Init。控制器上的MultiuserRepository内容不必清空将来还可以使用。如果要在现有控制器上运行完全另一个 PLC 项目又要做版本控制最好提前清空 Boot 文件夹并重启控制器消除之前版本控制对新项目的影响。# 先备份整个 PLC 项目再清理本地 Git 元数据项目名按实际替换 Copy-Item -Recurse -Force .\MyPlcProject .\MyPlcProject_backup Remove-Item - p a hrefhttps://download.csdn.net/download/tjcu_cc/33160399 stylecolor:#ec7500;font-size:14px; 本文还有配套的精品资源点击获取 /a img altmenu-r.4af5f7ec.gif srchttps://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif stylewidth:16px;margin-left:4px;vertical-align:text-bottom;cursor:text; /p

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑