2. 开发环境搭建:主流PLC平台的安装与配置

说实话,很多初学者一上来就急着写代码,结果连开发环境都没配好,折腾半天连个轴都动不了。我见过太多这样的案例了。今天咱们就踏踏实实把环境搭起来,后面才能跑得顺畅。

2.1 主流PLC平台的选择

目前工业界最主流的两个平台,一个是 Codesys,另一个是 TwinCAT。说白了,它们底层都是基于 IEC 61131-3 标准,但各有侧重。

平台 特点 适用场景
Codesys 开放性最强,支持多种硬件厂商 中小型项目、多品牌控制器
TwinCAT 与倍福硬件深度绑定,实时性极强 高端运动控制、EtherCAT生态

我个人习惯两个都装。Codesys 用来做原型验证,TwinCAT 用来做最终部署。你想想看,万一客户现场用的是不同品牌的控制器,你至少能快速切换。

2.2 Codesys 安装与第一个项目

安装过程其实没什么好说的,下一步下一步就行。但有几个坑我得提醒你:

注意:安装路径不要有中文!我当年第一次装的时候,图省事直接用了默认路径,结果编译报错查了半天,最后发现是中文目录的问题。

装好之后,咱们创建一个新项目:

  1. 打开 Codesys,点击「新建项目」
  2. 选择「标准项目」,输入项目名称
  3. 设备选「CODESYS Control Win V3」——这是软PLC,适合调试
  4. 编程语言选「结构化文本 (ST)」

嗯,这里要注意,第一次打开可能会提示缺少运行时组件。别慌,去官网下载一个「CODESYS Control Win」安装包就行。

2.3 添加运动控制库

PLCopen 运动控制的核心,其实都在库里面。没有库,你写再多代码也调不动轴。

添加步骤:

  • 在左侧「库管理器」上右键 → 「添加库」
  • 搜索 SM3_Basic —— 这是 PLCopen 的基础运动控制库
  • 再添加 SM3_CNCSM3_Robotics(如果你要做插补或机器人)
小技巧:我建议把 SM3_Drive 也加上。这个库封装了驱动器参数配置,省得你手动写一堆 SDO 通信。

添加完成后,你会在库管理器里看到一堆函数块。比如 MC_PowerMC_MoveAbsoluteMC_Home 等等。这些就是咱们后面要用的核心武器。

2.4 配置虚拟轴

没有真实硬件怎么办?用虚拟轴。说白了就是让软件模拟一个电机,你发指令它就能动,但实际不接任何设备。

配置步骤:

  1. 在设备树里双击「PLC Logic」下的「Application」
  2. 右键 → 「添加对象」 → 「轴」
  3. 轴类型选「虚拟轴」
  4. 给轴起个名字,比如 Axis_X

然后双击这个轴,在参数里设置:

  • 最大速度:1000 mm/s
  • 最大加速度:5000 mm/s²
  • 最大减速度:5000 mm/s²
  • 急动度:50000 mm/s³

这些参数怎么来的?我一般参考实际伺服电机的规格书。虚拟轴虽然不用真跑,但参数设得太离谱,后面换真实设备时还得重新调。

核心逻辑:虚拟轴的本质是一个数学模型。你给它发位置指令,它内部通过梯形或S形曲线算出每个周期的位置值。所以参数设置越接近真实电机,调试效果越好。

2.5 知识体系总览

下面这张图,是我自己总结的开发环境搭建逻辑。你照着这个顺序走,基本不会乱。

开发环境搭建知识体系 平台选择 Codesys / TwinCAT 安装与项目创建 软PLC + ST语言 添加运动控制库 SM3_Basic / SM3_CNC 配置虚拟轴 参数设置 / 数学模型 验证与调试 在线监控 / 轴状态 避坑指南 • 安装路径不要有中文 • 虚拟轴参数要合理 • 库版本要匹配 • 先跑通再连硬件 • 多备份项目文件

2.6 验证环境是否正常

配置完虚拟轴,咱们写一小段代码验证一下:

PROGRAM Main
VAR
    Axis_X : AXIS_REF_VIRTUAL;
    Power_MC : MC_Power;
    MoveAbs_MC : MC_MoveAbsolute;
    bPower : BOOL := FALSE;
    bStart : BOOL := FALSE;
    fTargetPos : LREAL := 100.0;
END_VAR

// 上电
Power_MC(
    Axis := Axis_X,
    Enable := bPower,
    bRegulatorOn := TRUE,
    bDriveStart := TRUE
);

// 绝对定位
IF bStart THEN
    MoveAbs_MC(
        Axis := Axis_X,
        Execute := TRUE,
        Position := fTargetPos,
        Velocity := 100.0,
        Acceleration := 500.0,
        Deceleration := 500.0,
        Jerk := 5000.0
    );
END_IF

这段代码做了三件事:给轴上电、设定目标位置、执行绝对定位。你下载到软PLC里,把 bPowerbStart 置为 TRUE,看看轴的位置有没有变化。

验证方法:在在线模式下,右键点击 Axis_X 选择「轴状态」面板。你会看到实际位置从0慢慢走到100。如果不动,八成是库没加对,或者轴类型选错了。

我曾经遇到过一个问题:虚拟轴怎么都不动,查了半天发现是 MC_PowerEnable 引脚没持续置高。你想想看,上电信号只给一个周期,轴当然不会保持使能。这种低级错误,新手最容易犯。

好了,环境搭好了,轴也能动了。后面咱们就可以正式开始玩 PLCopen 的运动控制指令了。


专注资料整理