博图 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;
相关推荐
richxu202510016 小时前
学完了江科大STM32,下一步该怎么学?
stm32·单片机·嵌入式硬件·学习
Deitymoon6 小时前
STM32——SPI通信
stm32·单片机·嵌入式硬件
linbaiwan6667 小时前
内置VDD稳压管减少外围元件的三款LED驱动芯片集成度
单片机·嵌入式硬件
三品吉他手会点灯8 小时前
STM32F103 学习笔记-21-串口通信(第6节)-串口发送命令控制RGB灯
笔记·stm32·单片机·嵌入式硬件·学习
yongui478349 小时前
水表集中抄表器单片机实现方案
单片机·嵌入式硬件
iCxhust12 小时前
8086 Proteus 8253制作跑表
单片机·嵌入式硬件·proteus·微机原理·8088单板机
xiangw@GZ12 小时前
HDI 高密度互连板阶数的深度理解
服务器·单片机·嵌入式硬件
@残梦13 小时前
200、stm32定义缓冲区用在DMA上时,需要谨记4字节地址对齐规则
stm32·单片机·嵌入式硬件
深圳市尚想信息技术有限公司14 小时前
HTW1000 烧录器/仿真器 TENX(十速)/海速芯 MCU在线/串联烧录器 单片机开发 嵌入式系统应用
单片机·烧录器·单片机开发·tenx·十速·海速芯
嵌入式-老费15 小时前
esp开发与应用(驱动步进电机)
单片机·嵌入式硬件