# TwinCAT/BSD 系统导论

## TwinCAT/BSD 简介

TwinCAT/BSD 是一款专门针对工业控制领域优化的操作系统，它基于 FreeBSD 开发。

TwinCAT/BSD 是由倍福公司（Beckhoff）开发的基于 FreeBSD 的 PLC（Programmable Logic Controller，可编程逻辑控制器）控制操作系统。PLC 是一种专门用于工业自动化控制的计算机，用于监控和控制生产设备。从许可模式来看，在不使用商业功能时，个人用户完全可以免费使用。关于硬件兼容性与授权策略，倍福支持第三方硬件安装，但许可证费用按硬件性能分级收取。一般 PLC 标准为 P40/P50 级别。P40/P50 是倍福定义的硬件性能等级，P 后面的数字越大表示硬件性能越好。例如，一个基本许可证价格为 1500 元，而第三方硬件按 P90 级别收费，同样功能约为 6000 元。

更多内容请参考：

* TwinCAT/BSD for Industrial PCs\[EB/OL]. \[2026-03-25]. <https://www.beckhoff.com/en-en/products/ipc/software-and-tools/twincat-bsd/>. 倍福官方 TwinCAT/BSD 产品说明，涵盖技术规格与授权信息。

## 下载 TwinCAT/BSD

了解 TwinCAT/BSD 的基本信息后，可以开始准备安装。首先需要获取系统安装镜像。TwinCAT/BSD 的下载地址如下：

<https://www.beckhoff.com/en-us/search-results/?q=bsd>

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-9351f818c29b19f444b986bb8172ebddcf965987%2Ftcbsd.png?alt=media)

点击 `↓ ZIP` 即可下载。**注意：需要注册才能下载。**

首先解压 ZIP，得到 `TCBSD-x64-13-92446.iso` 文件

## 创建虚拟硬盘并写入镜像

下载完成后，需要对镜像进行特殊处理才能用于虚拟机安装。TCBSD 官方镜像是使用 `dd` 工具制作的，实际上对应 FreeBSD 的 img 镜像，因此虚拟机无法直接识别。dd 是一个用于复制和转换文件的命令行工具，常用于制作磁盘镜像。需要通过创建虚拟 VHD 硬盘的方式，将镜像写入硬盘后再挂载到虚拟机进行安装。VHD 是虚拟硬盘格式，用于在虚拟机中模拟物理硬盘。

首先右键单击“这台电脑”，依次选择“管理”→“磁盘管理”→“操作”→“创建 VHD”。

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-d29791422005745db322e6dd27ab10cac3622978%2Ft1.png?alt=media)

硬盘大小设置为 1 GB 即可，过大无实际必要，该硬盘仅用于写入镜像。其他配置可参考示例设置。

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-62609b99bc2e1d58457ea6ebb56a1034488c622a%2Ft2.png?alt=media)

可以看到新增了一个 `磁盘 2`，右键单击左侧区域，选择“初始化磁盘”。（**注意：文中示例中已有两块硬盘，分别为 `磁盘 0` 和 `磁盘 1`。**）

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-4fb8cf417fa57674cf7341c16ee3625cc6223d33%2Ft3.png?alt=media)

选择默认参数即可。用 GPT 分区表格式化磁盘 2。GPT 是 GUID 分区表，是一种现代的磁盘分区标准。

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-7ebf50302a162eed5aaee75e042b9fc9d0f240b6%2Ft4.png?alt=media)

右键单击右侧区域，点击“新建简单卷”，其他保持默认配置即可。

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-5563cbd9b2eca62d5d287e298b9b11c3ef6bbfcc%2Ft5.png?alt=media)

可以看到出现了一个 `新加卷 F`：

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-bb70551feaf276f35dbbf2673af5deb510d52dc0%2Ft6.png?alt=media)

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-3780b345448c9d4dfce9353479fa2c1f43236d73%2Ft7.png?alt=media)

