博图 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;
相关推荐
老k一步步来3 小时前
STM32 HAL库CAN通信核心函数详解,参数以及作用
stm32·单片机·嵌入式硬件
Freak嵌入式7 小时前
版本混乱 / 依赖缺失?uPyPi:MicroPython 版 PyPI,彻底解决库管理混乱
linux·服务器·数据库·单片机·嵌入式硬件·性能优化·依赖倒置原则
wuyk5557 小时前
77.嵌入式 C 语言中 enum 枚举的工程化实践:告别魔法数字,提升代码可维护性
c语言·开发语言·stm32·单片机·嵌入式硬件
longxingiot8 小时前
轻量化单片机数传终端降低物联网开发门槛
单片机·嵌入式硬件·物联网
亿道电子Emdoor9 小时前
【Arm】MSP和PSP的区别简介
c语言·arm开发·单片机·mcu
国产HT1621B9 小时前
YL1650 LED驱动芯片详解:从原理到实战应用(附51单片机驱动代码)
stm32·单片机·嵌入式硬件·mcu·fpga开发·lcd驱动
BUG研究员_9 小时前
51单片机UART串口通信波特率产生过程
单片机·嵌入式硬件·51单片机
zcmodeltech9 小时前
智能矿井沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的感知-传输-控制一体化方案
服务器·数据库·分布式·stm32·单片机·嵌入式硬件
国科安芯12 小时前
ASC0101S自动双向电平转换原理深剖
单片机·嵌入式硬件·fpga开发·云计算·信息与通信
李永奉12 小时前
中科蓝讯SDK开发-开启串口Debug打印调试教程
单片机·嵌入式硬件·mcu·物联网·电脑