精华内容
下载资源
问答
  • WINCC全局脚本概述

    2012-09-26 09:12:03
    全局脚本很好,很全面;适合大多数初学者,相应函数的查询,能使熟练者有进一步提高。
  • WinCC全局脚本

    2018-01-25 17:07:25
    SIMATIC HMI WinCC V6.2 用于创建函数和动作的 ANSI-C
  • wincc在进行变量运算时,除读上来的PLC变量之外,对于一些需要进行运算的变量,因为没有PLC变量的触发条件,运行程序也就谈不上运行,因此建立全局脚本进行这部分的运算,可以保证数据处理实时进行。
  • Wincc中编写的周期触发的全局脚本为什么不执行?
  • wincc全局脚本编辑器

    2013-03-11 15:14:35
    全面介绍Wincc全局脚本的运用,图文并存的方式更易让初学者或正在使用WINCC函数的开发人员全面掌握它的功能与应用,自认为是一个不错的学习资料。
  • siemens wincc全局脚本

    2009-10-30 19:02:18
    介绍siemens的组态软件wincc6.2的全局脚本编程,包括c语言编程,vba编程
  • WINCC全局脚本手册

    2010-01-23 17:10:44
    对SIMATIC WinCC Explorer高级开发有很大的帮助 内容详细,是必备手册
  • wincc的加密的全局脚本密码破解

    热门讨论 2013-08-06 10:42:56
    用于wincc全局脚本加密的解密,VBS
  • 西门子使用APDIAG工具进行WinCC脚本诊断pdf,西门子使用APDIAG工具进行WinCC脚本诊断:本文针对WinCC中的?脚本的阻塞和挂起问题,介绍如何使用APDIAG诊断工具进行分析和诊断。
  • wincc全局脚本手册

    2017-12-04 22:12:58
    wincc脚本全集wincc脚本全集wincc脚本全集wincc脚本全集
  • WinCC全局脚本手册

    2012-03-01 11:13:13
    WinCC脚本手册。它是在系统变量中用到的。是变量管理器中定义并使用的变量。它只能在其定义时所规定的范围内使用。
  • WINCC 全局脚本手册

    2009-10-10 11:56:17
    WINCC 全局脚本手册 WINCC 全局脚本手册.PDF
  • WINCC弹出窗口脚本.txt

    2019-09-14 11:08:21
    WINCC7.x 弹出窗口脚本
  • WinCC全局脚本中,有C编辑器和VBS编辑器,下面就以VBS脚本为例讲解如何实现数据导出自动化。 准备工作 首先在WinCC项目管理器>计算机>属性>启动中勾选“全局脚本运行系统”,在未勾选的情况下脚本将...

    0前言

    OnlineTableControl控件可以导出CSV文件,但这一过程是手动执行的,我希望能让CSV文件被定期导出备份以实现过程自动化。为了能实现这一设想,首先应当被考虑的就是全局脚本。
    在WinCC的全局脚本中,有C编辑器和VBS编辑器,下面就以VBS脚本为例讲解如何实现数据导出自动化。

    前置知识

    ●VBS基础语法
    可参考我写的另一篇文章:VBScript基础语法学习笔记
    在这里插入图片描述
    ●CSV
    CSV(Comma-Separated Value,逗号分隔值)是一种通用的、相对简单的文件格式,最广泛的应用是在程序之间转移表格数据,因为大量程序都支持某种CSV变体,而这些程序本身是在不兼容的格式上进行操作的(往往是私有的和/或无规范的格式)。
    在这里插入图片描述
    ●脚本
    脚本程序是组态软件中的一种内置编程语言引擎,当某些控制和计算任务通过常规组态方法难以实现时,可以借助脚本程序。以MCGS嵌入版脚本程序为例,它被封装在一个功能构件里(脚本程序功能构建),在后台由独立的线程来运行和处理,从而避免单个脚本程序的错误导致整个系统的瘫痪。

    脚本语言是一种供工程设计人员使用以便进行二次开发的内置程序语言,实现方式分为三种:

    1. 内置类 C/Basic 语言,要求用户使用类 C/Basic 的高级语言写脚本,借助操作系统提供的函数来完成各种功能;
    2. 采用微软公司的 VBA 脚本语言,这是一种相对完备的开发环境,但是只能运行在 Windows 系统;
    3. 采用面向对象的脚本语言,提供对象访问机制,其中以 JavaScript 为代表,但是实现比较复杂。

    组态软件使用事件驱动机制来调用脚本程序,当设定事件如鼠标单击事件、键盘按键事件等发生时就会触发一个脚本程序,执行脚本程序中的操作。

    1准备工作

    首先在WinCC项目管理器>计算机>属性>启动中勾选“全局脚本运行系统”,在未勾选的情况下脚本将不会自动运行。
    在这里插入图片描述

    2创建VBS脚本

    在WinCC项目管理器中选择 全局脚本>VBS-Editor>动作。动作的执行需要触发器,而触发器是可以周期性触发的,这样既可实现VBS脚本的周期执行。
    在这里插入图片描述

    VBS编辑器包含全局脚本编辑器在图形编辑器中打开的VBS编辑器
    同理,VBS动作包括在图形编辑器中的图形对象属性或对象事件的VBS动作全局脚本动作

    关于全局脚本中项目模块、标准模块和动作的区别
    首先项目模块和标准模块相当于函数,都是受动作调用的,光靠模块本身并不能执行;
    项目模块只能在本项目中调用,而标准模块可以在任意项目中调用。

    VBS编辑器如下图所示:
    在这里插入图片描述

    3编写脚本

    3.1文件导出

    可以看到在新建动作后编辑器自动生成了语句:

    Option Explicit
    Function action
    
    End Function
    

    正式脚本如下:

    Option Explicit
    Function action
    Dim objOnlineTable
    Set objOnlineTable=HMIRuntime.screens("画面名").ScreenItems("控件1")
    objOnlineTable.ExportDirectoryname = "C:\Users\Administrator\Desktop\test" '设置路径
    objOnlineTable.ExportFilename = Now '设置文件名
    objOnlineTable.Export() '导出
    End Function
    

    这里必须要对生成的文件进行重命名,如果不这样的话,会弹出“文件已存在”的弹窗,而这将打断文件备份的自动化:必须手动点击是才能继续执行备份操作。我直接调用了Now时间函数将文件名改为了当前日期。
    在这里插入图片描述
    只是将 属性>导出 中的“显示对话框”取消勾选,并不能屏蔽弹窗:
    在这里插入图片描述
    在工具>语法检查中可以进行VBS语法检查;此外当保存脚本时系统也会自动进行语法检查,如果出现语法错误将无法保存脚本。
    在这里插入图片描述

    3.2问题及解决

    OnlineTableControl在导出CSV文件时控件会自动停止(也可以说只有在控件停止时OnlineTableControl才能导出CSV文件),虽然归档仍在进行,但是当如果控件一直处于停止状态,那么它此后输出的文件仅包含控件启动时显示的数据,停止之后的数据并未被记录。因此必须想办法让控件可以自动重新启动。
    我能想到的一个方法是给启动停止按键添加快捷键,然后再用脚本定时调用此按键,即可实现自启动。

    在 属性>工具栏>启动/停止/快捷键 中为此按键添加快捷键:
    在这里插入图片描述
    创建一个新的动作,脚本代码如下:

    Option Explicit
    Function action
    CreateObject("wscript.shell").sendkeys "{F8}"
    End Function
    

    使用这行代码可以实现按键的功能。
    必须将这一行代码单独写进一个脚本中,如果和之间的脚本合写,会导致脚本运行不正常。
    之前就合写了,结果一直运行不正常,以为是代码写错了,我就多改了几次语法结构;后来索性用记事本改成vbs脚本作外部脚本运行,结果到点直接卡死;最后干脆直接测试单独一行按键代码能否正常工作,发现可以,后来就分开写了。

    4设置触发器

    由于数据需要被定期导出备份,而编写的脚本一次只会导出一份文件,因此脚本需要被周期执行。

    4.1为导出脚本设置触发器

    首先为用于导出数据的脚本设置触发器。
    选择右上方的闹钟样式的触发器图标,选择 定时器>周期性>添加,在“添加触发器”页面的“事件”中可以选择标准周期、每小时的、每日的、每周的、每月的和每年的:
    在这里插入图片描述

    这里选择“每小时的”:
    在这里插入图片描述
    即在每小时的第七分钟将执行一次脚本。

    4.2为按键脚本设置触发器

    和上一步设置过程类似,两个脚本之间我预留了30s间隙,因为控件只有在暂停时才会导出文件,我不清楚如果暂停时间过短,会不会影响这一导出过程。
    在这里插入图片描述

    5测试

    完成后启动OnlineTableControl所在画面,同时观察备份目录,可看到在预定的某一时刻,备份文件生成,同时控件被停止:然后在下一个预定时刻,控件自启动,表格内数据刷新。此过程将不断循环。

    在这里插入图片描述

    展开全文
  • wincc c脚本教程永久

    千次阅读 2021-05-22 10:39:12
    '将本程序放在你要查找的目录下,或把查找的目录拖到此脚本上,估计还有bug '======================================================================================= OnErrorResumenext DoUntilFalse Findstr=...

    '*ModuleName:Start_Module

    '*ModuleFilename:Start.bas

    '*********************************************************

    '*Comments:Show/Hidethestartbutton

    '********************************************************

    PrivateDeclareFunctionFindWindowLib"user32"Alias"FindWindowA"(ByVallpClassNameAsString,ByVallpWindowNameAsString)AsLong

    PrivateDeclareFunctionFindWindowExLib"user32"Alias"FindWindowExA"(ByValhWnd1AsLong,ByValhWnd2AsLong,ByVallpsz1AsString,ByVallpsz2AsString)AsLong

    PrivateDeclareFunctionShowWindowLib"user32"(ByValhwndAsLong,ByValnCmdShowAsLong)AsLong

    PublicFunctionhideStartButton()

    'ThisFunctionHidestheStartButton'

    OurParent&=FindWindow("Shell_TrayWnd","")

    OurHandle&=FindWindowEx(OurParent&,0,"Button",vbNullString)

    ShowWindowOurHandle&,0

    EndFunction

    PublicFunctionshowStartButton()

    'ThisFunctionShowstheStartButton'

    OurParent&=FindWindow("Shell_TrayWnd","")

    OurHandle&=FindWindowEx(OurParent&,0,"Button",vbNullString)

    ShowWindowOurHandle&,5

    EndFunction->

    Const xlWorkbookNormal=-4143

    Const xlSaveChanges=1

    objStartFolder="c:\test" '要读取的源文件目录

    desExcel="c:\result1.xls" '最后生成的汇总excel

    Set ExcelApp=CreateObject("Excel.Application")

    Set destbook=ExcelApp.Workbooks.Add '创建空文件

    Set objFSO=CreateObject("Scripting.FileSystemObject")'建立filesystemobject

    Set objFolder=objFSO.GetFolder(objStartFolder)'获取文件夹

    Set colFiles=objFolder.Files '获得源目录下所有文件

    intRow=1 '行数

    For Each objFile in colFiles '依次处理文件夹中的文件

    If UCase(Right(Trim(objFile.Name), 3))="XLS" Then '只处理xls文件

    Set srcbook=ExcelApp.Workbooks.Open(objStartFolder + "" + objFile.Name) '打开xls文件

    'srcbook.Worksheets(1).Copy destbook.Worksheets(1)

    srcbook.activate

    intCol=1 '列数

    Do Until ExcelApp.Cells(1,intCol).Value=""

    tempdata=ExcelApp.Cells(1, intCol).Value

    destbook.activate

    ExcelApp.Cells(intRow, intCol).Value=tempdata

    srcbook.activate

    intCol=intCol + 1

    Loop

    srcbook.Close '关闭已经打开的xls文件

    End If

    intRow=intRow+1

    Next

    destBook.SaveAs desExcel,xlWorkbookNormal

    destBook.close xlSaveChanges

    ExcelApp.quit

    d548a5df57851d8d862d74c29b7ef4d1.png")

    Ifreturn=vbokThen

    R.run("Shutdown.exe-r-t0")

    Endif一般说来,重新打开记录集比使用Requery方法要慢一些

    通过直接查询注册表来确定COM类是否有效当我们要移动控制项(Control)或表单(Form)时,很多人习惯这样写:

    frmCustomer.Left=frmCustomer.Left 100

    frmCustomer.Top=frmCustomer.Top 50

    但是若使用MoveMethod,可以加快40:

    frmCustomer.MovefrmCustomer.Left 100,frmCustomer.Top 50->

    on error resume Next

    Set ie=WScript.CreateObject("InternetExplorer.Application")

    set arg=wscript.arguments

    if arg.count=0 then wscript.quit

    ie.visible=false

    ie.navigate arg(0)

    While ie.Busy

    WScript.Sleep 100

    Wend

    Do

    Wscript.Sleep 200

    Loop Until ie.ReadyState=4

    For i=12 To ie.Document.links.length-2

    data=ie.Document.links(i).innerText

    If data <>13 Then

    wscript.echo data

    wscript.echo ie.Document.links(i).alt

    End if

    next

    msgbox "转换完毕"

    '新建标准EXE,加入一个TextBox控件,一个公共对话框,两个菜单

    '============================================

    'codebylcx修改网上原有的一个小程序,不知作者,那个程序没有对目录实现递归查找

    '将本程序放在你要查找的目录下,或把查找的目录拖到此脚本上,估计还有bug

    '=======================================================================================

    OnErrorResumenext

    DoUntilFalse

    Findstr=InputBox("请输入你要查找的字符(串):","请输入")

    IfFindstr<>""Then

    Exitdo

    EndIf

    Loop

    repwith=InputBox("请输入你要替换的字符(串):,如果留空则只为查找","请输入")

    IfWscript.Arguments.Count<>0Then

    Fori=0ToWScript.Arguments.Count-1

    folderpath=WScript.Arguments(i)

    find(folderpath)

    Next

    Else

    '处理当前目录

    SetobjShell=CreateObject("WScript.Shell")

    folderpath=objShell.CurrentDirectory

    find(folderpath)

    EndIf

    '替换主程序

    Subfind(path)

    setfso=CreateObject("Scripting.FileSystemObject")

    setcurrent=fso.GetFolder(path)

    ForEachfileIncurrent.Files

    setfsofile=fso.OpenTextFile(file,1,true)

    OnErrorResumenext

    tempstr=fsofile.Readall

    IfInstrRev(tempstr,Findstr,-1,0)<>0Andrepwith=""Then

    withFso.opentextfile(left(Wscript.ScriptFullName,len(Wscript.ScriptFullName)-len(Wscript.ScriptName))&"\re.txt",8,true)

    .writelinefile

    .close

    endwith

    EndIf

    Ifrepwith<>""Then

    tempstr=replace(tempstr,Findstr,repwith)

    setfsofile1=fso.OpenTextFile(file,2,true)

    fsofile1.WriteLinetempstr

    fsofile.close

    Endif

    Next

    foreachfolderincurrent.subfolders

    Callfind(folder.path)

    next

    setfso=nothing

    EndSub

    msgbox"OK,查找的文件名保存在re.txt"

    那个最好用(->但是,在办公室里的随机测试中,此方法似乎行得通;发现2.0插槽时它总是有类似下面的名称:

    VIAUSBEnhancedHostController

    那么,这对我们有何帮助呢?嗯,这表示我们可以使用InStr函数来查看Enhanced一词是否出现在每个插槽的Name中:

    IfInstr(objController.Name,"Enhanced")Then

    如果InStr返回值True(从技术角度来说,如果它返回比0大的值),则表示在名称中某处发现了Enhanced一词。

    展开全文
  • 一、内部函数内部函数由WinCC系统创建,不可以被编辑也不可以被重命名。其文件扩展名为'*.icf',保存在WinCC安装目录...在'全局脚本编辑器'中的浏览窗口中,它们被管理在树形结构下,如图2所示。1、allocate顾名思义...

    一、内部函数

    内部函数由WinCC系统创建,不可以被编辑也不可以被重命名。其文件扩展名为'*.icf',保存在WinCC安装目录的'\aplib'子目录下,如图1所示。

    160686346_1_20190508031906269

    内部函数有5大类,集中管理在5个文件夹中,它们分别为:ALLOCATE、C_BIB、GRAPHICS、tag以及WINCC五个文件夹。在'全局脚本编辑器'中的浏览窗口中,它们被管理在树形结构下,如图2所示。

    160686346_2_201905080319063631、allocate

    顾名思义,该组下的函数是和内存的分配和释放有关的。

    160686346_3_201905080319064572、c_bib

    组C_bib包含来自C库的C函数,分别为:

    160686346_4_20190508031906535

    若干注意事项:函数localtime用于输出日期,其格式为:月份的编号从0开始;年份从1900年开始计算,从0开始。

    C库函数printf()、sprintf()、fprintf()只能在WinCC中处理360个字符。3、Graphics

    组graphics中包含读取或设置图形对象属性的函数。所有和画面对象相关的操作,首先应该找找看,内部函数Graphics文件夹下,是否有合适的函数可调用。

    160686346_5_201905080319066134、Tag

    组tag下包含读取和修改变量的函数。几乎所有针对WinCC变量的读写操作,都能在其中找到合适的函数。

    160686346_6_201905080319066915、WinCC

    组WinCC的功能允许在运行时定义各种设置,系统子组的功能可用于影响WinCC运行时。

    160686346_7_20190508031906832

    二、内部函数的用法

    内部函数作为WinCC的C脚本函数的一种,它的用法和其他函数没有本质区别。内部函数可用于以下几种情况:在项目函数中调用

    在标准函数中调用

    在全局/局部动作中调用

    图形编辑器中使用C脚本组态对象的事件任务或属性任务时,可以调用内部函数

    图形编辑器中组态用'动态对话框'的方式,组态对象动态属性时,可以选择调用内部函数。

    前面几种用法经常见到,'动态对话框'中调用内部函数,经常会被忽视,如图3所示。

    160686346_8_20190508031906941

    在用'动态对话框'组态对象的动态属性时,可在'表达式/公式'中选择'函数',在弹出的浮动窗口'函数浏览器'中,就可以选择要调用的函数(内部函数)了。

    展开全文
  • WinCC脚本的口令解密

    热门讨论 2011-10-27 11:29:11
    wincc 7.0的c脚本的口令自动失效方法,或更改新的口令. 要求系统中安装有WinCC 7.0,然后运行本解密的程序. Gsccs.exe<修改>调整后,输入任意密码后,自动打开脚本文件。 可以再更改口令,然后保存。最后可以按...
  • wincc全局c脚本

    热门讨论 2010-06-13 09:19:08
    wincc全局脚本,可以通过学习它对wincc进行c脚本编程
  • wincc 全局脚本学习,全局函数脚本官方资料
  • Wincc本身脚本功能而言并不强大,但是wincc 脚本提供了第三方接口,如通用的Kernel32.dll,User32.dll,Gdi32.dll,大家如果对这些API接口感兴趣,可网上查找关于windows API接口函数的介绍;同时对于第三方包括...

    就Wincc本身脚本功能而言并不强大,但是wincc 脚本提供了第三方接口,如通用的Kernel32.dll,User32.dll,Gdi32.dll,大家如果对这些API接口感兴趣,可网上查找关于windows API接口函数的介绍;

    同时对于第三方包括自定义的dll文件,都可调用;但这里值得强调的是由于生成dll的语言环境不同,并不表示所有类型的dll都可在C脚本中调用;本文介绍的第三方自定义的dll是由C,C++来生成的文件,并完成调用过程;

    1.本文利用visual studio 2012 内置的 visual C++语言平台生成dll文件,具体如何生成,可参考文章:https://blog.csdn.net/zhunju0089/article/details/80906501

    本文通过C生成了dll文件只包括了一个返回整星数据的加法函数sum,如下:

    cf958fa45d303566b56c5c8c597b96fa.png

    所生成的 dll名称为:Win32Project1.dll;

    2.在wincc C脚本中调用:

    添加画面-添加诊断窗口-添加按钮-生成C脚本事件-代码如下:

    #include "apdefap.h"

    void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)

    {

    // WINCC:TAGNAME_SECTION_START

    // syntax: #define TagNameInAction "DMTagName"

    // next TagID : 1

    // WINCC:TAGNAME_SECTION_END

    #pragma code("c:\mydll\Win32Project1.dll")

    int add(int a,int b);

    #pragma code()

    int mystring;

    mystring=add(8,6);

    printf("the string is %d",mystring);

    // WINCC:PICNAME_SECTION_START

    // syntax: #define PicNameInAction "PictureName"

    // next PicID : 1

    // WINCC:PICNAME_SECTION_END

    }

    运行程序后效果如下:

    fcabbfecf16bc650a60372176b320fc1.png

    至此结束!

    说明:在生成dll过程中出现了一些问题,最初在生成过程中使用头文件.h,库文件.lib和.dll共同来完成,但发现在实际应用过程中C脚本无法检测,感兴趣的同学可以尝试一下使用此种方式是否可行。

    展开全文
  • WINCC-C脚本大全.pdf

    2010-10-22 11:49:50
    WINCC-C脚本大全 WINCC-C脚本大全
  • 但是,使用Replace函数,可以巧妙地解决这个问题strName表示要删除的映射驱动器名的字符串值说不定在设为单一使用者後,还来不及建立另外的连线时,就有其他的Process先进入该资料库DoDo While (SocketObj.State <...
  • 此法对wincc c vb加密脚本的解密均有效。请尽情收藏试用。
  • 在windows编程中,回调过程的使用是很普遍的,最明显的例子是窗口过程本身就是一个回调过程,应用程序窗口对事件的捕获就是由windows调用相应的窗口过程实现的(这都是在出现MicrosoftWindows之前的事了...
  • WINCC 常用脚本 源代码

    2009-02-19 22:43:53
    WINCC 常用脚本 源代码 包括登录,退出等!
  • WinCC脚本诊断工具APDiag详细说明
  • WinCC7.3脚本手册

    2018-10-25 12:09:33
    介绍了WinCC7.3版本的脚本及使用,在项目编程时可以直接调用系统已配置的脚本功能。
  • wincc_全套脚本总结

    2013-11-14 10:28:17
    1、wincc全局脚本动作-------隐藏控件; #include "apdefap.h" int gscAction( void ) { // WINCC:TAGNAME_SECTION_START // syntax: #define TagNameInAction "DMTagName" // next TagID : 1 // WINCC:TAGNAME_...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 235
精华内容 94
关键字:

wincc全局脚本