• <blockquote id="fficu"><optgroup id="fficu"></optgroup></blockquote>

    <table id="fficu"></table>

    <sup id="fficu"></sup>
    <output id="fficu"></output>
    1. ACS880-07C
      關(guān)注中國自動(dòng)化產(chǎn)業(yè)發(fā)展的先行者!
      橫河電機-23年10月11日
      2024
      工業(yè)智能邊緣計算2024年會(huì )
      2024中國自動(dòng)化產(chǎn)業(yè)年會(huì )
      2023年工業(yè)安全大會(huì )
      OICT公益講堂
      當前位置:首頁(yè) >> 案例 >> 案例首頁(yè)

      案例頻道

      InTouch7.1中實(shí)現安全功能的方法
      • 企業(yè):控制網(wǎng)     領(lǐng)域:儀器儀表     行業(yè):其他    
      • 點(diǎn)擊數:2602     發(fā)布時(shí)間:2003-11-17 14:53:00
      • 分享到:

      李德華,許立梓,李文國

      1  引言
      InTouch是當今最流行的工控軟件開(kāi)發(fā)工具之一,是美國Wonderware公司開(kāi)發(fā)的世界上第一個(gè)集成的、基于組件的MMI(生產(chǎn)制造管理信息)系統FactorySuite2000中的一個(gè)核心組件。它具有世界領(lǐng)先的HMI(人機接口界面)和面向對象的圖形開(kāi)發(fā)環(huán)境,便于高效、快捷地配置用戶(hù)的應用程序。筆者在使用InTouch7.1開(kāi)發(fā)工控軟件的過(guò)程中發(fā)現在安全功能的實(shí)現上,傳統的方法不能完全滿(mǎn)足用戶(hù)的要求,因而有必要在此進(jìn)行探討并給出解決方案。
      2  實(shí)現安全功能的傳統方法
      2.1  方法一:用InTouch7.1自帶的安全功能菜單
      InTouch7.1包括WindowMaker和WindowViewer兩部分。其中,WindowMaker是InTouch的可視化開(kāi)發(fā)環(huán)境,用于開(kāi)發(fā)基于Windows的應用程序;WindowViewer是InTouch的運行環(huán)境,顯示和執行在WindowMaker中編寫(xiě)好的應用程序。InTouch自帶的安全功能,在WindowMaker和WindowViewer的Security菜單下均可以找到,有關(guān)選項包括Log on、Change Password、Configure Users和Log off。一般來(lái)說(shuō),客戶(hù)使用應用程序,都是運行在WindowViewer環(huán)境下,而不允許切換到WindowMaker下去修改源程序,即安全功能是通過(guò)對WindowViewer的Security菜單操作來(lái)實(shí)現的。但這種方法有以下幾種弊端:
      (1)  開(kāi)發(fā)國內的工控軟件,界面的文字一般都使用中文,但InTouch7.1是英文版,Security菜單下的各選項和其中的設置內容都是用英文顯示,因而不協(xié)調。
      (2)  Security菜單的位置固定在窗口的最上方,不夠靈活,有時(shí)同整個(gè)系統的界面不一致。
      (3)  在InTouch7.1中用戶(hù)權限設置是通過(guò)Configure Users窗口里的Access Level(0~9999)來(lái)設定的,權限最高是9999,權限最低是0,為缺省權限。什么樣的權限享有什么樣的功能可以在軟件編寫(xiě)的時(shí)候通過(guò)語(yǔ)句來(lái)控制。這樣帶來(lái)一個(gè)管理上的不便,就是要附加一份權限和功能對應的記錄交給客戶(hù),客戶(hù)必須嚴格遵循這份記錄來(lái)設定用戶(hù)的級別,而且也不夠直觀(guān)。
      2.2  方法二:創(chuàng )建控件和使用系統變量
      在InTouch7.1中,提供了能實(shí)現安全功能的對外接口,這些接口都屬于系統變量。它們分別是$Operator、$AccessLevel、$OperatorEntered、$PasswordEntered、$ChangePassword和$ConfigureUsers。其中,$OperatorEntered和$PasswordEntered分別對應用戶(hù)名輸入和用戶(hù)密碼輸入,用于用戶(hù)登陸,當它們的值都輸入正確時(shí),$Operator和$AccessLevel就會(huì )分別設置為當前用戶(hù)名和當前用戶(hù)的對應權限,這兩項要先在Configure Users窗口里配置好。另外,把$ChangePassword和$ConfigureUsers置1,能分別顯示Security菜單中的Change Password和Configure Users對話(huà)窗口。因此,我們可以在WindowViewer的屬性設置中把Security菜單隱藏起來(lái),而用InTouch7.1里的控件和Script語(yǔ)言來(lái)重新創(chuàng )建能實(shí)現Security菜單同樣功能的安全功能條(如圖1所示)。單擊登陸、改變密碼和設置用戶(hù)可分別彈出對應的窗口(如圖2所示)。其中,登陸窗口是自己用控件創(chuàng )建的,Change Password窗口和Configure Users窗口都是InTouch自帶的,因而是英文界面。方法二比方法一在界面設計上多了一些靈活性,克服了方法一中的第二種弊端,但由于使用了$ChangePassword和$ConfigureUsers系統變量,因而也避免不了方法一中的第一、三種弊端。

       
      圖1  安全功能條

       


      圖2  登陸、更改密碼和設置用戶(hù)的窗口

      3  實(shí)現安全功能的新方法
      該方法是對方法二的改進(jìn),它不使用$ChangePassword和$ConfigureUsers系統變量,而是開(kāi)發(fā)人員自己創(chuàng )建更改密碼窗口和配置用戶(hù)窗口(如圖3所示)。

       


      圖3  更改密碼窗口和配置用戶(hù)窗口

      但是,這樣做會(huì )帶來(lái)一個(gè)難題就是自行創(chuàng )建的窗口如何讀取系統的用戶(hù)管理數據文件的數據。InTouch7.1并沒(méi)有提供這樣的接口。但提供了訪(fǎng)問(wèn)數據庫的接口,因而,我們自己可以建立一個(gè)用戶(hù)管理數據表,表中有UserName、Password和Privilege 3個(gè)字段,分別記錄圖3配置用戶(hù)窗口中的用戶(hù)名、密碼和用戶(hù)身份,密碼窗口和配置用戶(hù)窗口可直接對這個(gè)數據表進(jìn)行讀寫(xiě);另一方面,當用戶(hù)登陸時(shí),根據用戶(hù)名和密碼來(lái)查找這個(gè)數據表中的匹配記錄,如果找到(只能有一個(gè)記錄符合),就把這條記錄的Privilege字段值讀取出來(lái),再以這個(gè)值為真正的系統用戶(hù)名,加上對應密碼(這兩個(gè)值已在Configure Users窗口中配置好)分別賦值給$OperatorEntered和$PasswordEntered來(lái)登陸InTouch系統。用戶(hù)管理數據表在這里的作用類(lèi)似網(wǎng)絡(luò )中防火墻的功能,要登陸的用戶(hù)必須先經(jīng)過(guò)它來(lái)驗證身份,通過(guò)后再以相應的身份登陸InTouch系統。
      為了進(jìn)一步說(shuō)明,下面著(zhù)重舉例說(shuō)明配置用戶(hù)窗口和登陸窗口的實(shí)現方法,更改密碼窗口的做法類(lèi)似。
      第一步,在Security菜單的Configure Users窗口中,做如圖2中Configure Users窗口中的用戶(hù)設置,也就是為系統設置了以下幾種用戶(hù)(見(jiàn)表1)。

      表1 

      用戶(hù)名

      密碼

      用戶(hù)權限

      Administrator

      Wonderware

      9999

      Manager

      abc

      8888

      Operator

      123

      2000

      第二步,新建一個(gè)名為用戶(hù)的Access數據庫,數據庫里新建一個(gè)名為table1的表(如圖4所示),并在系統的ODBC數據源里將這個(gè)數據庫綁定。

       
      圖4  table1表圖

      第三步,在InTouch的SQL Access Manager\Table Template中定義一個(gè)名字和字段都跟table1一樣的表;然后在InTouch的SQL Access Manager\Bind List中為這張表定義一個(gè)綁定列bind1,注意表與綁定列的格式和數據類(lèi)型應完全一樣。在這里,綁定的TagName和綁定列名也取為一樣,都是UserName、Password和Privilege。
      第四步,分別建立如圖2中的登陸窗口和圖3中的配置用戶(hù)窗口,并在窗口中寫(xiě)入腳本程序。由于篇幅所限,只能以登陸窗口為例,說(shuō)明登陸腳本程序的編寫(xiě)。在登陸窗口的確認按鈕的Action Script窗口中寫(xiě)入以下程序。
      SQLConnect(ConnectionId, "DSN=用戶(hù)");/*連接數據庫*/
      SQLSelect(ConnectionId,"table1","bind1","UserName='"+OperatorEntered_Temp+"'"+" and "+"Password ='"+ PasswordEntered_Temp+"'","");/*查找匹配的記錄*/
      NumRows=SQLNumRows(ConnectionId);/*讀取記錄的條數*/
      IF NumRows>0 THEN
      SQLFirst(ConnectionId);/*如果有符合條件的記錄,則讀取記錄*/
      SQLEnd(ConnectionId);/*釋放記錄緩沖區*/
      SQLDisconnect(ConnectionId);/*關(guān)閉數據庫*/
      IF Privilege=="Manager" THEN /*以下8行到20行語(yǔ)句功能為:檢查記錄的Privilege字段值是Manager、Administrator和Manager中的哪一個(gè),并以相應的身份來(lái)登陸系統*/
      $OperatorEntered ="Manager";
      $PasswordEntered="abc";
      ENDIF;
      IF Privilege=="Administrator" THEN
      $OperatorEntered ="Administrator";
      $PasswordEntered="Wonderware";
      ENDIF;
      IF Privilege=="Operator" THEN
      $OperatorEntered ="Operator";
      $PasswordEntered="123";
      ENDIF;
      ENDIF;
      IF NumRows =0 THEN /*如果沒(méi)有符合條件的記錄*/
      $OperatorEntered ="None";/*以None身份來(lái)登陸*/
      ENDIF;
      程序中的OperatorEntered_Temp和Password-
      Entered_Temp變量分別對應登陸窗口中輸入用戶(hù)名和密碼的兩個(gè)TextBox的TagName屬性。
      4  結語(yǔ)
      用這種新方法實(shí)現安全功能,可以有效的克服傳統方法中的弊端,而且在安全性、靈活性和實(shí)用性方面都有所提高。

      參考文獻:
      [1]  WonderWare FactorySuite InTouch User’s Guide. WonderWare Corporation, Revision C, July 1999.
      [2]  WonderWare FactorySuite SQL Access Manager User’s Guide. WonderWare Corporation, Revision B, July 1999.

      熱點(diǎn)新聞

      推薦產(chǎn)品

      x
      • 在線(xiàn)反饋
      1.我有以下需求:



      2.詳細的需求:
      姓名:
      單位:
      電話(huà):
      郵件:
      欧美精品欧美人与动人物牲交_日韩乱码人妻无码中文_国产私拍大尺度在线视频_亚洲男人综合久久综合天

    2. <blockquote id="fficu"><optgroup id="fficu"></optgroup></blockquote>

      <table id="fficu"></table>

      <sup id="fficu"></sup>
      <output id="fficu"></output>