Giáo trình Đo lường và điều khiển bằng máy tính - Chương 5: Card thu thập tín hiệu và điều khiển
PCL-818L là card ISA có nhiều chức năng dùng để đo lường
và điều khiển. Do tính năng ưu việt của card, việc tìm hiểu hoạt
động của nó rất cần thiết để tiếp cận kỹ thuật thu thập số liệu
bằng máy tính DAS (Data Acquisition System).
Sau đây là các chức năng chính của card:
- Chuyển đổi A/D 16 kênh 12 bit tốc độ lấy mẫu 40000/s
- Chuyển đổi D/A 1 kênh 12 bit
- 16 ngõ vào digital TTL
- 16 ngõ ra digital TTL
- 1 Bộ đếm/ định thời 16 bit cho người dùng
in; uses Forms, formstar in 'formstar.pas' {frmstart}, formrun in 'formrun.pas' {frmrun}, Driver in '..\..\..\include\driver.pas', global in 'global.pas'; {$R *.RES} begin Application.Initialize; Application.CreateForm(Tfrmstart, frmstart); Application.CreateForm(Tfrmrun, frmrun); Application.Run; end. unit Formstar; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Driver, Global, Menus; Tác giả: TS Nguyễn Đức Thành Trang 145 Thành phố Hồ Chí Minh, tháng 4 năm 2006 type Tfrmstart = class(TForm) labSelDev: TLabel; cmdRun: TButton; labIOAddr: TLabel; cmdExit: TButton; lstDevice: TListBox; txtIOAddr: TEdit; procedure cmdExitClick(Sender: TObject); procedure cmdRunClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure lstDeviceClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var frmstart: Tfrmstart; implementation uses formrun; var lpDevFeatures : DEVFEATURES; gnNumOfSubdevices : Smallint; Response : Integer; {$R *.DFM} procedure Tfrmstart.cmdExitClick(Sender: TObject); begin if bRun then DRV_DeviceClose(DeviceHandle); close; end; procedure Tfrmstart.cmdRunClick(Sender: TObject); var I, Code: Integer; begin { Get text from TEdit control } Val('$' + txtIOAddr.Text, gwPort, Code); FormRun.frmRun.Show; end; procedure Tfrmstart.FormCreate(Sender: TObject); CHƯƠNG 5: CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN TRANG 146 var MaxEntries, OutEntries : Smallint; NumOfDevice : Smallint; i, ii : Integer; tempStr : String; testRes : boolean; begin gwPort := $300; bRun := False; { Add type of PC Laboratory Card } ErrCde := DRV_DeviceGetList(DeviceList[0], MaxEntries, OutEntries); If (ErrCde 0) Then begin DRV_GetErrorMessage(ErrCde, pszErrMsg); Response := Application.MessageBox(pszErrMsg, 'Error!!', MB_OK); Exit; end; { Here MaxEntries = OutEntries } ErrCde := DRV_DeviceGetNumOfList(MaxEntries); If (ErrCde 0) Then begin DRV_GetErrorMessage(ErrCde, pszErrMsg); Response := Application.MessageBox(pszErrMsg, 'Error!!', MB_OK); Exit; end; For i := 0 To (MaxEntries - 1) do begin tempStr := ''; For ii := 0 To MaxDevNameLen do tempStr := tempStr + DeviceList[i].szDeviceName[ii]; lstDevice.Items.Add(tempStr); end; labIOAddr.Enabled := False; txtIOAddr.Enabled := False; cmdRun.Enabled := False; end; procedure Tfrmstart.lstDeviceClick(Sender: TObject); var tempNum, i, ii : Integer; nOutEntries : Smallint; TestRes : Boolean; Tác giả: TS Nguyễn Đức Thành Trang 147 Thành phố Hồ Chí Minh, tháng 4 năm 2006 TempStr : String; begin tempNum := Pos('DEMO', lstDevice.Items[lstDevice.ItemIndex]); if (tempNum 0) then TestRes := True else TestRes := False; { Avoid to open Advantech Demo Card } If (TestRes) Then begin labIOAddr.Enabled := False; txtIOAddr.Enabled := False; cmdRun.Enabled := False; end; If (Not TestRes) Then begin { Check if there is any device attached on this COM or CAN } dwDeviceNum := DeviceList[lstDevice.ItemIndex].dwDeviceNum; txtIOAddr.Text := '300'; labIOAddr.Enabled := True; txtIOAddr.Enabled := True; cmdRun.Enabled := True; end; end; end. unit formrun; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Driver, Global, Menus; type Tfrmrun = class(TForm) CmdExit: TButton; GroupSample1: TGroupBox; PictureBit0: Timage; PictureBit1: TImage; PictureBit2: TImage; PictureBit3: TImage; PictureBit4: TImage; PictureBit5: TImage; PictureBit6: TImage; CHƯƠNG 5: CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN TRANG 148 PictureBit7: TImage; CmdBit0: TButton; CmdBit1: TButton; CmdBit2: TButton; CmdBit3: TButton; CmdBit4: TButton; CmdBit5: TButton; CmdBit6: TButton; CmdBit7: TButton; labBit0: TLabel; labBit1: TLabel; labBit2: TLabel; labBit3: TLabel; labBit4: TLabel; labBit5: TLabel; labBit6: TLabel; labBit7: TLabel; GroupSample2: TGroupBox; PictureBit8: TImage; PictureBit9: TImage; PictureBitA: TImage; PictureBitB: TImage; PictureBitC: TImage; PictureBitD: TImage; PictureBitE: TImage; PictureBitF: TImage; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; CmdBit8: TButton; CmdBit9: TButton; CmdBitA: TButton; CmdBitB: TButton; CmdBitC: TButton; CmdBitD: TButton; CmdBitE: TButton; Tác giả: TS Nguyễn Đức Thành Trang 149 Thành phố Hồ Chí Minh, tháng 4 năm 2006 CmdBitF: TButton; txtDiValue: TEdit; cmdRead: TButton; procedure CmdExitClick(Sender: TObject); procedure CmdBitClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure PictureClick(Sender: TObject); procedure cmdReadClick(Sender: TObject); private { Private declarations } DoValue, DiValue : Word; procedure UpdateLED(Bit : Integer ; Mode : Boolean); public { Public declarations } end; var frmrun: Tfrmrun; implementation uses formstar; const LedON = True; LedOFF = False; var Response: Integer; {$R *.DFM} Function DoBit(bit : Integer) : Word; var temp, i : Integer; begin temp := 1; If bit >= 1 Then For i := 1 To bit do temp := temp * 2; DoBit := temp; end; procedure Tfrmrun.UpdateLED(Bit : Integer; Mode : Boolean); begin if Mode then DoValue := DoValue + DoBit(Bit) else DoValue := DoValue - DoBit(Bit); CHƯƠNG 5: CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN TRANG 150 ErrCde := DRV_outpw(dwDeviceNum, gwPort, DoValue); If (ErrCde 0) Then begin DRV_GetErrorMessage(ErrCde, pszErrMsg); Response := Application.MessageBox(pszErrMsg, 'Error!!', MB_OK); Exit; end; end; procedure Tfrmrun.CmdExitClick(Sender: TObject); begin frmRun.Close; Formstar.frmstart.Show; end; procedure Tfrmrun.CmdBitClick(Sender: TObject); var tempBit : Integer; begin tempBit := (Sender as TButton).Tag; UpdateLED(tempBit, LedON); (Sender as TButton).Visible := False; case tempBit of 0 : PictureBit0.Visible := True; 1 : PictureBit1.Visible := True; 2 : PictureBit2.Visible := True; 3 : PictureBit3.Visible := True; 4 : PictureBit4.Visible := True; 5 : PictureBit5.Visible := True; 6 : PictureBit6.Visible := True; 7 : PictureBit7.Visible := True; 8 : PictureBit8.Visible := True; 9 : PictureBit9.Visible := True; 10 : PictureBitA.Visible := True; 11 : PictureBitB.Visible := True; 12 : PictureBitC.Visible := True; 13 : PictureBitD.Visible := True; 14 : PictureBitE.Visible := True; 15 : PictureBitF.Visible := True; end; end; procedure Tfrmrun.PictureClick(Sender: TObject); var Tác giả: TS Nguyễn Đức Thành Trang 151 Thành phố Hồ Chí Minh, tháng 4 năm 2006 tempBit : Integer; begin tempBit := (Sender as TImage).Tag; UpdateLED(tempBit, LedOFF); (Sender as TImage).Visible := False; case tempBit of 0 : CmdBit0.Visible := True; 1 : CmdBit1.Visible := True; 2 : CmdBit2.Visible := True; 3 : CmdBit3.Visible := True; 4 : CmdBit4.Visible := True; 5 : CmdBit5.Visible := True; 6 : CmdBit6.Visible := True; 7 : CmdBit7.Visible := True; 8 : CmdBit8.Visible := True; 9 : CmdBit9.Visible := True; 10 : CmdBitA.Visible := True; 11 : CmdBitB.Visible := True; 12 : CmdBitC.Visible := True; 13 : CmdBitD.Visible := True; 14 : CmdBitE.Visible := True; 15 : CmdBitF.Visible := True; end; end; procedure Tfrmrun.FormCreate(Sender: TObject); begin DoValue := 0; end; procedure Tfrmrun.cmdReadClick(Sender: TObject); var DiStr : string[4]; begin ErrCde := DRV_inpw(dwDeviceNum, gwPort, DiValue); If (ErrCde 0) Then begin DRV_GetErrorMessage(ErrCde, pszErrMsg); Response := Application.MessageBox(pszErrMsg, 'Error!!', MB_OK); Exit; end; Str(DiValue, DiStr); txtDiValue.Text := DiStr; CHƯƠNG 5: CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN TRANG 152 end; end. unit Global; interface uses Driver; type lpDevList = ^PT_DEVLIST; const MaxEntries = 255; var DeviceHandle : Longint; ptDevGetFeatures : PT_DeviceGetFeatures; DeviceList : array [0..MaxEntries] of PT_DEVLIST; SubDeviceList : array [0..MaxEntries] of PT_DEVLIST; ErrCde : Longint; szErrMsg : string; pszErrMsg : Pchar = @szErrMsg; bRun : Boolean; gwPort : Smallint; dwDeviceNum : Longint; implementation end. 5.5 CARD PCI 1710 Card PCI1710 có chức năng tương tự card PCLl818 nhưng gắn vào slot pci. Sơ đồ khối trình bày ở hình 5.5, lập trình card thực hiện thông qua driver Adsapi32 do hãng cung cấp. 5.6 GIAO DIỆN ĐỒ HỌA Thay vì phải dùng ngôn ngữ lập trình để lập trình cho card, ta có thể dùng các phần mềm chuyên dụng của hãng, có đặc tính • giảm thời gian lập trình, • trình bày dử liệu dưới dạng bảng biểu, đồ thị, • lưu trữ dữ liệu trong file, • kết nối với các phần mềm khác. Các phần mềm thông dụng: LabVIEW (Laboratory Virtual Instrument Engineering Workbench), VISA của National Instruments, GenieDAQ, VisiDAQ của Advantech… Tác giả: TS Nguyễn Đức Thành Trang 153 Thành phố Hồ Chí Minh, tháng 4 năm 2006 Card PCL818 Card PCI 1710 Hình 5.4 Hình ảnh hai card DAS CHƯƠNG 5: CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN TRANG 154 Hình 5.5 Sơ đồ khối card PCI 1710 Advantech Tác giả: TS Nguyễn Đức Thành Trang 155 Thành phố Hồ Chí Minh, tháng 4 năm 2006 Hình 5.6: Hai giao diện phần mềm thu thập số liệu
File đính kèm:
- Giáo trình Đo lường và điều khiển bằng máy tính - Chương 5 Card thu thập tín hiệu và điều khiển.pdf