博图 S7-1200 PLC 与西门子 V20 变频器的 USS 通讯案例:读电流电压轮训与写入加速时间

博图S 7-1200PLC USS 通讯西门子V20变频器案例,读电流电压轮训,写入变频器加速时间,有课件分析

最近在项目中用到了博图 S7-1200 PLC 与西门子 V20 变频器通过 USS 通讯来实现一些功能,感觉挺有意思的,在这里给大家分享一下具体的实现过程和相关代码分析。

一、硬件连接

首先得把硬件连接好,PLC 的 CPU 与 V20 变频器通过 USS 协议进行通讯。一般就是将 PLC 的通信端口(比如 PORT1)与变频器的 USS 接口连接起来,注意要确保连接正确,不然通讯就会出问题。

二、软件配置

  1. PLC 软件配置
    在博图软件中,打开项目后,在设备组态里找到 CPU,然后在属性中找到"PROFINET 接口",在其"属性"的"常规"选项卡中确保以太网接口的设置正确。接着在"属性"的"保护"选项卡中设置好访问权限等。

对于 USS 通讯,还需要在设备组态中添加"通信处理器",选择合适的通讯模块(比如 CM1241 RS485)。添加完成后,双击该模块进行属性设置,在"常规"选项卡中设置通讯的波特率、奇偶校验等参数,要与变频器的 USS 通讯参数一致。这里假设波特率设置为 9600,无奇偶校验。

  1. 变频器设置
    西门子 V20 变频器要设置成 USS 通讯模式。通过变频器的操作面板,进入参数设置界面,找到通讯相关参数。设置变频器的站地址,比如设为 1,波特率设为 9600,数据位 8 位,停止位 1 位,无奇偶校验等,要和 PLC 的设置匹配。

三、编程实现

读电流电压轮训

  1. 代码部分
