信捷PLC
硬件篇
-
S/S: 在 PLC(可编程逻辑控制器)系统中,S/S 通常指的是 “输入公共端”,也叫做 “Source/Sink”端子,它的作用是为多个输入点提供一个共同的电源参考点,从而构成完整的电路回路。
-
XL5E-16T结构图: XD、XL系列可编程序控制器用户手册(硬件篇)- 28页.
-
XL 系列端子排列: XD、XL系列可编程序控制器用户手册(硬件篇)- 46页.
-
程序上传,下载: XD、XL系列可编程序控制器用户手册(硬件篇)- 55页.
-
XL 系列输入规格: XD、XL系列可编程序控制器用户手册(硬件篇)- 68页.
人机交互软件篇
- 人机界面的内部地址: TouchWin Pro编辑软件用户手册 - 318页.
PLC基本指令篇
- 特殊辅助继电器一览: XD、XL系列可编程控制器用户手册(基本指令篇) - 439页.
PLC编程软件篇
- 软元件概述: XD、XL系列可编程控制器用户手册 - 6页.
- 基本顺控指令说明: XD、XL系列可编程控制器用户手册 - 48页.
谜之迷惑行为
- 自由监控与数据监控数据转换
#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寄存器遇到的问题
-
信捷上升沿指令
|--[ ↑X0 ]------------------[ Y0 ]----------------------|
|--[ ↑X0 ]------------------[ SET Y1 ]------------------|
现象: X0 输入按钮按下不放,Y0 导通. Y1 不导通。放下时,Y0导通,Y1导通.
信捷 PLC 的扫描机制是这样的:
当前周期:PLC读取输入状态(如按钮 X0 为 ON)。
边沿检测:PLC将当前状态与上周期状态比较,判断是否为边沿。
结果输出:边沿信号(如 ↑X0)在下一周期才变为 TRUE。
- 在信捷的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; // 浮点数示例 }