打开 Rufus 工具，程序会自动识别新加卷 F。选择解压出的镜像 `TCBSD-x64-13-92446.iso`，点击“开始”即可。在刷新分区表的最后一步可能需要较长时间，请耐心等待。

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-687d0cfbc6032533d8e9abf0ad23b3fdf66c5e21%2Ft8.png?alt=media)

返回磁盘管理，选择“操作”→“重新扫描磁盘”。**否则下面虚拟机无法加载磁盘 2。**

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-35b9816cf6de33b2a756c84915d9f8473f1f659f%2Ft9.png?alt=media)

可以看到磁盘 2 已被写入镜像：

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-4c055288a6ea97a1ba2fced312ba5afd3c3b6d1e%2Ft10.png?alt=media\&token=ebb2f204-f07d-41be-911c-54905cb4a9a5)

## 通过 VMware Workstation 安装 TwinCAT/BSD

虚拟硬盘准备完成后，可以开始通过 VMware Workstation 进行系统安装。下面介绍通过 VMware Workstation 安装 TwinCAT/BSD 的步骤。先以正常方法创建一个空白的虚拟机模板，然后点击“虚拟机设置”→“添加”→“硬盘”。点击下一步：

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-37dee0f4f5b52711bbc09f4a1b3c80c6dbd717ba%2Ft11.png?alt=media)

保持默认即可：

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-8f287b1d514f94980b69cd33f58f615a7ac62f9f%2Ft12.png?alt=media)

选择第三项“使用物理磁盘”：

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-6df9bb6ac12b994aeb016e4f62c903c66df71345%2Ft13.png?alt=media)

这里选择磁盘 2，并使用整个分区：

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-97b7f97f572fd9ba928f7e2b3783d70ced52872e%2Ft14.png?alt=media)

保持默认即可：

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-142da3d8c905f795df6102b4c953965b9cb9b2f6%2Ft15.png?alt=media)

检查磁盘的大小和名称是否正确，选错了就无法启动。

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-de000b2ef3236c4f6593e39c3dfe0abb5dc65292%2Ft16.png?alt=media)

开启 UEFI：

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-5e635440b495811c1dcc40c5d3a2f81be3d4e352%2Ft17.png?alt=media)

保存以上配置后开机：

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-75e9d005c023f272db93ef33e4e13177530903a7%2Ft18.png?alt=media\&token=a3256d1e-c7b1-4b29-a066-5294eb0d667b)

开始安装：

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-596529ed1cb1fd0ddd9aaa7a55e643cb0165a8df%2Ft19.png?alt=media)

选择磁盘进行安装，看大小就能判断选择哪个：

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-f921f8d939d2340997d53199589fe253e3dd7291%2Ft20.png?alt=media)

选择“Yes”开始安装：

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-6269ed50a3fdfbf383f90707b029c501744d9199%2Ft21.png?alt=media)

输入 `Administrator` 的密码：

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-8aa654caf6dcc907b71de2fe25e21c72eef05b22%2Ft22.png?alt=media)

再次输入 `Administrator` 的密码：

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-8e375607f252a7fe78c7aa4bdd3bcd528b1ee059%2Ft23.png?alt=media)

开始安装：

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-96b505394d00aad4efc721d050107407dd3b1048%2Ft24.png?alt=media)

提示安装完成：

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-ad263685cfe8ce752dc6337887eee0d6faf6f485%2Ft25.png?alt=media)

选择“reboot”重启进入安装后的系统：

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-d81ece1c6bc8562e3522ff906e1cf54bfb8b3335%2Ft26.png?alt=media)

## 用户账户

系统安装完成后，需要了解系统的用户账户配置。默认用户名是 `Administrator`，其密码是在安装时设置的。倍福其他 PLC 默认密码通常是 `1`，但 TwinCAT/BSD 的密码由用户自定义。

首先使用 doas 提升权限修改 root 用户密码：

```sh
$ doas passwd root
```

然后就可以使用 doas 提升权限为超级用户（root），进入 root Shell：

```sh
$ doas su
```

## Web 界面登录

