在工业领域中为保证生产安全现场操作站上的操作员和工程师用户的密码需要定时更新,然而大量操作站上安装的是工控组态软件的运行版,在这种情况下组态软件只具有运行功能而不具备组态设置功能,其次现场情况也不允许组态软件在生产过程中退出运行因为这样会造成不可预料的后果。因此如何在组态软件运行环境下修改用户密码成为工程设计者必须面对的问题。实际上一些比较完善的组态软件提供了针对此需求的API接口,可以让用户方便的在组态软件运行环境下修改自己的密码。
下面我们以应用比较广泛的iFIX组态软件为例逐步介绍如何实现此功能。
1、创建Windows组工具
创建Windows组工具有助于快速创建映射iFIX权限的Windows组:
当使用映射到iFIX安全权限的适当名称创建Windows安全组时,可消除排版错误。
当创建Windows安全组时,可使用正确的语法。
使用映射到iFIX安全权限的适当名称,创建Windows全局组和本地组。
在使用此工具之前,必须根据在本地计算机还是在Windows域上创建了Windows组,以本地计算机或者Windows域上的系统管理者或者帐户操作者的身份登录进入Windows。然而,iFIX的运行并不需要此工具。
图 5-1 显示了创建Windows组工具。使用下图所示的过程创建Windows安全组。
图 5-1:创建Windows组工具
使用创建Windows组工具来创建Windows组:
从DYNAMICS目录中运行CreateWindowsGroups.exe程序。Windows组名称列表显示在列表框中。Windows组名称来自于当前的iFIX安全配置,包括用户配置的安全组和安全区域名称。注意:在使用创建Windows组工具之前,只有在安全配置程序中建立了组和安全区域名称,Windows组名称才显示在列表框中。
给希望创建的Windows组选择适当的过滤器和前缀类型。如果正在Windows NT v4.0 域上创建组,则必须选择显示NT v4.0 名称过滤器。
在Windows安全中,从组名称列表框中选择希望创建的组。此列表应当包括代表相同iFIX安全权限的不同组名称。注意:使用Ctrl+Click可选择列表框的多组名称。使用Shift+Click可选择列表框的组名称范围。
如果正在本地计算机上创建Windows组,则点击“创建本地组”可以创建当前在列表框中被选择的组。
点击“创建域组”,则出现指定组创建域对话框。
如果正在Windows域上创建Windows组,则指定当前在列表框中被选择的创建组的域名称,如下图所示。
2、向Windows组和所授权限分配用户
一旦创建了所需的Windows组,则可以给与iFIX安全权限相应的组分配Windows用户帐户。使用Windows用户管理器工具,可以给与代表iFIX所应当授予权限的组分配用户。为了修改密码至少要在“FIX Application Feature - AppVal 基础”、“FIX Application Feature - AppVal 运行”、“FIX Application Feature - 电子签名 - 操作者”、“FIX Application Feature - 电子签名 - 操作者” 这四个Windows组中加入要拥有修改密码权限的用户名,这里输入“asp”,该用户名将可以在iFIX运行画面中修改所有用户密码。
3、在IFIX中配置用户
进入iFIX安全配置,打开用户的配置文件,选中“使用Windows安全”选项,用户名为加入Windows组时的用户名,如果定义了域则要填入域名。为其分配相应权限。
4、编写脚本
进入iFIX工作台,建立一个新的画面并为其设定最高的安全级别,在画面上放置一个按钮。下面在按钮中编辑脚本,首先选中按钮然后单击鼠标右键在快捷菜单中选择“编辑脚本”进入VBA编辑器。选择“CommandButton1对象”,事件选择“Click”,输入如下代码:
Private Sub CommandButton1_Click()
Load UserForm1
UserForm1.Show vbModal
End Sub
此段代码的作用是调出用户名窗口以修改密码。然后选中窗体文件夹新建一个窗口命名为“UserForm1”加入标签控件、文字框控件、按钮控件分别命名为“Label1”、“TextBox1”、“CommandButton1”如图所示:
双击按钮控件输入如下代码:
Private Sub CommandButton1_Click()
Dim ESig As Object
Dim bNodeSignEnabled As Boolean
Dim UserName As String
Dim PassWord As String
Dim UsrId As String
Dim bExpired As Boolean
Dim daysLeft As Long
Dim bCanChangePassword As Boolean
On Error Resume Next
UserName = TextBox1.Text
Set ESig = CreateObject("ElectronicSignature.ESignature")
ESig.IsNodeSignEnabled bNodeSignEnabled
If bNodeSignEnabled = True Then
ESig.CheckAccountExpiration UserName, bExpired, bCanChangePassword, daysLeft
If bCanChangePassword <> False Then
ESig.PromptToChangePassword UserName
Else
If bCanChangePassword = False And bExpired = False And daysLeft = 0 Then
MsgBox "用户名不存在!"
End If
If bCanChangePassword = False And bExpired = False And daysLeft = -1 Then
MsgBox "密码不允许修改!"
End If
End If
Else
MsgBox "此节点没有启用安全机制!"
End If
End Sub
此段代码的作用是调用iFIX安全机制并其当前的状态,以及用户名是否存在,如果存在则调用iFIX提供的修改密码API程序界面,实现对用户密码的修改。
5、启用安全
在iFIX安全配置中启用“用户基本安全”
配置完成后保存SCU文件运行示例画面观看效果。
结束语: 如上所述,经过对iFIX VBA的深入编程解决了在组态软件运行环境下对用户密码的修改问题,更好保障了生产过