如何在VB環境下利用並口實現PLC控制

2021-07-30 06:36:16 字數 3337 閱讀 6094

1 引言

普通的計算機一般都配有並行介面(就是通常用的印表機介面),它是通過25芯的d型接頭連線印表機與計算機的,計算機的並行介面不僅可以向印表機傳送資料,還可以從印表機接收資料(列印的工作狀態)。因此,利用計算機的並行介面,你可以去控制外部繼電器的吸合,從而控制外部裝置,同樣可以利用它來檢測外部裝置的狀態。不需新增任何硬體。

從而使一台普通的計算機具有「plc」的開關量的功能。

本文分析的系統,把普通並口實現了乙個4輸入8輸出數字量的功能,切不需任何投資。們先對印表機的並行口做一下細緻的分析。配有乙個並口的計算機經系統引導後,初始化過程把並行埠配置成lpt1, 這個埠又分配了資料位址378h, 狀態位址379h。

其中378h埠做輸出埠,379h埠做輸入埠。

2 並口資料採集控制原理

(1) 埠378h,378h的管腳見表1。

在計算機通電後的自然狀態,378h埠的每個資料位為1,表1中每個管腳對地(25腳)為高電平5v。即378h位址的內容為ff(十進位制是255),當控制378h的內容為1(十進位制)二進位製碼是***時,即2腳對地輸出高電平,其它對地是0電平。如控制378h的內容為2(十進位制)二進位製碼是00000010,即3腳對地輸出高電平,其它對地是0電平。

如控制378h的內容為3(十進位制)二進位製碼是00000011,即2、3腳對地輸出高電平,其它對地是0電平。依次類推。

當某管腳對地是高電平5v時,由於每條資料線的輸出電流高達20ma,可以接5v的直流繼電器,通過繼電器的觸點在去控制其它的裝置,如電磁閥、電機等。圖1是用印表機並行介面實現的繼電器控制電路,此電路稍加修改即可用於其它裝置的開關控制。

(2) 埠379h,379h的管腳見表2。

在計算機通電後的自然狀態,379h埠的資料位第7位是0,其餘每個資料位為1,即上述每個管腳對地(25腳)為高電平5v。即379h位址的內容為127(十進位制)二進位製碼是01111111。當只把某管腳(如10腳)通過500ω的電阻接到25腳,則它所對應的資料位是0,其它的資料位不變,則379h的內容為63(十進位制)二進位製碼是00111111。

當只把某管腳(如12腳)通過500ω的電阻接到地25腳,則它所對應的資料位是0,其它的資料位不變,則379h的內容為95(十進位制)二進位製碼是***依次類推。

圖2是用印表機並行介面實現的開關檢測控制電路,當k斷開時,379h為127(十進位制),當k閉合時,379h為111(十進位制)二進位制數是01101111,即13腳所連線的第4資料位為0。

3 軟體實現

vb是一種視覺化的程式語言,自面世以來,因簡單易用倍受廣大程式設計人員的青睞,作為一種非常方便的windows95應用程式開發平台,可以實現windows的絕大部分功能。

vb中沒有專門的對並口的操作控制項,要實現對並口的讀寫,需要對i/o進行操作,但對硬體進行訪問以及利用各種控制介面板進行資料採集,僅靠vb是無法解決的。解決這樣的問題可以間接使用動態鏈結庫dll(dynamic link library)來實現。程式人員利用dll可以實現應用程式共享**和資源,dll與使用者的程式完全分開。

動態鏈結庫(dll)雖然是乙個可執行模組,但它並不可以直接執行,它只是提供一群函式供windows應用程式或其它動態鏈結庫呼叫,以完成其特殊任務。由於動態鏈結庫是在應用程式執行期間被連線起來的,故稱為動態鏈結庫。本設計用vc++設計了乙個讀寫io埠的動態鏈結庫io.

dll。

筆者利用vc++5.0開發的dll的完整的程式清單如下:

∥dll原始檔i0.cpp

#include

#include

int far pascal outport(unsigned)

short sport);

int far pascal outport(unsigned short port,int databyte);

∥d11entrypoint函式

bool winapi d11entrypoint

(hinstance hd11,

dworddwreason,

lpvoid reserved)

{  switch(dwreason)

{case dll_process_attach:

{    break;

}case dll_process_detach:

{    break;

}}return true;

}∥兩個功能函式

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;

}∥模組定義檔案 preload moveable discardable

data preload single

exports

inport

outport

動態鏈結庫只有在別的模組中呼叫了它的某個函式以後,該動態鏈結庫才發生作用。dll函式或過程必須在全域性模組(*.bas)中正確說明才有效。

vb是用declare語句把乙個dll函式引入vb中的,它告訴vb在**找到dll函式,並且讓vb知道dll需要哪種型別的引數,同時返回哪種型別的值。當某個dll函式用declare語句正確宣告以後,就可以像使用其它函式一樣使用這個dll函式。

在vb應用程式的全域性模組中宣告i0.dll並將其放入windows\system目錄下,這樣就可以向使用windows api一樣使用i0中的inport(輸入)和outport(輸出)函式了。

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

下面的程式對圖1和圖2的例子進行設計。(只列出輸入輸出的讀寫操作程式)

private sub 輸入_click

x=inport(&h379)

print x

end sub

private sub輸出_click

y=outport(&h378,1)

end sub

4 結束語

並口25管腳中,作輸出用的是2~9共8個管腳,作輸入用的10、12、13、15共4個管腳,25腳地,利用並口可方便的實現了4入8出的開關量控制。

在上位機中採用vb等語言程式設計,利用計算機的並口,巧妙地實現plc的開關量功能,而且可利用vb等語言的介面設計的功能,使系統做到監控一體。且系統不需額外的投資,使用靈活簡單,可靠性高。

如何在網路環境下提公升自主能力

今年20歲的黃欣,是南京大學軟體學院2011級的學生。即將公升入大四的他,在忙碌的大學生活中,擠出時間自學了11門mooc課程,並獲得了 電腦科學 博弈論 程式語言 scala函式式程式設計原則 資料科學導論 機器學習 等6門課程的合格證書。mooc 慕課 是一種大型開放式網路課程平台,通過在網上提...

如何在中國當前的購房環境下迎來突破

中國房地產市場巨集觀環境分析及南京市房地產市場環境調研報告 中國房地產市場巨集觀環境分析 房地產行業是典型的資金密集型行業,具有投資大 風險高 週期久 鏈長 地域性強的特點。由於房地產業是我國國民經濟的主導產業,在現代社會經濟生活中有著舉足輕重的地位,因而房地產行業的發展與整體國民經濟的發展息息相關...

如何在現代資訊科技環境下進行小學數學課堂教學

如何在現代資訊科技環境下進行小學數學課堂教學作者 白金秀 商情 2017年第40期 摘要 隨著科學技術的發展,現代教育技術在課堂教學中的運用已逐漸普及,運用現代教育技術製作的多 課件集文字 影象 聲音 動畫等功能於一體,不受時空限制,直觀 形象 生動。將現代教育技術與小學數學課堂教學融為一體,有利於...