Giáo trình Đo lường và điều khiển bằng máy tính - Chương 5: Card thu nhậ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 
pdf 43 trang xuanthi 24/12/2022 2780
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Đo lường và điều khiển bằng máy tính - Chương 5: Card thu nhập tín hiệu và điều khiển", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfgiao_trinh_do_luong_va_dieu_khien_bang_may_tinh_chuong_5_car.pdf

Nội dung text: Giáo trình Đo lường và điều khiển bằng máy tính - Chương 5: Card thu nhập tín hiệu và điều khiển

  1. CHƯƠNG 5: CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN TRANG 118 BASE+2 (Viết) - Các kênh quét đầu và cuối Bit D7 D6 D5 D4 D3 D2 D1 D0 Value CH3 CH2 CH1 CH0 CL3 CL2 CL1 CL0 CH3 ÷ CH0 là kênh Stop, CL3 ÷ CL0 là kênh Start. Nửa bit thấp của thanh ghi quét phân kênh CL3 đến CL0 cũng có tác dụng như 1 con trỏ khi chúng ta lập trình tầm điện áp vào A/D. Khi đặt kênh Start là N, thì mã tầm viết vào thanh ghi BASE+1 là cho kênh N. 5.2.3 Các thanh ghi xuất/nhập số (BASE + 3/11) PCL-818L có 16 ngõ vào số và 16 ngõ ra số riêng biệt. Các kênh I/O này dùng chung port có địa chỉ BASE+3 và BASE+11. Khi đọc BASE+3 (đọc port) - Byte thấp Digital Input Bit D7 D6 D5 D4 D3 D2 D1 D0 Value D17 D16 D15 D14 D13 D12 D11 D10 BASE+11 (đọc port) - Byte cao Digital Input Bit D7 D6 D5 D4 D3 D2 D1 D0 Value DI15 DI14 DI13 DI12 DI11 DI10 DI9 DI8 Khi ghi BASE+3 (viết port) - Byte thấp Digital Input Bit D7 D6 D5 D4 D3 D2 D1 D0 Value DO7 DO6 DO5 DO4 DO3 DO2 DO1 DO0 BASE+11 (viết port) - Byte cao Digital Input Bit D7 D6 D5 D4 D3 D2 D1 D0 Value DO15 DO14 DO13 DO12 DO11 DO10 DO9 DO8 5.2.4 Thanh ghi xuất Analog D/A (BASE + 4/5) Khi ghi BASE+4 - Byte thấp ngõ ra D/A Bit D7 D6 D5 D4 D3 D2 D1 D0 Value DA3 DA2 DA1 DA0 x x x x
  2. CHƯƠNG 5: CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN TRANG 120 hiệu ngắt sẽ gởi đến PC qua ngõ IRQn (IRQn được chọn bởi các bit I2 ÷ I0 trong BASE+9). Dù thanh ghi trạng thái A/D là chỉ đọc, nhưng khi ghi vào nó một giá trị bất kỳ sẽ xóa bit INT, còn các bit khác không đổi. • CN3÷CN0: khi EOC = 0 thì các bit này chứa số kênh kế tiếp sẽ được biến đổi. Lưu ý: Nếu kích bộ A/D bằng xung clock trên board (‘pacer’) hoặc xung ngoài thì phần mềm của bạn phải kiểm tra bit INT trước khi đọc dữ liệu (không phải bit EOC). EOC có thể bằng 0 trong hai trường hợp: Biến đổi đã hoàn tất Không có một biến đổi nào đã được bắt đầu. Do đó phần mềm của bạn phải đợi tín hiệu INT = 1 trước khi đọc số liệu chuyển đổi. Rồi cần phải xóa bit INT bằng cách ghi bất kỳ giá trị nào vào thanh ghi trạng thái BASE+8. 5.2.6 Thanh ghi điều khiển (BASE+9) Đọc/ghi thanh ghi BASE+9 để nhận/cung cấp thông tin về chế độ hoạt động của PCL-818L. BASE+9 - Điều khiển chế độ hoạt động Bit D7 D6D5 D4 D3 D2 D1 D0 Value INTE I2 I1 I0 x DMAE ST1 ST0 • INTE : cấm/cho phép ngắt. INTE = 0: cấm ngắt INTE = 1: cho phép ngắt. • Nếu DMAE = 0: PCL-818L sẽ phát một tín hiệu ngắt khi nó hoàn tất một chuyển đổi A/D. Vậy cấu hình INTE = 1. DMAE = 0 dùng để báo cho CPU biết bằng ngắt là đã đổi A/D xong. • Nếu DMAE = 1: PCL-818L sẽ phát một tín hiệu ngắt khi nó nhận một tín hiệu đếm tràn T/C (Terminal count) từ bộ điều khiển DMA của máy tính để chỉ rằng chuyển đổi
  3. CHƯƠNG 5: CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN TRANG 122 CN2) hay GATE0 (chân 36 CN3) chọn nhờ cầu nối JP3. Ghi vào BASE+10 để cho phép hoặc cấm bộ đếm/ định thời của PCL-818L tạo xung. BASE+10 - Cho phép pacer Bit D7 D6 D5 D4 D3 D2 D1 D0 Valuexxxxx xTC1TC0 • TC0: cấm/ cho phép pacer TC0 = 0; cho phép pacer TC0 = 1; pacer được điều khiển bởi TRIG0 (chân 35 CN3). Tín hiệu này chặn xung trigger gởi từ ‘pacer’ đến bộ A/D khi nó bằng 0. • TC1: chọn chế độ nguồn xung nhịp ngõ vào Counter 0. TC1 = 0; counter 0 nhận xung clock ngoài (chân 17 CN3) TC1 = 1; counter 0 nhận xung clock 100KHz ở bên trong. 5.2.8 Các thanh ghi điều khiển và đọc/ghi bộ đếm Bộ định thì 8254 sử dụng bốn thanh ghi BASE+12, BASE+13, BASE+14, BASE+15. Các chức năng của các thanh ghi này được liệt kê trong bảng 5.14.
  4. CHƯƠNG 5: CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN TRANG 124 - Chuyển dữ liệu từ số nhị phân thành số nguyên. 2- Chuyển đổi D/A Ghi vào thanh ghi BASE+ 4 và BASE+ 5. Khi ghi dữ liệu cho kênh D/A phải ghi byte thấp trước. Byte thấp này được giữ tạm thời trong một thanh ghi và không được xuất ra. Sau khi ghi xong byte cao thì khi đó byte cao và byte thấp được kết hợp lại để chuyển thành D/A. 3- Digital input và output (DI&DO) Ta đọc DI từ thanh ghi BASE+3 (byte thấp) và thanh ghi BASE+11 (byte cao). Sau khi đọc dữ liệu sẽ không được chốt, đường vào sẽ ở trạng thái thứ ba. Ta có thể xuất ra DO cũng bằng cách dùng hai thanh ghi BASE+3 và BASE+11 này. Thanh ghi sẽ chốt giá trị đã ghi (có thể đọc lại). Để an toàn nên ghép nối các ngõ vào/ra digital thông qua ghép quang. 5.3.2 Lập trình theo software driver của nhà sản xuất Mỗi PC_LABCARD có một software driver Adsapi32.dll cho phép chúng ta có thể dùng các hàm và thủ tục viết sẵn để viết chương trình ứng dụng bằng ngôn ngữ cấp cao như Delphi, Visual Basic, Visual C. Điều này giúp lập trình một cách đơn giản hơn là viết trực tiếp vào các thanh ghi vì mỗi hàm sẽ kéo tất cả các tham số từ bảng tham số. Chúng ta không cần định lại bảng tham số mỗi khi ta gọi nó, trừ khi bảng tham số có sự thay đổi. Chương trình cài đặt chứa trong CDROM. Trong chương trình ứng dụng cần khai báo sử dụng driver. Driver của hãng Advantech viết có thể sử dụng chung cho nhiều loại card của hãng và việc đọc tìm hiểu các hàm đã viết sẵn tương đối mất nhiều thời gian. Mục 5.3.1 trình bày một unit gồm các hàm viết sẵn cho Delphi. Mục 5.3.4 trình bày sơ lược driver adsapi32.
  5. CHƯƠNG 5: CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN TRANG 126 {13} Function IRQ: byte; {14} Function DMAE: byte; {15} Function Trigsource: byte; {16} Procedure Set_INTE (sint: byte); {17} Procedure Set_IRQ (irq: byte); {18} Procedure Set_DMAE (dmae: byte); {19} Procedure Set_trigsource (trs: byte); {20} Procedure Clear_INT; {21} Procedure Counter_enb (tc: byte); {22} Procedure Set_counter (cnt, mode, dl, dh: byte); {23} Procedure Select_nextchannel (setchan: byte); {24} Function Read_counter (cnt: byte): word; {25} procedure Reload_counter (dl1, dh1, dl2, dh2: byte); {26} procedure Xuat (add:word; data: byte); {27} function Nhap (add:word): byte; implementation Function inport (address: word): byte; {ham nhap vao Port} var data: word; begin asm mov dx, address in ax, dx mov data, ax end; inport:= data; end; Procedure outport (address: word; data: word); {ham xuat ra Port} begin asm mov dx, address mov ax, data out dx, ax end; end; {1} Function Read_AD (var channel: byte): word; {doc du lieu bo A/D}
  6. CHƯƠNG 5: CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN TRANG 128 {8} Function EOC: byte; begin EOC:= (inport (reg8) and $80) shr 7; end; {9} Function MUX: byte; begin MUX:= (inport (reg8) and $20) shr 5; end; {10} Function INT: byte; begin INT:= (inport (reg8) and $10) shr 4; end; {11} Function Next_channel: byte; begin Next_channel:= inport (reg8) and $0F; end; {12} Function INTE: byte; begin INTE:= (inport (reg9) and $80) shr 7; end; {13} Function IRQ: byte; begin IRQ:= (inport (reg9) and $70) shr 4; end; {14} Function DMAE: byte; begin DMAE:= (inport (reg9) and $04) shr 4; end; {15} Function Trigsource: byte; begin Trigsource:= inport (reg9) and $03; end; {16} Procedure Set_INTE (sint: byte); {dat xoa INTE} var i: byte; begin i:= inport (reg9) and $7F; outport (reg9), (sint shl 7) or i);
  7. CHƯƠNG 5: CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN TRANG 130 end; {24} Function Read_counter (cnt: byte): word; {doc LSB truoc, MSB sau} var dl, dh, cnt0: byte; begin cnt0:= cnt +1; if cnt0 = 3 then cnt0:=4 outport (reg15, $D0 + (cnt0 shl 1)); dl:= inport (reg12 + cnt); dh:=inport (reg12 + cnt); Read_counter:= dl + 256*dh; end; {25} Procedure Reload_counter (dl1, dh1, dl2, dh2: byte); var dl, dh: byte; begin outport (reg15, $D4); dl:= inport (reg13); dh:= inport (reg13); if (dl+dh = 0) then begin Counter_enb (1); {counter 1, mode 2} Set_counter (1, 2, dl1, dh1); end; outport (reg15, $D8); dl:= inport (reg14); dh:= inport (reg14); if (dl+dh = 0) then begin Counter_enb(2); {counter 1, mode 2} Set_counter (2,2, dl1, dh1); end; end; {26} Procedure Xuat (add: word; data: byte); begin outport (add, data); end; {27} Function Nhap (add: word): byte; begin nhap:=inport (add);
  8. CHƯƠNG 5: CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN TRANG 132 else s_end = 0; redo: if(s_end==1) { printf("Enter start channel number : "); scanf("%d",&start); printf("Enter stop channel number : "); scanf("%d",&stop); } else { printf("Enter start channel number : "); scanf("%d",&start); printf("Enter stop channel number : "); scanf("%d",&stop); } if ((s_end== 0) & (stop>7)) { printf("Entered channel failed! Re-do!\n"); goto redo; } if ((s_end==1) & (stop>15)) { printf("Entered channel failed! Re-do!\n"); goto redo; } if (start > stop) { printf("Entered channel failed!\n");
  9. CHƯƠNG 5: CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN TRANG 134 outportb(port, 0); reread: status = inport(port+ 8); if ((status & 0x10)== 0x10) goto reread; delay(1); dtl = inportb(port); dth = inportb(port+1); adl = dtl/16; adt = dth*16+ adl; chv = dtl- adl*16; printf(" A/D data = %d\n",adt); printf(" Current channel = %d A/D range = %-7s\n",chv, gain_str[ch_gain[chv]]); printf(" Next scan channel = %d\n",(status & 0x0f)); printf(" Start scan channel= %d\n",start); printf(" Stop scan channel = %d\n",stop); printf(" Type 'ESC' to exit or other key for another conversion.\n\n"); } while(getche()!=27); } 5.4.3 Chương trình Qbasic 230 SCREEN 0,0,0:WIDTH 80:CLS:KEY OFF 240 PORT%=&H300 'SET I/O PORT BASE ADDRESS 310 DIM GAIN%(16) 320 ' STEP 1: INITIALIZE & SELECT SOFTWARE TRIGGER 330 'PORT%+9 CONTROL REGISTER 340 OUT PORT%+9,&H70 'SELECT SOFTWARE TRIGGER 350 C.REG%=INP(PORT%+9) 360 IF C.REG% <> &H70 THEN PRINT"PCL-818L VERIFICATION FAILED!":STOP 370 OUT PORT%+8,1 'CLEAR INTERRUPT REQUEST 380 PRINT " PLEASE SET PCL-818L'S JUMPER 7 (A/D IN) TO 5V "
  10. CHƯƠNG 5: CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN TRANG 136 720 PRINT"START SCAN CHANNEL = ";START% 730 PRINT"STOP SCAN CHANNEL = ";STP% 740 PRINT 750 PRINT"PRESS 'SPACE' KEY TO CONTINUE" 760 A$=INKEY$ :IF A$ ="" GOTO 760 770 IF A$=" " GOTO 620 780 END 5.4.4 Thư viện adsapi32.dll File adsapi32.dll do hãng cung cấp được cài vào thư mục hệ thống, trong chương trình ứng dụng phải khai sử dụng driver khai báo các hàm trong dll. Sử dụng các hàm trong thư viện giúp chương trình mang tính chuyên nghiệp hơn, có thể lập trình ngắt, DMA trong hệ điều hành Win988, Win2000XP. Vì file driver (.pas, .h, .bas) khá lớn nên chỉ trình bày một phần nhỏ ở đây (xem website www.advantech.com). Đầu tiên phải cài đặt driver vào máy tính thư mục Advantech\Adsapi\include sẽ chứa các file driver (.pas, .bas,.h) khai báo các hàm của adsapì.dll (chứa trong windows\system). Sau khi đã gắn card vào máy tính chạy chương trình Device installation để cài đặt thông số card vào máy , card sẽ được gắn một số là DeviceNum. Có thể có nhiều card sử dụng cùng lúc với các số khác nhau. Khi lập trình cần phải khai báo sử dụng driver, các hàm được gọi đến kèm theo thông số do driver qui định. Cụ thể tùy theo ngông ngữ lập trình sử dụng. Phần sau mô tả một số hàm của driver và ví dụ áp dụng Device Functions Analog Input Analog Output DRV_DeviceOpen DRV_AIConfig DRV_AOConfig DRV_DeviceClose DRV_AIGetConfig DRV_AOBinaryOut DRV_DeviceGetFeatures DRV_AIBinaryIn DRV_AOVoltageOut DRV_GetErrorMessage DRV_AIScale DRV_AOScale DRV_SelectDevice DRV_AIVoltageIn DRV_DeviceGetNumOfList DRV_MAIConfig DRV_DeviceGetList DRV_MAIBinaryIn DRV_GetAddress DRV_MAIVoltageIn
  11. CHƯƠNG 5: CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN TRANG 138 Đặt độ lợi cho chuyển đổi AD status = DRV_AIConfig(DriverHandle,lpAIConfig) Tên Hướng Loại Miêu tả DriverHandle input long Do DRV_DevicoOpen trả về lpAIConfig input long pointer trỏ đến record Qui định số kênh AI và độ lợi PT_AIConfig kênh Type PT_AIConfig ‘khai báo cấu trúc kểu Visual Basic DasChan As Integer DasGain As Integer End Type PT_AIConfig = Record {khai báo cấu trúc kiểu Delphi} DasChan : Smallint; DasGain : Smallint; End; typedef struct tagPT_AIConfig //khai báo kiểu C { USHORT DasChan; //USHORT :unsigned short USHORT DasGain; } PT_AIConfig, FAR * LPT_AIConfig; Đọc độ lợi status = DRV_AIGetConfig(DriverHandle,lpAIGetConfig) lpAIGetConfig: input/output con trỏû đến PT_AIGetConfig Type PT_AIGetConfig buffer As Long ' LPDEVCONFIG_AI size As Integer End Type Đọc kết quả nhị phân của A/D status = DRV_AIBinaryIn(DriverHandle,lpAIBinaryIn) lpAIBinaryIn:input/output, con trỏ đến PT_AIBinaryIn Type PT_AIBinaryIn chan As Integer ‘số kênh TrigMode As Integer ‘ cách kích chuyển đổi reading As Long 'kết quả nhị phân USHORT far * reading End Type Đọc kết quả dạng điện áp status = DRV_AIVoltageIn(DriverHandle, lpAIVoltageIn)
  12. CHƯƠNG 5: CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN TRANG 140 Đặt cấu hình xuất điện áp status = DRV_AOConfig(DriverHandle,lpAOConfig) Type PT_AOConfig chan As Integer RefSrc As Integer MaxValue As Single MinValue As Single End Type Xuất điện áp status = DRV_AOVoltageOut(DriverHandle,lpAOVoltageOut) Type PT_AOVoltageOut chan As Integer OutputValue As Single ‘điện áp cần xuất ra End Type Tỷ lệ giữa nhị phân và điện áp status = DRV_AOScale(DriverHandle,lpAOScale) Type PT_AOScale chan As Integer OutputValue As Single BinData As Long ' USHORT far *BinData End Type Xuất điện áp ra theo trị nhị phân status = DRV_AOBinaryOut(DriverHandle,lpAOBinaryOut) Type PT_AOBinaryOut chan As Integer BinData As Integer End Type Đọc ngõ vào số status = DRV_DioReadPortByte(DriverHandle,lpDioReadPortByte) Type PT_ReadPortByte Port As Integer ‘ số của port ByteData As Long ' USHORT far *ByteData End Type Xuất ra ngõ số status = DRV_DioWritePortByte(DriverHandle,lpDioWritePortByte) Type PT_DioWritePortByte Port As Integer
  13. CHƯƠNG 5: CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN TRANG 142 Type PT_ReadPortWord Port As Integer WordData As Long ' USHORT far *WordData End Type 5.4.5 Ví Dụ Lập Trình Dùng Adsapi 1/ Dùng VB chuyển đổi AD
  14. CHƯƠNG 5: CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN TRANG 144 DRV_GetErrorMessage ErrCde, szErrMsg Response = MsgBox(szErrMsg, vbOKOnly, "Error!!") End If End Sub 2/ Chương trình Delphi sử dụng thư viện adsapi Program digin; 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;
  15. 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; 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;
  16. 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;
  17. 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
  18. 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
  19. 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