Bài giảng Đo lường và điều khiển bằng máy tính Chương 3 Card thu thập tín hiệu và điều khiển

41 452 1
Bài giảng Đo lường và điều khiển bằng máy tính Chương 3 Card thu thập tín hiệu và điều khiển

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Chương CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN 3.1 CARD PCL-818L ADVANTECH PCL-818L card ISA có nhiều chức dùng để đo lường điều khiển Do tính ưu việt card, việc tìm hiểu hoạt động cần thiết để tiếp cận kỹ thuật thu thập số liệu máy tính DAS (Data Acquisition System) Sau chức card: - Chuyển đổi A/D 16 kênh 12 bit tốc độ lấy mẫu 40000/s - Chuyển đổi D/A kênh 12 bit - 16 ngõ vào digital TTL - 16 ngõ digital TTL - Bộ đếm/ đònh thời 16 bit cho người dùng Hình 3.1: Vò trí cá c cầu nố i, biế n trở đầu nối card PCL-818L Hình 3.2: Sơ đồ khố i Card PCL-818L CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN 115 Hình 3.3: Sơ đồ chân đầu nối card PCL-818L Chú thích A/DS: vào Analog (đơn) DI: vào Digital A/DH: vào Analog cao (vi sai) DGND: mass Digital nguồn A/DL: vào Analog thấp (vi sai) CLK: Clock Counter 8254 AGND: mass Analog GATE: Gate Counter 8254 D/A: Analog OUT: tín hiệu 8254 DO: Digital VREF: nguồn chuẩn VREF IN: nguồn chuẩn 3.2 CÁC THANH GHI CỦA CARD PCL- 818L có 16 ghi, đòa gốc chọn công tắc SW1, gồm tiếp điểm, chọn đường đòa SA4  SA9, thường đặt đòa gốc BASE 300h 116 CHƯƠNG Bảng 3.1 Các ghi Đòa Đọc Viết BASE+0 Byte thấp A/D số kênh Kích mềm A/D BASE+1 Byte cao A/D Điều khiển tầm A/D BASE+2 Quét kênh MUX Quét kênh MUX tầm điều khiển BASE+3 Byte thấp Digital Input Byte thấp Digital Output BASE+4 N/A Byte thấp Analog Output BASE+5 N/A Byte cao Digital Output BASE+6 N/A N/A BASE+7 N/A N/A BASE+8 Trạng thái Xóa yêu cầu ngắt BASE+9 Điều khiển Điều khiển BASE+10 N/A Cho phép Counter BASE+11 Byte cao Digital Output Byte cao Digital Output BASE+12 Counter Counter BASE+13 Counter Counter BASE+14 Counter Counter BASE+15 N/A Điều khiển counter 3.2.1 Các ghi sở + sở +1 Khi đọc ghi BASE+0 (đọc) - Chứa Byte thấp A/D số kênh Bit D7 Value AD3 D6 D5 D4 D3 D2 D1 D0 AD2 AD1 AD0 C3 C2 C1 C0 D1 D0 BASE+1 (đọc) - Byte cao A/D Bit D7 D6 D5 D4 D3 D2 Value AD11 AD10 AD9 AD8 AD7 AD6 AD5 AD4 đó: AD11  AD0 liệu Analog đổi sang Digital C3  C0 số ngõ vào analog tương ứng Khi ghi vào ghi BASE+0 : kích mềm A/D, khởi động ADC Có thể kích A/D phần mềm, xung clock board (pacer), xung Các bit BASE+9 chọn nguồn kích Nếu chọn kích mềm ta việc ghi vào BASE+0 giá trò cho lần kích Nếu kích cầu nối JP3 chọn nguồn kích DI0 (CN2) hay 117 CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN TRIG0 (CN3) Điều khiển tầm A/D (BASE+1): Mỗi kênh A/D có tầm điện áp ngõ vào riêng cho nó, điều khiển mã lưu trữ RAM PCL-818L đặt cầu nối JP7 Nếu muốn thay đổi tầm cho kênh, chọn kênh kênh Start ghi BASE+2, quét kiểu MUX, ghi mã vào bit bit ghi BASE+1 BASE+1 (Ghi) - Điều khiển tầm A/D Bit D7 D6 D5 D4 D3 D2 D1 D0 Value N/A N/A N/A N/A N/A N/A G1 G0 Bảng 5.2 Mã tầm JP7 Tầm điện áp ngõ vào Mã tầm JP7 = JP7 = 10 5V 10V 0 2.5V 5V 1,25V 2,5V 0,625V 1,25V 1 3.2.2 Thanh ghi quét phân kênh (BASE+2): - Đọc/ghi BASE+2 để điều khiển/đọc số kênh A/D quét Nửa byte cao kênh Stop, nửa byte thấp kênh Start Việc quét phân kênh (MUX) khởi động đến kênh Start ghi vào ghi Mỗi Trigger A/D chuyển đến kênh đo - Khi kích chuyển đổ i liên tục, MUX quét từ kênh Start đến kênh Stop lặp lại từ đầu Ví dụ, kênh Start Stop quét tuần tự: 4, 5, 6, 7, 4, 5, 6, Nếu cài đặt chế độ đầu vào vi sai bit CH3 CL3 phải - Nếu chọn kênh để biến đổi A/D cài đặt kênh Start Stop trò số số kênh cần thực biến đổi A/D BASE+2 (Viết) - Các kênh quét đầu cuối Bit D7 D6 D5 D4 D3 D2 D1 D0 Value CH3 CH2 CH1 CH0 CL3 CL2 CL1 CL0 CH3  CH0 kênh Stop, CL3  CL0 kê nh Start 118 CHƯƠNG Nửa bit thấp ghi quét phân kênh CL3 đến CL0 có tác dụng trỏ lập trình tầm điện áp vào A/D Khi đặt kênh Start N, mã tầm viết vào ghi BASE+1 cho kênh N 3.2.3 Các ghi xuất/nhập số (BASE + 3/11) PCL-818L có 16 ngõ vào số 16 ngõ số riêng biệt Các kênh I/O dùng chung port có đòa BASE+3 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 3.2.4 Thanh ghi xuất Analog D/A (BASE + 4/5) Khi ghi BASE+4 - Byte thấp ngõ D/A Bit D7 D6 D5 D4 Value DA3 DA2 DA1 DA0 D3 D2 D1 D0 x x x x D1 D0 BASE+5 – Byte cao ngõ D/A Bit D7 D6 D5 D4 D3 D2 Value DA11 DA10 DA9 DA8 DA7 DA6 DA5 DA4 đó: DA11  DA0 liệ u Digital sang Analog Tầm điện áp chọn nhờ cầu nối JP4 JP5 Nếu JP4 119 CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN đặt IN JP5 chọn nguồn chuẩn -5V hay -10V, áp D/A đến +5V hay đến +10V Nếu JP4 đặt vò trí EXT điện áp D/A kết nhân số digital hai ghi với điện áp đặt vào chân 31 VREF IN ( -10V +10V) đầu nối CN3 chia cho 4095 3.2.5 Thanh ghi trạng thái BASE+8 - Đọc BASE+ để nhận thông tin cấu hình hoạt động A/D - Ghi vào BASE+ giá trò xóa bit INT BASE+ 8, bit liệu khác không đổi BASE+8 - Trạng thái A/D Bit D7 D6 D5 D4 D3 D2 D1 D0 Value EOC N/A MUX INT CN3 CN2 CN1 CN0  EOC: End Of Conversion EOC= 0: đổi xong, kết đổi chứa BASE+ BASE+ EOC= 1: chuyển đổi A/D  MUX: chọn kênh vi sai 16 kênh đơn, phản ảnh vò trí cầu nối JP6 MUX= 0: kênh vi sai MUX= 1: 16 kênh đơn  INT: tín hiệu ngắt INT = 0: liệu giá trò (không có biến đổi kể từ bit INT bò xóa) INT = 1: A/D biến đổi xong, liệu có giá trò Nếu bit INTE= (BASE+ 9) đổi xong kênh, tín hiệu ngắt gởi đến PC qua ngõ IRQn (IRQn chọn bit I2  I0 BASE+9) Dù ghi trạng thái A/D đọc, ghi vào giá trò xóa bit INT, bit khác không đổi  CN3CN0: EOC = bit chứa số kênh biến đổi Lưu ý: Nếu kích A/D xung clock board (‘pacer’) xung phần mềm bạn phải kiểm tra bit INT 120 CHƯƠNG trước đọc liệu (không phải bit EOC) EOC hai trường hợp: Biến đổi hoàn tất Không có biến đổi bắt đầu Do phần mềm bạn phải đợi tín hiệu INT = trước đọc số liệu chuyển đổi Rồi cần phải xóa bit INT cách ghi giá trò vào ghi trạng thái BASE+8 3.2.6 Thanh ghi điều khiển (BASE+9) Đọc/ghi ghi BASE+9 để nhận/cung cấp thông tin chế độ hoạt động PCL-818L BASE+9 - Điều khiển chế độ hoạt động Bit D7 D6 D5 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 phát tín hiệu ngắt hoàn tất chuyển đổi A/D Vậy cấu hình INTE = DMAE = dùng để báo cho CPU biết ngắt đổi A/D xong  Nếu DMAE = 1: PCL-818L phát tín hiệu ngắt nhận tín hiệu đếm tràn T/C (Terminal count) từ điều khiển DMA máy tính để chuyển đổi truyền DMA hoàn tất Truyền DMA bò dừng ngắt gây tín hiệu T/C Xem DMAE bên  I2  I0: chọn số ngắt cho data interrupt truyền data DMA (không trùng với số ngắt thiết bò khác).ba bit chọn số ngắt từ (010) đến (111)  DMAE: cấm/cho phép PCL-818L truyền DMA DMAE = 0: cấm truyền DMA DMAE = 1: cho phép truyền DMA Mỗi biến đổi A/D khởi động hai tín hiệu yêu cầu ngắt liên tiếp Các tín hiệu cho phép điều khiển DMA 8237 truyền byte liệu chuyển đổi 121 CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN AD từ PCL-818L đến nhớ Chọn kênh truyền DMA hay nhờ cầu nối JP1 Lưu ý: phải lập trình điều khiển DMA ghi trang DMA 8237 máy tính trước đặt DMAE =  ST1  ST0: chọn nguồn kích Bảng 5.3 Nguồn kích ST1 ST0 Kích mềm X Kích Kích Pacer 1 3.2.7 Thanh ghi cho phép đếm/ đònh thời (BASE+10) Card PCL-818L có vi mạch 8254 gồm ba đếm 0, 1, sử dụng hai đếm 1, 2, đếm cho người dùng Xung nhòp cho đếm chọn 10MHz hay 1MHz nhờ cầu nối JP2, ngõ đếm đưa vào ngõ nhòp đếm 2, ngõ đếm đưa vào kích A/D (kích pacer), tần số kích phụ thuộc tần số xung nhòp số ghi vào hai đếm 1, Tần số pacer Fclk /( Div1  Div2) với Fclk  MHz hay 10MHz, Div1 Div2 số đặt đếm đếm Bộ đếm có ngõ vào Clk 100 KHz hay xung nhòp chân 17 CN3 chọn nhờ BASE+ 10, chân Gate DI2 (chân CN2) hay GATE0 (chân 36 CN3) chọn nhờ cầu nối JP3 Ghi vào BASE+10 phép cấm đếm/ đònh thời PCL-818L tạo xung BASE+10 - Cho phép pacer Bit D7 D6 D5 D4 D3 D2 D1 Value x x x x x D0 x TC1 TC0 122 CHƯƠNG  TC0: cấm/ cho phép pacer TC0 = 0; cho phép pacer TC0 = 1; pacer điều khiển TRIG0 (chân 35 CN3) Tín hiệu chặn xung trigger gởi từ ‘pacer’ đến A/D  TC1: chọn chế độ nguồn xung nhòp ngõ vào Counter TC1 = 0; counter nhận xung clock (chân 17 CN3) TC1 = 1; counter nhận xung clock 100KHz bên 3.2.8 Các ghi điều khiển đọc/ghi đếm Bộ đònh 8254 sử dụng bốn ghi BASE+12, BASE+13, BASE+14, BASE+15 Các chức ghi liệt kê bảng 5.14 Bảng 5.4 Thanh ghi Chức Thanh ghi Chức BASE+12 Counter đọc/ghi BASE+14 Counter đọc/ghi BASE+13 Counter đọc/ghi BASE+15 Điều khiển đếm Do đếm 8254 có cấu trúc 16 bit, nên liệu đọc/ ghi chia làm byte: byte thấp (LSB), byte cao (MSB) Để tránh phạm lỗi đọc/ghi sai, cần ý thao tác đọc ghi đôi (tức lần đọc/ghi hai byte) theo thứ tự byte Chi tiết ghi điều khiển 8254 xem Chương CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN 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 End Type Tỷ lệ nhò phân đ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 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ố port ByteData As Long ' USHORT far *ByteData End Type Xuất ngõ số status = DRV_DioWritePortByte(DriverHandle,lpDioWritePortByte) Type PT_DioWritePortByte Port As Integer Mask As Integer state As Integer End Type Đọc bit ngõ vào status = DRV_DioReadBit(DriverHandle,lpDioReadBit) Type PT_DioReadBit Port As Integer bit As Integer ‘từ đến 139 140 CHƯƠNG state As Long End Type ' hay 1, USHORT far *state Xuất bit status = DRV_DioWriteBit(DriverHandle,lpDioWriteBit) Type PT_DioWriteBit Port As Integer bit As Integer state As Integer End Type Xuất byte port status = DRV_WritePortByte(DriverHandle,lpWritePortByte) Type PT_WritePortByte Port As Integer ‘đòa port máy tính ByteData As Integer End Type Xuất word port status = DRV_WritePortByte(DriverHandle,lpWritePortWord) Type PT_WritePortWord Port As Integer WordData As Integer End Type Đọc byte port in status = DRV_ReadPortByte(DriverHandle,lpReadPortByte) Type PT_ReadPortByte Port As Integer ByteData As Long ' USHORT far *ByteData End Type Đọc word port in status = DRV_ReadPortWord(DriverHandle,lpReadPortWord) Type PT_ReadPortWord Port As Integer WordData As Long ' USHORT far *WordData End Type 3Ví Dụ Lập Trình Dùng Adsapi 1/ Dùng VB chuyển đổi AD CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN Private Sub cmdRead_Click() Dim ErrCde As Long' Error code Dim szErrMsg As String * 80 ' Error string Dim DeviceHandle As Long Dim lpAIConfig As PT_AIConfig Dim AiVolIn As PT_AIVoltageIn Dim AiCtrMode As Integer Dim voltage As Single ' Step 1: open device ErrCde = DRV_DeviceOpen(0, DeviceHandle) If (ErrCde 0) Then DRV_GetErrorMessage ErrCde, szErrMsg Response = MsgBox(szErrMsg, vbOKOnly, "Error!!") Exit Sub End If ' Step 2: configure input range lpAIConfig.DasChan = ' channel: lpAIConfig.DasGain = ' gain code: ErrCde = DRV_AIConfig(DeviceHandle, lpAIConfig) If (ErrCde 0) Then DRV_GetErrorMessage ErrCde, szErrMsg Response = MsgBox(szErrMsg, vbOKOnly, "Error!!") Exit Sub End If ' Step 3: read value AiVolIn.chan = lpAIConfig.DasChan AiVolIn.gain = lpAIConfig.DasGain AiVolIn.TrigMode = AiCtrMode AiVolIn.voltage = DRV_GetAddress(voltage) ‘get address of variable voltage ErrCde = DRV_AIVoltageIn(DeviceHandle, AiVolIn) If (ErrCde 0) Then DRV_GetErrorMessage ErrCde, szErrMsg Response = MsgBox(szErrMsg, vbOKOnly, "Error!!") Exit Sub End If ' Step 4: display value txtAIValue.Text = Format(voltage, "###0.00") ' Step 5: close device ErrCde = DRV_DeviceClose(DeviceHandle) 141 142 CHƯƠNG If (ErrCde 0) Then 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, CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN StdCtrls, Driver, Global, Menus; 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; 143 144 CHƯƠNG procedure Tfrmstart.FormCreate(Sender: TObject); var MaxEntries, OutEntries : Smallint; NumOfDevice i, ii : Smallint; : 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 := To (MaxEntries - 1) begin tempStr := ''; For ii := To MaxDevNameLen 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; CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN TestRes : Boolean; 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; 145 146 CHƯƠNG PictureBit6: TImage; 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; CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN CmdBitE: TButton; 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 >= Then For i := To bit temp := temp * 2; DoBit := temp; end; procedure Tfrmrun.UpdateLED(Bit : Integer; Mode : Boolean); begin if Mode then DoValue := DoValue + DoBit(Bit) else 147 148 CHƯƠNG DoValue := DoValue - DoBit(Bit); 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 : PictureBit0.Visible := True; : PictureBit1.Visible := True; : PictureBit2.Visible := True; : PictureBit3.Visible := True; : PictureBit4.Visible := True; : PictureBit5.Visible := True; : PictureBit6.Visible := True; : PictureBit7.Visible := True; : PictureBit8.Visible := True; : 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); CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN var tempBit : Integer; begin tempBit := (Sender as TImage).Tag; UpdateLED(tempBit, LedOFF); (Sender as TImage).Visible := False; case tempBit of : CmdBit0.Visible := True; : CmdBit1.Visible := True; : CmdBit2.Visible := True; : CmdBit3.Visible := True; : CmdBit4.Visible := True; : CmdBit5.Visible := True; : CmdBit6.Visible := True; : CmdBit7.Visible := True; : CmdBit8.Visible := True; : 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); 149 150 CHƯƠNG txtDiValue.Text := DiStr; end; end unit Global; interface uses Driver; type lpDevList = ^PT_DEVLIST; const MaxEntries = 255; var DeviceHandle : Longint; ptDevGetFeatures DeviceList : PT_DeviceGetFeatures; : array [0 MaxEntries] of PT_DEVLIST; SubDeviceList ErrCde : array [0 MaxEntries] of PT_DEVLIST; : Longint; szErrMsg : string; pszErrMsg : Pchar = @szErrMsg; bRun : Boolean; gwPort : Smallint; dwDeviceNum : Longint; implementation end 3.5 CARD PCI 1710 Card PCI1710 có chức tương tự card PCLl818 gắn vào slot pci Sơ đồ khối trình bày hình 5.5, lập trình card thực thông qua driver Adsapi32 hãng cung cấp 5.6 GIAO DIỆN ĐỒ HỌA Thay phải dùng ngôn ngữ lập trình để lập trình cho card, ta dùng phần mềm chuyên dụng hãng, có đặc tính  giảm thời gian lập trình,  trình bày dử liệu dạng bảng biểu, đồ thò,  lưu trữ liệu file,  kết nối với phần mềm khác Các phần mềm thông dụng: LabVIEW (Laboratory Virtual Instrument Engineering Workbench), VISA National Instruments, GenieDAQ, VisiDAQ Advantech… CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN Card PCL818 Card PCI 1710 Hình 5.4 Hình ảnh hai card DAS 151 152 CHƯƠNG Hình 5.5 Sơ đồ khối card PCI 1710 Advantech CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN Hình 3.6: Hai giao diện phần mềm thu thập số liệu 153 [...]... nối JP3 chọn tín hiệu kích là TRIGO (chân 35 CN3) hay DI0 (chân 1 CN2) Việc truyền kết quả A/D cho máy tính có thể thực hiện bằng chương trình điều khiển, bằng ngắt hay DMA Các bước hình thành để chuyển đổi A/D với trigger bằng phần mềm và truyền kết quả A/D bằng chương trình điều khiển: - Đặt tầm vào cho mỗi kênh A/D - Đặt kênh vào bằng cách chỉ rõ tầm quét kênh - Kích đổi A/D bằng cách ghi vào BASE+0.. .CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN 1 23 3 .3 CHUYỂN ĐỔI A/D, D/A & DO 5 .3. 1 Lập trình trực tiếp Card PCL-818 có thể lập trình bằng kỹ thu t đã trình bày ở Chương 4, nghóa là truy cập trực tiếp các thanh ghi của card 1- Chuyển đổi A/D Có thể kích đổi A/D bằng phần mềm, bằng xung ngoài hay bằng pacer on board Bit 1 và 0 của thanh ghi BASE+9 sẽ chọn nguồn trigger... while(getche()!=27); } 3. 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 31 0 DIM GAIN%(16) 32 0 '******** STEP 1: INITIALIZE & SELECT SOFTWARE TRIGGER *************** 33 0 'PORT%+9 CONTROL REGISTER 34 0 OUT PORT%+9,&H70 'SELECT SOFTWARE TRIGGER 35 0 C.REG%=INP(PORT%+9) 36 0 IF C.REG% &H70 THEN PRINT"PCL-818L VERIFICATION FAILED!":STOP 134 CHƯƠNG 3 370 OUT... 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... 3. 4.1 Unit dùng cho card PCL-818L trong Delphi Unit PCL818L; Interface CONST base= $30 0; reg0= base + 0; reg1= base + 1; reg2= base + 2; reg3= base + 3; reg4= base + 4; reg5= base + 5; reg6= base + 6; reg7= base + 7; reg8= base + 8; reg9= base + 9; reg10= base + 10; reg11= base + 11; đia chi nen cho I/O 125 CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN reg12= base + 12; reg 13= base + 13; reg14= base + 14;... 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 124 CHƯƠNG 3 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 3. 3.2 Lập... OUT PORT%+0,0 630 ST%=INP(PORT%+8) 640 IF (ST% AND &H80)=&H80 GOTO 630 'CHECK CONVERSION OK ? 650 DTL%=INP(PORT%+0) 660 DTH%=INP(PORT%+1) 670 ADL%=DTL%\16 680 ADT%=DTH%*16+ADL% 690 CHV%=DTL%-ADL%*16 695 PRINT"A/D READING = ";ADT% 700 PRINT"CURRENT CHANNEL = ";CHV%; 135 CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN 710 PRINT"NEXT CHANNEL = ";(ST% AND &HF) 720 PRINT"START SCAN CHANNEL = ";START% 730 PRINT"STOP... outport (reg8, $FF); end; 21 Procedure Counter_enb (tc: byte); begin outport (reg10, tc and $ 03) ; end; 129 CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN 22 Procedure Set_counter (cnt, mode, dl, dh: byte); begin outport (reg15, $30 ) + (cnt shl 6) + (mode shl 1); outport (reg12 + cnt, dl); outport (reg12 + cnt, dh) end;  23 Procedure Select_nextchannel (setchan: byte) var i: byte; begin i:= (inport (reg8) and... begin outport (reg0, $FF); end; 3 Procedure Set_rangeAD (range: byte); dat tam dien ap ngo vao AD var rang: byte; begin rang:=range and $ 03; outport (reg1, rang); end; 4 Procedure Set_channel AD (start: byte; stop: byte); begin outport (reg2, (stop shl 4) or start); end; CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN 5 Function Dig_in: word; begin dig_in:=inport (reg3) + 256* inport (reg11); end; 6... scan channel value */ outportb(port+2,s_ch_val); r_ch = inportb(port+ 2); /* Read back channel value */ if (r_ch != s_ch_val) { printf("Scan channel setting failed!\n"); exit(0); } CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN 133 delay(1); /********* STEP 5: PERFORM SINGLE A/D CONVERSION ***********/ do { outportb(port+8, 0); outportb(port, 0); reread: status = inport(port+ 8); if ((status & 0x10)== 0x10) ... Advantech… CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN Card PCL818 Card PCI 1710 Hình 5.4 Hình ảnh hai card DAS 151 152 CHƯƠNG Hình 5.5 Sơ đồ khối card PCI 1710 Advantech CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN... Chi tiết ghi điều khiển 8254 xem Chương CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN 1 23 3 .3 CHUYỂN ĐỔI A/D, D/A & DO 5 .3. 1 Lập trình trực tiếp Card PCL-818 lập trình kỹ thu t trình bày Chương 4, nghóa...Hình 3. 2: Sơ đồ khố i Card PCL-818L CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN 115 Hình 3. 3: Sơ đồ chân đầu nối card PCL-818L Chú thích A/DS: vào Analog (đơn) DI: vào Digital A/DH: vào Analog

Ngày đăng: 03/01/2016, 15:42

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan