硬件篇

  1. S/S: 在 PLC(可编程逻辑控制器)系统中,S/S 通常指的是 “输入公共端”,也叫做 “Source/Sink”端子,它的作用是为多个输入点提供一个共同的电源参考点,从而构成完整的电路回路。

  2. XL5E-16T结构图: XD、XL系列可编程序控制器用户手册(硬件篇)- 28页.

  3. XL 系列端子排列: XD、XL系列可编程序控制器用户手册(硬件篇)- 46页.

  4. 程序上传,下载: XD、XL系列可编程序控制器用户手册(硬件篇)- 55页.

  5. XL 系列输入规格: XD、XL系列可编程序控制器用户手册(硬件篇)- 68页.

人机交互软件篇

  1. 人机界面的内部地址: TouchWin Pro编辑软件用户手册 - 318页.

PLC基本指令篇

  1. 特殊辅助继电器一览: XD、XL系列可编程控制器用户手册(基本指令篇) - 439页.

PLC编程软件篇

  1. 软元件概述: XD、XL系列可编程控制器用户手册 - 6页.
  2. 基本顺控指令说明: XD、XL系列可编程控制器用户手册 - 48页.

谜之迷惑行为

  1. 自由监控与数据监控数据转换
#include <cstdint>
#include <cstdio>
#include <cstring>

// 将一个 int16_t 整数转换为 float,再将该 float 的 IEEE754 编码拆成两个 uint16_t,分别对应 PLC 的两个寄存器(如 D100 和 D101)。
void FLT(int16_t source, uint16_t *highWord, uint16_t *lowWord) {
    auto f = static_cast<float>(source);

    // 将 float 转换为 32 位二进制表示
    union {
        float f;
        uint32_t u;
    } converter{};

    converter.f = f;

    // 拆分为两个 16 位寄存器
    *highWord = static_cast<uint16_t>((converter.u >> 16) & 0xFFFF); // 高位
    *lowWord  = static_cast<uint16_t>(converter.u & 0xFFFF);         // 低位
}

// 测试
int main() {
    const int16_t input = 1000;
    uint16_t D100, D101;

    FLT(input, &D100, &D101);

    printf("FLT %d → D100 = 0x%04X (%d), D101 = 0x%04X (%d)\n",
           input, D100, D100, D101, D101);

    return 0;
}

信捷PLC设置bit寄存器遇到的问题

  1. 信捷 XD PLC C语言 POU Bit 和 Bool.

  2. 信捷上升沿指令

|--[ ↑X0 ]------------------[ Y0 ]----------------------|
|--[ ↑X0 ]------------------[ SET Y1 ]------------------|

现象: X0 输入按钮按下不放,Y0 导通. Y1 不导通。放下时,Y0导通,Y1导通.

信捷 PLC 的扫描机制是这样的:

当前周期:PLC读取输入状态(如按钮 X0 为 ON)。

边沿检测:PLC将当前状态与上周期状态比较,判断是否为边沿。

结果输出:边沿信号(如 ↑X0)在下一周期才变为 TRUE。

  1. 在信捷的C函数编程中,直接使用C语言的标准数据类型int/long/float/double/没办法直接操作 PLC 的D/HD寄存器.
    + 示例
    // 计算圆的面积
    void AREA(PINT16S W, BIT B)
    {
        #define SysRegAddr_D_HD_HM_FS_HSD_HSCD_SD_SFD_SM_M_HCD_HTD_T
    
        #define DFD     *(FP64*)&D
        #define DD      *(INT32S*)&D
        #define FFD     *(FP32*)&D
    
        #define DFHD    *(FP64*)&HD
        #define DHD     *(INT32S*)&HD
        #define FHD     *(FP32*)&HD
    
        #define PI 3.1415926
    
        HD[500] = HD[502] * HD[502] * PI;       // 整型示例
        FHD[510] = FHD[512] * FHD[512] * PI;    // 浮点数示例
    
    }
    

视频链接

  1. TS人机界面.
  2. 信捷PLC之C语言培训视频

参考链接

  1. 信捷PLC