S7-1500 读取V90/S120的常用驱动参数

此程序已更新,可以下载例子程序

https://files.cnblogs.com/files/lion-zheng/PLC_async_drive.zip

1

不需要理解非周期通讯,调用这个FB就可以读取常用的驱动状态,程序块已经封装了非周期通讯功能。

故障代码、报警代码、扭矩、电流、直流母线电压、电机温度、驱动器温度

功率、转速

本文地址

http://www.cnblogs.com/lion-zheng/p/7853852.html

非周期通讯参考资料可在在西门子中文下载中心 搜索 非周期

http://www.ad.siemens.com.cn/download/

2

此功能块的输入管脚

name type datatype description
Hardware_ID in HW_IO Profinet/Profibus网络标识ID *
Drive_Number in int V90/CU310 = 1, G120 = 2
Pulse in bool 连接5HZ或2.5HZ的脉冲信号
V90 in bool 区分驱动类型,V90 = 1, cu310 = 0

*HardwareID是以上参数中比较特别的一个,可以在TIA portal的Device configuration中找到。

如果一个设备有两个HardwareID,那么很可能,两个都可以用。

HardwareID也可以在TIA portal的Tags -> Default tag table -> System constants 中找到。

功能块的输出管脚

name type datatype description
FaultNumber out DINT 故障代码
AlarmNumber out DINT 报警代码
ActualTorque out real 扭矩
ActualCurrent out real 电流
DCvoltage out real 直流母线电压
MotorTemp out real 电机温度
DriveTemp out real 驱动器温度
ActualPower out real 电机实际功率
ActualRPM out real 电机实际转速

功能块的调用效果,2个V90,1个CU310,可见只有HardwareID管脚略有不同

至此为止,你应该已经知道了此FB的功能和使用方法。下文是一些程序内部实现的细节。

3

在编写此程序块时,发现一个 WRREC 和 RDREC 程序块的特点。

当我们读取参数时,需要先调用WRREC来发送命令给驱动器,WRREC会返回Done信号。然而这个Done信号只保证了发送完成,并无法确认驱动已经准备好。因此我们需要延时一段时间,等待驱动准备好数据。V90需要大约50ms,S120需要30ms。延时后,再调用RDREC。发现此问题感谢我们的朋友 @内存1KB 的提醒。

1)正确的状态,WRREC之后,立即发送RDREC,出现故障

  1. 正确的时序,WRREC之后,延时50ms,再发送RDREC,没有故障

4

程序的细节

  • 定义报文头
  • 定义每一个需要读取的参数
  • 调用WRREC
  • 延时,并调用RDREC
  • 输出变量到FB接口

