博图 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;
相关推荐
悠哉悠哉愿意3 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
Lester_11013 天前
STM32霍尔传感器输入口设置为复用功能输入口时,还能用GPIO函数直接读取IO的状态吗
stm32·单片机·嵌入式硬件·电机控制
三佛科技-187366133973 天前
120W小体积碳化硅电源方案(LP8841SC极简方案12V10A/24V5A输出)
单片机·嵌入式硬件
z20348315203 天前
STM32F103系列单片机定时器介绍(二)
stm32·单片机·嵌入式硬件
Alaso_shuang3 天前
STM32 核心输入、输出模式
stm32·单片机·嵌入式硬件
2501_918126913 天前
stm32死锁是怎么实现的
stm32·单片机·嵌入式硬件·学习·个人开发
z20348315203 天前
STM32F103系列单片机定时器介绍(一)
stm32·单片机
星马梦缘3 天前
驱动层开发——蜂鸣器驱动
stm32·单片机·嵌入式硬件·hal·驱动
小刘爱玩单片机3 天前
【stm32简单外设篇】- 测速传感器模块(光电)
c语言·stm32·单片机·嵌入式硬件
hateregiste3 天前
嵌入式软件开发中常见知识点问答集锦!
c语言·单片机·嵌入式软件