两台欧姆龙CP1H相互通讯交换数据通过脉冲控制6轴伺服案例,实际项目。 PLC采用两台CP1H—X40D带RS232通讯板CP1W-CIF01.使用PC LINK主从通信。 OMRON触摸屏是NB7W-TE00B. 三菱伺服采用5台MR-J4和一台MR-JE。 位置传感器采用KEYENCE GT2-500加通讯单元DL-RS2A。 PDF图纸, 程序大量采用功能块设计和结构文本语言ST.适会你重复使用。 包含PLC程序,触摸屏程序,PDF电气图纸,采购BOM.

最近整了个挺有意思的项目——两台欧姆龙CP1H PLC协同控制六轴伺服系统。手头这案子说难不算顶级难度,但各种细节处理起来确实得费点心思,特别是设备间的通讯配合,值得拿出来跟同行唠唠。

硬件配置这块有点讲究:主从两台CP1H-X40D都加了CP1W-CIF01串口模块搞PC LINK通讯,NB触摸屏直接怼主站上。伺服系统混搭了5台三菱MR-J4和1台MR-JE,位置检测用的基恩士GT2-500激光传感器配DL-RS2A通讯模块。这里有个小插曲,最初选型时JE系列那台伺服的脉冲响应速度差点翻车,好在提前做了脉冲频率测试。

通讯架构是项目的核心。主从PLC之间用PC LINK做数据交换,实际配置时在CX-Programmer里填参数得注意几个关键点:

// PC LINK参数设置
PC_LINK_Setup(
    Master := TRUE,           // 主站设定
    UnitNo := 0,              // 单元号
    BaudRate := 115200,       // 波特率
    DataFormat := %DM1000,    // 共享区首地址
    Size := 512);             // 数据交换量

主从站各划出512字的DM区做数据映射,实际项目里发现超过300字后通讯周期开始波动,最后优化到每台交换256字分两批处理。这里有个隐藏技巧——在DM区前32字做心跳包检测,用XOR校验防止数据错位。

两台欧姆龙CP1H相互通讯交换数据通过脉冲控制6轴伺服案例,实际项目。 PLC采用两台CP1H—X40D带RS232通讯板CP1W-CIF01.使用PC LINK主从通信。 OMRON触摸屏是NB7W-TE00B. 三菱伺服采用5台MR-J4和一台MR-JE。 位置传感器采用KEYENCE GT2-500加通讯单元DL-RS2A。 PDF图纸, 程序大量采用功能块设计和结构文本语言ST.适会你重复使用。 包含PLC程序,触摸屏程序,PDF电气图纸,采购BOM.

轴控制功能块是程序的核心,用ST语言写状态机真香:

// 伺服轴控制功能块
FUNCTION_BLOCK Axis_Control
VAR_INPUT
    Enable : BOOL;
    TargetPos : REAL;
END_VAR
VAR_OUTPUT
    CurrentPos : REAL;
    Status : INT;
END_VAR
VAR
    State : (IDLE, HOMING, MOVING, STOPPING, ERROR);
    PulseCount : DINT;
END_VAR

CASE State OF
IDLE:
    IF Enable THEN
        IF NOT HomingDone THEN
            State := HOMING;
        ELSE
            State := MOVING;
        END_IF
    END_IF

MOVING:
    PulseGen(TargetPos, CurrentPos);
    IF ABS(CurrentPos - TargetPos) < 0.01 THEN
        State := IDLE;
    END_IF
END_CASE

这个状态机处理了手动/自动模式切换、原点复归异常处理等常见问题。特别是脉冲发生器的平滑启停算法,通过指数加减速曲线避免了机械冲击。实际调试时发现,当六个轴同时运行时,用STRUCT结构体数组管理轴参数比单独变量节省了40%的扫描周期。

传感器通讯是个小坑点。基恩士DL-RS2A走的是Modbus RTU,得在CP1H上配置串口参数:

// 传感器通讯配置
IF NOT COM_INIT THEN
    CMND(端口:=1, 命令:=#2100, 控制码:=16#0000); // 19200波特率
    CMND(端口:=1, 命令:=#2101, 控制码:=16#0007); // 8N1格式
    COM_INIT := TRUE;
END_IF

数据采集时发现传感器刷新率跟不上,最后启用了异步读取机制,把六个测量点的数据分帧读取,DMA区做数据缓存才解决。

项目里最爽的是结构化编程带来的便利。比如报警处理功能块被复用了23次,通过指针传递不同轴的参数,代码量直接砍半。触摸屏页面用了个取巧的办法——把伺服参数做成模板页面,运行时根据轴号动态加载标签地址,省了做六套相同页面。

搞完这项目有几个心得:

  1. 欧姆龙的PC LINK在实时性要求高的场合还是得慎用,超过5ms级别的控制建议走EtherCAT
  2. 三菱J4系列伺服的4MHz脉冲响应确实能打,但接线必须用双绞屏蔽线
  3. 结构化文本处理多轴系统时,数组操作比梯形图直观不止一个量级

最后验收时六轴同步精度做到±0.02mm,甲方爸爸验收时拿着千分表挨个点打表的样子,像极了当年老师检查作业的班主任。代码和图纸现在回头看看还能优化,但项目周期压着也只能这样了——这行都懂,东西能跑起来才是硬道理。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