西门子1215与1212做的程序,成功项目,一个程序包含modbus rtu通讯,与库卡C2机器人的profibus通讯,两个1200之间的S7通讯,与威纶通触摸屏的以太网通讯,包含变频器控制,伺服控制(伺服功能块本人将PTO控制常用指令集成在一个FB块里),使用4个台达伺服和2个步进,仅供各位参考

最近完成了一个基于西门子1215与1212的超有趣项目,跟大家分享下其中的技术要点和实现过程,希望对各位有所帮助。

一、通讯架构

1. Modbus RTU通讯

Modbus RTU是一种在工业领域广泛应用的串行通讯协议。在西门子1200系列PLC中实现它,需要调用相应的库函数。以下是简单的代码示例(以TIA Portal编程环境为例):

// 定义Modbus RTU通讯相关变量
VAR
    mb_master : "MB_MASTER";
    mb_slave_address : USINT := 1;
    mb_req : BOOL := FALSE;
    mb_addr : UINT := 40001;
    mb_len : UINT := 10;
    mb_data : ARRAY[0..9] OF INT;
END_VAR

// 调用Modbus主站功能块
mb_master(
    REQ := mb_req,
    MB_ADDR := mb_slave_address,
    MB_MODE := 1,
    ADDR := mb_addr,
    LEN := mb_len,
    DATA_PTR := PWR_TO_DWORD(mb_data),
    DONE => done_mb,
    ERROR => error_mb,
    STATUS => status_mb
);

在这段代码中,我们先定义了Modbus主站功能块 mbmaster 以及相关的参数,如从站地址 mbslaveaddress,请求标志 mbreq,寄存器地址 mbaddr 和读取长度 mblen 等。然后调用 mbmaster 功能块,根据不同的返回值,如 donemb 表示通讯完成,errormb 表示通讯出错,statusmb 包含具体状态信息,来处理后续逻辑。

2. 与库卡C2机器人的Profibus通讯

Profibus是一种用于自动化系统的现场总线标准,用于与库卡C2机器人通讯时,要先配置好硬件连接,确保PLC与机器人都能识别彼此。在软件编程上,配置Profibus从站设备的GSD文件是关键步骤。以库卡机器人为例,在TIA Portal中导入其对应的GSD文件后,就可以像配置其他I/O模块一样配置机器人的通讯接口。

// 读取库卡机器人的输入数据
VAR
    kuka_inputs : ARRAY[0..15] OF BOOL;
BEGIN
    kuka_inputs := P#DB1.DBX0.0 BOOL 16; // 假设库卡机器人输入数据映射到DB1.DBX0.0开始的16个位
END

这里通过简单的数组赋值,将库卡机器人输入数据映射到我们定义的数组 kuka_inputs 中,方便后续程序逻辑使用。

3. 两个1200之间的S7通讯

S7通讯是西门子PLC之间常用的通讯方式,分为单边通讯和双边通讯。在本项目中,采用单边通讯方式。

西门子1215与1212做的程序,成功项目,一个程序包含modbus rtu通讯,与库卡C2机器人的profibus通讯,两个1200之间的S7通讯,与威纶通触摸屏的以太网通讯,包含变频器控制,伺服控制(伺服功能块本人将PTO控制常用指令集成在一个FB块里),使用4个台达伺服和2个步进,仅供各位参考

主站端代码:

// 定义S7通讯连接
VAR
    tsend_c : "TSEND_C";
    connection_id : UINT := 1;
    partner_ip : ARRAY[0..3] OF USINT := [192, 168, 0, 10]; // 从站IP地址
    send_data : ARRAY[0..9] OF INT;
BEGIN
    tsend_c(
        CONNECT := TRUE,
        ID := connection_id,
        ADDR := PWR_TO_DWORD(partner_ip),
        DATA := PWR_TO_DWORD(send_data),
        REQ := TRUE,
        DONE => done_send,
        ERROR => error_send,
        STATUS => status_send
    );
END

从站端代码:

// 定义S7通讯连接
VAR
    trcv_c : "TRCV_C";
    connection_id : UINT := 1;
    receive_data : ARRAY[0..9] OF INT;
BEGIN
    trcv_c(
        CONNECT := TRUE,
        ID := connection_id,
        DATA := PWR_TO_DWORD(receive_data),
        NDR => ndr_receive,
        ERROR => error_receive,
        STATUS => status_receive
    );
END

主站通过 TSENDC 功能块向从站发送数据,从站通过 TRCVC 功能块接收数据。CONNECT 用于建立连接,REQ 触发发送,NDR 表示有新数据到达。

4. 与威纶通触摸屏的以太网通讯

以太网通讯是实现PLC与触摸屏数据交互的常用手段。威纶通触摸屏配置相对简单,在触摸屏软件中设置好PLC的IP地址,数据地址对应关系后,PLC这边无需太多额外编程。但为了更好地展示数据交互,假设我们要向触摸屏发送一个实时数据。

// 定义要发送给触摸屏的数据
VAR
    touchscreen_data : INT := 0;
BEGIN
    touchscreen_data := Get_System_Value(); // 假设Get_System_Value()函数获取系统某个实时值
END

触摸屏通过读取PLC中对应的地址,就能实时获取 touchscreen_data 的值并显示。

二、运动控制

1. 变频器控制

变频器控制一般通过模拟量输出或通讯方式实现。以模拟量输出为例,通过PLC的模拟量模块输出一个对应频率的电压或电流信号给变频器。

// 定义模拟量输出变量
VAR
    analog_output : REAL := 0.0;
    frequency : REAL := 50.0; // 设定频率
BEGIN
    analog_output := frequency / 50.0 * 27648.0; // 将频率值转换为模拟量输出值(假设0 - 50Hz对应0 - 27648)
    "AQW0".VALUE := INT(analog_output); // 假设模拟量输出通道为AQW0
END

这里先将设定频率转换为模拟量模块能识别的数值,然后输出到对应的模拟量通道。

2. 伺服控制

伺服控制在本项目中至关重要。我将PTO(脉冲串输出)控制常用指令集成在一个FB块里,方便复用。

// FB块接口定义
INTERFACE
    VAR_INPUT
        enable : BOOL;
        position : DINT;
        velocity : DINT;
    END_VAR
    VAR_OUTPUT
        done : BOOL;
        error : BOOL;
    END_VAR
END_INTERFACE

// FB块内部逻辑
VAR
    pto_ctrl : "PTO_CTRL";
BEGIN
    pto_ctrl(
        ENABLE := enable,
        POSITION := position,
        VELOCITY := velocity,
        DONE => done,
        ERROR => error
    );
END

在主程序中调用这个FB块时,只需传入相应的使能信号 enable,目标位置 position 和速度 velocity 等参数,就能轻松实现伺服电机的运动控制。

3. 台达伺服和步进电机控制

对于4个台达伺服和2个步进电机,同样是基于上述的PTO控制原理。只不过在参数设置和具体指令细节上,要根据不同品牌和型号做相应调整。比如台达伺服可能需要特定的通讯协议或控制字设置,步进电机则要考虑细分等参数。

通过这次项目,深刻体会到西门子1200系列PLC在工业自动化项目中的强大功能和灵活性。希望这些分享能给大家带来一些启发和帮助,欢迎一起交流讨论。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