1 引言
普通的計算機(jī)一般都配有并行接口(就是通常用的打印機(jī)接口),它是通過25芯的D型接頭連接打印機(jī)與計算機(jī)的,計算機(jī)的并行接口不僅可以向打印機(jī)發(fā)送數(shù)據(jù),還可以從打印機(jī)接收數(shù)據(jù)(打印的工作狀態(tài))。因此,利用計算機(jī)的并行接口,你可以去控制外部繼電器的吸合,從而控制外部設(shè)備,同樣可以利用它來檢測外部設(shè)備的狀態(tài)。不需添加任何硬件。從而使一臺普通的計算機(jī)具有">

      技術(shù)頻道

      VB環(huán)境下利用并口實現(xiàn)PLC控制

      1 引言
      普通的計算機(jī)一般都配有并行接口(就是通常用的打印機(jī)接口),它是通過25芯的D型接頭連接打印機(jī)與計算機(jī)的,計算機(jī)的并行接口不僅可以向打印機(jī)發(fā)送數(shù)據(jù),還可以從打印機(jī)接收數(shù)據(jù)(打印的工作狀態(tài))。因此,利用計算機(jī)的并行接口,你可以去控制外部繼電器的吸合,從而控制外部設(shè)備,同樣可以利用它來檢測外部設(shè)備的狀態(tài)。不需添加任何硬件。從而使一臺普通的計算機(jī)具有“PLC”的開關(guān)量的功能。
      本文分析的系統(tǒng),把普通并口實現(xiàn)了一個4輸入8輸出數(shù)字量的功能,切不需任何投資。們先對打印機(jī)的并行口做一下細(xì)致的分析。配有一個并口的計算機(jī)經(jīng)系統(tǒng)引導(dǎo)后,初始化過程把并行端口配置成LPT1, 這個端口又分配了數(shù)據(jù)地址378H, 狀態(tài)地址379H。其中378H端口做輸出端口,379H端口做輸入端口。
      2 并口數(shù)據(jù)采集控制原理
      (1) 端口378H,378H的管腳見表1。
      在計算機(jī)通電后的自然狀態(tài),378H端口的每個數(shù)據(jù)位為1,表1中每個管腳對地(25腳)為高電平5V。即378H地址的內(nèi)容為FF(十進(jìn)制是255),當(dāng)控制378H的內(nèi)容為1(十進(jìn)制)二進(jìn)制碼是00000001時,即2腳對地輸出高電平,其它對地是0電平。如控制378H的內(nèi)容為2(十進(jìn)制)二進(jìn)制碼是00000010,即3腳對地輸出高電平,其它對地是0電平。如控制378H的內(nèi)容為3(十進(jìn)制)二進(jìn)制碼是00000011,即2、3腳對地輸出高電平,其它對地是0電平。依次類推。


      當(dāng)某管腳對地是高電平5V時,由于每條數(shù)據(jù)線的輸出電流高達(dá)20mA,可以接5V的直流繼電器,通過繼電器的觸點在去控制其它的設(shè)備,如電磁閥、電機(jī)等。圖1是用打印機(jī)并行接口實現(xiàn)的繼電器控制電路,此電路稍加修改即可用于其它設(shè)備的開關(guān)控制。
      (2) 端口379H,379H的管腳見表2。


      在計算機(jī)通電后的自然狀態(tài),379H端口的數(shù)據(jù)位第7位是0,其余每個數(shù)據(jù)位為1,即上述每個管腳對地(25腳)為高電平5V。即379H地址的內(nèi)容為127(十進(jìn)制)二進(jìn)制碼是01111111。當(dāng)只把某管腳(如10腳)通過500Ω的電阻接到25腳,則它所對應(yīng)的數(shù)據(jù)位是0,其它的數(shù)據(jù)位不變,則379H的內(nèi)容為63(十進(jìn)制)二進(jìn)制碼是00111111。當(dāng)只把某管腳(如12腳)通過500Ω的電阻接到地25腳,則它所對應(yīng)的數(shù)據(jù)位是0,其它的數(shù)據(jù)位不變,則379H的內(nèi)容為95(十進(jìn)制)二進(jìn)制碼是01011111依次類推。
      圖2是用打印機(jī)并行接口實現(xiàn)的開關(guān)檢測控制電路,當(dāng)K斷開時,379H為127(十進(jìn)制),當(dāng)K閉合時,379H為111(十進(jìn)制)二進(jìn)制數(shù)是01101111,即13腳所連接的第4數(shù)據(jù)位為0。

      3 軟件實現(xiàn)


      VB是一種可視化的編程語言,自面世以來,因簡單易用倍受廣大編程人員的青睞,作為一種非常方便的Windows95應(yīng)用程序開發(fā)平臺,可以實現(xiàn)Windows的絕大部分功能。
      VB中沒有專門的對并口的操作控件,要實現(xiàn)對并口的讀寫,需要對I/O進(jìn)行操作,但對硬件進(jìn)行訪問以及利用各種控制接口板進(jìn)行數(shù)據(jù)采集,僅靠VB是無法解決的。解決這樣的問題可以間接使用動態(tài)鏈接庫DLL(Dynamic Link Library)來實現(xiàn)。程序人員利用DLL可以實現(xiàn)應(yīng)用程序共享代碼和資源,DLL與用戶的程序完全分開。
      動態(tài)鏈接庫(DLL)雖然是一個可執(zhí)行模塊,但它并不可以直接運(yùn)行,它只是提供一群函數(shù)供Windows應(yīng)用程序或其它動態(tài)鏈接庫調(diào)用,以完成其特殊任務(wù)。由于動態(tài)鏈接庫是在應(yīng)用程序運(yùn)行期間被連接起來的,故稱為動態(tài)鏈接庫。本設(shè)計用VC++設(shè)計了一個讀寫IO端口的動態(tài)鏈接庫IO.DLL。
      筆者利用VC++5.0開發(fā)的DLL的完整的程序清單如下:
      ∥DLL源文件I0.CPP
      #include <windows.h>
      #include<conio.h>
      int FAR PASCAL outport(unsigned)
      short sport);
      int FAR PASCAL outport(unsigned short port,int databyte);
      ∥D11EntryPoint函數(shù)
      BOOL WINAPI D11EntryPoint
      (HINSTANCE hD11,
      DWORDdwReason,
      LPVOID Reserved)

        switch(dwReason)

      case DLL_PROCESS_ATTACH:
        {
          break;
        }
      case DLL_PROCESS_DETACH:
        {
          break;
        }

      return TRUE;

      ∥兩個功能函數(shù)
      int FAR PASCAL inport(unsigned short port)

        reture(_inp(prot);
      )
      int FAR PASCAL outport(unsigned short port,int databyte)

      int a;
      a=_outp(port,databyte);
      return a;

      ∥模塊定義文件I0.DEF
      CODE PRELOAD MOVEABLE DISCARDABLE
      DATA PRELOAD SINGLE
      EXPORTS
      inport
      outport
      動態(tài)鏈接庫只有在別的模塊中調(diào)用了它的某個函數(shù)以后,該動態(tài)鏈接庫才發(fā)生作用。DLL函數(shù)或過程必須在全局模塊(*.BAS)中正確說明才有效。VB是用Declare語句把一個DLL函數(shù)引入VB中的,它告訴VB在哪里找到DLL函數(shù),并且讓VB知道DLL需要哪種類型的參數(shù),同時返回哪種類型的值。當(dāng)某個DLL函數(shù)用Declare語句正確聲明以后,就可以像使用其它函數(shù)一樣使用這個DLL函數(shù)。
      在VB應(yīng)用程序的全局模塊中聲明I0.DLL并將其放入Windows\system目錄下,這樣就可以向使用Windows API一樣使用I0中的inport(輸入)和outport(輸出)函數(shù)了。
      Declare Function inport Lib"io.d11"
        (ByVal prot As Integer)As Long
      Declare Function outport Lib"io.d11"
        (ByVal port As Integer,ByVal
        databyte As Long)As Long
      下面的程序?qū)D1和圖2的例子進(jìn)行設(shè)計。(只列出輸入輸出的讀寫操作程序)
        Private Sub 輸入_Click
        X=inport(&H379)
        Print x
        End Sub
        Private Sub輸出_Click
        y=outport(&H378,1)
        End Sub

      4 結(jié)束語
      并口25管腳中,作輸出用的是2~9共8個管腳,作輸入用的10、12、13、15共4個管腳,25腳地,利用并口可方便的實現(xiàn)了4入8出的開關(guān)量控制。
      在上位機(jī)中采用VB等語言編程,利用計算機(jī)的并口,巧妙地實現(xiàn)PLC的開關(guān)量功能,而且可利用VB等語言的界面設(shè)計的功能,使系統(tǒng)做到監(jiān)控一體。且系統(tǒng)不需額外的投資,使用靈活簡單,可靠性高。


      文章版權(quán)歸西部工控xbgk所有,未經(jīng)許可不得轉(zhuǎn)載。

      主站蜘蛛池模板: 91福利国产在线观看一区二区 | 亚洲一区电影在线观看| 国产丝袜视频一区二区三区 | 麻豆精品人妻一区二区三区蜜桃| 蜜桃传媒一区二区亚洲AV| 亚洲第一区视频在线观看| 亚洲乱码国产一区三区| 国产午夜三级一区二区三| 一区二区三区高清在线| 天天躁日日躁狠狠躁一区| 国产精品制服丝袜一区| 亚洲视频一区在线观看| 蜜桃传媒视频麻豆第一区| 亚洲色精品aⅴ一区区三区| 最美女人体内射精一区二区| 不卡无码人妻一区三区音频| 国产一区二区三区播放| 午夜一区二区免费视频| 日韩一区二区在线免费观看| 精品视频在线观看一区二区| 亚洲综合色一区二区三区小说| 久久se精品一区精品二区国产| 精品国产AV无码一区二区三区| 3d动漫精品成人一区二区三| 精品深夜AV无码一区二区| 国产一区二区三区在线看| 久久亚洲综合色一区二区三区| 国产日韩一区二区三区在线观看 | 精品欧洲av无码一区二区| 色婷婷一区二区三区四区成人网| 无码人妻久久一区二区三区| 中文字幕精品亚洲无线码一区| 一区二区三区免费视频播放器| 亚洲第一区精品观看| 久久精品人妻一区二区三区 | 国产亚洲欧洲Aⅴ综合一区| 亚洲国产综合精品一区在线播放| 国产在线观看一区二区三区精品 | 精品无码综合一区二区三区| 国产成人AV区一区二区三| 国产高清在线精品一区小说|