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数据同步到MySQL的完整指南:VBA脚本与ODBC配置详解 在工业自动化领域,SCADA/HMI组态软件与关系型数据库之间的数据通路常常成为信息化改造的瓶颈。作为经典组态软件,IFIX具备稳定的实时监控能力,但其私有历史数据格式难以被上层系统直接查询。针对这一痛点,通过ODBC驱动搭建数据源,并利用VBA脚本定时读取IFIX标签值写入MySQL,即可实现设备状态、产量数据等关键信息的自动同步。本文从方案选型、环境配置到脚本编写,系统讲解典型报错与排查链路,为车间数据采集、MES对接及报表集成提供一套可落地的工程实践参考,助力工业数据从单机监控走向标准化企业数据链路。 阅读详情

相关推荐

iFIX系统中Excel报表实现与VBA集成教程

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

weixin_36235398的博客 895

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读取Excel报表:VBA实现组态画面与报表数据交互指南

在工业自动化现场,SCADA系统与办公报表之间的数据交互一直是高频需求。操作员希望在中控组态画面上直接查看产量、能耗等关键KPI,而不必切换至Excel窗口。常见方案包括DDE、ODBC、OPC及VBA COM,其中VBA COM凭借稳定的对象模型和对Excel版本的良好兼容性,成为读取单元格数据最务实的选择。理解其原理,掌握工作簿打开、只读访问、对象释放及定时刷新等技巧,能有效避免Excel进程残留和路径权限等工程陷阱。本文从组态画面与Excel数据桥梁的构建思路出发,逐步拆解VBA脚本编写、数据库标签同

weixin_29189377的博客 184

IFIX里使用VBA计算文件大小

IFIX VBA 计算文件大小

徐坤的博客 389

IFIX VBA典型应用.rar

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

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

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

IFIX VBA的几个小窍门。

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

物联网网关 4006

ifix的按钮发脉冲

ifix 脉冲

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

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

gitblog_06783的博客 385

iFIX调度 VBA脚本声音报警

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

vba for ifix

有关ifix的真正vba学习资料,个人整理文件

IFIX常用VBA代码资源

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

gitblog_06732的博客 311

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

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

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

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

weixin_28848795的博客 642

IFIX VBA SCRIPTS

详细描述了VBA开发内容,从全方面介绍了IFIX通过VB开发

从零开始:Basler相机与pylon Viewer的工业视觉入门指南

本文详细介绍了Basler相机与pylon Viewer在工业视觉系统中的入门指南,涵盖硬件连接、软件安装、核心功能解析及实战案例。通过pylon Viewer的全面控制和参数调整功能,帮助新手快速掌握工业视觉检测技术,提升生产效率。

julia4scientist的博客 1133

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

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

weixin_30741285的博客 1335

软考软件评测师备考避坑指南:过来人告诉你这5个章节最容易丢分(附2024最新考纲解析)

本文为软考软件评测师考生提供备考避坑指南,深度解析5个高频失分章节,包括标准化与信息化基础、中间件技术、软件测试模型、白盒测试覆盖准则和性能测试指标。文章结合2024最新考纲,分享实战技巧和记忆口诀,帮助考生精准打击失分重灾区,提升备考效率。

weixin_29223603的博客 467

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

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

weixin_39527078的博客 1481

全面讲解电子齿轮比与脉冲数计算

什么是编码器分辨率。

viixin的博客 1万+

【Dify】知识库智能检索应用

本文介绍了一个基于大语言模型的知识库检索系统,实现从自然语言提问到智能回答的自动化流程。该系统通过知识检索节点定位相关信息,利用重排序模型优化结果,最后由大语言模型生成自然语言答案。核心模型包括InternLM2-7B和BCE重排序模型。工作流程包含输入问题、检索重排序、智能生成和答案输出四个阶段,适用于企业知识管理、客户支持、教育培训等多种场景,能显著提升信息检索效率和准确性。文章还提供了相关开发文档链接,涵盖AIGC工具平台搭建、常见问题解决等内容。

Mr数据杨 999

iFIX介绍

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

mostxx的专栏 7320

测试用例设计工具大盘点:总有一款适合你

本文旨在帮助测试工程师、开发人员及团队管理者快速了解主流测试用例设计工具的特点、适用场景和选择逻辑。覆盖工具类型包括传统文档工具、开源管理工具、商业集成平台及新兴AI工具,范围涵盖中小团队到大型企业的不同需求。本文从“测试用例设计的痛点”切入,用生活案例解释核心概念;接着按“工具类型”分类盘点主流工具(附优缺点对比表);再通过“小团队/中大型团队/敏捷团队”等真实场景教你选工具;最后展望AI等未来趋势,帮你“一次学透,终身受用”。

项目管理的博客 1589
上一篇: iFIX 系统配置指南
lerit
博客等级 码龄19年 200粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值