返回主站|会员中心|保存桌面

菲尼克斯连接器专营    

菲尼克斯连接器、连接端子

新闻分类
  • 暂无分类
联系方式
  • 联系人:吴经理
  • 电话:18576370666
  • 邮件:18576370666@qq.com
首页 > 新闻中心 > 用PLC跟触摸屏写过自由编程的程序!
新闻中心
用PLC跟触摸屏写过自由编程的程序!
发布时间:2025-12-04        浏览次数:8        返回列表

结合工业现场最典型的 “PLC + 触摸屏自由口通讯” 场景(以台达 DVP-ES2 PLC + 威纶通 MT8071IP 触摸屏为例),以下是完整的自由编程实现步骤,包含 PLC 程序、触摸屏组态、通讯调试,覆盖核心逻辑和避坑要点:

一、场景定义(明确需求)

实现 PLC 与触摸屏自由口双向通讯:

  1. 触摸屏发送 “启动指令(01 01)”→ PLC 接收后控制 Y0 输出,同时返回 “Y0 已启动(02 01)”;

  2. 触摸屏发送 “停止指令(01 02)”→ PLC 接收后关闭 Y0,返回 “Y0 已停止(02 02)”;

  3. 通讯格式:9600bps、8 位数据位、无校验、1 位停止位(自由口最常用格式)。

二、硬件与基础配置

1. 硬件接线

  • PLC 侧:台达 DVP-ES2 的 COM2(RS232)端口,引脚 2(RXD)接触摸屏 COM1 的 3(TXD),引脚 3(TXD)接触摸屏 COM1 的 2(RXD),引脚 5(GND)接触摸屏 GND(交叉接线);

  • 触摸屏侧:威纶通 MT8071IP 的 COM1 设为 “RS232 自由口” 模式,供电 DC24V。

2. 核心参数约定

通讯方向数据格式(十六进制)说明
触摸屏→PLC01 01启动 Y0
触摸屏→PLC01 02停止 Y0
PLC→触摸屏02 01Y0 启动成功反馈
PLC→触摸屏02 02Y0 停止成功反馈
通讯格式9600,8,N,1波特率 / 数据位 / 校验 / 停止位

三、PLC 程序编写(台达 WPLSoft)

台达 ES2 通过RS(发送)、RR(接收)指令实现自由口通讯,需先配置通讯格式寄存器,再编写收发逻辑:

1. 第一步:配置自由口通讯参数

plaintext

LD M8000                  // 常闭触点,上电执行
MOV H0080 D8120           // 设置通讯格式:9600bps、8位、无校验、1停止位(H0080对应9600,8,N,1)
SET M8161                 // 启用8位二进制模式(自由口优先二进制)
MOV K0 D8129              // 清空接收数据长度寄存器
  • D8120:台达自由口通讯格式寄存器,H0080 是 9600,8,N,1 的固定值;

  • M8161:1=8 位二进制,0=7 位 ASCII,自由口必须设 1;

  • D8129:接收数据长度,每次接收前清空。

2. 第二步:编写接收逻辑(解析触摸屏指令)

plaintext

// 接收触发:M8122(接收完成标志)触发解析
LD M8122                  
MOV D200 D0               // 将接收缓冲区(D200开始)数据移到D0(暂存)
AND K0001 D0 K0001        // 判断是否为启动指令(01 01)
OUT M0                    // M0=1:启动指令有效
AND K0002 D0 K0002        // 判断是否为停止指令(01 02)
OUT M1                    // M1=1:停止指令有效
RST M8122                 // 复位接收完成标志,准备下次接收

// 执行启动/停止逻辑
LD M0                    
SET Y0                    // Y0=ON,启动输出
LD M1                    
RST Y0                    // Y0=OFF,停止输出
  • M8122:PLC 接收完数据后自动置 1,需手动复位;

  • D200:台达自由口默认接收缓冲区起始地址,触摸屏发送的 2 字节数据存在 D200(高字节)、D201(低字节);

  • D0:暂存接收数据,通过AND指令判断指令类型。

3. 第三步:编写发送逻辑(反馈给触摸屏)

plaintext

// 启动成功反馈:Y0置1时发送02 01
LD Y0                    
AND NOT M2                // 防重复发送
MOV H0201 D100            // 反馈数据存入D100(02 01)
RS K2 D100 K2 Y0          // RS指令:发送2字节(K2)、从D100开始、发送长度2、脉冲端Y0(COM2对应Y0)
SET M2                    // 标记已发送,避免重复

// 停止成功反馈:Y0置0时发送02 02
LD NOT Y0                 
AND NOT M3                // 防重复发送
MOV H0202 D100            // 反馈数据存入D100(02 02)
RS K2 D100 K2 Y0          // 发送2字节反馈数据
SET M3                    // 标记已发送

// 复位标记:指令切换时清空M2/M3
LD M0                    
RST M3                    // 启动指令触发,复位停止反馈标记
LD M1                    
RST M2                    // 停止指令触发,复位启动反馈标记
  • RS 指令格式:RS S1 D1 S2 D2,S1 = 通讯格式(K2=COM2)、D1 = 发送数据起始地址、S2 = 发送字节数、D2 = 脉冲端(Y0 对应 COM2);

  • M2/M3:防重复发送标记,避免 PLC 持续发送同一反馈。

