西门子模块6ES7212-1AB23-0XB8参数选型
此设备应用松下PLC—FPX系列和斯美特触摸屏PL057-LST控制三相步进电机系统MOTEC3913系列进行一维的直线定位。
1、硬件配置
1.1 MOTEC EMD-FB-XZ 转动装置 如右图:
1.2 MOTEC步进系统SM3913 (电机)+STD3-220-70(驱动)1套
1.3 MOTEC精密行星减速机APE80-20 1台
1.4位传感器2只
1.5松下PLC可编程控制器AFPX-C30T +AFPX-COM1 – 1套;
1.6触摸屏057-LST – 1块;
2、系统控制原理:
2.1通过触摸屏进行运行参数设定(起点,终点,旋转角度,速度,步距,停止时间),工艺参数表下传、设备数据状态显示、故障报警自动前台显示、PLC内部变量监视等。
2.2设定的运行参数(距离,时间,加速度)计算出速度,通过脉冲输出给步进驱动器控制步进电机的运转。步进电机再带动旋转运动机构运动定位。
2.3旋转机构上装有2个限位开关,一个用于原点定位,一个是固定角度硬件定位。
3、本套系统的优点:
3.1集成度高,系统配线简单,稳定性高,降低了系统的故障概率。
3.2用了触摸屏作人机界面,使操作更简便、透明。
3.3这套系统可适应各种伺服,步进系统;脉冲控制,抗干扰能力强;高精度限位系统保障其安全性。
4、使用情况:
4.1设置好运动的技术参数,进行参数表下传,使操作简便。
4.2任何一个操作,由于各部分间的联锁,如操作不允许时,触摸屏会拒绝操作,并不向下输出指令不会产生误操作。
4.3现场设备发生故障时,也能在触摸屏和PLC上显示,提示操作者故障之所在,也给维修带来极大的方便。
4.4主要动作功能内容:
系统复位:使转台返回初始位置0°;
旋转指定角度:使转台相对现有位置旋转指定的角度,小步距1°,支持正向与反向;
到达指定角度:以初识位置为0°,使转台旋转到指定角度,小步距1°;
位置保持:使转台在该位置上保持一定时间,保持时间通过用户定义;
连续动作:指定起始角度、终止角度、步距、停留时间,使转台从起始角度开始按步距运行,每到达一个位置停留指定时间,直至达到终止角度。
技术圈子:http://q.163.com/ttplccom
4.5设备照片
冗余cpu和单cpu之间的以太网通讯组态可以分为如下两种情况:
1. 单cpu采用h类型的cpu的情况,此时直接在网络连接netpro中组态两站之间的冗余连接s7 connectionfault-tolerant,并在编程中使用通讯功能块组态即可。(siemens标准解决方案)
2. 单cpu为非h类型的普通400cpu的情况,此时netpro中只能组态两站之间的普通s7连接,在实际通讯过程中具体使用那个连接进行通讯需要用户在程序中编程判断。本文档将基于pcs7系统,演示冗余cpu与普通单cpu之间的以太网通讯的一种解决方案。本方案非siemens发布的标准解决方案,仅供用户参考学习。
基本原理:
在冗余cpu和单cpu之间组态两个s7连接,使用其中的一个连接作为默认连接在两cpu之间进行通讯,并相互传送一个心跳信号(定时脉冲信号,可以使用硬件时钟信号,cpu硬件参数中指定)。在cpu程序中编制一个看门狗,使用心跳信号对此看门狗进行时间复位。如果个s7连接通讯故障,通过此连接cpu接受不到心跳信号,看门狗时间溢出后则切换通讯连接到备用s7连接上。当默认连接恢复重新接收到心跳信号后,将连接切换回默认连接。
操作步骤:
step1:打开pcs7,插入as站,组态相应硬件和网络连接,网络连接组态如下图pic1所示,心跳信号设置如图pic2所示。
pic1:网络连接组态
pic2:硬件时钟设置
step2:加入cfc,并对上述原理进行实现,cfc实例如下图pic3所示。
pic3:cfc编程实例
图中使用了两个send_r发送功能块和两个rec_r接受功能块,分别对应两个s7连接。正常情况下仅使用默认s7连接的一对发送接收功能块。一个自制看门狗time_mon(用于监控心跳信号)和多个接受信号选择器sel_r(用于选择有效的接收信号)。
以上仅仅提供了冗余系统与单系统之间基于以太网通讯的一种解决方案,供大家参考学习。
在使用通讯功能块进行各站之间的通讯时,可以充分利用通讯功能块的err端对通讯连接状态进行监控。但在冗余系统和普通单系统之间的通讯情况下,使用err端会存在一些问题:如果冗余系统侧的某一cpu处于stop状态,在普通单cpu系统端使用此中断的连接接受数据时,err端不会为true。
通讯功能块中的id端可以用于指定此通讯功能块采用哪一个s7连接进行通讯,但需要注意的是:更改id号后,系统要求重新启动(或重新下载背景db块)。无法实现cpu运行过程中程序动态的对id的更改来切换通讯连接通路。
在实际应用中,客户对于wincc变量记录的显示需求各式各样,比如在excel或者word中显示变量记录,以特定的表格显示历史数据等等。当wincc集成的在线表格控件不能满足客户需要时,就需要通过自定义的方式来显示变量归档。主要分为两部分:
(1)从wincc中读取归档数据
(2)将归档数据以特定的格式显示出来
本文档介绍从wincc读取归档数据的通用方法,并以listview为例,介绍如何显示归档数据。对于其它控件,客户也可以参考本文档的脚本和编程思路。
1.测试环境
本文档基于wincc v7.0 asia,并通过ms bbbbbbs common controls 6.0 listview控件来显示读取的归档数据。需要的授权如下:
wincc连通性软件包v7.01订货号为:6av6371-1dr07-0ax0,授权通过wincc ole db访问过程值归档。
表 01
2.实现方式总体思路介绍
本文档通过调用wincc oledb数据库接口驱动(需要wincc连通性软件包的授权)来访问wincc的变量归档,并在微软的listview控件中显示归档数据。程序结构如下所示:
图1
其中,自定义函数的说明如下表所示:
表 02
具体代码见附件。
3.具体实现方法和代码
3.1 创建到归档数据库的连接
由于wincc的变量归档为压缩数据,必须通过wincc oledb来读取归档数据。对于已经安装wincc的计算机,不需要安装wincc连通性软件包。对于未安装wincc的客户端,必须安装wincc连通性软件包。该软件包含在winccv7.0的安装光盘中。
数据库连接的脚本如下所示:
'定义数据库连接变量
dim conn
set conn = createbbbbbb("adodb.connection")
'定义数据库查询脚本(可以根据需要自定义修改)
dim ssql
ssql="tag:r,'processvaluearchive\tag1','0000-00-0000:01:00.000','0000-00-00 00:00:00.000'"
'通过调用自定义的数据库连接函数,建立与数据库的连接
dim ors
set ors= winccdatasourceaccess(conn,ssql)
其中,自定义的数据库连接函数winccdatasourceaccess(connobj,psql),参数connobj为连接对象(adodb.connection),参数psql为要执行的sql查询语句,具体代码如下所示:
function winccdatasourceaccess(connobj,psql)
'建立到数据库的连接
on error resume next
'读取本地的wincc运行数据库名称
dim datasourcenamert,dataconnectionname
set datasourcenamert =runtime.tags("@datasourcenamert")
datasourcenamert.read
'定义数据库连接字符串
dim spro, sdsn,sser
spro = "provider=winccoledbprovider.1;"
sdsn = "catalog=" & datasourcenamert.value & ";"
sser = "data source=.\wincc"
dataconnectionname = spro + sdsn + sser
' 定义查询语句字符串
dim ssql
ssql=psql
'建立连接
dim ors,ocom,conn
set conn=connobj
conn.connectionbbbbbb = dataconnectionname
conn.cursorbbbbbbbb = 3
conn.open
' 创建查询的命令文本
set ors = createbbbbbb("adodb.recordset")
set ocom = createbbbbbb("adodb.command")
ocom.commandtype = 1
set ocom.activeconnection = conn
ocom.commandtext=ssql
'执行查询
set ors = ocom.execute
'返回结果
set winccdatasourceaccess=ors
if err.number <>; 0 then
msgbox "error code" & err.number & "source:" & err.source &"error debbbbbbion" & err.debbbbbbion
err.bbbbb
end if
on error go to 0
end function
自定义函数的创建过程为:在wincc项目管理器中右键点击全局脚本?打开vbs全局脚本编辑器?项目函数?新建函数。具体如下图所示:
图2
3.2 注册microsoft listview control 6.0控件
打开wincc图形编辑器。在右侧的对象选项板中单击“控件”,选中“activexcontrol”,点击右键,选择“添加移除”。在弹出菜单中,选择“microsoft listview control6.0”,点击“ok”确认。
图3
之后,将“microsoft listview control6.0”拖动到画面编辑器中,并将对象名称设置为control1。
注意:在脚本中,当定义listview对象时用到对象名称control1。详情请参考图1的步骤2。
3.3 添加listview 控件的列名
在listview中添加列名,步骤如图1的步骤3。自定义函数addlistviewheadercolumn(precordset,plistview)的具体代码如下所示:
function addcolumnheader(precordset, plistview)
'添加listview列名
'用于错误捕获和处理
on error resume next
dim ors,columncount
set ors=createbbbbbb("adodb.recordset")
set ors=precordset
'获取数据库中的列数
columncount=ors.fields.count
'定义操作的listview对象
dim listviewt
set listviewt=plistview
'清空listview对象的列数
listviewt.columnheaders.bbbbb
'用查询的数据库表格列名来为listview添加列名(*2)
dim addcolumnindex
for addcolumnindex=0 to columncount-1
listviewt.columnheaders.add , ,cstr(ors.fields(addcolumnindex).name)
next
'发生错误,提示消息框
if err.number <>; 0 then
msgbox "addcolumnheader函数报错,source:" & err.source & vbcr &"error debbbbbbion:" & err.debbbbbbion
err.bbbbb
end if
on error goto 0
end function
3.4 填充listview 控件
在listview中添加列名,步骤如图1的步骤4。自定义函数filllistview (precordset,plistview) 的具体代码如下所示:
function filllistview(precordset,plistview)
'用数据库查询的值填充listview
on error resume next
'获取查询记录条数
dim recordscount,ors
set ors=createbbbbbb("adodb.recordset")
set ors=precordset
recordscount=ors.recordcount
'定位到条记录
if (recordscount >; 0) then
ors.movefirst
'定义大的查询条目(*3)
dim maxline,n
maxline = 10
n=0
'填充数据值列
do while (not ors.eof and n < maxline)
n = n + 1
dim oitem,listviewt
set listviewt=plistview
set oitem = listviewt.listitems.add()
oitem.text = ors.fields(0).value
oitem.subitems(1) = ors.fields(1).value
oitem.subitems(2) = bbbbatnumber(ors.fields(2).value, 4)
oitem.subitems(3) = hex(ors.fields(3).value)
oitem.subitems(4) = hex(ors.fields(4).value)
ors.movenext
loop
3.5 关闭到归档数据库的连接
关闭与数据库的连接并释放资源,步骤如图1的步骤5。自定义函数winccdatasourceclose(precordset,connobj)的具体代码如下图所示:
function winccdatasourceclose(precordset,connobj)
'关闭数据库连接,释放资源
'获取连接和查询对象
dim ors,conn
set ors=precordset
set conn=connobj
ors.close
set ors = nothing
conn.close
set conn = nothing
end function
3.6 运行结果
本文档介绍的脚本,其运行结果如下图所示:
图4
3.7 更改代码以满足更广泛的需求
对于不同客户的定制化需求,可以通过修改少量代码实现。
(1) 不同的查询需求,修改ssql变量的值。
'修改变量ssql的值
dim ssql
比如,如果需要动态制定查询时间,可以在画面中输入查询日期,通过hmiruntime.tags(“变量名”)来获得查询条件,再赋值给ssql。
(2) listview需要使用不同的列名。
修改函数addlistviewheadercolumn中的如下内容:
‘用查询的数据库表格列名来为listview添加列名 (*2)
dim addcolumnindex
for addcolumnindex=0 to columncount-1
next
(3) listview需要填充不一样的行数和内容。
修改函数filllistview中的如下内容:
dim maxline,n
maxline = 10 '改变此值,可以更改大显示的条目数
n=0
'修改填充内容,请修改下面do while循环中的代码
do while (not ors.eof and n < maxline)