IFIX VBA的几个小窍门

QT访问IFIX标签       有时候需要外部开发独立软件对IFIX标签实时数据采集做一些处理 ,IFIX后台VBA只能使用单线程(多线程会奔溃)所以我们在C/S架构下的客户机上后台访问标签时如果标签量很大的话运行起来会直接卡死所以下面的是利用QT通过FixDataSystems控件来在外部开启独立进程进行标签数据采集处理,此控件前提必须要在本机安装IFIX5.5  或者5.8软件并且提前在IFIX实时数据库内提前添... 阅读详情

 1、从后台调度中访问或修改全局变量的代码

 

描述:

在iFIX中使用调度要后台运行的时候需要启动FixBackgroundServer程序,而该程序实际上是启动了独立于Workspace的进程,所以在后台调度中不能直接访问全局变量。下面的例子代码描述了怎样访问的方法:

 

 

" First get a pointer to the Application object in the Workspace

Dim WrkSpcApp As Object

Set WrkSpcApp = GetObject("", "Workspace.Application")

 

" Get a pointer to the Variable object called Variable1 in the User globals

Dim TargetVar As Object

Set TargetVar = WrkSpcApp.Documents("User").Page.FindObject("Variable1")

 

" Set the current value in the variable object to a 1

TargetVar.CurrentValue = 1

 

2、脉冲输出示例

Dim PauseTime, Start

CloseDigitalPoint "Fix32.FIX.DDD.F_CV"

PauseTime = 0.8  " 设置暂停时间。

  Start = Timer  " 设置开始暂停的时刻。

  Do While Timer < Start + PauseTime

    DoEvents  " 将控制让给其他程序。

  Loop

OpenDigitalPoint "Fix32.FIX.DDD.F_CV"

 

3、显示通讯状态

Is there a way to view communication status of the driver without using Mission Control?

Resolution

Using a digital input block reading a hardware register, the A_cualm field will be utilized. Chain the DI block to an event action block to a digital output tag using the SIM driver. In the event action block use the following script:

IF the A_cualm =com

Then set DO =1

Else set the DO=0

A data link can be made to the Sim block. The value of this block will determine the status of the communcation.

 

4、用VBA脚本打开和关闭调度

为了打开和关闭调度,必须用下列方法:

 

打开一个名字为ddd的调度:

 

Application.Documents.Open "C:/Dynamics/pdb/ddd.evs"

 

关闭一个名字为ddd的调度:

 

Application.Documents("ddd").Close

 

注意:关闭调度时不用扩展名 .evs 。

 

5、在后台调度中访问画面中的对象

在调度中中的脚本不能直接访问画面中的对象。

办法:

使用FindObject方法:

Dim AppObj as Object

Dim PicObj as Object

set AppObj = GetObject ("","Workspace.Application")

set PicObj = AppObj.System.FindObject ("Pic.Obj")

PicObj.Value = 5

Pic为画面的名字,picObj 为所用的对象的属性或方法。


6、怎样用程序控制7.X版本的驱动程序的datablocks, devices, or channels扫描的启停

在应用过程中可能希望灵活的控制驱动程序中的某一个Channel或Device或Datablock,以下介绍两种方法:

6.1.通过编写脚本:

本例子是用脚本来控制第一个Channel的第一个Device的第一个Datablock的,如果你想控制Channel或Device,只需将channel handle或device handle象本例中的Datablock赋给SetPropertyData function即可:

Dim objDriver As Object

Dim strDRVAcronym As String

Dim strProgId As String

"Variables for GetChannel

Dim lngNumChannels As Long

Dim lngChanHandles

Dim strChanNames

"Variables for GetDevices

Dim lngNumDevices As Long

Dim lngDeviceHandles

Dim strDeviceNames

"Variables for GetDataBlocks

Dim lngNumDataBlocks As Long

Dim lngDataBlockHandles

Dim strDataBlockNames

Dim lngErrors

Dim myvar As Long

strDRVAcronym = InputBox("Please enter the driver""s three letter acronym?" & vbCrLf & "(For Example: Enter ABR for the ABR Driver)", "What Driver are you using?")

strProgId = "Intellution." & strDRVAcronym & "drv"

Set objDriver = CreateObject(strProgId)

lngNumChannels = objDriver.GetChannels(lngChanHandles, strChanNames)

lngNumDevices = objDriver.GetDevices(lngChanHandles(0), lngDeviceHandles, strDeviceNames)