四、触摸屏组态(威纶通 EBPro)

威纶通触摸屏通过 “宏指令” 实现自由口收发,需先配置串口,再编写宏脚本,最后做按钮 / 显示界面:

1. 第一步:配置触摸屏串口参数

  1. 打开 EBPro,新建工程,选择型号 MT8071IP;

  2. 点击 “系统参数”→“设备列表”→“新增”→选择 “用户自定义”→“RS232”;

  3. 串口参数:波特率 9600、数据位 8、停止位 1、无校验、通讯端口 COM1;

  4. 确认后保存,串口配置完成。

2. 第二步:编写宏指令(发送 / 接收逻辑)

威纶通宏指令用 C 语言风格,核心是serial_send(发送)、serial_receive(接收)函数:

(1)启动指令宏(btn_start.mcs)

c

运行

macro_command main(){
    unsigned char send_data[2] = {0x01,0x01};  // 启动指令:01 01
    serial_send(1, send_data, 2);              // COM1发送2字节数据
    // 接收反馈
    unsigned char recv_data[2];
    serial_receive(1, recv_data, 2, 100);      // COM1接收2字节,超时100ms
    if(recv_data[0]==0x02 && recv_data[1]==0x01)
    {
        SetData("Local HMI", "LW0", 0, 1);     // LW0=1:启动成功
    }}
(2)停止指令宏(btn_stop.mcs)

c

运行

macro_command main(){
    unsigned char send_data[2] = {0x01,0x02};  // 停止指令:01 02
    serial_send(1, send_data, 2);              // COM1发送2字节
    // 接收反馈
    unsigned char recv_data[2];
    serial_receive(1, recv_data, 2, 100);
    if(recv_data[0]==0x02 && recv_data[1]==0x02)
    {
        SetData("Local HMI", "LW0", 0, 2);     // LW0=2:停止成功
    }}
  • serial_send(端口号, 数据数组, 长度):发送函数,端口 1=COM1;

  • serial_receive(端口号, 接收数组, 长度, 超时ms):接收函数;

  • LW0:触摸屏本地寄存器,用于显示状态(1 = 启动成功,2 = 停止成功)。

3. 第三步:制作触摸屏界面

  1. 拖入 “按钮” 控件:

    • 按钮 1:文本 “启动 Y0”,触发事件选择 “执行宏指令”→选择 btn_start.mcs;

    • 按钮 2:文本 “停止 Y0”,触发事件选择 “执行宏指令”→选择 btn_stop.mcs;

  2. 拖入 “数值显示” 控件:关联本地寄存器 LW0,显示通讯状态(1/2 分别对应启动 / 停止成功);

  3. 保存工程,下载到触摸屏。

五、调试与避坑要点

  1. 通讯无响应

    • 检查接线:PLC TXD↔触摸屏 RXD、PLC RXD↔触摸屏 TXD,必须交叉;

    • 核对参数:PLC D8120=H0080,触摸屏串口 9600,8,N,1,参数不一致直接通讯失败;

    • 测试硬件:用串口调试助手接 PLC COM2,发送 01 01,看 PLC 是否接收(M8122 是否置 1)。

  2. 数据解析错误

    • 台达 D200 是接收缓冲区,高字节在前(如触摸屏发 01 01,D200=0x01,D201=0x01);

    • 威纶通宏指令数组是低字节在前,需注意字节序对齐。

  3. 重复发送 / 接收

    • PLC 侧用 M2/M3 标记避免重复发送,触摸屏侧宏指令加超时判断(serial_receive 超时 100ms);

    • 每次接收后复位 M8122(PLC)、清空接收数组(触摸屏)。

  4. 干扰导致数据丢包

    • 通讯线用屏蔽线,屏蔽层单端接地(接 PLC GND);

    • 远离变频器、电机等强电设备,减少电磁干扰。

六、扩展适配(其他品牌 PLC / 触摸屏)

  1. 三菱 FX3U:替换为RS(RS232)/RS2(RS485)指令,通讯格式寄存器 D8120,接收完成标志 M8122,逻辑一致;

  2. 信捷 XC3:用STXD(发送)/SRXD(接收)指令,配置寄存器 D8020,接收完成标志 M8022;

  3. 昆仑通态触摸屏:通过 “脚本程序” 调用SerialPort类,实现自由口收发,逻辑与威纶通类似。

最终效果

触摸屏点击 “启动 Y0”→发送 01 01→PLC 接收后 Y0 亮,返回 02 01→触摸屏 LW0 显示 1;触摸屏点击 “停止 Y0”→发送 01 02→PLC 接收后 Y0 灭,返回 02 02→触摸屏 LW0 显示 2;全程通过自由口自定义协议通讯,无依赖标准协议(如 MODBUS),适配非标场景。

收缩
  • QQ咨询

  • 电话咨询

  • 18576370666
  • 添加微信客服