TwinCAT/BSD 提供了 Web 管理界面，方便用户进行系统配置和管理。网络连接方式使用 NAT，经测试桥接模式无法访问。NAT 是网络地址转换，是一种将私有 IP 地址转换为公网 IP 地址的技术。

使用 `ifconfig` 查看当前 IP，然后打开主机的浏览器，输入 `ifconfig` 命令输出的 IP 地址。

示例中，`ifconfig` 显示的 IP 为 `192.168.245.138`，则访问地址为 `https://192.168.245.138`。（注意使用 **https**，而非 *http*，后者无法访问）

输入用户名 `Administrator` 和密码即可登录：

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-60cccec151837f29e6645d83e1c41b961c672e80%2Ftcbsd1.png?alt=media)

![TCBSD](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-1befc837ea5945182e2f40f368f9f6d1ab6f30f4%2Ftcbsd2.png?alt=media)

## 故障排除与未竟事宜

在使用 TwinCAT/BSD 的过程中，可能会遇到问题。以下是常见问题的解决方法。

### 设置静态 IP 后，网卡存在两个 IP

为网卡设置静态 IP 后，该网卡可能会出现两个 IP：一个为静态 IP，另一个由 DHCP 服务分配。这是由于倍福系统开机自动启动的 dhcpcd 服务导致的。dhcpcd 是一个 DHCP 客户端守护进程，用于自动获取 IP 地址。可以通过修改 `/etc/rc.conf` 文件来解决：

修改或加入：

```ini
dhcpcd_flags="--denyinterfaces igb0"
```

即将 `dhcpcd_flags` 的值由 `--waitip` 改为 `--denyinterfaces igb0`（配置 dhcpcd，禁止在指定网卡 `igb0` 上自动获取 DHCP 地址）。`igb0` 为需要配置静态 IP 的网卡名，请根据实际情况更改。

## 修改软件源

软件源结构：

```sh
/usr/local/
├── share/
│   └── examples/
│       └── bhf/
│           └── pkgrepo-set.sh  # pkg 仓库设置脚本
└── etc/
    └── pkg/
        └── repos/
            └── FreeBSD.conf  # FreeBSD pkg 仓库配置文件
```

为了提高软件安装和更新的速度，可以将 pkg 仓库切换为中国镜像。下面介绍如何将 pkg 仓库切换为中国镜像。使用 `doas` 执行脚本，将 pkg 仓库切换为中国镜像：

```sh
$ doas sh /usr/local/share/examples/bhf/pkgrepo-set.sh china
```

使用 doas 提升权限，先更新 pkg 仓库索引，再升级已安装的软件包：

```sh
$ doas pkg update && doas pkg upgrade
```

## 安装 Beckhoff 开发工具包

如果需要进行开发工作，可以安装 Beckhoff 提供的开发工具包。使用 doas 安装操作系统通用用户空间开发工具包：

```sh
$ doas pkg install os-generic-userland-devtools
```

该操作将安装由 Beckhoff 维护的 LLVM、C/C++ 头文件、C/C++ 库以及 TwinCAT SDK。

## 启用 FreeBSD 源

TwinCAT/BSD 默认只提供 Beckhoff 维护的软件包。如果需要使用更多 FreeBSD 官方维护的软件包，可以手动启用相关源。

```sh
/usr/local/
├── share/
│   └── examples/
│       └── bhf/
│           └── pkgrepo-set.sh  # pkg 仓库设置脚本
└── etc/
    └── pkg/
        └── repos/
            └── FreeBSD.conf  # FreeBSD pkg 仓库配置文件
```

编辑 `/usr/local/etc/pkg/repos/FreeBSD.conf` 文件，将配置文件中 `FreeBSD: {enabled: no}` 的 `no` 修改为 `yes` 即可。

## 课后习题

1. 查找 TwinCAT/BSD 中 dhcpcd 服务的实现，分析其为何在设置静态 IP 后仍会分配 DHCP 地址，重构最小化的网络配置方案并验证。
2. 在 TwinCAT/BSD 系统中同时启用 Beckhoff 源和 FreeBSD 官方源，尝试安装一个来自 FreeBSD 源的软件包（如 nginx）。