//Telegram head
#write_record[0] := #task;
#write_record[1] := 01;//01 read-task, 02 write-task
#write_record[2] := INT_TO_BYTE(#Drive_Number);
#write_record[3] := 16#9;//number of parameter //Parameter1 r2131 (16#853) fault number
#write_record[4] := 16#10;
#write_record[5] := 16#01;//number of index
#write_record[6] := 16#8;//parameter number
#write_record[7] := 16#53;//parameter number
#write_record[8] := 16#0;//first index number = 0
#write_record[9] := 16#0;//first index number = 0 //Parameter2 r2132 (16#854) alarm number
#write_record[10] := 16#10;
#write_record[11] := 16#01;//number of index
#write_record[12] := 16#8;//parameter number
#write_record[13] := 16#54;//parameter number
#write_record[14] := 16#0;//first index number = 0
#write_record[15] := 16#0;//first index number = 0 //Parameter3 r31 (16#1F) actual torque smoothed
#write_record[16] := 16#10;
#write_record[17] := 16#01;//number of index
#write_record[18] := 16#0;//parameter number
#write_record[19] := 16#1F;//parameter number
#write_record[20] := 16#0;//first index number = 0
#write_record[21] := 16#0;//first index number = 0 //Parameter4 r26 (16#1A) DC voltage smoothed
#write_record[22] := 16#10;
#write_record[23] := 16#01;//number of index
#write_record[24] := 16#0;//parameter number
#write_record[25] := 16#1A;//parameter number
#write_record[26] := 16#0;//first index number = 0
#write_record[27] := 16#0;//first index number = 0 //Parameter5 r27 (16#1B) ActualCurrent
#write_record[28] := 16#10;
#write_record[29] := 16#01;//number of index
#write_record[30] := 16#0;//parameter number
#write_record[31] := 16#1B;//parameter number
#write_record[32] := 16#0;//first index number = 0
#write_record[33] := 16#0;//first index number = 0 //Parameter6 r21 (16#15) ActualRpm
#write_record[34] := 16#10;
#write_record[35] := 16#01;//number of index
#write_record[36] := 16#0;//parameter number
#write_record[37] := 16#15;//parameter number
#write_record[38] := 16#0;//first index number = 0
#write_record[39] := 16#0;//first index number = 0 //Parameter7 r32 (16#20) ActualPower
#write_record[40] := 16#10;
#write_record[41] := 16#01;//number of index
#write_record[42] := 16#0;//parameter number
#write_record[43] := 16#20;//parameter number
#write_record[44] := 16#0;//first index number = 0
#write_record[45] := 16#0;//first index number = 0 //Parameter8 r35 (16#23) MotorTemp
//Parameter8 r632 (16#278)
#write_record[46] := 16#10;
#write_record[47] := 16#01;//number of index
IF #v90 THEN
#write_record[48] := 16#2;//parameter number
#write_record[49] := 16#78;//parameter number
ELSE
#write_record[48] := 16#0;//parameter number
#write_record[49] := 16#23;//parameter number
END_IF;
#write_record[50] := 16#0;//first index number = 0
#write_record[51] := 16#0;//first index number = 0 //Parameter9 r37 (16#25) DriveTemp
#write_record[52] := 16#10;
#write_record[53] := 16#01;//number of index
#write_record[54] := 16#0;//parameter number
#write_record[55] := 16#25;//parameter number
#write_record[56] := 16#0;//first index number = 0
#write_record[57] := 16#0;//first index number = 0 #R_TRIG_Instance(CLK:=#Pulse);
#WRREC_REQ := #R_TRIG_Instance.Q AND NOT #WRREC_BUSY AND NOT #REREC_BUSY; #WRREC_Instance(REQ:=#WRREC_REQ,
ID:=#Hardware_ID,
INDEX:=47,
DONE=>#WRREC_DONE,
BUSY=>#WRREC_BUSY,
ERROR=>#WRREC_ERROR,
STATUS=>#WRREC_STATUS,
RECORD:= #write_record); #IEC_Timer_0_Instance(IN := #Pulse,
PT := T#100MS); //#R_TRIG_Instance_1(CLK := #IEC_Timer_0_Instance.Q,
// Q => #REREC_REQ); #REREC_REQ := #WRREC_DONE;
#RDREC_Instance(REQ:= #REREC_REQ,
ID:= #Hardware_ID,
INDEX:= 47,
VALID=> #REREC_VALID,
BUSY=> #REREC_BUSY,
ERROR=> #REREC_ERROR,
STATUS=> #REREC_STATUS,
RECORD:= #read_record); //byte 0,1,2,3 telegram head //byte 4,5,6,7 ,parameter 1 ,r2131,fault code
"Tag_23" := #read_record[6];
"Tag_24" := #read_record[7];
#FaultNumber := WORD_TO_DINT("Tag_25"); //byte 8,9,10,11 ,parameter 2,r2132,alarm code
"Tag_23" := #read_record[10];
"Tag_24" := #read_record[11];
#AlarmNumber := WORD_TO_DINT("Tag_25"); //byte 12,13,14,15,16,17 ,parameter 3, r31 actual torque
"Tag_23" := #read_record[14];
"Tag_24" := #read_record[15];
"Tag_26" := #read_record[16];
"Tag_27" := #read_record[17];
#ActualTorque := "Tag_28"; //byte 18,19,20,21,22,23 ,parameter 4, r26 DC voltage
"Tag_23" := #read_record[20];
"Tag_24" := #read_record[21];
"Tag_26" := #read_record[22];
"Tag_27" := #read_record[23];
#DCvoltage := "Tag_28"; //byte 24,25,26,27,28,29 ,parameter 5, r27 actual current
"Tag_23" := #read_record[26];
"Tag_24" := #read_record[27];
"Tag_26" := #read_record[28];
"Tag_27" := #read_record[29];
#ActualCurrent := "Tag_28"; //byte 30,31,32,33,34,35 ,parameter 6, r21 actual RPM
"Tag_23" := #read_record[32];
"Tag_24" := #read_record[33];
"Tag_26" := #read_record[34];
"Tag_27" := #read_record[35];
#ActualRPM := "Tag_28"; //byte 36,37,38,39,40,41 ,parameter 7, r32 actual POWER
"Tag_23" := #read_record[38];
"Tag_24" := #read_record[39];
"Tag_26" := #read_record[40];
"Tag_27" := #read_record[41];
#ActualPower := "Tag_28"; //byte 42,43,44,45,46,47 ,parameter 8, r35 MOTOR TEMP
"Tag_23" := #read_record[44];
"Tag_24" := #read_record[45];
"Tag_26" := #read_record[46];
"Tag_27" := #read_record[47];
#MotorTemp := "Tag_28"; //byte 48,49,50,51,52,53 ,parameter 9, r35 MOTOR TEMP
"Tag_23" := #read_record[50];
"Tag_24" := #read_record[51];
"Tag_26" := #read_record[52];
"Tag_27" := #read_record[53];
#DriveTemp := "Tag_28";

