wincc通过VBS读取控件
基于VBS脚本的WinCC查询及导出功能设计与实现
此 , 利 刖 Wi n C C 本 身 带 的 S Q L S e r v e l - 数据库干 I ] V B S脚 本 语 膏, 实现数据的存储 、 查询及导} f J 功 能 、
j…
‘_ 毒 脚
一
t —
●
.
r
V ”
… I 、 m
l 数 据 存 储
钳 装 线 由 2 0个 C l : 作 站 组 成 ,根 据 装 配 T 艺 的要求 , 需 要 记录每 个 1 作站 的运 行模 式 、 运 行 状态, 并且 I 作 人员 需 要 r解 每 个 r 化、 J , 前小 『 1 1 f 的 合
机软 件 , 实现 装 配 数 据 的 查 询 及 导 出 功 能 对 产 品 全 生 命 周 期 的 追 溯 . 关键词 : VB S脚 本 : Wi n C C
6 l I .h, f 、 1 …
D a
可根 据 不 同 的 查 询 条件 , 显 示及导 出满足条 件的记 录 , 实现 管 理 及 维 护 人 员
&s t a t i o n n U l l l } 】 e r &” o r d e l ・ 1 ) v t i l l e ”
作者 简 介 : 董 磊书 ( 1 9 8 2 一) , 工程师 , 硕 士研 究 生 , 从 事
非 标 设 备 及 生 产 装 配 线 控 制 系 统 的 研 究 工 作
及 月 产量 等 信息 、查 询
如 2所 示
需要进 行条码¨捕 , 根 据不 同的 I D 号, 后 续 的装 配 数 据 一 并仔人数据库中 , 为后续 信息 管 理 提 供 保证 、
为存储 数据 , 首先 建 OD B C连接 O I ) B C是一 个川
VB操作wincc脚本心得
V B操作w i n c c脚本心得集团标准化工作小组 #Q8QGGQT-GX8G08Q8-GNQGJ8-MHHGN#Vbs 操作wincc画面脚本总结一:不使用变量单纯的操作界面1.操作某个画面中控件的属性如(总窗体)下的画面窗口2(画面窗口)Sub OnClick(ByVal Item) Dim objCircleDim screennameDim pwnameSet objCircle= ScreenItems("圆1" )= 60Set screenname=("Home1") creenItems("画面窗口2")Set value=2.更改画面窗口的对象Sub OnClick(Byval Item)Dim opObjectSet opObject= ("Home1").ScreenItems("画面窗口2")=""End Sub3.设置文本Set titleTxt= ("Home1").ScreenItems("静态文本2")=+"EF" Dim objTagDim ATextSet objTag = ("a") vb 中Switch语句的变体Dim objTagDim ATextSet objTag = ("a") 你要求是有是和否两个按钮那么MyVar = MsgBox ("HelloWorld!", 65, "MsgBox Example")中的65改成4就可以了!vbs脚本中:if msgbox("确实要启动设备吗",4,"警告")=6 then("tag1").write 1end if。
wincc vbs模块方法
wincc vbs模块方法WinCC VBScript模块方法是用于编程和自动化WinCC项目的一种功能强大的工具。
它可以帮助用户在WinCC界面中实现各种功能和任务,包括数据处理、图表生成、报警处理等等。
在本文中,我们将一步一步回答关于WinCC VBScript模块方法的主题。
1. 什么是WinCC VBScript模块方法?WinCC VBScript模块方法是一种用于编程和自动化WinCC项目的工具。
它基于Visual Basic Scripting语言(VBScript),可以让用户通过编写脚本来实现各种功能和任务。
这些功能包括数据处理、图表生成、报警处理等等。
2. 如何使用WinCC VBScript模块方法?使用WinCC VBScript模块方法需要以下几个步骤:- 打开WinCC开发环境:首先,您需要打开WinCC开发环境,启动WinCC Explorer和VBScript编辑器。
- 创建VBScript模块:在VBScript编辑器中,您可以创建一个新的VBScript模块。
这个模块将成为您编写脚本的地方。
- 编写脚本:在VBScript模块中,您可以使用VBScript语法编写脚本。
您可以利用WinCC提供的函数和方法来实现各种功能和任务。
- 脚本调用:一旦您编写完脚本,您可以在WinCC项目的各个部分中调用脚本。
您可以在按钮的点击事件或某个对象的属性变化事件中调用脚本。
3. WinCC VBScript模块方法的应用场景有哪些?WinCC VBScript模块方法可以应用于各种场景和任务,包括但不限于以下几个方面:- 数据处理:您可以使用VBScript模块方法来处理和计算在WinCC项目中采集到的数据。
例如,您可以编写一个脚本来实现数据的加工、过滤和处理等操作。
- 图表生成:使用VBScript模块方法,您可以生成各种类型的图表,例如曲线图、柱状图和饼图等。
这些图表可以帮助您更好地可视化和分析数据。
WinCC 通过VBS脚本进行串口通讯
WinCC 通过VBS脚本进行串口通讯一、打开端口Sub OnClick(Byval Item)Dim objMSComm1, tagConnectionSet objMSComm1 = HMIRuntime.Screens("Main").ScreenItems("MSComm1") Set tagConnection = HMIRuntime.Tags("Connection")If objMSComm1.PortOpen = False Then' Assign com port numbermport = 1' Values: 9600 Baud, N - No Parity, 8 - Databit, 1 - StopbitobjMSComm1.Settings = "9600,N,8,1"objMSComm1.RThreshold = 1objMSComm1.SThreshold = 1objMSComm1.InputLen = 0objMSComm1.PortOpen = TruetagConnection.Write(True)HMIRuntime.Trace("Port open." & vbCrLf)ElseHMIRuntime.Trace("Port is already opened." & vbCrLf)End IfEnd Sub二、读BufferOption ExplicitFunction actionDim strBuffer, strTempDim objMSComm1, tagBufferSet objMsComm1 = HMIRuntime.Screens("Main").ScreenItems("MSComm1") Set tagBuffer = HMIRuntime.Tags("Buffer")strTemp = ""If objMSComm1.PortOpen = True Then'read the bufferstrTemp = CStr(objMSComm1.Input)If strTemp <> "" Then'checking for the delimited characterIf InStr(strTemp, Chr(6)) ThenstrBuffer = Left(strTemp,Len(strTemp)-1)ElsestrBuffer = strTempEnd IftagBuffer.Value = strBuffertagBuffer.WriteEnd IfElseHMIRuntime.Trace("No port is opened!" & vbCrLf)End IfEnd Function三、发送数据Sub OnClick(ByVal Item)Dim tagOutput, objMSComm1Set tagOutput = HMIRuntime.Tags("Output")Set objMSComm1 = HMIRuntime.Screens("Main").ScreenItems("MSComm1")If objMSComm1.PortOpen = True ThentagOutput.ReadobjMSComm1.Output = tagOutput.ValuetagOutput.Write("")ElseHMIRuntime.Trace("No port is opened!" & vbCrLf)End IfEnd Sub四、关闭端口Sub OnClick(Byval Item)Dim objMSComm1, tagConnectionSet objMSComm1 = HMIRuntime.Screens("Main").ScreenItems("MSComm1") Set tagConnection = HMIRuntime.Tags("Connection")If objMSComm1.PortOpen = True ThenobjMSComm1.PortOpen = FalsetagConnection.Write(False)HMIRuntime.Trace("Port close." & vbCrLf)End IfEnd Sub。
WINCCVBS脚本文件操作
WINCCVBS脚本文件操作WinCC VBS脚本中的文件操作主要涉及文件的创建、读取、写入和删除等操作。
下面是一个超过1200字的文章,介绍了WinCC VBS脚本中常用的文件操作方法和示例。
在WinCC VBS脚本中,可以使用FileSystemObject对象来进行文件操作。
首先,需要创建一个FileSystemObject对象:```Dim fsoSet fso = CreateObject("Scripting.FileSystemObject")```接下来,可以使用FileSystemObject对象的属性和方法来操作文件。
下面是常用的文件操作方法示例:1.创建文件夹:```fso.CreateFolder "C:\TestFolder"```2.创建文件:```Dim fileSet file = fso.CreateTextFile("C:\TestFile.txt", True)file.WriteLine "This is a test file."file.Close```3.打开文件:```Dim fileSet file = fso.OpenTextFile("C:\TestFile.txt")MsgBox file.ReadAllfile.Close```4.写入文件:```Dim fileSet file = fso.OpenTextFile("C:\TestFile.txt", 8) file.WriteLine "This is a new line."file.Close```5.读取文件:```Dim fileSet file = fso.OpenTextFile("C:\TestFile.txt")MsgBox file.ReadLinefile.Close```6.复制文件:```fso.CopyFile "C:\SourceFile.txt", "C:\DestinationFile.txt"```7.移动文件:```fso.MoveFile "C:\SourceFile.txt","C:\NewLocation\SourceFile.txt"```8.删除文件:```fso.DeleteFile "C:\TestFile.txt"```9.删除文件夹:```fso.DeleteFolder "C:\TestFolder"```以上示例中的文件路径可以根据实际情况进行修改。
Wincc的VBS脚本使用
变量读写:Write战Read要领的语法:之阳早格格创做读:1 Dim objTag Set objTag=HMIRunTime.Tags("变量名")2 HMIRunTime.Tags("变量名").Read写:1 Dim objTag Set objTag=HMIRunTime.Tags("变量名")objTag.Write 1 '背变量写进数值12 HMIRunTime.Tags("变量名").Write 1中间变量的值写进:Dim objTag,valSet objTag=HMIRunTime.Tags("变量名")objTag.Readval=objTag.Value '中间变量val存搁了变量的值VBS谈话使用要领概括:VBScript的齐称是:Microsoft Visual Basic Script Editon.(微硬公司可视化BASIC足原版).正如其字里所透露的疑息, VBS(VBScript的进一步简写)是鉴于Visual Basic的足原谈话.尔进一步阐明一下, Microsoft Visual Basic是微硬公司出品的一套可视化编程工具, 语鉴于Basic. 足原谈话, 便是不编译成二进造文献, 曲交由宿主(host)阐明源代码并真止, 简朴面道便是您写的步调不需要编译成.exe, 而是曲交给用户收收.vbs的源步调, 用户便能真止了.一、初教: 1) 注释(以REM或者'启头)止正在步调中不起效率, 但是能让他人更简单读懂您的步调. 2) 变量佳像一个盒子, 或者一个代号, 不妨代表您念代表的物品. 变量赋值使用"="3)以""包裹起去的字符称之为"字符串"4)函数像一个"乌箱", 有参数战返回值, 用"="左边的变量不妨交住返回值5) Inputbox函数弹出一个输进对于话框,Msgbox则用于输出例:REM 输进并回隐您的名字'使用InputBox战Msgbox函数Dim name,msgmsg="请输进您的名字:"name=Inputbox(msg,"称呼")Msgbox(name)上例中,Dim用去声明一个变量, 正在VBS中, 变量典型本去不是那么要害, 便是道VBS中您不必思量name储藏的是一个整数仍旧一个小数(教名喊"浮面数"), 也不必思量是不是字符串(一串字符, 比圆:"Hello World"), VBS会自动助您搞定. 所以第三止语句不妨简略, 效验不会变.常量:要领是:const 常量名=常量值.比圆: const PI=3.1415926 const NAME="影象碎片"二、进阶数据典型变换:1)Dim a,b,ca=inputbox("a是:","输进半径")b=Inputbox("b是:","输进半径")c=a*2+b*2Msgbox(c)那个输进1、2时是62)Dim a,b,ca=inputbox("a是:","输进半径")b=Inputbox("b是:","输进半径")c=(a+b)*2Msgbox(c)那个输进1、2时是24为什么会纷歧样呢? 正在数教上c=(a+b)*2 战c=a*2+b*2是等价的, 正在VBS中也是如许. 问题出正在"+"上, 正在VBS 中, +不但是仅是加号的意义还表示把二个字符勾通交起去, 比圆"Hello"+"World"="HelloWorld" have you understood? 您还记得InoutBox函数的返回值吗? 是字符串! 那便瞅出问题了吧, 正在编程中"1"不等于(<>)1, "1"是一个字符, 而1是一个数, 所以a,b皆是字符串变量, "1"+"2"="12", 那便佳像咱们小时跟伙陪启玩笑问他们1+1=?一般, 咱们经常笑着道"错啦,该当是11".但是为什么, a不妨*2却不爆收过失呢? 那时VBS比较智能的一个表示, 如果那个字符串的真质是一个数且对于他举止数教运算, 则把字符串强造变换成数介进运算如果字符串代表一个数, 但是不介进数教运算, 而是介进字符串运算(合并)则当做字符串处理, 所以您瞅到a+b=12, 那时间a+b的截止是一个字符串, 当它要乘以2的时间便被强造变换成了数字12, 那样尔便得到了截止24怎么建改那个步调呢? 咱们需要用到另一个内建的函数:int, int函数的功能是将输进值转成整数值, 咱们那样建改: c=(int(a)+int(b))*2四、循环结构for....nextdim i,jfor i=1 to 9for i=1 to 9str=str & i * j & " " '&是战并字符串的标记next '每个next对于应一个for1)do..loop战exit do的用法2) while当表白式true的时间真止循环体,until反之3) for...next是计数循环, 屡屡真止计数器递加4) 嵌套循环的效率战写法 4.5) &用于连交字符串5) vbCrLf相称于键盘上的回车键五、数组定义:dim 数组名(元素数量), 那里大家要注意一面, 那里定义的元素数量经常比您要的要少一个, 果为一个数组的起面是0号数据而不是1, 所以大家一定要留神: 您需要10个数据, 便定义"9".六、函数结构:funciton 函数名(参数1, 参数2...参数n) '列表不妨是空的, 但是括号不克不迭简略, 参数之间用","分隔...exit funciton '中断函数, 不是必须的end function偶尔间咱们本去不需要返回什么值, 那个时间咱们不妨使用一种称之为"子步调"的结构. 子步调或者称之为历程取函数的不共便正在于:1) 不返回值, 2) 使用sub闭键字定义, 3) 通过Call 调用.具个例子:dim ynamename=inputbox("请输进您的名字:")call who(yname)subwho(cname)msgbox("您佳" & cname)msgbox("感动您阅读尔的课程")msgbox("那是前提部分的末尾一课")end sub按钮翻转步调Sub OnClick(Byval Item)Dim tag1Set tag1=HMIRuntime.Tags("Q02") tag1.readIf tag1.Value=1Then tag1.write 0Elsetag1.Write 1按按钮删数步调:Dim tag1Set tag1=HMIRuntime.Tags("转动1") tag1.Value=tag1.Value + 1tag1.WriteEnd IfEnd Sub按下按钮一个脉冲触收:Dim mytime,bsSet bs=HMIRuntime.Tags("b")bs.Write(1)mytime = Timer+2Do Until Timer=mytimeLoopbs.Write(0)循环步调While t = 1Dim mytime,bsSet bs=HMIRuntime.Tags("b转动") bs.Write(1)mytimE = Timer +2DO until TimEr=mytimeloopbs.Write(0)Wend。
WinccV7.3使用VBS脚本读取excel文件数值
WinccV7.3使用VBS脚本读取excel文件数值WinccV7.3 使用VBS脚本读取excel文件数值案例:wincc项目路径下有一个excel文件,数据表sheet1内容如下:现在我们需要把这个文件中的数据读取出来,显示在输入输出域当中,本例以读取R1C1和R2C2为例。
在wincc页面上放置两个输入输出域,名字分别为R1C1和R2C2,R1C1数据类型为字符串,R2C2数据类型为十进制数,页面上放置一个按钮,用于读取数据。
wincc新建一个内部变量path,用于存放excel文件的路径。
在wincc 页面打开事件中写入一下VBS脚本。
Sub OnOpen()Dim pathSet path=hmiruntime.Tags("path")path.write HMIRuntime.ActiveProject.Path & "\\myxls.xlsx"End Sub在按钮的点击事件中写入以下脚本:Sub OnClick(Byval Item)Dim xlApp,xlBook,pathDim r1c1,r2c2Set r1c1=ScreenItems("r1c1")Set r2c2=ScreenItems("r2c2")path=HMIRuntime.Tags("path").ReadSet xlApp=CreateObject("excel.application")xlApp.Visible=FalsexlApp.Workbooks.Open pathxlApp.Worksheets("Sheet1").Activater1c1.outputvalue=xlApp.Worksheets("Sheet1").cells(1,1).valuer2c2.outputvalue=xlApp.Worksheets("Sheet1").cells(2,2).value xlApp.Workbooks.ClosexlApp.QuitSet xlApp=NothingEnd Sub经测试可以实现需要的功能。
wincc读写sql(vbs)
1:首先在计算机的管理工具-- ODBC数据源管理器中,添加一个SQL SERVER的数据源。
在此配置中:在服务器的连接上要选择WINCC的服务器。
2:然后在WINCC的图形编辑器中,在输入域的属性中,选择事件,再选择键盘的释放动作,在动作代码框中写下如下代码:Dim conn,rsDim strsqlDim aa=HMIRuntime.Tags("tt_change").ReadSet conn=CreateObject("adodb.connection")Set rs=CreateObject("adodb.recordset")conn.Provider = "sqloledb"conn.open"SERVER=MICROSOF-9176CF\WINCC;uid=sa;pwd=sa;database=TT_CHA NGE"If nChar = "13" Thenstrsql="insert into tt_ch(TagValue)VALUES('" & a &"')" Set rs=conn.execute(strsql)conn.closeSet rs=NothingSet conn=NothingEnd If如此,即可实现WINCC的实时数据向SQL SERVER的数据写入!WinCC读取Access数据库wincc 2009-07-30 09:52:22 阅读240 评论1 字号:大中小订阅'经测试该代码在WinCC和vbs文件中均可用可用Dim objConn,objRs,strSqlSet objConn = CreateObject("ADODB.Connection")objConn.ConnectionString = "provider=microsoft.jet.oledb.4.0;data source=d:\student.mdb"objConn.openSet objRs = CreateObject("ADODB.RecordSet")strSql = "Select count(*) from 学生情况"objRs.open strSql,objConn,1,2msgbox "学生情况表中共有" & objRs(0) & "条记录",8,"记录统计:" objRs.closeSet objRs = nothingobjConn.closeSet objConn = nothingWincc读取远程非wincc数据库Option ExplicitFunction actionDim sConDim sSqlDim connDim oRsDim oComDim iDim temvalue,objtag'sCon = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=CTMDBN;Data SouRCe=192.168.1.11"sCon="Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=CTMDBN;Data Source=192.168.1.11"sSql = "SELECT Temperature FROM channelinfo"' 2.1 Make connectionSet conn = CreateObject("ADODB.Connection")conn.ConnectionString = sConconn.Open' 2.2 Use command text for querySet oRs = CreateObject("ADODB.Recordset")Set oCom = CreateObject("mand")Set oCom.ActiveConnection = connmandText = sSql' 2.3 Fill the recordsetSet oRs = oCom.Execute' 3.0 Fill standard iofields object with recordseti=0Do While oRs.eof=Falsetemvalue=oRS.Fields(0).Valuei=i+1HMIRuntime.Tags("t"&i).Write temvalue oRs.movenextLoopSet oRs = Nothingconn.CloseSet conn = NothingEnd Function。
Wincc V7.3 vbs 读取多个变量归档数据到excel
Wincc V7.3vbs读取多个变量归档数据到excel前面的一篇博客记录了如何读取多个变量归档数据到mshgrid控件,根据的是西门子官网的教学。
有网友询问为什么他照着官网方法就是无法导出到excel。
我自己也做了一遍,没有问题。
本篇主要记录导出按钮的脚本。
前面的准备工作与上一篇一致,导出按钮的vbs脚本如下:Sub OnClick(ByVal Item)Dim myCatalog,myDS,PCName,cnstr,sqlstr1,sqlstr2Dim xlapp,BTime,ETime,utcbtime,utcetime,utcbtstr,utcetstrDim conobj,rsobj1,comobj1Dim rsobj2,comobj2Dim rscount,i,curRowDim filenamemyCatalog=HMIRuntime.Tags("@DatasourceNameRT").ReadPCName=HMIRuntime.Tags("@LocalMachineName").ReadmyDS=PCName & "\Wincc"Set BTime=HMIRuntime.Tags("btime")Set ETime=HMIRuntime.Tags("etime")'北京时间时区修正utcbtime=Dateadd("h",-8,BTime.Read) '起始时间utcetime=Dateadd("h",-8,ETime.Read) '结束时间'日期时间格式修正utcbtstr = Year(utcbtime) & "-" & Month(utcbtime) & "-" & Day(utcbtime) & " " & Hour(utcbtime) & ":" & Minute(utcbtime) & ":" & Second(utcbtime)utcetstr = Year(utcetime) & "-" & Month(utcetime) & "-" & Day(utcetime) & " " & Hour(utcetime) & ":" & Minute(utcetime) & ":" & Second(utcetime)'连接字符串cnstr="Provider=WinCCOLEDBProvider.1; Catalog=" & myCatalog & "; Data Source=" &myDS'创建连接对象Set conobj=CreateObject("ADODB.Connection")conobj.connectionstring=cnstrconobj.CursorLocation = 3conobj.Open'查询字符串'sqlstr = "Tag:R,('VA\flow1';'VA\flow2'),'" & utcbtstr & "','" & utcetstr & "'," & "'order by Timestamp ASC','TimeStep=1,1'" sqlstr1 = "Tag:R,('VA\flow1'),'" & utcbtstr & "','" & utcetstr & "'," & "'order by Timestamp ASC','TimeStep=1,1'"sqlstr2 = "Tag:R,('VA\flow2'),'" & utcbtstr & "','" & utcetstr & "'," & "'order by Timestamp ASC','TimeStep=1,1'"'进行查询Set rsobj1 = CreateObject("ADODB.Recordset")Set comobj1 = CreateObject("mand")mandType = 1Set comobj1.ActiveConnection = conobjmandText = sqlstr1Set rsobj1 = comobj1.ExecuteSet rsobj2 = CreateObject("ADODB.Recordset")Set comobj2 = CreateObject("mand")mandType = 1Set comobj2.ActiveConnection = conobjmandText = sqlstr2Set rsobj2 = comobj2.Executerscount=rsobj1.recordcountrsobj1.movefirstrsobj2.movefirstif rscount=0 thenmsgbox "没有记录"exit subend ifSet xlapp=CreateObject("Excel.Application")xlapp.visible=Falsexlapp.workbooks.add'初始化excelxlapp.worksheets(1).cells(1,1)="编号:"xlapp.worksheets(1).cells(1,2)="QB-2017.001"xlapp.worksheets(1).range("a2:c2").mergecells=True '合并单元格xlapp.worksheets(1).cells(2,1)="这是一个测试"xlapp.worksheets(1).cells(2,1).HorizontalAlignment = 3 '文字居中xlapp.worksheets(1).cells(3,1)="日期时间"xlapp.worksheets(1).cells(3,2)="flow1"xlapp.worksheets(1).cells(3,3)="flow2"'导出到excelFor i=1 To rscountxlapp.worksheets(1).cells(3+i,1)=Dateadd("h",+8,rsobj1.fields(1).value)xlapp.worksheets(1).cells(3+i,2)=rsobj1.fields(2).valuexlapp.worksheets(1).cells(3+i,3)=rsobj2.fields(2).valuersobj1.movenextrsobj2.movenextNext'释放资源Set rsobj1 = NothingSet rsobj2 = Nothingconobj.CloseSet conobj = Nothing'画边框xlapp.worksheets(1).range("a3:c" & CStr(3+rscount)).borders(1).linestyle=9xlapp.worksheets(1).range("a3:c" & CStr(2+rscount)).borders(1).weight=2xlapp.worksheets(1).range("a3:c" & CStr(2+rscount)).borders(2).linestyle=9xlapp.worksheets(1).range("a3:c" & CStr(2+rscount)).borders(2).weight=2xlapp.worksheets(1).range("a3:c" & CStr(2+rscount)).borders(3).linestyle=9xlapp.worksheets(1).range("a3:c" & CStr(2+rscount)).borders(3).weight=2xlapp.worksheets(1).range("a3:c" & CStr(2+rscount)).borders(4).linestyle=9xlapp.worksheets(1).range("a3:c" & CStr(2+rscount)).borders(4).weight=2'保存文件filename= "c:\" & Year(Now) & "年" & Month(Now) & "月" & Day(Now) & "日-" & Hour(Now) & "点" & Minute(Now) & "分" & Second(Now) & "秒生成生产报表.xlsx"xlapp.Activeworkbook.saveas (filename)xlapp.workbooks.closexlapp.quitMsgbox "成功导出到C:\"End Sub无法导出数据的朋友,检查一下官网提示的那个连接包是否安装了。
wincc读写sql(vbs)
1:首先在计算机的管理工具-- ODBC数据源管理器中,添加一个SQL SERVER的数据源。
在此配置中:在服务器的连接上要选择WINCC的服务器。
2:然后在WINCC的图形编辑器中,在输入域的属性中,选择事件,再选择键盘的释放动作,在动作代码框中写下如下代码:Dim conn,rsDim strsqlDim aa=HMIRuntime.Tags("tt_change").ReadSet conn=CreateObject("adodb.connection")Set rs=CreateObject("adodb.recordset")conn.Provider = "sqloledb"conn.open"SERVER=MICROSOF-9176CF\WINCC;uid=sa;pwd=sa;database=TT_CHA NGE"If nChar = "13" Thenstrsql="insert into tt_ch(TagValue)VALUES('" & a &"')" Set rs=conn.execute(strsql)conn.closeSet rs=NothingSet conn=NothingEnd If如此,即可实现WINCC的实时数据向SQL SERVER的数据写入!WinCC读取Access数据库wincc 2009-07-30 09:52:22 阅读240 评论1 字号:大中小订阅'经测试该代码在WinCC和vbs文件中均可用可用Dim objConn,objRs,strSqlSet objConn = CreateObject("ADODB.Connection")objConn.ConnectionString = "provider=microsoft.jet.oledb.4.0;data source=d:\student.mdb"objConn.openSet objRs = CreateObject("ADODB.RecordSet")strSql = "Select count(*) from 学生情况"objRs.open strSql,objConn,1,2msgbox "学生情况表中共有" & objRs(0) & "条记录",8,"记录统计:" objRs.closeSet objRs = nothingobjConn.closeSet objConn = nothingWincc读取远程非wincc数据库Option ExplicitFunction actionDim sConDim sSqlDim connDim oRsDim oComDim iDim temvalue,objtag'sCon = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=CTMDBN;Data SouRCe=192.168.1.11"sCon="Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=CTMDBN;Data Source=192.168.1.11"sSql = "SELECT Temperature FROM channelinfo"' 2.1 Make connectionSet conn = CreateObject("ADODB.Connection")conn.ConnectionString = sConconn.Open' 2.2 Use command text for querySet oRs = CreateObject("ADODB.Recordset")Set oCom = CreateObject("mand")Set oCom.ActiveConnection = connmandText = sSql' 2.3 Fill the recordsetSet oRs = oCom.Execute' 3.0 Fill standard iofields object with recordseti=0Do While oRs.eof=Falsetemvalue=oRS.Fields(0).Valuei=i+1HMIRuntime.Tags("t"&i).Write temvalue oRs.movenextLoopSet oRs = Nothingconn.CloseSet conn = NothingEnd Function。
Wincc的VBS脚本使用演示教学
a=inputbox("a是:","输入半径")
b=Inputbox("b是:","输入半径")
c=(a+b)*2
Msgbox(c)
这个输入1、2时是24
为什么会不一样呢?在数学上c=(a+b)*2和c=a*2+b*2是等价的,在VBS中也是如此.问题出在"+"上,在VBS中, +不仅仅是加号的意思还表示把两个字符串连接起来,例如"Hello"+"World"="HelloWorld" have you understood?你还记得InoutBox函数的返回值吗?是字符串!这就看出问题了吧,在编程中"1"不等于(<>)1, "1"是一个字符,而1是一个数,所以a,b都是字符串变量, "1"+"2"="12",这就好像我们小时跟伙伴开玩笑问他们1+1=?一样,我们总是笑着说"错啦,应该是11".但为什么, a可以*2却不发生错误呢?这时
call who(yname)
sub
who(cname)
msgbox("你好" & cname)
msgbox("感谢你阅读我的课程")
msgbox("这是基础部分的最后一课")
end sub
按钮翻转程序
Sub OnClick(Byval Item)
Dim tag1
Set tag1=HMIRuntime.Tags("Q02")
使用Wincc中的VBS进行变量读取
使用Wincc中的VBS进行变量读取使用Wincc中的VBS进行变量读取转载▼标签:分类:WinCC知识/探索winccvsb脚本变量writeread属性Wincc6包含了VBS脚本编程,对于我等熟悉VB编程的可谓带来的福音,但是,由于西门子的C脚本编程功能实在太强大,加上要保持以前版本的一致性和用户编程习惯的延伸性,所以对于VBS脚本并没有太多的介绍。
这里我先来介绍一下Wincc中对于控件引用的一般性论述。
Wincc对于控件引用一般都采取定义变量-》使用Set 变量=对象.(方法或属性)->引用变量来做的。
在变量读取或写入的过程中,我们要接触到一些属性和方法,例如,Read和Write方法,变量的Value属性,熟练掌握这些属性和方法相当重要。
下面解释一下Write和Read方法的语法:Read data 其中data是读取变量的方法,如果data=1,直接从AS系统读取,相当于C脚本中的Get*****wait()函数,如果省略,则从Wincc变量管理器中建立的变量中读取。
Write data,1 其中data是需要写入变量的数值,1代表直接写入AS系统,相当于C脚本中的Set*****wait()函数,1省略,则写入到由Wincc变量管理器建立的变量中去。
实例:读取变量的方法:1 Dim objTagSet objTag=HMIRunTime.Tags("变量名")objTag.Read2 HMIRunTime.Tags("变量名").Read如果以上例程改成直接读取AS系统变量的话,程序为:1 Dim objTagSet objTag=HMIRunTime.Tags("变量名")objTag.Read,12 HMIRunTime.Tags("变量名").Read,1写变量的方法:1 Dim objTagSet objTag=HMIRunTime.Tags("变量名")objTag.Write 1 '向变量写入数值1'也可以写为 objTag.Write 10 向变量写入数值102 HMIRunTime.Tags("变量名").Write 1'也可以写为 objTag.Write 10除了以上方法外,你也可以将一个中间变量的值写入:Dim objTag,valSet objTag=HMIRunTime.Tags("变量名")objTag.Readval=objTag.Value '中间变量val存放了变量的值objtag.Write val '写入变量中去当然,其余的方法还有很多,这些都需要自己在编程过程中总结和灵活运用。
通过vbs脚本读取wincc的数据库
通过vbs脚本读取wincc的数据库'本代码是在E:\WinccProjects\DBSQL工程下完成,功能是对该工程下的CC_DBSQL_11_04_19_19_19_51R数据库中的表GH_table 中的字段“Temp”进行读操作。
读的结果暂存在DBSQL工程下的过程变量Speed中,再有Speed传给IO控件显示。
'该代码由按钮控件作为按下鼠标的响应脚本。
读的时间由按钮动作决定。
'本代码只实现了对其中一条数据的读操作。
Sub OnClick(Byval Item)Dim Speed_hmi,Speed_valDim cn,strSQL,strcn,rs,rs1Dim ResultSet cn = CreateObject("ADODB.Connection")Set rs=CreateObject("ADODB.RecordSet")strcn = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=CC_DBSQL_11_04_19_19_19_51R;Data Source=.\wincc"cn.ConnectionString = strcncn.Open strcnSet Speed_hmi=HMIRuntime.Tags("Speed")'Temp_hmi.Read'Temp_val=Temp_hmi.ValuestrSQL = "select * from GH_table"'where(Temp)rs.Open strSQL,cn,1,3'rs.AddNew'新建一条记录'rs.fields("Temp")=999rs.updaters.movefirst'使位置移植第一条Result=rs.fields("Temp")读取Speed_hmi.Write Resultrs.closecn.closeSEt cn=NotHingSet rs=NotHingend Sub'*********更新:实现按一定条件读取DB,将结果显示在一个IO 域中*********************Sub OnClick(Byval Item)Dim cn,strSQL,strcn,rsDim ResultSet cn = CreateObject("ADODB.Connection")Set rs=CreateObject("ADODB.RecordSet")strcn = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=CC_DBSQL_11_04_19_19_19_51R;Data Source=.\wincc"cn.ConnectionString = strcncn.Open strcnstrSQL = "SELECT *FROM GHtable001 WHERE ([Time] = '1900-1-1 12:33:42')" '在GHtable001表中已经存有数据,对应该时间的值为61rs.Open strSQL,cn,1,3rs.updateResult=rs.fields("Temp") '将搜索结果对应的Temp变量值给ResultHMIRuntime.Screens("TagArchive").ScreenItems("IOfield01") .outputvalue=Result '将结果负值给IO域rs.closecn.closeSEt cn=NotHingSet rs=NotHingend Sub'************************************************************** ****************************************************************。
实验成功的WINCC读取TXT文件代码--VBS
Dim fsoDim txtfileDim a'a=HMIRuntime.Tags("FileName").ReadSet fso = CreateObject("scripting.filesystemobject")If fso.FileExists("E:\test\Export\UserArchiveControl\12345678FAIL.txt") Then 'MsgBox "文件存在"'If fso.FileExists("D:\\Export&Import\\"&CStr(a)&".txt") ThenSet txtfile = fso.OpenTextFile("E:\test\Export\UserArchiveControl\12345678FAIL.txt")MsgBox "开始读取"HMIRuntime.Tags("Var_1").Write txtfile.ReadLineHMIRuntime.Tags("Var_2").Write txtfile.ReadLineHMIRuntime.Tags("Var_3").Write txtfile.ReadLineHMIRuntime.Tags("Var_4").Write txtfile.ReadLineHMIRuntime.Tags("Var_5").Write txtfile.ReadLineHMIRuntime.Tags("Var_6").Write txtfile.ReadLineHMIRuntime.Tags("Var_7").Write txtfile.ReadLineHMIRuntime.Tags("Var_8").Write txtfile.ReadLineHMIRuntime.Tags("Var_9").Write txtfile.ReadLineHMIRuntime.Tags("Var_10").Write txtfile.ReadLineHMIRuntime.Tags("Var_11").Write txtfile.ReadLineHMIRuntime.Tags("Var_12").Write txtfile.ReadLineHMIRuntime.Tags("Var_13").Write txtfile.ReadLineHMIRuntime.Tags("Var_14").Write txtfile.ReadLineHMIRuntime.Tags("Var_15").Write txtfile.ReadLineHMIRuntime.Tags("Var_16").Write txtfile.ReadLineHMIRuntime.Tags("Var_17").Write txtfile.ReadLineHMIRuntime.Tags("Var_18").Write txtfile.ReadLineHMIRuntime.Tags("Var_19").Write txtfile.ReadLineHMIRuntime.Tags("Var_20").Write txtfile.ReadLineMsgBox "导入数据成功/Import Successful"txtfile.CloseElseMsgBox "文件不存在/File is not existing"End If最终效果图。
Wincc的VBS脚本使用
W i n c c的V B S脚本使用------------------------------------------作者xxxx------------------------------------------日期xxxx变量读写: Write和Read方法的语法:读:1 Dim objTag Set objTag=HMIRunTime.Tags("变量名")2 HMIRunTime.Tags("变量名").Read写:1 Dim objTag Set objTag=HMIRunTime.Tags("变量名")objTag.Write 1 '向变量写入数值12 HMIRunTime.Tags("变量名").Write 1中间变量的值写入:Dim objTag,valSet objTag=HMIRunTime.Tags("变量名")objTag.Readval=objTag.Value '中间变量val存放了变量的值VBS语言使用方法概述:VBScript的全称是:Microsoft Visual Basic Script Editon.(微软公司可视化BASIC 脚本版).正如其字面所透露的信息, VBS(VBScript的进一步简写)是基于Visual Basic的脚本语言.我进一步解释一下, Microsoft Visual Basic是微软公司出品的一套可视化编程工具, 语基于Basic. 脚本语言, 就是不编译成二进制文件, 直接由宿主(host)解释源代码并执行, 简单点说就是你写的程序不需要编译成.exe, 而是直接给用户发送.vbs的源程序, 用户就能执行了.一、入门: 1) 注释(以REM或'开头)行在程序中不起作用, 但能让别人更容易读懂你的程序. 2) 变量好像一个盒子, 或一个代号, 可以代表你想代表的东西. 变量赋值使用"="3)以""包裹起来的字符称之为"字符串"4)函数像一个"黑箱", 有参数和返回值, 用"="左边的变量可以接住返回值5) Inputbox函数弹出一个输入对话框,Msgbox则用于输出例:REM 输入并回显你的名字'使用InputBox和Msgbox函数Dim name,msgmsg="请输入你的名字:"name=Inputbox(msg,"名称")Msgbox(name)上例中,Dim用来声明一个变量, 在VBS中, 变量类型并不是那么重要, 就是说VBS中你不用考虑name储存的是一个整数还是一个小数(学名叫"浮点数"), 也不用考虑是不是字符串(一串字符, 比如:"Hello World"), VBS会自动帮你搞定. 所以第三行语句可以删除, 效果不会变.常量:格式是:const 常量名=常量值.例如: const PI=3.1415926 const NAME="记忆碎片"二、进阶数据类型转换:1)Dim a,b,ca=inputbox("a是:","输入半径")b=Inputbox("b是:","输入半径")c=a*2+b*2Msgbox(c)这个输入1、2时是62)Dim a,b,ca=inputbox("a是:","输入半径")b=Inputbox("b是:","输入半径")c=(a+b)*2Msgbox(c)这个输入1、2时是24为什么会不一样呢? 在数学上c=(a+b)*2 和 c=a*2+b*2是等价的, 在VBS中也是如此. 问题出在"+"上, 在VBS中, +不仅仅是加号的意思还表示把两个字符串连接起来, 例如"Hello"+"World"="HelloWorld" have you understood? 你还记得InoutBox函数的返回值吗? 是字符串! 这就看出问题了吧, 在编程中"1"不等于(<>)1, "1"是一个字符, 而1是一个数, 所以a,b都是字符串变量, "1"+"2"="12", 这就好像我们小时跟伙伴开玩笑问他们1+1=?一样, 我们总是笑着说"错啦,应该是11".但为什么, a可以*2却不发生错误呢? 这时VBS比较智能的一个表现, 如果这个字符串的内容是一个数且对他进行数学运算, 则把字符串强制转换成数参与运算如果字符串代表一个数, 但不参加数学运算, 而是参加字符串运算(合并)则当作字符串处理, 所以你看到a+b=12, 这时候a+b的结果是一个字符串, 当它要乘以2的时候就被强制转换成了数字12, 这样我就得到了结果24怎么修改这个程序呢? 我们需要用到另一个内建的函数:int, int函数的功能是将输入值转成整数值, 我们这样修改: c=(int(a)+int(b))*2四、循环结构for....nextdim i,jfor i=1 to 9for i=1 to 9str=str & i * j & " " '&是和并字符串的符号next '每个next对应一个fornext1)do..loop和exit do的用法2) while当表达式true的时候执行循环体,until反之3) for...next是计数循环, 每次执行计数器递加4) 嵌套循环的作用和写法 4.5) &用于连接字符串5) vbCrLf相当于键盘上的回车键五、数组定义:dim 数组名(元素数量), 这里大家要注意一点, 这里定义的元素数量总是比你要的要少一个, 因为一个数组的起点是0号数据而不是1, 所以大家一定要小心: 你需要10个数据, 就定义"9"。
WinCC_Vbs中文手册
1.实例:访问图形编辑器中的对象可以使用 VBS WinCC 对所有图形编辑器对象进行访问,以使图形运行环境动态化。
根据变量或周期性(例如闪烁)情况,可在执行操作(例如在按钮上单击鼠标)时使图形对象动态化。
以下示例说明如何在鼠标单击后更改图形对象。
步骤在以下示例中,每次单击鼠标时运行系统中圆的半径都会设置为 20:Dim objCircleSet objCircle= ScreenItems("Circle1")objCircle.Radius = 202.实例:定义对象的颜图形对象的颜色通过 RGB 值(红/绿/蓝)定义。
可以设置或读出图形对象的颜色值。
步骤以下示例将“ScreenWindow1”的填充颜色定义为蓝色:Dim objScreenSet objScreen = HMIRuntime.Screens("ScreenWindow1")objScreen.FillStyle = 131075objScreen.FillColor = RGB(0, 0, 255)3.例:如何组态语言切换可使用 VBS 切换 WinCC 的运行系统语言。
最常用的是包含相应语言代码的按钮,这些按钮位于项目的起始页上。
在 VBS 中通过使用国家代码(例如,1031 表示德语 - 默认,1033 表示英语 - 美国等)指定运行系统语言。
有关所有国家代码的汇总,请参见标题为“区域方案 ID (LCID) 图”的主题下的 VBScript 基本知识。
步骤:使用按钮上的“Mouse click”事件创建 VBS 动作,输入以下动作代码将运行系统语言切换为德语:nguage = 10314.实例:禁用运行系统简介可以使用 VBS 终止 WinCC 运行系统,例如,通过鼠标单击,依靠变量值或其它事件(例如,启动运行系统时密码的多次错误输入)。
要执行的操作以下示例会终止 WinCC 运行系统:HMIRuntime.Stop5.实例:全局组态画面更改简介VBS 可用于启动全局画面更改,因而会在分布式系统的客户机上显示服务器中的画面。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
wincc通过VBS读取控件
在wincc7.0中做了个名称为main主画面,在main中添加一个名称为b画面窗口,再做一个名称为trend的模板画面,trend里面用了个名称为c的趋势控件,并在主画面中做了一个按钮,当我单击按钮的时候,在main中弹出trend画面并把相应的变量传递给trend里面的趋势控件c。
我想法是通过函数读取控件,然后改变控件的属性来达到变量传递的效果,这样就可以通过一个模板和多个按钮来实现单击不同按钮显示不同变量的趋势。
我通过函数SetobjCon2=HMIRuntime.Screens(
问题补充:
我想通过函数SetobjCon2=HMIRuntime.Screens(“Main.b:trend”).ScreenItem s(“c”)读取控件,但为什么编译不过去?
最佳答案
我觉得你这句没写错,
附我写的脚本如下:
dimnum
setnum=HMIRuntime.Screens(“start.画面窗口1:trend”).ScreenItems(“control”)
的确能获得此控件的属性,我怀疑你是不是忘记定义objCon2了?。