西门子模块6ES7350-1AH03-0AE0性能参数
在实际应用中,客户对于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 ole db数据库接口驱动(需要wincc连通性软件包的授权)来访问wincc的变量归档,并在微软的listview控件中显示归档数据。程序结构如下所示:
图1
其中,自定义函数的说明如下表所示:
表 02
具体代码见附件。
3.具体实现方法和代码
3.1 创建到归档数据库的连接
由于wincc的变量归档为压缩数据,所以必须通过wincc ole db来读取归档数据。对于已经安装wincc的计算机,不需要安装wincc连通性软件包。对于未安装wincc的客户端,必须安装wincc连通性软件包。该软件包含在wincc v7.0的安装光盘中。
数据库连接的脚本如下所示:
'定义数据库连接变量
dim conn
set conn = createbbbbbb("adodb.connection")
'定义数据库查询脚本(可以根据需要自定义修改)
dim ssql
ssql="tag:r,'processvaluearchive\tag1',':01:00.000',':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图形编辑器。在右侧的对象选项板中单击“控件”,选中“activex control”,点击右键,选择“添加移除”。在弹出菜单中,选择“microsoft listview control 6.0”,点击“ok”确认。
图3
之后,将“microsoft listview control 6.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)
1、引言
近年来可编程序控制器(PLC)以及变频调速技术日益发展,性能价格比日益**,并在机械、冶金、制造、化工、纺织等领域得以普及和应用。为满足温度、速度、**等工艺变量的控制要求,常常要对这些模拟量进行控制,PLC模拟量控制模块的使用也日益广泛。
通常情况下,变频器的速度调节可采用键盘调节或电位器调节方式,但是,在速度要求根据工艺而变化时,仅利用上述两种方式则不能满足生产控制要求,因此,我们须利用PLC灵活编程及控制的功能,实现速度因工艺而变化,从而保证产品的合格率。
2、变频器简介
交流电动机的转速n公式为:
式中:f—频率;
p—极对数;
s—转差率(0~3%或0~6%)。
由转速公式可见,改变三相异步电动机电源频率,可以改变旋转磁通势的同步转速,达到调速的目的。额定频率称为基频,变频调速时,可以从基频向上调(恒功率调速),也可以从基频向下调(恒转距调速)。因此变频调速方式,比改变极对数p和转差率s两个参数简单得多。同时还具有很好的性价比、操作方便、机械特性较硬、静差率小、转速稳定性好、调速范围广等优点,因此变频调速方式拥有广阔的发展前景。
3、PLC模拟量控制在变频调速的应用
PLC包括许多的特殊功能模块,而模拟量模块则是其中的一种。它包括数模转换模块和模数转换模块。例如数模转换模块可将一定的数字量转换成对应的模拟量(电压或电流)输出,这种转换具有较高的精度。
在设计一个控制系统或对一个已有的设备进行改造时,常常会需要对电机的速度进行控制,利用PLC的模拟量控制模块的输出来对变频器实现速度控制则是一个经济而又简便的方法。
下面以三菱FX2N系列PLC为例进行说明。同时选择FX2N-2DA模拟量模块作为对变频器进行速度控制的控制信号输出。如图1所示,控制系统采用具有两路模拟量输出的模块对两个变频器进行速度控制。
图2为变频器的控制及动力部分,这里的变频器采用三菱S540型,PLC的模拟量速度控制信号由变频器的端子2、5输入。
3.1系统中PLC模拟量控制变频调速需要解决的主要问题
(1)模拟量模块输出信号的选择
通过对模拟量模块连接端子的选择,可以得到两种信号,0~10V或0~5V电压信号以及4~20mA电流信号。这里我们选择0~5V的电压信号进行控制。
(2)模拟量模块的增益及偏置调节
模块的增益可设定为任意值。然而,如果要得到大12位的分辨率可使用0~4000。如图3,我们采用0~4000的数字量对应0~5V的电压输出。当然,我们可对模块进行偏置调节,例如数字量0~4000对应4~20mA时。
(3)模拟量模块与PLC的通讯
对于与FX2N系列PLC的连接编程主要包括不同通道数模转换的执行控制,数字控制量写入FX2N-2DA等等。而重要的则是对缓冲存储器(BFM)的设置。通过对该模块的认识,BFM的定义如附表。
附表BFM的定义
从附表中可以看出起作用的仅仅是BFM的#16、#17,而在程序中所需要做的则是根据实际需要给予BFM中的#16和#17赋予合适的值。其中:
#16为输出数据当前值。
#17:b0:1改变成0时,通道2的D/A转换开始。
b1:1改变成0时,通道1的D/A转换开始
(4)控制系统编程
对于上例控制系统的编写程序如图4所示。
在程序中:
1)当M67、M68常闭触点以及Y002常开触点闭合时,通道1数字到模拟的转换开始执行;当M62、M557常闭触点以及Y003常开触点闭合时,通道2数字到模拟的转换开始执行。
2)通道1
将保存个数字速度信号的D998赋予辅助继电器(M400~M415);
将数字速度信号的低8位(M400~M407)赋予BFM的16#;
使BFM#17的b2=1;
使BFM#17的b2由1→0,保持低8位数据;
将数字速度信号的高4位赋予BFM的16#;
使BFM#17的b1=1;
使BFM#17的b1由1→0,执行通道1的速度信号D/A转换。
3)通道2
将保存第二个数字速度信号的D988赋予辅助继电器(M300~M315);
将数字速度信号的低8位(M300~M307)赋予BFM的16#;
使BFM#17的b2=1;
使BFM#17的b2由1→0,保持低8位数据;
将数字速度信号的高4位赋予BFM的16#;
使BFM#17的b0=1;
使BFM#17的b0由1→0,执行通道2的速度信号D/A转换。
4)程序中的K0为该数模转换模块的位置地址,在本控制系统中只用了一块模块,因此为K0,假如由于工艺要求控制系统还要再增加一块模块,则新增模块在编程时只要将K0改为K1即可。
(5)变频器主要参数的设置
根据控制要求,设置变频器的运行模式为外部运行模式,运行频率为外部运行频率设定方式,Pr.79=2;模拟频率输入电压信号为0~5V,所以,Pr.73=0;其余参数根据电机功率、额定电压、负载等情况进行设定。
3.2注意事项
(1)FX2N-2DA采用电压输出时,应将IOUT与COM短路;
(2)速度控制信号应选用屏蔽线,配线安装时应与动力线分开。
4、结束语
上述控制在实际使用过程中运行良好,很好的将PLC易于编程与变频器结合起来,当然不同的可编程序控制器的编程和硬件配置方法也不同,比如罗克韦尔PLC在增加D/A模块时,只要在编程环境下的硬件配置中添加该模块即可。充分利用PLC模拟量输出功能可以控制变频器从而控制设备的速度,满足生产的需要。