博图 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;
相关推荐
学嵌入式的小杨同学14 小时前
STM32 进阶封神之路(四十一)FreeRTOS 中断管理、软件定时器、内存管理与低功耗模式|工业级实战完整版
vscode·stm32·单片机·嵌入式硬件·mcu·智能硬件·嵌入式实时数据库
蜕变的小白14 小时前
☆嵌入式硬件的学习 :51单片机 知识总结
单片机·嵌入式硬件·51单片机
学嵌入式的小杨同学14 小时前
STM32 进阶封神之路(四十)FreeRTOS 队列、信号量、互斥锁精讲|任务通信、同步、资源保护(超详细图文版)
c++·stm32·单片机·嵌入式硬件·mcu·架构·硬件架构
fie88892 天前
基于51单片机的航模遥控器6通道接收机程序
单片机·嵌入式硬件·51单片机
llilian_162 天前
选择北斗导航卫星信号模拟器注意事项总结 北斗导航卫星模拟器 北斗导航信号模拟器
功能测试·单片机·嵌入式硬件·测试工具·51单片机·硬件工程
Yyq130208696822 天前
MH2457,‌国产 32 位屏驱 MCU‌芯片,支持‌1080P 高清显示‌与‌以太网通信‌,广泛应用于两轮车仪表盘及工控屏等领域
单片机·嵌入式硬件
爱吃程序猿的喵2 天前
南邮计科电工电子实验B《RLC串联谐振电路》实验报告
单片机·嵌入式硬件
bubiyoushang8882 天前
利用STM32实现Modbus通信(RTU从机方案)
stm32·单片机·嵌入式硬件
cmpxr_2 天前
【单片机】常用设计模式
单片机·嵌入式硬件·设计模式
杰杰桀桀桀2 天前
4*4无时延矩阵键盘(非阻塞)--附代码链接
stm32·单片机·嵌入式硬件·矩阵·计算机外设·无时延矩阵键盘