S7-1500 读取V90/S120/S210/G120的常用驱动参数的更多相关文章

  1. python学习笔记3.1_数据读取常用函数参数

    一.read_table/read_csv常用函数参数 1.path:表明文件系统位置的字符串.url或文件型对象 2.sep或delimiter:用于分隔每行字段的字符序列或正则表达式 3.head ...

  2. Sharepoint 问题集锦 - 外部列表(external list) - 读取当前用户上下文或用户名作为筛选参数

    在创建外部列表过程中,往往需要添加筛选参数,而较多开发用户,会关心如何在外部列表中,只显示当前用户相关的行.本例子中,我们以任务数据表来做例子,看看如何实现这个需求. 1)数据表tbl_task: t ...

  3. Php连接及读取和写入mysql数据库的常用代码

    在这里我总结了常用的PHP连接MySQL数据库以及读取写入数据库的方法,希望能够帮到你,当然也是作为我自己的一个回顾总结. 1.为了更好地设置数据连接,一般会将数据连接所涉及的值定义成变量. $mys ...

  4. OpenCV计算机视觉学习(1)——图像基本操作(图像视频读取,ROI区域截取,常用cv函数解释)

    1,计算机眼中的图像 我们打开经典的 Lena图片,看看计算机是如何看待图片的: 我们点击图中的一个小格子,发现计算机会将其分为R,G,B三种通道.每个通道分别由一堆0~256之间的数字组成,那Ope ...

  5. WPF RichTextBox读取存储文本的方法和常用属性

    1. 取得已被选中的内容: (1)使用 RichTextBox.Document.Selection属性(2)访问RichTextBox.Document.Blocks属性的“blocks”中的Tex ...

  6. Web应用运行原理

    web应用启动做了什么? 读取web.xml文件   - web.xml常用配置参数: 1).context-param(上下文参数)2).listener(监听器配置参数)3).filter(过滤器 ...

  7. C# 读写西门子PLC数据,包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC

    本文将使用一个gitHub开源的组件技术来读写西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 官方 ...

  8. python 读写西门子PLC 包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC

    本文将使用一个gitHub开源的组件技术来读写西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 nu ...

  9. java android 读写西门子PLC数据,包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC

    本文将使用一个gitHub开源的组件技术来读写西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 gi ...

随机推荐

  1. P2905 [USACO08OPEN]农场危机Crisis on the Farm

    传送门 DP 设 f [ i ] [ j ] [ k ] 表示已经走了 i 步,向上走了 j 步,向右走了 k 步时能拯救的最多奶牛数(j,k可以为负,表示反向) 设 g [ i ] [ j ] 表示 ...

  2. poj2083 分形(图形的递归)

    题目传送门 代码有注释. #include<iostream> #include<algorithm> #include<cstdlib> #include< ...

  3. 2016"百度之星" - 资格赛(Astar Round1)D

    Problem Description 度熊所居住的 D 国,是一个完全尊重人权的国度.以至于这个国家的所有人命名自己的名字都非常奇怪.一个人的名字由若干个字符组成,同样的,这些字符的全排列的结果中的 ...

  4. java——注解处理器

    Java提供了两种方式来处理注解:第一种是利用运行时反射机制:另一种是使用Java提供的API来处理编译期的注解. 运行时通过反射:仅当定义的注解的@Retention为RUNTIME时,才能够通过运 ...

  5. Vue在单独引入js文件中使用ElementUI的组件

    Vue在单独引入js文件中使用ElementUI的组件 问题场景: 我想在vue中的js文件中使用elementUI中的组件,因为我在main.js中引入了element包和它的css,并挂载到了全局 ...

  6. Linux环境搭建禅道项目管理工具

    1.开源版安装包下载 [root@iZbp ~]# wget http://dl.cnezsoft.com/zentao/9.0.1/ZenTaoPMS.9.0.1.zbox_64.tar.gz 2. ...

  7. Win2003 控制面板 打不开

    windown 2003 控制面板打不开 在运行框中输入regedit,进入注册表中的 HKEY_LOCAL_MACHINE/SYSTEM\Current ControlSet\Control\NLS ...

  8. Broken Keyboard (a.k.a. Beiju Text) UVA - 11988 (链表)

    题目链接:https://vjudge.net/problem/UVA-11988 题目大意:输入一个字符串,输出在原本应该是怎么样的?  具体方法是 碰到' [ ' 回到最前面  碰到‘ ]’  回 ...

  9. DRF-->2序列化组件的使用和接口设计--get,post,put,delete&优化组件

    !!!!! !!!!! 记住这个图 !!!!! 上篇博客说道DRF序列化组件的get,只是简单的举一个实例,然而在现实生活中我们前后端进行交互的时候更多的用到了Json数据格式,这也就是说前后端交互的 ...

  10. git使用笔记-基础篇

    git使用手册:https://git-scm.com/book/zh/v1/ 一.分支 1.查看所有本地分支 git branch 2.查看所有本地分支和远程分支 git branch -a 3.查 ...