stl 复制代码
// 定义 USS 通讯背景数据块
OB1_DB1:DB1
// 定义变量
VAR
    USS_CTRL_DB1.DRV_NAME : ARRAY[0..7] OF CHAR := 'V20     ';
    USS_CTRL_DB1.CTRL_MODE := 16#0000;
    USS_CTRL_DB1.OP_MODE := 16#0000;
    USS_CTRL_DB1.COM_RATE := 9600;
    USS_CTRL_DB1.PARITY := 0;
    USS_CTRL_DB1.STOP_BITS := 1;
    USS_CTRL_DB1.ADDR_MODE := 1;
    USS_CTRL_DB1.STATION := 1;
    USS_CTRL_DB1.MODE_SEL := 16#0000;
    USS_CTRL_DB1.CMD_ID := 16#0000;
    USS_CTRL_DB1.PARAMETER := 16#0000;
    USS_CTRL_DB1.REQ_SEND := 0;
    USS_CTRL_DB1.DONE := 0;
    USS_CTRL_DB1.ERROR := 0;
    USS_CTRL_DB1.STATUS := 0;
    USS_CTRL_DB1.DATA_PTR := P#DB1.DBX0.0 BYTE 256;
    USS_CTRL_DB1.DATA_LEN := 256;
    USS_CTRL_DB1.RESPONSE := 0;
    USS_CTRL_DB1.COMM_ERR := 0;
    USS_CTRL_DB1.ACK_ERR := 0;
    USS_CTRL_DB1.DATA_VAL := 0;
    USS_CTRL_DB1.DATA_SCALE := 0;
    USS_CTRL_DB1.DATA_OFFSET := 0;
    USS_CTRL_DB1.DATA_STATUS := 0;
    USS_CTRL_DB1.DATA_UNIT := 0;
    USS_CTRL_DB1.DATA_OVERFLOW := 0;
    USS_CTRL_DB1.DATA_UNDERFLOW := 0;
    USS_CTRL_DB1.DATA_ERROR := 0;
    USS_CTRL_DB1.DATA_TYPE := 0;
    USS_CTRL_DB1.DATA_COUNT := 0;
    USS_CTRL_DB1.DATA_READY := 0;
    USS_CTRL_DB1.DATA_TRANSFER := 0;
    USS_CTRL_DB1.DATA_ACK := 0;
    USS_CTRL_DB1.DATA_NACK := 0;
    USS_CTRL_DB1.DATA_TIMEOUT := 0;
    USS_CTRL_DB1.DATA_PENDING := 0;
    USS_CTRL_DB1.DATA_ABORT := 0;
    USS_CTRL_DB1.DATA_RESET := 0;
    USS_CTRL_DB1.DATA_RETRY := 0;
    USS_CTRL_DB1.DATA_WAIT := 0;
    USS_CTRL_DB1.DATA_RUNNING := 0;
    USS_CTRL_DB1.DATA_DONE := 0;
    USS_CTRL_DB1.DATA_ERROR_CODE := 0;
    USS_CTRL_DB1.DATA_ERROR_MSG := '';
    USS_CTRL_DB1.DATA_ERROR_INFO := 0;
    USS_CTRL_DB1.DATA_ERROR_ADDR := 0;
    USS_CTRL_DB1.DATA_ERROR_LEN := 0;
    USS_CTRL_DB1.DATA_ERROR_DATA := 0;
    USS_CTRL_DB1.DATA_ERROR_COUNT := 0;
    USS_CTRL_DB1.DATA_ERROR_MAX := 0;
    USS_CTRL_DB1.DATA_ERROR_MIN := 0;
    USS_CTRL_DB1.DATA_ERROR_AVG := 0;
    USS_CTRL_DB1.DATA_ERROR_SUM := 0;
    USS_CTRL_DB1.DATA_ERROR_STDDEV := 0;
    USS_CTRL_DB1.DATA_ERROR_VARIANCE := 0;
    USS_CTRL_DB1.DATA_ERROR_RANGE := 0;
    USS_CTRL_DB1.DATA_ERROR_THRESHOLD := 0;
    USS_CTRL_DB1.DATA_ERROR_TRIGGER := 0;
    USS_CTRL_DB1.DATA_ERROR_CLEAR := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_ADDR := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_LEN := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_DATA := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_COUNT := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_MAX := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_MIN := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_AVG := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_SUM := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_STDDEV := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_VARIANCE := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_RANGE := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_THRESHOLD := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_TRIGGER := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_CLEAR := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_DATA_PTR := P#DB1.DBX0.0 BYTE 256;
    USS_CTRL_DB1.DATA_ERROR_LOG_LEN := 256;
    USS_CTRL_DB1.DATA_ERROR_LOG_DATA := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_COUNT := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_MAX := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_MIN := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_AVG := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_SUM := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_STDDEV := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_VARIANCE := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_RANGE := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_THRESHOLD := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_TRIGGER := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_CLEAR := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_DATA_PTR := P#DB1.DBX0.0 BYTE 256;
    USS_CTRL_DB1.DATA_ERROR_LOG_LEN := 256;
    USS_CTRL_DB1.DATA_ERROR_LOG_DATA := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_COUNT := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_MAX := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_MIN := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_AVG := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_SUM := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_STDDEV := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_VARIANCE := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_RANGE := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_THRESHOLD := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_TRIGGER := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_CLEAR := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_DATA_PTR := P#DB1.DBX0.0 BYTE 256;
    USS_CTRL_DB1.DATA_ERROR_LOG_LEN := 256;
    USS_CTRL_DB1.DATA_ERROR_LOG_DATA := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_COUNT := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_MAX := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_MIN := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_AVG := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_SUM := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_STDDEV := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_VARIANCE := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_RANGE := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_THRESHOLD := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_TRIGGER := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_CLEAR := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_DATA_PTR := P#DB1.DBX0.0 BYTE 256;
    USS_CTRL_DB1.DATA_ERROR_LOG_LEN := 256;
    USS_CTRL_DB1.DATA_ERROR_LOG_DATA := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_COUNT := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_MAX := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_MIN := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_AVG := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_SUM := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_STDDEV := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_VARIANCE := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_RANGE := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_THRESHOLD := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_TRIGGER := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_CLEAR := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_DATA_PTR := P#DB1.DBX0.0 BYTE 256;
    USS_CTRL_DB1.DATA_ERROR_LOG_LEN := 256;
    USS_CTRL_DB1.DATA_ERROR_LOG_DATA := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_COUNT := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_MAX := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_MIN := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_AVG := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_SUM := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_STDDEV := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_VARIANCE := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_RANGE := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_THRESHOLD := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_TRIGGER := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_CLEAR := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_DATA_PTR := P#DB1.DBX0.0 BYTE 256;
    USS_CTRL_DB1.DATA_ERROR_LOG_LEN := 256;
    USS_CTRL_DB1.DATA_ERROR_LOG_DATA := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_COUNT := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_MAX := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_MIN := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_AVG := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_SUM := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_STDDEV := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_VARIANCE := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_RANGE := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_THRESHOLD := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_TRIGGER := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_CLEAR := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_DATA_PTR := P#DB1.DBX0.0 BYTE 256;
    USS_CTRL_DB1.DATA_ERROR_LOG_LEN := 256;
    USS_CTRL_DB1.DATA_ERROR_LOG_DATA := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_COUNT := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_MAX := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_MIN := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_AVG := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_SUM := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_STDDEV := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_VARIANCE := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_RANGE := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_THRESHOLD := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_TRIGGER := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_CLEAR := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_DATA_PTR := P#DB1.DBX0.0 BYTE 256;
    USS_CTRL_DB1.DATA_ERROR_LOG_LEN := 256;
    USS_CTRL_DB1.DATA_ERROR_LOG_DATA := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_COUNT := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_MAX := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_MIN := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_AVG := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_SUM := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_STDDEV := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_VARIANCE := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_RANGE := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_THRESHOLD := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_TRIGGER := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_CLEAR := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_DATA_PTR := P#DB1.DBX0.0 BYTE 256;
    USS_CTRL_DB1.DATA_ERROR_LOG_LEN := 256;
    USS_CTRL_DB1.DATA_ERROR_LOG_DATA := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_COUNT := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_MAX := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_MIN := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_AVG := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_SUM := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_STDDEV := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_VARIANCE := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_RANGE := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_THRESHOLD := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_TRIGGER := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_CLEAR := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_DATA_PTR := P#DB1.DBX0.0 BYTE 256;
    USS_CTRL_DB1.DATA_ERROR_LOG_LEN := 256;
    USS_CTRL_DB1.DATA_ERROR_LOG_DATA := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_COUNT := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_MAX := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_MIN := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_AVG := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_SUM := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_STDDEV := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_VARIANCE := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_RANGE := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_THRESHOLD := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_TRIGGER := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_CLEAR := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_DATA_PTR := P#DB1.DBX0.0 BYTE 256;
    USS_CTRL_DB1.DATA_ERROR_LOG_LEN := 256;
    USS_CTRL_DB1.DATA_ERROR_LOG_DATA := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_COUNT := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_MAX := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_MIN := 0;
    USS_CTRL_DB1.DATA_ERROR_LOG_AVG := 0;
相关推荐
llilian_167 小时前
总线授时卡 CPCI总线授时卡的工作原理及应用场景介绍 CPCI总线校时卡
运维·单片机·其他·自动化
The Electronic Cat9 小时前
树莓派使用串口启动死机
单片机·嵌入式硬件·树莓派
先知后行。12 小时前
常见元器件
单片机·嵌入式硬件
Free丶Chan14 小时前
dsPIC系列-1:dsPIC33点灯 [I/O、RCC、定时器]
单片机·嵌入式硬件
v先v关v住v获v取15 小时前
塔式立体车库5张cad+设计说明书+三维图
科技·单片机·51单片机
Ghost Face...16 小时前
U-Boot与PMON:配置与设备树解析对比
linux·单片机·嵌入式硬件
冲,干,闯16 小时前
操作MCU内存
单片机·嵌入式硬件
猫猫的小茶馆16 小时前
【ARM】从零封装STM32标准库
汇编·arm开发·stm32·单片机·嵌入式硬件·架构
国科安芯17 小时前
商业卫星光电载荷控制系统中MCU抗辐照性能评估方法研究
单片机·嵌入式硬件·数码相机·性能优化·架构·risc-v