lngNumDataBlocks = objDriver.GetDataBlocks(lngDeviceHandles(0), lngDataBlockHandles, strDataBlockNames)

""Build Variables for SetPropertyData function.

lngHandle = lngDataBlockHandles(0)

varProperties = "Enabled"

varProperyData = "1"

lngErrors = objDriver.SetPropertyData(lngHandle, varProperties, varProperyData)

Set objDriver = Nothing

6.2.大多7.X的驱动程序都有一些特殊的控制地址可以用来控制驱动程序中的Server,group,item的扫描状态,可以查看相应驱动程序的帮助中以"惊叹号"开头的一些特殊地址:

!MODE - Enables polling to the server, group, or item specified when a value of 1 is written to a Digital Output block (Analog Output blocks are not supported). Disabling a specified object occurs when a value of 0 is written to a Digital Output block.

You can create a database block with the address !MODE:Datablock1 and trigger it manually, through VBA code, or through a Program Block.

 

7、用VBA在一个基于时间的后台调度中计算偏差的例子

你可能想计算在一个指定的时间段内开始时间和结束时间的偏差,在后台调度中用一个定时器来实现

方法:

本例为怎么样取在一个特定时间的开始和结束时的值并计算差值。它用了两个全局变量和一个基于时间的后台的调度:

1. 创建两个全局变量: "StartSample" 和 "Initialized"".

2. 设置变量的属性: "StartSample" -- "Long" ;"Initialized" -- "Boolean"。 其中 "Initialized" 初始值为 "False"。

3. 创建一个基于时间的调度,时间间隔为 00:00:10。

4. 用自定义脚本并写入以下脚本。

5. 确认改变tag reference到相应的node 和 tag。

6. 脚本写好后保存调度并设置为用后台运行调度。

7. 例子启动后会弹出对话框表面例子初始化了。

8. 之后该对话框会显示起始值,终止值和该段时间两者的差值。

注意:不要忘了将FixBackgroundServer.exe 加到启动任务配置中去。

脚本:

-----------------------------------------------------------------------------------------------------------

Private Sub FixTimer3_OnTimeOut(ByVal lTimerId As Long)

Dim objWrkSpc As Object

Dim objStartVar As Object

Dim objInit As Object

Dim lngEndVar As Long

Dim lngDelta As Long

get Workspace object and global variables contained in workspace

Set objWrkSpc = GetObject("", "Workspace.Application")

Set objStartVar = objWrkSpc.Documents("User").Page.FindObject("StartSample")

Set objInit = objWrkSpc.Documents("User").Page.FindObject("Initialized")

"Check to see if this is the first time the script is being fired.

"If so, initialize the StartSample variable with a value from the desired tag

"and set the Initialized flag to true. If the script has been fired once then

"take the end sample, calculate the difference and then store a new start sample.

If objInit.CurrentValue = True Then

lngEndVar = readvalue("Fix32.NODE.TAG.F_CV")

lngDelta = lngEndVar - objStartVar.CurrentValue

MsgBox "START: " & objStartVar.CurrentValue & " END: " & lngEndVar & _

" DIFFERENCE: " & lngDelta

objStartVar.CurrentValue = readvalue("Fix32.NODE.TAG.F_CV")

Else

objStartVar.CurrentValue = readvalue("Fix32.NODE.TAG.F_CV")

MsgBox "StartSample initialized to " & objStartVar.CurrentValue

objInit.CurrentValue = True

End If

"Destroy objects

Set objWrkSpc = Nothing

Set objStartVar = Nothing

Set objInit = Nothing

End Sub

 8、VB中读取iFIX点

This sample code will read data from an iFIX tag.

"declare a few objects

Dim objWorkspace As Object

Dim objDataItem As Object

"get reference to the workspace

Set objWorkspace = CreateObject("Workspace.Application")

"use the workspace.system object to obtain the OODB dataitem

Set objDataItem = objWorkspace.System.FindObject("Fix32.FIX.AI1.F_CV")

"display the value in a msgbox

MsgBox objDataItem.Value

objDataItem.Value = "75"

9、有没有办法使客户端浏览节点上的画面加载速度加快?

回答:通过调整 FixUserPreferences.ini 文件中的参数设置可以让你精确调整 VBA 脚本语言的运行性能,并加快画面在浏览节点上的打开速度。

FixUserPreferences.ini 文件在目录/Dynamics/Local 下,在此文件的 [Scripting] 部分参数ScriptIdleTimeProcessingDelayCount 缺省值设置在 1。

在这一缺省设置下,你的 VBA 脚本语言的执行将优先于画面的打开,若将此设定改为 0 或 1,你可以提高画面的打开速度。你可以使用的一个办法是在你的 SCADA节点上将参数设为 1,使 VBA脚本运行速度较快,而在客户端将参数设为 0 或 1,加快画面的打开速度。

注意:不要将参数设为大于 1,这并不能提高你的系统性能。

 

10、语音报警

    大多数时候大家都是在调度里面做,另一个方法是:
    在ALARMSYUMMAYR控件中,启动报警。
    在ALARMSYUMMAYR控件启用newalarm事件,可以在这个时间里实现语音报警。
    在大量语音报警的情况下,比用调度省事多了。
    选择异步函数,可以在多个报警同时来临时,把所有的语音都报出来。   

11、调用API

    很多时候调用API函数,比自己编方便多了,如Sleep。
    在某些情况下,你或许要使用共享内存,这样的话,使用API是最好的选择了。
 

iFIX系统中Excel报表实现与VBA集成教程 VBA(Visual Basic for Applications)是一种编程语言,用于开发Office应用程序中的自定义解决方案。它允许用户通过编写代码来自动化和扩展Excel的功能。VBA与Excel对象模型交互,操作工作簿、工作表、单元格以及范围等对象。ADO(ActiveX Data Objects)是一种编程模式,允许开发者通过编程语言操作不同数据源的数据。 阅读详情

相关推荐

IFIX VBA典型应用.rar

IFIX VBA典型应用rar,IFIX VBA典型应用

ifix的按钮发脉冲

ifix 脉冲

iFIX 按钮脚本实现按下置一,1秒后置零

脚本实现iFIX按钮按下置位,松开复位

ifix自定义声音报警(自动执行脚本

1.新建一个tag,比如叫Test1。使能报警并设置报警组是ALL 2.新建一个调度,并在调度里面新建一个事件调度项,如下图 表示在 Fix32.G1GMS.ALL.F_AREA_UNACK > 0 时(即有未确认的报警),会每隔10秒钟执行一次vb脚本 3.vb脚本里面是如下代码 Private Declare Function sndPlaySound Lib "winmm.dll" ...

中国智造2025 1万+

IFIX里使用VBA计算文件大小

IFIX VBA 计算文件大小

徐坤的博客 387

IFIX VBA几个小窍门

一、语音报警    大多数时候大家都是在调度里面做,另一个方法是:    在ALARMSYUMMAYR控件中,启动报警。    在ALARMSYUMMAYR控件启用newalarm事件,可以在这个时间里实现语音报警。    在大量语音报警的情况下,比用调度省事多了。    选择异步函数,可以在多个报警同时来临时,把所有的语音都报出来。    二、调用API    很多时候调用API函数,比自己编方

物联网网关 4001

IFIX常用VBA代码资源:助您高效操作IFIX平台

IFIX常用VBA代码资源:助您高效操作IFIX平台 去发现同类优质开源项目:https://gitcode.com/ 在当今自动化和智能化日益普及的工业环境中,IFIX平台作为一款优秀的工业组态软件,深受广大用户的喜爱。然而,如何在使用IFIX平台时进一步提高工作效率,成为了许多用户关注的焦点。今天,就为大家推荐一个开源项目——IFIX常用VBA代码资源,它提供了针对IFIX平台的多种实用功能,...

gitblog_06783的博客 382

IFIX常用VBA代码资源

IFIX常用VBA代码资源 去发现同类优质开源项目:https://gitcode.com/ 资源介绍 本资源提供了针对IFIX平台的一些常用功能的VBA代码,包含了多种实用的自动化操作,能够帮助用户在IFIX环境中提高工作效率。以下为详细功能列表: 退出工作台 IE浏览器打开网页 打开帮助文档 关闭虚拟键盘(需复制文件) 打开虚拟键盘(需复制文件) 检测机器分辨率 改变字体大小 检测机器颜色是...

gitblog_06732的博客 303

ifix如何设画面大小_ifix学习的七个阶段和经验分享

上位机就是人机界面软件,功能最强大的就是西门子WINCC,但比较复杂,没经过培训很难上手,今天我来讲一款容易上手的上位机。  这里不教你使用ifix,只教你如何学习ifix,是一篇学习指南性的文章。很多学习ifix的朋友,尤其是初学者,总是摸不着门路,不知该如何学习才好,我根据自身的学习体会和辅导他人的经验,对宏观的学习路径进行了简单总结,希望对朋友们有所帮助。   第一步要做的:   如果你从...

weixin_30741285的博客 1331

iFIX调度 VBA脚本声音报警

iFIX调度 VBA脚本发出声音报警,经过现场测试并一直用。我选择的是调度后台运行。

ifix从sqlserver里读数据_【交流】ifixvba编程——从.net程序的角度考虑

该楼层疑似违规已被系统折叠隐藏此楼查看此楼第一:数据库之对比:相对于,ifix中的过程数据库,.net更偏向于sqlserver,orcle,mysql,db2类型的关系数据库。ifix之向关系数据库中更多的是向access数据啼中传送相关报警的历史数据。更多的涉及到,数据的传送,报警数据的配置。然而从程序的角度考虑,ifix界面下能否实现关系型数据库的增删改查,是我们比较关心的。下面便是一段,...

weixin_28848795的博客 640

ifix如何设画面大小_iFix做画面的技巧有哪些???

展开全部、从后台调度中访问或修改全局变量的代码描述:在iFIX中使用调度要后台运行的时候需e69da5e887aa3231313335323631343130323136353331333330323966要启动FixBackgroundServer程序,而该程序实际上是启动了独立于Workspace的进程,所以在后台调度中不能直接访问全局变量。下面的例子代码描述了怎样访问的方法:" First ...

weixin_39527078的博客 1467

iFIX介绍

  iFIX®是Intellution自动化软件产品家族中的一个基于Windows的HMI/SCADA组件。iFIX是基于开放的和组件技术的产品,专为在工厂级和商业系统之间提供易于集成和协同工作设计环境。它的功能结构特点可以减少开发自动化项目的时间,缩短系统升级和维护的时间,与第三方应用程序无缝集成,增强生产力。iFIX的SCADA部分提供了监视管理、报警和控制功能。它能够实现数据的绝对集

mostxx的专栏 7302

iFIX5.1:编程示例

  今天下午自动化的老师讲解了iFIX5.1的编程初步,但收获挺大的。   老师讲解了一个接收输出的显示,经过摸索,可以通过编程来随意控制读写。   具体实现过程:   ⒈ 建立连接,通过“Topic Configuration...”,就是建立与具体模块的连接,还可以用别名连接;   注意:一定要选对具体的模块。   ⒉ 配置OPC,当然也可以是专有的协议;可以是本地的,也可以是远程的(即别人的,也可是上位机);   没有的话旧新建:   ⒊ 配置OPC里面的具体连接,注意两点:

dawn0718的专栏 4266

手把手教你利用VBA+Excel制作IFIX报表教程:打造高效数据处理助手

手把手教你利用VBA+Excel制作IFIX报表教程:打造高效数据处理助手 去发现同类优质开源项目:https://gitcode.com/ 在当今快节奏的工作环境中,高效的数据处理和分析能力至关重要。今天,我们就来聊聊如何利用VBA+Excel制作IFIX报表,帮助您轻松应对数据管理的挑战。 项目介绍 手把手教你利用VBA+Excel制作IFIX报表教程 是一个专注于VBA与Excel结合使用的...

gitblog_06739的博客 323

ifix如何设画面大小_ifix教程

目录1.IFix的安装..........................................................................................错误!未定义书签。安装准备..........................................错误!未定义书签。安装....................................

weixin_39662834的博客 528

手把手教你利用VBA+Excel制作IFIX报表教程

手把手教你利用VBA+Excel制作IFIX报表教程 去发现同类优质开源项目:https://gitcode.com/ 本教程将详细介绍如何使用VBA(Visual Basic for Applications)结合Excel制作IFIX报表,教程内容适用于VB6.0的完美移植。教程以手把手教学的方式进行,每一个步骤都配以详细的图解和代码注释,让读者能够轻松掌握VBA与Excel的交互使用。 教程...

gitblog_06787的博客 326

使用 WINDOWS API 关闭 iFIX

使用 WINDOWS API 关闭 iFIX 注意事项:使用 iFIX的版本不同,使用的程序命令也不一样。 示例:   iFIX 2.0 中使用下列 VBA 程序代码:   下列代码加入按钮的点击事件中:   Dim lResult As Long Dim iResult Dim hw&, cnt& hw& = Findwindow(vbNullString, "FIX Dy

longking110的专栏 1022
上一篇: iFIX 系统配置指南
lerit
博客等级 码龄19年 200粉丝 10原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值