Universall Library für Hardware USB-1024HLS

Hardware- und Elektronikbasteleien, Ansteuerung von Schnittstellen und Peripherie.
Fragen zu "Consumer"-Problemen kommen in Offtopic.
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Universall Library für Hardware USB-1024HLS

Beitrag von Falko »

Jetzt muss ich mal was fragen. Wer weiss, wen man zu dieser
Universal Library ansprechen muss oder hat Erfahrung damit?

Da ich dabei bin diese Lib auf Purbasic anzupassen, habe ich
die Firma Meilhaus kontaktet. Leider gibt www.Meilhaus.de
keinen Support für das Programmieren dieser UV-Lib.
Freundlicherweise hat man mir nach Angabe meiner Adresse die neuste TreiberCD zugeschickt. (Das finde ich Lobenswert) :allright:

Dann hatte ich eine andere Firma kontaktiert, die unter www.plug-in.de zu erreichen ist und ebenfalls speziell USB-Module wie so eins, welches ich habe, anbietet. (Beide sind Distributoren einer gemeinsamen englischen Firma, die mir den Link zu plug-in.de gesendet hatte um dort Unterstütztung zu erhalten.
Da ich die Hardware nicht bei denen gekauft hatte, haben die mir zurück
geschrieben, das sie in diesem Fall keinen Support anbieten.

Das fand ich schon echt lustig.

Beide benutzen die selbe "CBW32.DLL" und in der Hilfe sind einige Funktionen zur Konfigurationsdatei nicht der Hilfe beschrieben.
Zwar kann ich diese ansprechen, und sie speichert auch eine "Config.cfg", nur leider macht die eigendlich nur eine Kopie der CB.CFG mit den alten Werten.

Die Funktion nennt sich cbSaveConfig(), falls jemand auch diese DLL kennt.

Mit cbSetConfig() kann ich bestimmte Parameter zur Hardware ändern. Doch leider geschieht das virtuell und wird nicht in diese CB.CFG eingetragen. Jetzt wollte ich dieses mit dem cbSaveConfig() speichern, was aber nur eine Kopie der alten Einstellung ist. Ansonstens kann ich
alle Funktionen der Hardware "ME-RedLab USB-1024HLS" nutzen.

Kennt jemand diese Universal Library und hat dazu mehr Infos?

Wäre echt nett, wenn ich mehr darüber erfahren könnte.

Mit freundlichen Grüßen

Falko
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Beitrag von Falko »

Anscheinend hat sich noch jemand mehr mit dieser lib auseinander setzen wollen.

http://forums.purebasic.com/english/vie ... 00ec4cd466

Nun denn, ich bin schon mal angefangen und setze mal einen Teil für die PB-cbw32-Lib hier herein. Achtung nicht alle Proceduren sind korrigiert.
Die, die ich geändert habe, sind kommentiert.

Ich habe die Fa. Meilhaus auf undokumentierte Funktionen, die nicht in der Hilfe stehen, angefragt, aber leider bieten sie für Purebasic keinen Support.
Dabei wollte ich von denen nur die komplette Auflistung aller Funktionen der Universal Library (CBW32.DLL) wissen, die nicht in der Hilfe beschrieben sind.
Ich möchte ja das board konfigurieren und die Einstellungen festhalten.
Die Einstellungen werden nur zur Laufzeit verändert. Und die gespeicherte
Name.CFG - Datei ist eine reine Kopie der CB.CFG.
Vielleicht gibt es ja auch hier jemanden, der damit schon mal was gemacht hat und es hier ergänzen könnte.

MfG Falko


Folgende Datei heist dann cbw32.pbi

Code: Alles auswählen

; Source generiert durch DLL2PBLib
; Copyright 2005 by Thomas Schulz (TS-Soft)
; Und da er zu global alles auf Long setzt musste Falko es mal wieder ändern ;)
; Alle Konstanten beziehen sich auf die 32-Bitversion

; Konstanten deklarieren
; Current Revision Number 
#CURRENTREVNUM = 5.58

; System error code 
#NOERRORS =0    ; No error occurred 
#BADBOARD = 1    ; Invalid board number specified 
#DEADDIGITALDEV = 2    ; Digital I/O device is not responding  
#DEADCOUNTERDEV = 3    ; Counter I/O device is not responding 
#DEADDADEV = 4    ; D/A is not responding 
#DEADADDEV = 5    ; A/D is not responding 
#NOTDIGITALCONF = 6    ; Specified board does not have digital I/O 
#NOTCOUNTERCONF = 7    ; Specified board does not have a counter 
#NOTDACONF = 8    ; Specified board is does not have D/A 
#NOTADCONF = 9    ; Specified board does not have A/D 
#NOTMUXCONF = 10   ; Specified board does not have thermocouple inputs 
#BADPORTNUM = 11   ; Invalid port number specified 
#BADCOUNTERDEVNUM = 12   ; Invalid counter device 
#BADDADEVNUM = 13   ; Invalid D/A device 
#BADSAMPLEMODE =  14   ; Invalid sampling mode option specified 
#BADINT = 15   ; Board configured For invalid interrupt level 
#BADADCHAN = 16   ; Invalid A/D channel Specified 
#BADCOUNT = 17   ; Invalid count specified 
#BADCNTRCONFIG = 18   ; invalid counter configuration specified 
#BADDAVAL = 19   ; Invalid D/A output value specified 
#BADDACHAN = 20   ; Invalid D/A channel specified 
#ALREADYACTIVE = 22   ; A background process is already in progress 
#PAGEOVERRUN	= 23   ; DMA transfer crossed page boundary, may have gaps in Data 
#BADRATE = 24   ; Inavlid sampling rate specified 
#COMPATMODE = 25   ; Board switches set For "compatible" mode 
#TRIGSTATE = 26   ; Incorrect intial trigger state D0 must=TTL low) 
#ADSTATUSHUNG = 27   ; A/D is not responding 
#TOOFEW = 28   ; Too few samples before trigger occurred 
#OVERRUN = 29   ; Data lost due To overrun, rate too high 
#BADRANGE = 30   ; Invalid range specified 
#NOPROGGAIN = 31   ; Board does not have programmable gain 
#BADFILENAME = 32   ; Not a legal DOS filename 
#DISKISFULL = 33   ; Couldn't complete, disk is full 
#COMPATWARN = 34   ; Board is in compatible mode, so DMA will be used 
#BADPOINTER = 35   ; Invalid pointer (NULL) 
#TOOMANYGAINS = 36   ; Too many gains 
#RATEWARNING = 37   ; Rate may be too high For interrupt I/O 
#CONVERTDMA = 38   ; CONVERTDATA cannot be used with DMA I/O 
#DTCONNECTERR = 39   ; Board doesn't have DT Connect 
#FORECONTINUOUS = 40   ; CONTINUOUS can only be used with BACKGROUND 
#BADBOARDTYPE = 41   ; This function can not be used with this board 
#WRONGDIGCONFIG = 42   ; Digital I/O is configured incorrectly 
#NOTCONFIGURABLE = 43   ; Digital port is not configurable 
#BADPORTCONFIG = 44   ; Invalid port configuration specified 
#BADFIRSTPOINT = 45   ; First point argument is not valid 
#ENDOFFILE = 46   ; Attempted To Read past End of file 
#NOT8254CTR = 47   ; This board does not have an 8254 counter 
#NOT9513CTR = 48   ; This board does not have a 9513 counter 
#BADTRIGTYPE = 49   ; Invalid trigger type 
#BADTRIGVALUE = 50   ; Invalid trigger value 
#BADOPTION = 52   ; Invalid option specified For this function 
#BADPRETRIGCOUNT = 53   ; Invalid pre-trigger count sepcified 
#BADDIVIDER = 55   ; Invalid fout divider value 
#BADSOURCE = 56   ; Invalid source value  
#BADCOMPARE = 57   ; Invalid compare value 
#BADTIMEOFDAY = 58   ; Invalid time of day value 
#BADGATEINTERVAL = 59   ; Invalid gate interval value 
#BADGATECNTRL = 60   ; Invalid gate control value 
#BADCOUNTEREDGE = 61   ; Invalid counter edge value 
#BADSPCLGATE = 62   ; Invalid special gate value 
#BADRELOAD = 63   ; Invalid reload value 
#BADRECYCLEFLAG = 64   ; Invalid recycle flag value 
#BADBCDFLAG = 65   ; Invalid BCD flag value 
#BADDIRECTION = 66   ; Invalid count direction value 
#BADOUTCONTROL = 67   ; Invalid output control value 
#BADBITNUMBER = 68   ; Invalid bit number 
#NONEENABLED = 69   ; None of the counter channels are enabled 
#BADCTRCONTROL = 70   ; Element of control array not ENABLED/DISABLED 
#BADEXPCHAN = 71   ; Invalid EXP channel 
#WRONGADRANGE = 72   ; Wrong A/D range selected For cbtherm 
#OUTOFRANGE = 73   ; Temperature input is out of range 
#BADTEMPSCALE = 74   ; Invalid temperate scale 
#BADERRCODE = 75   ; Invalid error code specified 
#NOQUEUE = 76   ; Specified board does not have chan/gain queue 
#CONTINUOUSCOUNT = 77   ; CONTINUOUS can not be used with this count value 
#UNDERRUN = 78   ; D/A FIFO hit empty While doing output 
#BADMEMMODE = 79   ; Invalid memory mode specified 
#FREQOVERRUN = 80   ; Measured frequency too high For gating interval 
#NOCJCCHAN  = 81   ; Board does not have CJC chan configured 
#BADCHIPNUM = 82   ; Invalid chip number used with cbC9513Init 
#DIGNOTENABLED = 83   ; Digital I/O not enabled 
#CONVERT16BITS = 84   ; CONVERT option not allowed with 16 bit A/D 
#NOMEMBOARD = 85   ; EXTMEMORY option requires memory board 
#DTACTIVE = 86   ; Memory I/O While DT Active 
#NOTMEMCONF = 87   ; Specified board is not a memory board 
#ODDCHAN = 88   ; First chan in queue can not be odd 
#CTRNOINIT = 89   ; Counter was not initialized 
#NOT8536CTR = 90   ; Specified counter is not an 8536 
#FREERUNNING = 91   ; A/D sampling is not timed 
#INTERRUPTED = 92   ; Operation interrupted with CTRL-C 
#NOSELECTORS = 93   ; Selector could not be allocated 
#NOBURSTMODE = 94   ; Burst mode is not supported on this board 
#NOTWINDOWSFUNC = 95   ; This function not available in Windows lib 
#NOTSIMULCONF = 96   ; Not configured For simultaneous update 
#EVENODDMISMATCH = 97   ; Even channel in odd slot in the queue 
#M1RATEWARNING = 98   ; DAS16/M1 sample rate too fast 
#NOTRS485 = 99   ; Board is not an RS-485 board 
#NOTDOSFUNC = 100   ; This function not avaliable in DOS 
#RANGEMISMATCH = 101   ; Unipolar And Bipolar can not be used together in A/D que 
#CLOCKTOOSLOW = 102   ; Sample rate too fast For clock jumper setting 
#BADCALFACTORS = 103   ; Cal factors were out of expected range of values 
#BADCONFIGTYPE = 104   ; Invalid configuration type information requested 
#BADCONFIGITEM = 105   ; Invalid configuration item specified 
#NOPCMCIABOARD = 106   ; Can't acces PCMCIA board 
#NOBACKGROUND = 107   ; Board does not support background I/O 
#STRINGTOOSHORT = 108   ; String passed To cbGetBoardName is To short 
#CONVERTEXTMEM = 109   ; Convert Data option not allowed with external memory 
#BADEUADD = 110   ; e_ToEngUnits addition error 
#DAS16JRRATEWARNING = 111   ; use 10 MHz clock For rates > 125KHz 
#DAS08TOOLOWRATE = 112   ; DAS08 rate set too low For AInScan warning 
#AMBIGSENSORONGP = 114   ; more than one sensor type defined For EXP-GP 
#NOSENSORTYPEONGP = 115   ; no sensor type defined For EXP-GP 
#NOCONVERSIONNEEDED = 116   ; 12 bit board without chan tags - converted in ISR 
#NOEXTCONTINUOUS = 117   ; External memory cannot be used in CONTINUOUS mode 
#INVALIDPRETRIGCONVERT = 118   ; cbAConvertPretrigData was called after failure in cbAPretrig 
#BADCTRREG = 119   ; bad arg To CLoad For 9513 
#BADTRIGTHRESHOLD = 120   ; Invalid trigger threshold specified in cbSetTrigger 
#BADPCMSLOTREF = 121   ; No PCM card in specified slot 
#AMBIGPCMSLOTREF = 122   ; More than one MCC PCM card in slot 
#BADSENSORTYPE = 123   ; Bad sensor type selected in Instacal 
#DELBOARDNOTEXIST = 124   ; tried To delete board number which doesn't exist 
#NOBOARDNAMEFILE = 125   ; board name file not found 
#CFGFILENOTFOUND = 126   ; configuration file not found 
#NOVDDINSTALLED = 127   ; CBUL.386 device driver not installed 
#NOWINDOWSMEMORY = 128   ; No Windows memory available 
#OUTOFDOSMEMORY  = 129   ; ISR Data struct alloc failure 
#OBSOLETEOPTION = 130   ; Obsolete option For cbGetConfig/cbSetConfig 
#NOPCMREGKEY =  131	  ; No registry entry For this PCMCIA board 
#NOCBUL32SYS =  132	  ; CBUL32.SYS device driver is not loaded 
#NODMAMEMORY = 133   ; No DMA buffer available To device driver 
#IRQNOTAVAILABLE = 134	  ; IRQ in being used by another device 	
#NOT7266CTR = 135   ; This board does not have an LS7266 counter 
#BADQUADRATURE = 136   ; Invalid quadrature specified 
#BADCOUNTMODE = 137   ; Invalid counting mode specified 
#BADENCODING = 138   ; Invalid Data encoding specified 
#BADINDEXMODE = 139   ; Invalid index mode specified 
#BADINVERTINDEX = 140   ; Invalid invert index specified 
#BADFLAGPINS = 141   ; Invalid flag pins specified 
#NOCTRSTATUS = 142	  ; This board does not support cbCStatus() 
#NOGATEALLOWED = 143	  ; Gating And indexing not allowed simultaneously 		     
#NOINDEXALLOWED  =  144   ; Indexing not allowed in non-quadratue mode    
#OPENCONNECTION = 145   ; Temperature input has open connection 
#BMCONTINUOUSCOUNT = 146   ; Count must be integer multiple of packetsize For recycle mode. 
#BADCALLBACKFUNC = 147   ; Invalid pointer To callback function passed as arg 
#MBUSINUSE = 148   ; MetraBus in use 
#MBUSNOCTLR = 149   ; MetraBus I/O card has no configured controller card 
#BADEVENTTYPE = 150   ; Invalid event type specified For this board. 
#ALREADYENABLED =  151	  ; An event handler has already been enabled For this event type 
#BADEVENTSIZE = 152   ; Invalid event count specified. 
#CANTINSTALLEVENT = 153	  ; Unable To install event handler 
#BADBUFFERSIZE = 154   ; Buffer is too small For operation 
#BADAIMODE = 155   ; Invalid analog input mode(RSE, NRSE, Or DIFF)  
#BADSIGNAL = 156   ; Invalid signal type specified. 
#BADCONNECTION = 157   ; Invalid connection specified. 
#BADINDEX = 158   ; Invalid index specified, Or reached End of internal connection list. 
#NOCONNECTION  = 159   ; No connection is assigned To specified signal. 
#BADBURSTIOCOUNT = 160   ; Count cannot be greater than the FIFO size For BURSTIO mode. 
#DEADDEV  = 161   ; Device has stopped responding. Please check connections. 

#INVALIDACCESS = 163    ; Invalid access Or privilege For specified operation 
#UNAVAILABLE = 164    ; Device unavailable at time of request. Please Repeat operation. 
#NOTREADY = 165   ; Device is not ready To send Data. Please Repeat operation. 

#AIFUNCTION  = 1    ; Analog Input Function    
#AOFUNCTION =  2    ; Analog Output Function   
#DIFUNCTION  =  3    ; Digital Input Function   
#DOFUNCTION = 4    ; Digital Output Function  
#CTRFUNCTION = 5    ; Counter Function         

; Calibration coefficient types 
#COARSE_GAIN = $01
#COARSE_OFFSET = $02
#FINE_GAIN = $04
#FINE_OFFSET = $08
#GAIN = $01
#OFFSET = $02

;*****************************************************************
;*
;*               **** ATTENTION ALL DEVELOPERS ****
;*
;* When adding error codes, first determine if these are errors
;* that can be caused by the user or if they will never happen
;* in normal operation unless there is a bug.
;*
;* Only if they are user error should you put them in the list
;* above.  In that case be sure to give them a name that means
;* something from the user's point of view - rather than from the
;* programmer.  For example NO_VDD_INSTALLED rather than
;* DEVICE_CALL_FAILED.
;*
;* Do not add any errors to the section above without getting
;* agreement by the dept. so that all user header files and header
;* files for other versions of the library can be updates together.
;*
;* If it's an internal error, then be sure to add it to the
;* correct section below.
;*
;*******************************************************************

; Internal errors returned by 16 bit library 
#INTERNALERR = 200   ; 200-299 Internal library error  
#CANT_LOCK_DMA_BUF = 201   ; DMA buffer could not be locked 
#DMA_IN_USE = 202   ; DMA already controlled by another VxD 
#BAD_MEM_HANDLE = 203   ; Invalid Windows memory handle 
#NO_ENHANCED_MODE = 204   ; Windows Enhance mode is not running 
#MEMBOARDPROGERROR = 211   ; Program error getting memory board source 

; Internal errors returned by 32 bit library 
#INTERNAL32_ERR = 300   ; 300-399 32 bit library internal errors 
#NO_MEMORY_FOR_BUFFER  =  301   ; 32 bit - Default buffer allocation when no user buffer used with file 
#WIN95_CANNOT_SETUP_ISR_DATA =  302 ; 32 bit - failure on INIT_ISR_DATA IOCTL call 
#WIN31_CANNOT_SETUP_ISR_DATA   = 303 ; 32 bit - failure on INIT_ISR_DATA IOCTL call 
#CFG_FILE_READ_FAILURE  = 304   ; 32 bit - error reading board configuration file 
#CFG_FILE_WRITE_FAILURE = 305   ; 32 bit - error writing board configuration file 
#CREATE_BOARD_FAILURE =  306   ; 32 bit - failed To create board 
#DEVELOPMENT_OPTION  = 307   ; 32 bit - Config Option item used in development only 
#CFGFILE_CANT_OPEN = 308   ; 32 bit - cannot open configuration file. 
#CFGFILE_BAD_ID = 309   ; 32 bit - incorrect file id. 
#CFGFILE_BAD_REV = 310   ; 32 bit - incorrect file version. 
#CFGFILE_NOINSERT = 311  ;; 
#CFGFILE_NOREPLACE = 312  ;; 
#BIT_NOT_ZERO = 313  ;; 
#BIT_NOT_ONE = 314  ;; 
#BAD_CTRL_REG = 315     ; No control register at this location. 
#BAD_OUTP_REG = 316     ; No output register at this location. 
#BAD_RDBK_REG = 317     ; No Read back register at this location. 
#NO_CTRL_REG = 318     ; No control register on this board. 
#NO_OUTP_REG = 319     ; No control register on this board. 
#NO_RDBK_REG = 320     ; No control register on this board. 
#CTRL_REG_FAIL = 321     ; internal ctrl reg test failed. 
#OUTP_REG_FAIL = 322     ; internal output reg test failed. 
#RDBK_REG_FAIL = 323     ; internal Read back reg test failed. 
#FUNCTION_NOT_IMPLEMENTED = 324
#BAD_RTD_CONVERSION = 325     ; Overflow in RTD calculation 
#NO_PCI_BIOS = 326     ; PCI BIOS not present in the PC 
#BAD_PCI_INDEX = 327     ; Invalid PCI board index passed To PCI BIOS 
#NO_PCI_BOARD	=328		; Can't detact specified PCI board 
#PCI_ASSIGN_FAILED	=	329		; PCI resource assignment failed 
#PCI_NO_ADDRESS	= 330     ; No PCI address returned 
#PCI_NO_IRQ =	331		; No PCI IRQ returned 
#CANT_INIT_ISR_INFO	=	332		; IOCTL call failed on VDD_API_INIT_ISR_INFO 
#CANT_PASS_USER_BUFFER =	333		; IOCTL call failed on VDD_API_PASS_USER_BUFFER 
#CANT_INSTALL_INT = 334		; IOCTL call failed on VDD_API_INSTALL_INT 
#CANT_UNINSTALL_INT	= 335		; IOCTL call failed on VDD_API_UNINSTALL_INT 
#CANT_START_DMA	=  336		; IOCTL call failed on VDD_API_START_DMA 
#CANT_GET_STATUS = 337		; IOCTL call failed on VDD_API_GET_STATUS 
#CANT_GET_PRINT_PORT	=	338		; IOCTL call failed on VDD_API_GET_PRINT_PORT 
#CANT_MAP_PCM_CIS	=	339		; IOCTL call failed on VDD_API_MAP_PCM_CIS 
#CANT_GET_PCM_CFG  =  340     ; IOCTL call failed on VDD_API_GET_PCM_CFG 
#CANT_GET_PCM_CCSR	=	341		; IOCTL call failed on VDD_API_GET_PCM_CCSR 
#CANT_GET_PCI_INFO	=	342		; IOCTL call failed on VDD_API_GET_PCI_INFO 

; DOS errors are remapped by adding DOS_ERR_OFFSET To them 
#DOS_ERR_OFFSET =	500

; These are the commonly occurring remapped DOS error codes 
#DOSBADFUNC  =  501
#DOSFILENOTFOUND = 502
#DOSPATHNOTFOUND  = 503
#DOSNOHANDLES = 504
#DOSACCESSDENIED = 505
#DOSINVALIDHANDLE =  506
#DOSNOMEMORY = 507
#DOSBADDRIVE = 515
#DOSTOOMANYFILES = 518
#DOSWRITEPROTECT = 519
#DOSDRIVENOTREADY = 521
#DOSSEEKERROR = 525
#DOSWRITEFAULT = 529
#DOSREADFAULT = 530
#DOSGENERALFAULT = 531

; Windows internal error codes 
#WIN_CANNOT_ENABLE_INT	= 603
#WIN_CANNOT_DISABLE_INT =605
#	WIN_CANT_PAGE_LOCK_BUFFER	= 606
#NO_PCM_CARD	=	630

; Maximum length of error string 
#ERRSTRLEN  =  256

; Maximum length of board name 
#BOARDNAMELEN =  25

; Status values 
#IDLE =  0
#RUNNING = 1


; Option Flags 
#FOREGROUND = $0000    ; Run in foreground, don't return till done 
#BACKGROUND = $0001    ; Run in background, Return immediately 

#SINGLEEXEC = $0000    ; One execution 
#CONTINUOUS = $0002    ; Run continuously Until cbstop() called 

#TIMED = $0000    ; Time conversions with internal clock 
#EXTCLOCK = $0004    ; Time conversions with external clock 

#NOCONVERTDATA = $0000    ; Return raw Data 
#CONVERTDATA = $0008    ; Return converted A/D Data 

#NODTCONNECT = $0000    ; Disable DT Connect 
#DTCONNECT = $0010    ; Enable DT Connect 

#DEFAULTIO = $0000    ; Use whatever makes sense For board 
#SINGLEIO = $0020    ; Interrupt per A/D conversion 
#DMAIO = $0040    ; DMA transfer 
#BLOCKIO = $0060    ; Interrupt per block of conversions 
#BURSTIO = $10000    ; Transfer upon scan completion 
#RETRIGMODE = $20000    ; Re-arm trigger upon acquiring trigger count samples 

#BYTEXFER = $0000    ; Digital IN/OUT a byte at a time 
#WORDXFER = $0100    ; Digital IN/OUT a word at a time 

#INDIVIDUAL = $0000    ; Individual D/A output 
#SIMULTANEOUS = $0200    ; Simultaneous D/A output 

#FILTER = $0000    ; Filter thermocouple inputs 
#NOFILTER    =     $0400    ; Disable filtering For thermocouple 

#NORMMEMORY = $0000    ; Return Data To Data array 
#EXTMEMORY = $0800    ; Send Data To memory board ia DT-Connect 

#BURSTMODE = $1000    ; Enable burst mode 

#NOTODINTS = $2000    ; Disbale time-of-day interrupts 

#EXTTRIGGER = $4000     ; A/D is triggered externally 

#NOCALIBRATEDATA = $8000    ; Return uncalibrated PCM Data 
#CALIBRATEDATA  =  $0000    ; Return calibrated PCM A/D Data 

#ENABLED = 1
#DISABLED  = 0

#UPDATEIMMEDIATE = 0
#UPDATEONCOMMAND = 1

; Arguments that are used in a particular function call should be set
  ; To NOTUSED 
#NOTUSED =  -1


; types of error reporting 
#DONTPRINT = 0
#PRINTWARNINGS = 1
#PRINTFATAL = 2
#PRINTALL = 3

; types of error handling 
#DONTSTOP = 0
#STOPFATAL = 1
#STOPALL = 2

; Types of digital input ports 
#DIGITALOUT = 1
#DIGITALIN = 2

; DT Modes For cbMemSetDTMode() 
#DTIN = 0
#DTOUT = 2

#FROMHERE  = -1       ; Read/write from current position 
#GETFIRST =  -2      ; Get first item in list 
#GETNEXT = -3      ; Get Next item in list 

; Temperature scales 
#CELSIUS = 0
#FAHRENHEIT = 1
#KELVIN = 2
#VOLTS	= 4		; special scale For DAS-TC boards 
#NOSCALE	= 5

; Types of digital I/O Ports 
#AUXPORT = 1
#FIRSTPORTA = 10
#FIRSTPORTB = 11
#FIRSTPORTCL = 12
#FIRSTPORTCH = 13
#SECONDPORTA = 14
#SECONDPORTB = 15
#SECONDPORTCL = 16
#SECONDPORTCH = 17
#THIRDPORTA = 18
#THIRDPORTB = 19
#THIRDPORTCL = 20
#THIRDPORTCH = 21
#FOURTHPORTA = 22
#FOURTHPORTB = 23
#FOURTHPORTCL = 24
#FOURTHPORTCH = 25
#FIFTHPORTA = 26
#FIFTHPORTB = 27
#FIFTHPORTCL = 28
#FIFTHPORTCH = 29
#SIXTHPORTA  = 30
#SIXTHPORTB = 31
#SIXTHPORTCL = 32
#SIXTHPORTCH = 33
#SEVENTHPORTA = 34
#SEVENTHPORTB = 35
#SEVENTHPORTCL = 36
#SEVENTHPORTCH = 37
#EIGHTHPORTA  = 38
#EIGHTHPORTB  = 39
#EIGHTHPORTCL = 40
#EIGHTHPORTCH = 41

; Selectable analog input modes 
#RSE = $1000      ; Referenced Single-Ended 
#NRSE = $2000      ; Non-Referenced Single-Ended 
#DIFF = $4000      ; Differential 


; Selectable A/D Ranges codes 
#BIP20VOLTS = 15              ; -20 To +20 Volts 
#BIP10VOLTS = 1              ; -10 To +10 Volts 
#BIP5VOLTS = 0              ; -5 To +5 Volts 
#BIP4VOLTS = 16             ; -4 To + 4 Volts 
#BIP2PT5VOLTS = 2              ; -2.5 To +2.5 Volts 
#BIP2VOLTS = 14             ; -2.0 To +2.0 Volts 
#BIP1PT25VOLTS = 3              ; -1.25 To +1.25 Volts 
#BIP1VOLTS = 4              ; -1 To +1 Volts 
#BIPPT625VOLTS = 5              ; -.625 To +.625 Volts 
#BIPPT5VOLTS = 6              ; -.5 To +.5 Volts 
#BIPPT25VOLTS = 12              ; -0.25 To +0.25 Volts 
#BIPPT2VOLTS = 13              ; -0.2 To +0.2 Volts 
#BIPPT1VOLTS = 7              ; -.1 To +.1 Volts 
#BIPPT05VOLTS = 8              ; -.05 To +.05 Volts 
#BIPPT01VOLTS = 9              ; -.01 To +.01 Volts 
#BIPPT005VOLTS = 10             ; -.005 To +.005 Volts 
#BIP1PT67VOLTS = 11             ; -1.67 To +1.67 Volts 

#UNI10VOLTS = 100            ; 0 To 10 Volts
#UNI5VOLTS = 101            ; 0 To 5 Volts 
#UNI4VOLTS = 114            ; 0 To 4 Volts 
#UNI2PT5VOLTS = 102            ; 0 To 2.5 Volts 
#UNI2VOLTS = 103            ; 0 To 2 Volts 
#UNI1PT67VOLTS = 109            ; 0 To 1.67 Volts 
#UNI1PT25VOLTS = 104            ; 0 To 1.25 Volts 
#UNI1VOLTS = 105            ; 0 To 1 Volt 
#UNIPT5VOLTS = 110            ; 0 To .5 Volt 
#UNIPT25VOLTS = 111            ; 0 To 0.25 Volt 
#UNIPT2VOLTS = 112            ; 0 To .2 Volt 
#UNIPT1VOLTS = 106            ; 0 To .1 Volt 
#UNIPT05VOLTS = 113            ; 0 To .05 Volt 
#UNIPT02VOLTS = 108            ; 0 To .02 Volt
#UNIPT01VOLTS = 107            ; 0 To .01 Volt

#MA4TO20 = 200            ; 4 To 20 ma 
#MA2TO10 = 201            ; 2 To 10 ma 
#MA1TO5 =   202            ; 1 To 5 ma 
#MAPT5TO2PT5 = 203            ; .5 To 2.5 ma 
#MA0TO20 = 204            ; 0 To 20 ma 

#UNIPOLAR	= 300
#BIPOLAR	= 301

; Types of D/A    
#ADDA1= 0
#ADDA2 = 1

; 8536 counter output 1 control 
#NOTLINKED = 0
#GATECTR2 =  1
#TRIGCTR2 = 2
#INCTR2 = 3

; Types of 8254 counter configurations 
#HIGHONLASTCOUNT = 0
#ONESHOT = 1
#RATEGENERATOR = 2
#SQUAREWAVE = 3
#SOFTWARESTROBE = 4
#HARDWARESTROBE = 5

; Where To reload from For 9513 counters 
#LOADREG = 0
#LOADANDHOLDREG = 1

; Counter recycle modes For 9513 And 8536 
#ONETIME = 0
#RECYCLE = 1

; Direction of counting For 9513 counters 
#COUNTDOWN = 0
#COUNTUP = 1

; Types of count detection For 9513 counters 
#POSITIVEEDGE = 0
#NEGATIVEEDGE = 1

; Counter output control 
#ALWAYSLOW = 0       ; 9513 
#HIGHPULSEONTC = 1       ; 9513 And 8536 
#TOGGLEONTC = 2       ; 9513 And 8536 
#DISCONNECTED = 4       ; 9513 
#LOWPULSEONTC = 5       ; 9513 
#HIGHUNTILTC = 6       ; 8536 

; 9513 Counter input sources 
#TCPREVCTR = 0
#CTRINPUT1 = 1
#CTRINPUT2 = 2
#CTRINPUT3 = 3
#CTRINPUT4 = 4
#CTRINPUT5 = 5
#GATE1 =  6
#GATE2 = 7
#GATE3 = 8
#GATE4 = 9
#GATE5 = 10
#FREQ1 = 11
#FREQ2 = 12
#FREQ3 = 13
#FREQ4 = 14
#FREQ5 = 15
#CTRINPUT6 = 101
#CTRINPUT7 = 102
#CTRINPUT8 = 103
#CTRINPUT9 = 104
#CTRINPUT10 = 105
#GATE6 = 106
#GATE7 = 107
#GATE8 = 108
#GATE9 = 109
#GATE10 = 110
#FREQ6 = 111
#FREQ7 = 112
#FREQ8 = 113
#FREQ9 = 114
#FREQ10 = 115
#CTRINPUT11 = 201
#CTRINPUT12 = 202
#CTRINPUT13 = 203
#CTRINPUT14 = 204
#CTRINPUT15 = 205
#GATE11 = 206
#GATE12 = 207
#GATE13 = 208
#GATE14 = 209
#GATE15 = 210
#FREQ11 = 211
#FREQ12 = 212
#FREQ13 = 213
#FREQ14 = 214
#FREQ15 = 215
#CTRINPUT16 = 301
#CTRINPUT17 = 302
#CTRINPUT18 = 303
#CTRINPUT19 = 304
#CTRINPUT20 = 305
#GATE16 = 306
#GATE17 = 307
#GATE18 = 308
#GATE19 = 309
#GATE20 = 310
#FREQ16  =  311
#FREQ17 = 312
#FREQ18 = 313
#FREQ19 = 314
#FREQ20 = 315

; 9513 Counter registers 
#LOADREG1 = 1
#LOADREG2 = 2
#LOADREG3 = 3
#LOADREG4 = 4
#LOADREG5 = 5
#LOADREG6 = 6
#LOADREG7 = 7
#LOADREG8 = 8
#LOADREG9 = 9
#LOADREG10 = 10
#LOADREG11 = 11
#LOADREG12 = 12
#LOADREG13 = 13
#LOADREG14 = 14
#LOADREG15 = 15
#LOADREG16 = 16
#LOADREG17 = 17
#LOADREG18 = 18
#LOADREG19 = 19
#LOADREG20 = 20
#HOLDREG1 =  101
#HOLDREG2 =  102
#HOLDREG3 =  103
#HOLDREG4 =  104
#HOLDREG5 =  105
#HOLDREG6 =  106
#HOLDREG7 =  107
#HOLDREG8 =  108
#HOLDREG9 =  109
#HOLDREG10 = 110
#HOLDREG11 = 111
#HOLDREG12 = 112
#HOLDREG13 = 113
#HOLDREG14 = 114
#HOLDREG15 = 115
#HOLDREG16 = 116
#HOLDREG17 = 117
#HOLDREG18 = 118
#HOLDREG19 = 119
#HOLDREG20 = 120 

#ALARM1CHIP1 = 201
#ALARM2CHIP1 = 202
#ALARM1CHIP2 = 301
#ALARM2CHIP2 = 302
#ALARM1CHIP3 = 401
#ALARM2CHIP3 = 402
#ALARM1CHIP4 = 501
#ALARM2CHIP4 = 502


; LS7266 Counter registers 
#COUNT1 = 601
#COUNT2 = 602
#COUNT3 = 603
#COUNT4 = 604

#PRESET1 = 701
#PRESET2 = 702
#PRESET3 = 703
#PRESET4 = 704

#PRESCALER1 = 801
#PRESCALER2 = 802
#PRESCALER3 = 803
#PRESCALER4 = 804


; Counter Gate Control 
#NOGATE = 0
#AHLTCPREVCTR = 1
#AHLNEXTGATE = 2
#AHLPREVGATE = 3
#AHLGATE = 4
#ALLGATE = 5
#AHEGATE = 6
#ALEGATE = 7

; 7266 Counter Quadrature values 
#NO_QUAD = 0
#X1_QUAD = 1
#X2_QUAD = 2
#X4_QUAD = 4

; 7266 Counter Counting Modes 
#NORMAL_MODE = 0
#RANGE_LIMIT = 1
#NO_RECYCLE = 2
#MODULO_N = 3

; 7266 Counter encodings 
#BCD_ENCODING	= 1
#BINARY_ENCODING	= 2

; 7266 Counter Index Modes 
#INDEX_DISABLED = 0
#LOAD_CTR  =  1
#LOAD_OUT_LATCH = 2
#RESET_CTR = 3

; 7266 Counter Flag Pins 
#CARRY_BORROW = 1
#COMPARE_BORROW  = 2
#CARRYBORROW_UPDOWN = 3
#INDEX_ERROR = 4

; Counter status bits 
#C_UNDERFLOW = $0001
#C_OVERFLOW = $0002
#C_COMPARE = $0004
#C_SIGN = $0008
#C_ERROR = $0010
#C_UP_DOWN =  $0020
#C_INDEX = $0040

; Types of triggers 
#TRIGABOVE =  0
#TRIGBELOW =  1
#GATE_NEG_HYS = 2
#GATE_POS_HYS = 3
#GATE_ABOVE = 4
#GATE_BELOW = 5
#GATE_IN_WINDOW = 6
#GATE_OUT_WINDOW = 7
#GATE_HIGH = 8
#GATE_LOW = 9
#TRIG_HIGH = 10
#TRIG_LOW = 11
#TRIG_POS_EDGE = 12
#TRIG_NEG_EDGE = 13


; Signal I/O Configuration Parameters 
; --Connections 
#AUXIN0 =  $01           
#AUXIN1 = $02
#AUXIN2 = $04
#AUXIN3 = $08
#AUXIN4 = $10
#AUXIN5 = $20
#AUXOUT0 = $0100
#AUXOUT1 = $0200
#AUXOUT2  = $0400

#DS_CONNECTOR = $01000

#MAX_CONNECTIONS = 4     ; maximum number connections per output signal type 


; --Signal Types 
#ADC_CONVERT =    $0001   
#ADC_GATE   = $0004
#ADC_STOP_TRIG =  $0008
#ADC_TB_SRC    =  $0010
#ADC_SCANCLK    = $0020
#ADC_SSH       =  $0040
#ADC_STARTSCAN =  $0080
#ADC_SCAN_STOP  = $0100

#DAC_UPDATE    =  $0200
#DAC_TB_SRC    =  $0400
#DAC_START_TRIG = $0800

#SYNC_CLK      =  $1000

#CTR1_CLK      =  $2000
#CTR2_CLK      =  $4000

#DGND        =  $8000

; -- Signal Direction 
#SIGNAL_IN   =    2
#SIGNAL_OUT =     4

; -- Signal Polarity 
#INVERTED     =   1
#NONINVERTED =    0


; Types of configuration information 
#GLOBALINFO      =   1
#BOARDINFO        =  2
#DIGITALINFO     =   3
#COUNTERINFO    =    4
#EXPANSIONINFO =     5
#MISCINFO         =  6
#EXPINFOARRAY	 =  7
#MEMINFO         =   8

; Types of Global configuration information 
#GIVERSION       =   36      ; Config file format version number 
#GINUMBOARDS   =     38      ; Maximum number of boards 
#GINUMEXPBOARDS  =   40      ; Maximum number of expansion boards 

; Types of board configuration information 
#BIBASEADR      =     0       ; Base Address 
#BIBOARDTYPE     =    1       ; Board Type ($101 - $7FFF) 
#BIINTLEVEL       =   2       ; Interrupt level 
#BIDMACHAN      =     3       ; DMA channel 
#BIINITIALIZED     =  4       ; TRUE Or FALSE 
#BICLOCK        =     5       ; Clock freq (1, 10 Or bus) 
#BIRANGE        =     6       ; Switch selectable range 
#BINUMADCHANS  =      7       ; Number of A/D channels 
#BIUSESEXPS       =   8       ; Supports expansion boards TRUE/FALSE 
#BIDINUMDEVS     =    9       ; Number of digital devices 
#BIDIDEVNUM       =   10      ; Index into digital information 
#BICINUMDEVS     =    11      ; Number of counter devices 
#BICIDEVNUM      =    12      ; Index into counter information 
#BINUMDACHANS   =     13      ; Number of D/A channels 
#BIWAITSTATE     =    14      ; Wait state enabled TRUE/FALSE 
#BINUMIOPORTS    =   15      ; I/O address space used by board 
#BIPARENTBOARD   =    16      ; Board number of parent board 
#BIDTBOARD        =   17      ; Board number of connected DT board 
#BINUMEXPS        =   18      ; Number of EXP boards installed 

; NEW CONFIG ITEMS For 32 bit library 
#BINOITEM         =    99      ; NO-OP Return no Data And returns DEVELOPMENT_OPTION error code 
#BIDACSAMPLEHOLD   =   100     ; DAC sample And hold jumper state 
#BIDIOENABLE    =      101     ; DIO enable 
#BI330OPMODE     =     102     ; DAS16-330 operation mode (ENHANCED/COMPATIBLE) 
#BI9513CHIPNSRC   =    103     ; 9513 HD CTR source (DevNo = ctr no.)
#BICTR0SRC          =  104     ; CTR 0 source 
#BICTR1SRC     =       105     ; CTR 1 source 
#BICTR2SRC       =     106     ; CTR 2 source 
#BIPACERCTR0SRC  =     107     ; Pacer CTR 0 source 
#BIDAC0VREF       =    108     ; DAC 0 voltage reference 
#BIDAC1VREF =          109     ; DAC 1 voltage reference 
#BIINTP2LEVEL   =      110     ; P2 interrupt For CTR10 And CTR20HD 
#BIWAITSTATEP2   =     111     ; Wait state 2 
#BIADPOLARITY    =     112     ; DAS1600 Polarity state(UNI/BI) 
#BITRIGEDGE       =    113     ; DAS1600 trigger edge(RISING/FALLING) 
#BIDACRANGE        =   114     ; DAC Range (DevNo is channel) 
#BIDACUPDATE        =  115     ; DAC Update (INDIVIDUAL/SIMULTANEOUS) (DevNo) 
#BIDACINSTALLED =      116     ; DAC Installed 
#BIADCFG       =       117     ; AD Config (SE/DIFF) (DevNo) 
#BIADINPUTMODE  =      118     ; AD Input Mode (Voltage/Current) 
#BIDACPOLARITY     =   119     ; DAC Startup state (UNI/BI) 
#BITEMPMODE   =        120     ; DAS-TEMP Mode (NORMAL/CALIBRATE) 
#BITEMPREJFREQ =       121     ; DAS-TEMP reject frequency 
#BIDISOFILTER  =       122     ; DISO48 line filter (EN/DIS) (DevNo) 
#BIINT32SRC     =      123     ; INT32 Intr Src 
#BIINT32PRIORITY =     124     ; INT32 Intr Priority 
#BIMEMSIZE     =       125     ; MEGA-FIFO module size 
#BIMEMCOUNT   =        126     ; MEGA-FIFO #of modules 
#BIPRNPORT     =       127     ; PPIO series printer port 
#BIPRNDELAY     =      128     ; PPIO series printer port delay 
#BIPPIODIO      =      129     ; PPIO digital line I/O state 
#BICTR3SRC      =      130     ; CTR 3 source 
#BICTR4SRC      =      131     ; CTR 4 source 
#BICTR5SRC     =       132     ; CTR 5 source 
#BICTRINTSRC    =      133     ; PCM-D24/CTR3 interrupt source 
#BICTRLINKING    =     134     ; PCM-D24/CTR3 ctr linking 
#BISBX0BOARDNUM  =     135     ; SBX #0 board number 
#BISBX0ADDRESS   =     136     ; SBX #0 address 
#BISBX0DMACHAN    =    137     ; SBX #0 DMA channel 
#BISBX0INTLEVEL0   =   138     ; SBX #0 Int Level 0 
#BISBX0INTLEVEL1    =  139     ; SBX #0 Int Level 1 
#BISBX1BOARDNUM   =    140     ; SBX #0 board number 
#BISBX1ADDRESS    =    141     ; SBX #0 address 
#BISBX1DMACHAN   =     142     ; SBX #0 DMA channel 
#BISBX1INTLEVEL0  =    143     ; SBX #0 Int Level 0 
#BISBX1INTLEVEL1  =    144     ; SBX #0 Int Level 1 
#BISBXBUSWIDTH   =     145     ; SBX Bus width 
#BICALFACTOR1   =      146     ; DAS08/Jr Cal factor 
#BICALFACTOR2   =      147     ; DAS08/Jr Cal factor 
#BIDACTRIG       =     148     ; PCI-DAS1602 Dac trig edge 
#BICHANCFG     =       149     ; 801/802 chan config (devno =ch) 
#BIPROTOCOL     =      150     ; 422 protocol 
#BICOMADDR2    =       151     ; dual 422 2nd address 
#BICTSRTS1       =     152     ; dual 422 cts/rts1 
#BICTSRTS2      =      153     ; dual 422 cts/rts2 
#BICTRLLINES     =     154     ; pcm com 422 ctrl lines 
#BIWAITSTATEP1  =      155     ; Wait state P1 
#BIINTP1LEVEL    =     156     ; P1 interrupt For CTR10 And CTR20HD 
#BICTR6SRC      =      157     ; CTR 6 source 
#BICTR7SRC       =     158     ; CTR 7 source 
#BICTR8SRC     =       159     ; CTR 8 source 
#BICTR9SRC       =     160     ; CTR 9 source 
#BICTR10SRC     =      161     ; CTR 10 source 
#BICTR11SRC      =     162     ; CTR 11 source 
#BICTR12SRC      =     163     ; CTR 12 source 
#BICTR13SRC     =      164     ; CTR 13 source 
#BICTR14SRC     =      165     ; CTR 14 source 
#BITCGLOBALAVG	=	  166	 ; DASTC Global average 
#BITCCJCSTATE		 =    167	 ; DASTC CJC State(=ON Or OFF) 
#BITCCHANRANGE	=	  168	 ; DASTC Channel Gain 
#BITCCHANTYPE		 =    169	 ; DASTC Channel thermocouple type 
#BITCFWVERSION		=  170	 ; DASTC Firmware Version 
#BIFWVERSION      =    170 ; Firmware Version 
#BIPHACFG        =     180     ; Quad PhaseA config (devNo =ch) 
#BIPHBCFG      =       190     ; Quad PhaseB config (devNo =ch) 
#BIINDEXCFG     =      200     ; Quad Index Ref config (devNo =ch) 
#BISLOTNUM      =      201     ; PCI/PCM card slot number 
#BIAIWAVETYPE   =      202     ; analog input wave type (For demo board) 
#BIPWRUPSTATE   =      203     ; DDA06 pwr up state jumper 
#BIIRQCONNECT    =     204     ; DAS08 pin6 To 24 jumper 
#BITRIGPOLARITY	=	  205 	 ; PCM DAS16xx Trig Polarity 
#BICTLRNUM       =     206     ; MetraBus controller board number 
#BIPWRJMPR       =     207     ; MetraBus controller board Pwr jumper 
#BINUMTEMPCHANS  =     208     ; Number of Temperature channels 
#BIADTRIGSRC     =     209     ; Analog trigger source 
#BIBNCSRC        =     210     ; BNC source  
#BIBNCTHRESHOLD =      211     ; BNC Threshold 2.5V Or 0.0V 
#BIBURSTMODE      =    212     ; Board supports BURSTMODE 
#BIDITHERON      =     213     ; A/D Dithering enabled 
#BISERIALNUM     =     214    ; Serial Number For USB boards 
#BIDACUPDATEMODE  =    215    ; Update immediately Or upon AOUPDATE command 
#BIDACUPDATECMD    =   216    ; Issue D/A UPDATE command 
#BIDACSTARTUP   =      217    ; Store last value written For startup  
#BIADTRIGCOUNT    =    219    ; Number of samples To acquire per trigger in retrigger mode 
#BIADFIFOSIZE    =     220    ; Set FIFO override size For retrigger mode 
#BIADSOURCE       =    221    ; Set source To internal reference Or external connector(-1) 
#BICALOUTPUT     =     222    ; CAL output pin setting  
#BISRCADPACER    =     223    ; Source A/D Pacer output 
#BIMFGSERIALNUM   =    224    ; Manufacturers 8-byte serial number 
#BIPCIREVID     =      225    ; Revision Number stored in PCI header 
#BIDIALARMMASK  =      230

; Type of digital device information 
#DIBASEADR     =      0       ; Base address 
#DIINITIALIZED    =   1       ; TRUE Or FALSE 
#DIDEVTYPE      =     2       ; AUXPORT Or xPORTA - CH 
#DIMASK         =     3       ; Bit mask For this port 
#DIREADWRITE =        4       ; Read required before write 
#DICONFIG          =  5      ; Current configuration 
#DINUMBITS          = 6      ; Number of bits in port 
#DICURVAL   =         7      ; Current value of outputs 
#DIINMASK      =      8      ; Input bit mask For port 
#DIOUTMASK    =       9      ; Output bit mask For port 

; Types of counter device information 
#CIBASEADR  =         0       ; Base address 
#CIINITIALIZED  =     1       ; TRUE Or FALSE 
#CICTRTYPE       =    2       ; Counter type 8254, 9513 Or 8536 
#CICTRNUM   =         3       ; Which counter on chip 
#CICONFIGBYTE =       4       ; Configuration byte 

; Types of expansion board information 
#XIBOARDTYPE  =       0       ; Board type 
#XIMUX_AD_CHAN1 =     1       ; 0 - 7 
#XIMUX_AD_CHAN2   =   2       ; 0 - 7 Or NOTUSED 
#XIRANGE1     =       3       ; Range (gain) of low 16 chans 
#XIRANGE2    =        4       ; Range (gain) of high 16 chans 
#XICJCCHAN    =       5       ; TYPE_8254_CTR Or TYPE_9513_CTR 
#XITHERMTYPE  =       6       ; TYPEJ, TYPEK, TYPET, TYPEE, TYPER, Or TYPES
#XINUMEXPCHANS =      7       ; Number of expansion channels on board
#XIPARENTBOARD  =     8       ; Board number of parent A/D board
#XISPARE0     =       9       ; 16 words of misc options 

#XI5VOLTSOURCE =      100     ; ICAL Data - 5 volt source 
#XICHANCONFIG   =     101     ; exp Data - chan config 2/4 Or 3-wire devNo=chan 
#XIVSOURCE     =      102     ; ICAL Data - voltage source
#XIVSELECT     =      103     ; ICAL Data - voltage Select
#XICHGAIN   =         104     ; exp Data - individual ch gain 
#XIGND          =     105     ; ICAL Data - exp grounding 
#XIVADCHAN  =         106     ; ICAL Data - Vexe A/D chan 
#XIRESISTANCE =       107     ; exp Data - resistance @0 (devNo =ch) 
#XIFACGAIN    =       108	    ; ICAL Data - RTD factory gain 
#XICUSTOMGAIN =       109 	; ICAL Data - RTD custom gain 
#XICHCUSTOM    =      110		; ICAL Data - RTD custom gain setting
#XIIEXE  =            111 	; ICAL Data - RTD Iexe 

; Types of memory board information 
#MIBASEADR =          100 	; mem Data - base address 
#MIINTLEVEL    =      101 	; mem Data - intr level 
#MIMEMSIZE		=    102		; MEGA-FIFO module size 
#MIMEMCOUNT	=	    103		; MEGA-FIFO #of modules 



; Types of events 
#ON_SCAN_ERROR		=		$0001
#ON_EXTERNAL_INTERRUPT	=	$0002
#ON_PRETRIGGER		=		$0004
#ON_DATA_AVAILABLE	=		$0008

#ON_END_OF_AI_SCAN	=		$0010
#ON_END_OF_AO_SCAN	=		$0020
#ON_CHANGE_DI     =        $0040
#ALL_EVENT_TYPES  =        $ffff

#NUM_EVENT_TYPES	=	6
#MAX_NUM_EVENT_TYPES = 32

#SCAN_ERROR_IDX		=		0
#EXTERNAL_INTERRUPT_IDX	= 1
#PRETRIGGER_IDX		=		2
#DATA_AVAILABLE_IDX	=		3
#END_OF_AI_IDX		=		4
#END_OF_AO_IDX	=			5

; #ifndef USHORT
;   typedef unsigned short USHORT;
; #endif
; 
; #EXTCCONV 	__stdcall



; ;
;  * Universal Library Function Prototypes.
;  * 3 flavors: WIN32, WIN16, LabWindows/CVI
;  *                                    
;  

; #if !defined (NT_DRIVER) && ! defined (WIN95_DRIVER)
; #ifndef _NI_mswin16_
; 
; #if defined (__cplusplus)
;     extern "C"
;     {
; #endif  
; 
; #if defined (_WIN32)
; 	; Win32 prototypes 
; 
; #ifdef EVENTCALLBACK
; #undef EVENTCALLBACK
; #endif

; Globale Variablen deklarieren
Global AddBoardToList.l
Global RemoveBoardFromList.l
Global cbACalibrateData.l
Global cbAConvertData.l
Global cbAConvertPretrigData.l
Global cbAIGetPCMCalCoeffs.l
Global cbAIn.l
Global cbAInScan.l
Global cbALoadQueue.l
Global cbAOut.l
Global cbAOutScan.l
Global cbAPretrig.l
Global cbATrig.l
Global cbAddBoard.l
Global cbAddExp.l
Global cbAddMem.l
Global cbC7266Config.l
Global cbC8254Config.l
Global cbC8536Config.l
Global cbC8536Init.l
Global cbC9513Config.l
Global cbC9513Init.l
Global cbCFreqIn.l
Global cbCIn.l
Global cbCIn32.l
Global cbCLoad.l
Global cbCLoad32.l
Global cbCStatus.l
Global cbCStoreOnInt.l
Global cbClaimNetworkDevice.l
Global cbCreateBoard.l
Global cbDBitIn.l
Global cbDBitOut.l
Global cbDConfigBit.l
Global cbDConfigPort.l
Global cbDIn.l
Global cbDInScan.l
Global cbDOut.l
Global cbDOutScan.l
Global cbDeclareRevision.l
Global cbDeleteBoard.l
Global cbDisableEvent.l
Global cbEnableEvent.l
Global cbErrHandling.l
Global cbFileAInScan.l
Global cbFileGetInfo.l
Global cbFilePretrig.l
Global cbFileRead.l
Global cbFlashLED.l
Global cbFromEngUnits.l
Global cbGetBoardName.l
Global cbGetCalCoeff.l
Global cbGetConfig.l
Global cbGetErrMsg.l
Global cbGetIOStatus.l
Global cbGetRevision.l
Global cbGetSignal.l
Global cbGetStatus.l
Global cbInByte.l

Global cbInDoubleWord.l
Global cbInWord.l
Global cbLoadConfig.l
Global cbMemRead.l
Global cbMemReadPretrig.l
Global cbMemReset.l
Global cbMemWrite.l
Global cbOutByte.l
Global cbOutDoubleWord.l
Global cbOutWord.l
Global cbRS485.l
Global cbSaveConfig.l
Global cbSelectSignal.l
Global cbSetCalCoeff.l
Global cbSetConfig.l
Global cbSetTrigger.l
Global cbStopBackground.l
Global cbStopIOBackground.l
Global cbTIn.l

Global cbTInScan.l
Global cbToEngUnits.l
Global cbWinArrayToBuf.l
Global cbWinBufAlloc.l
Global cbWinBufFree.l
Global cbWinBufFromEngUnits.l
Global cbWinBufToArray.l
Global cbWinBufToEngUnits.l
Global lvPromptInstaCAL.l

; Init-Funktion
ProcedureDLL cbw32_Init(); cbw32_Init()
  Shared DLL.l
  DLL = LoadLibrary_("cbw32.dll")
  If DLL
    AddBoardToList = GetProcAddress_(DLL, "_AddBoardToList@8")
    RemoveBoardFromList = GetProcAddress_(DLL, "_RemoveBoardFromList@4")
    cbACalibrateData = GetProcAddress_(DLL, "cbACalibrateData")
    cbAConvertData = GetProcAddress_(DLL, "cbAConvertData")
    cbAConvertPretrigData = GetProcAddress_(DLL, "cbAConvertPretrigData")
    cbAIGetPCMCalCoeffs = GetProcAddress_(DLL, "cbAIGetPCMCalCoeffs")
    cbAIn = GetProcAddress_(DLL, "cbAIn")
    cbAInScan = GetProcAddress_(DLL, "cbAInScan")
    cbALoadQueue = GetProcAddress_(DLL, "cbALoadQueue")
    cbAOut = GetProcAddress_(DLL, "cbAOut")
    cbAOutScan = GetProcAddress_(DLL, "cbAOutScan")
    cbAPretrig = GetProcAddress_(DLL, "cbAPretrig")
    cbATrig = GetProcAddress_(DLL, "cbATrig")
    cbAddBoard = GetProcAddress_(DLL, "cbAddBoard")
    cbAddExp = GetProcAddress_(DLL, "cbAddExp")
    cbAddMem = GetProcAddress_(DLL, "cbAddMem")
    cbC7266Config = GetProcAddress_(DLL, "cbC7266Config")
    cbC8254Config = GetProcAddress_(DLL, "cbC8254Config")
    cbC8536Config = GetProcAddress_(DLL, "cbC8536Config")
    cbC8536Init = GetProcAddress_(DLL, "cbC8536Init")
    cbC9513Config = GetProcAddress_(DLL, "cbC9513Config")
    cbC9513Init = GetProcAddress_(DLL, "cbC9513Init")
    cbCFreqIn = GetProcAddress_(DLL, "cbCFreqIn")
    cbCIn = GetProcAddress_(DLL, "cbCIn")
    cbCIn32 = GetProcAddress_(DLL, "cbCIn32")
    cbCLoad = GetProcAddress_(DLL, "cbCLoad")
    cbCLoad32 = GetProcAddress_(DLL, "cbCLoad32")
    cbCStatus = GetProcAddress_(DLL, "cbCStatus")
    cbCStoreOnInt = GetProcAddress_(DLL, "cbCStoreOnInt")
    cbClaimNetworkDevice = GetProcAddress_(DLL, "cbClaimNetworkDevice")
    cbCreateBoard = GetProcAddress_(DLL, "cbCreateBoard")
    cbDBitIn = GetProcAddress_(DLL, "cbDBitIn")
    cbDBitOut = GetProcAddress_(DLL, "cbDBitOut")
    cbDConfigBit = GetProcAddress_(DLL, "cbDConfigBit")
    cbDConfigPort = GetProcAddress_(DLL, "cbDConfigPort")
    cbDIn = GetProcAddress_(DLL, "cbDIn")
    cbDInScan = GetProcAddress_(DLL, "cbDInScan")
    cbDOut = GetProcAddress_(DLL, "cbDOut")
    cbDOutScan = GetProcAddress_(DLL, "cbDOutScan")
    cbDeclareRevision = GetProcAddress_(DLL, "cbDeclareRevision")
    cbDeleteBoard = GetProcAddress_(DLL, "cbDeleteBoard")
    cbDisableEvent = GetProcAddress_(DLL, "cbDisableEvent")
    cbEnableEvent = GetProcAddress_(DLL, "cbEnableEvent")
    cbErrHandling = GetProcAddress_(DLL, "cbErrHandling")
    cbFileAInScan = GetProcAddress_(DLL, "cbFileAInScan")
    cbFileGetInfo = GetProcAddress_(DLL, "cbFileGetInfo")
    cbFilePretrig = GetProcAddress_(DLL, "cbFilePretrig")
    cbFileRead = GetProcAddress_(DLL, "cbFileRead")
    cbFlashLED = GetProcAddress_(DLL, "cbFlashLED")
    cbFromEngUnits = GetProcAddress_(DLL, "cbFromEngUnits")
    cbGetBoardName = GetProcAddress_(DLL, "cbGetBoardName")
    cbGetCalCoeff = GetProcAddress_(DLL, "cbGetCalCoeff")
    cbGetConfig = GetProcAddress_(DLL, "cbGetConfig")
    cbGetErrMsg = GetProcAddress_(DLL, "cbGetErrMsg")
    cbGetIOStatus = GetProcAddress_(DLL, "cbGetIOStatus")
    cbGetRevision = GetProcAddress_(DLL, "cbGetRevision")
    cbGetSignal = GetProcAddress_(DLL, "cbGetSignal")
    cbGetStatus = GetProcAddress_(DLL, "cbGetStatus")
    cbInByte = GetProcAddress_(DLL, "cbInByte")
    cbInDoubleWord = GetProcAddress_(DLL, "cbInDoubleWord")
    cbInWord = GetProcAddress_(DLL, "cbInWord")
    cbLoadConfig = GetProcAddress_(DLL, "cbLoadConfig")
    cbMemRead = GetProcAddress_(DLL, "cbMemRead")
    cbMemReadPretrig = GetProcAddress_(DLL, "cbMemReadPretrig")
    cbMemReset = GetProcAddress_(DLL, "cbMemReset")
    cbMemWrite = GetProcAddress_(DLL, "cbMemWrite")
    cbOutByte = GetProcAddress_(DLL, "cbOutByte")
    cbOutDoubleWord = GetProcAddress_(DLL, "cbOutDoubleWord")
    cbOutWord = GetProcAddress_(DLL, "cbOutWord")
    cbRS485 = GetProcAddress_(DLL, "cbRS485")
    cbSaveConfig = GetProcAddress_(DLL, "cbSaveConfig")
    cbSelectSignal = GetProcAddress_(DLL, "cbSelectSignal")
    cbSetCalCoeff = GetProcAddress_(DLL, "cbSetCalCoeff")
    cbSetConfig = GetProcAddress_(DLL, "cbSetConfig")
    cbSetTrigger = GetProcAddress_(DLL, "cbSetTrigger")
    cbStopBackground = GetProcAddress_(DLL, "cbStopBackground")
    cbStopIOBackground = GetProcAddress_(DLL, "cbStopIOBackground")
    cbTIn = GetProcAddress_(DLL, "cbTIn")
    cbTInScan = GetProcAddress_(DLL, "cbTInScan")
    cbToEngUnits = GetProcAddress_(DLL, "cbToEngUnits")
    cbWinArrayToBuf = GetProcAddress_(DLL, "cbWinArrayToBuf")
    cbWinBufAlloc = GetProcAddress_(DLL, "cbWinBufAlloc")
    cbWinBufFree = GetProcAddress_(DLL, "cbWinBufFree")
    cbWinBufFromEngUnits = GetProcAddress_(DLL, "cbWinBufFromEngUnits")
    cbWinBufToArray = GetProcAddress_(DLL, "cbWinBufToArray")
    cbWinBufToEngUnits = GetProcAddress_(DLL, "cbWinBufToEngUnits")
    lvPromptInstaCAL = GetProcAddress_(DLL, "lvPromptInstaCAL")
  EndIf
EndProcedure
; End-Funktion

ProcedureDLL cbw32_End(); cbw32_End()
  Shared DLL.l
  FreeLibrary_(DLL)
EndProcedure
; Allgemeine Funktionen
ProcedureDLL.l AddBoardToList(a.l,b.l)
  ProcedureReturn CallFunctionFast(AddBoardToList,a,b)
EndProcedure

ProcedureDLL.l RemoveBoardFromList(a.l)
  ProcedureReturn CallFunctionFast(RemoveBoardFromList,a)
EndProcedure

ProcedureDLL.l cbACalibrateData(a.l,b.l,c.l,d.l)
  ProcedureReturn CallFunctionFast(cbACalibrateData,a,b,c,d)
EndProcedure

ProcedureDLL.l cbAConvertData(a.l,b.l,c.l,d.l)
  ProcedureReturn CallFunctionFast(cbAConvertData,a,b,c,d)
EndProcedure

ProcedureDLL.l cbAConvertPretrigData(a.l,b.l,c.l,d.l,e.l)
  ProcedureReturn CallFunctionFast(cbAConvertPretrigData,a,b,c,d,e)
EndProcedure

ProcedureDLL.l cbAIGetPCMCalCoeffs(a.l,b.l,c.l,d.l,e.l)
  ProcedureReturn CallFunctionFast(cbAIGetPCMCalCoeffs,a,b,c,d,e)
EndProcedure

ProcedureDLL.l cbAIn(a.l,b.l,c.l,d.l)
  ProcedureReturn CallFunctionFast(cbAIn,a,b,c,d)
EndProcedure

ProcedureDLL.l cbAInScan(a.l,b.l,c.l,d.l,e.l,f.l,g.l,h.l)
  ProcedureReturn CallFunctionFast(cbAInScan,a,b,c,d,e,f,g,h)
EndProcedure

ProcedureDLL.l cbALoadQueue(a.l,b.l,c.l,d.l)
  ProcedureReturn CallFunctionFast(cbALoadQueue,a,b,c,d)
EndProcedure

ProcedureDLL.l cbAOut(a.l,b.l,c.l,d.l)
  ProcedureReturn CallFunctionFast(cbAOut,a,b,c,d)
EndProcedure

ProcedureDLL.l cbAOutScan(a.l,b.l,c.l,d.l,e.l,f.l,g.l,h.l)
  ProcedureReturn CallFunctionFast(cbAOutScan,a,b,c,d,e,f,g,h)
EndProcedure

ProcedureDLL.l cbAPretrig(a.l,b.l,c.l,d.l,e.l,f.l,g.l,h.l,i.l)
  ProcedureReturn CallFunctionFast(cbAPretrig,a,b,c,d,e,f,g,h,i)
EndProcedure

ProcedureDLL.l cbATrig(a.l,b.l,c.l,d.l,e.l,f.l)
  ProcedureReturn CallFunctionFast(cbATrig,a,b,c,d,e,f)

EndProcedure

ProcedureDLL.l cbAddBoard(a.l,b.l,c.l,d.l,e.l,f.l,g.l,h.l)
  ProcedureReturn CallFunctionFast(cbAddBoard,a,b,c,d,e,f,g,h)
EndProcedure

ProcedureDLL.l cbAddExp(a.l,b.l,c.l)
  ProcedureReturn CallFunctionFast(cbAddExp,a,b,c)
EndProcedure

ProcedureDLL.l cbAddMem(a.l,b.l,c.l,d.l,e.l,f.l)
  ProcedureReturn CallFunctionFast(cbAddMem,a,b,c,d,e,f)
EndProcedure

ProcedureDLL.l cbC7266Config(a.l,b.l,c.l,d.l,e.l,f.l,g.l,h.l,i.l)
  ProcedureReturn CallFunctionFast(cbC7266Config,a,b,c,d,e,f,g,h,i)
EndProcedure

ProcedureDLL.l cbC8254Config(a.l,b.l,c.l)
  ProcedureReturn CallFunctionFast(cbC8254Config,a,b,c)
EndProcedure

ProcedureDLL.l cbC8536Config(a.l,b.l,c.l,d.l,e.l)
  ProcedureReturn CallFunctionFast(cbC8536Config,a,b,c,d,e)
EndProcedure

ProcedureDLL.l cbC8536Init(a.l,b.l,c.l)
  ProcedureReturn CallFunctionFast(cbC8536Init,a,b,c)
EndProcedure

ProcedureDLL.l cbC9513Config(a.l,b.l,c.l,d.l,e.l,f.l,g.l,h.l,i.l,j.l,k.l)
  ProcedureReturn CallFunctionFast(cbC9513Config,a,b,c,d,e,f,g,h,i,j,k)
EndProcedure

ProcedureDLL.l cbC9513Init(a.l,b.l,c.l,d.l,e.l,f.l,g.l)
  ProcedureReturn CallFunctionFast(cbC9513Init,a,b,c,d,e,f,g)
EndProcedure

ProcedureDLL.l cbCFreqIn(a.l,b.l,c.l,d.l,e.l)
  ProcedureReturn CallFunctionFast(cbCFreqIn,a,b,c,d,e)
EndProcedure

ProcedureDLL.l cbCIn(BoardNum.l,CounterNum.l);cbCIn(BoardNum.l,PortNum.l,*DataValue.l)Rückgabe=LongWert
  ProcedureReturn CallFunctionFast(cbCIn,BoardNum,CounterNum,@Count.w)
EndProcedure

ProcedureDLL.l cbCIn32(BoardNum.l,CounterNum.l); cbCIn32(BoardNum.l,CounterNum.l,Count.l)
   CallFunctionFast(cbCIn32,BoardNum,CounterNum,@Count.w)
   ProcedureReturn Count
EndProcedure

ProcedureDLL.l cbCLoad(BoardNum.l,RegNum.l,LoadValue.l);cbCLoad(BoardNum.l,RegNum.l,LoadValue.l)
  ProcedureReturn CallFunctionFast(cbCLoad,BoardNum,RegNum,LoadValue)
EndProcedure

ProcedureDLL.l cbCLoad32(BoardNum.l,RegNum.l,LoadValue.l); cbCLoad32(BoardNum.l,RegNum.l,LoadValue.l)
  ProcedureReturn CallFunctionFast(cbCLoad32,BoardNum,RegNum,LoadValue)
EndProcedure

ProcedureDLL.l cbCStatus(a.l,b.l,c.l)
  ProcedureReturn CallFunctionFast(cbCStatus,a,b,c)
EndProcedure

ProcedureDLL.l cbCStoreOnInt(a.l,b.l,c.l,d.l)
  ProcedureReturn CallFunctionFast(cbCStoreOnInt,a,b,c,d)
EndProcedure

ProcedureDLL.l cbClaimNetworkDevice(a.l,b.l,c.l,d.l,e.l,f.l)
  ProcedureReturn CallFunctionFast(cbClaimNetworkDevice,a,b,c,d,e,f)
EndProcedure

ProcedureDLL.l cbCreateBoard(a.l,b.l)
  ProcedureReturn CallFunctionFast(cbCreateBoard,a,b)
EndProcedure

ProcedureDLL.l cbDBitIn(BoardNum.b,PortType.l,BitNum.l); cbDBitIn(BoardNum.b,PortType.l,BitNum.l)
  CallFunctionFast(cbDBitIn,BoardNum,PortType,BitNum,@BitValue.w)
  ProcedureReturn BitValue
EndProcedure

ProcedureDLL.l cbDBitOut(BoardNum.l,PortType.l,BitNum.l,BitValue.w);cbDBitOut(BoardNum.l,PortType.l,BitNum.l,BitValue.w); Rückgabe=Long
  ProcedureReturn CallFunctionFast(cbDBitOut,BoardNum,PortType,BitNum,BitValue)
EndProcedure

ProcedureDLL.l cbDConfigBit(a.l,b.l,c.l,d.l)
  ProcedureReturn CallFunctionFast(cbDConfigBit,a,b,c,d)
EndProcedure

ProcedureDLL.l cbDConfigPort(BoardNum.b,PortNum.b,Directions.l);cbDConfig(BoardNum.b,PortNum.b,Directions); Rückgabe = Longwert
  ProcedureReturn CallFunctionFast(cbDConfigPort,BoardNum,PortNum,Directions)
EndProcedure

ProcedureDLL.w cbDIn(BoardNum.b,PortNum.b);cbDIn(BoardNum.l,PortNum.l
    CallFunctionFast(cbDIn,BoardNum,PortNum,@DataValue.w)
 ProcedureReturn DataValue
EndProcedure


ProcedureDLL.l cbDInScan(a.l,b.l,c.l,d.l,e.l,f.l)
  ProcedureReturn CallFunctionFast(cbDInScan,a,b,c,d,e,f)
EndProcedure

ProcedureDLL.l cbDOut(BoardNum.l,PortNum.l,DataValue.w);cbDOut(BoardNum.l,PortNum.l)
  ProcedureReturn CallFunctionFast(cbDOut,BoardNum,PortNum,DataValue)
EndProcedure

ProcedureDLL.l cbDOutScan(a.l,b.l,c.l,d.l,e.l,f.l)
  ProcedureReturn CallFunctionFast(cbDOutScan,a,b,c,d,e,f)

EndProcedure

ProcedureDLL.l cbDeclareRevision(a.l)
  ProcedureReturn CallFunctionFast(cbDeclareRevision,a)
EndProcedure

ProcedureDLL.l cbDeleteBoard(a.l)
  ProcedureReturn CallFunctionFast(cbDeleteBoard,a)
EndProcedure

ProcedureDLL.l cbDisableEvent(a.l,b.l)
  ProcedureReturn CallFunctionFast(cbDisableEvent,a,b)
EndProcedure

ProcedureDLL.l cbEnableEvent(a.l,b.l,c.l,d.l,e.l)
  ProcedureReturn CallFunctionFast(cbEnableEvent,a,b,c,d,e)
EndProcedure

ProcedureDLL.l cbErrHandling(a.l,b.l)
  ProcedureReturn CallFunctionFast(cbErrHandling,a,b)
EndProcedure

ProcedureDLL.l cbFileAInScan(a.l,b.l,c.l,d.l,e.l,f.l,g.l,h.l)
  ProcedureReturn CallFunctionFast(cbFileAInScan,a,b,c,d,e,f,g,h)
EndProcedure

ProcedureDLL.l cbFileGetInfo(a.l,b.l,c.l,d.l,e.l,f.l,g.l)
  ProcedureReturn CallFunctionFast(cbFileGetInfo,a,b,c,d,e,f,g)
EndProcedure

ProcedureDLL.l cbFilePretrig(a.l,b.l,c.l,d.l,e.l,f.l,g.l,h.l,i.l)
  ProcedureReturn CallFunctionFast(cbFilePretrig,a,b,c,d,e,f,g,h,i)
EndProcedure

ProcedureDLL.l cbFileRead(a.l,b.l,c.l,d.l)
  ProcedureReturn CallFunctionFast(cbFileRead,a,b,c,d)
EndProcedure

ProcedureDLL.l cbFlashLED(BoardNum.l);cbFlashLED(BoardNum.l)
  ProcedureReturn CallFunctionFast(cbFlashLED,BoardNum)
EndProcedure

ProcedureDLL.l cbFromEngUnits(a.l,b.l,c.l,d.l)
  ProcedureReturn CallFunctionFast(cbFromEngUnits,a,b,c,d)
EndProcedure
Global 
 ProcedureDLL.s cbGetBoardName(BoardNum.l); cbGetBoardName(BoardNum.l)
     CallFunctionFast(cbGetBoardName,BoardNum,@BoardName)
      ProcedureReturn  PeekS(@BoardName)
 EndProcedure

ProcedureDLL.l cbGetCalCoeff(a.l,b.l,c.l,d.l,e.l,f.l)
  ProcedureReturn CallFunctionFast(cbGetCalCoeff,a,b,c,d,e,f)
EndProcedure

ProcedureDLL.l cbGetConfig(InfoType.l,BoardNum.l,DevNum.l,ConfigItem.l);cbGetConfig(InfoType.l,BoardNum.l,DevNum.l,ConfigItem.l)
   CallFunctionFast(cbGetConfig,InfoType,BoardNum,DevNum,ConfigItem,@ConfigVal)
   ProcedureReturn ConfigVal
EndProcedure

ProcedureDLL.l cbGetErrMsg(a.l,b.l)
  ProcedureReturn CallFunctionFast(cbGetErrMsg,a,b)
EndProcedure

ProcedureDLL.l cbGetIOStatus(a.l,b.l,c.l,d.l,e.l)
  ProcedureReturn CallFunctionFast(cbGetIOStatus,a,b,c,d,e)
EndProcedure

ProcedureDLL.l cbGetRevision(a.l,b.l)
  ProcedureReturn CallFunctionFast(cbGetRevision,a,b)
EndProcedure

ProcedureDLL.l cbGetSignal(a.l,b.l,c.l,d.l,e.l,f.l)
  ProcedureReturn CallFunctionFast(cbGetSignal,a,b,c,d,e,f)
EndProcedure

ProcedureDLL.l cbGetStatus(a.l,b.l,c.l,d.l)
  ProcedureReturn CallFunctionFast(cbGetStatus,a,b,c,d)
EndProcedure

ProcedureDLL.l cbInByte(a.l,b.l)
  ProcedureReturn CallFunctionFast(cbInByte,a,b)
EndProcedure

ProcedureDLL.l cbInDoubleWord(a.l,b.l)
  ProcedureReturn CallFunctionFast(cbInDoubleWord,a,b)
EndProcedure

ProcedureDLL.l cbInWord(a.l,b.l)
  ProcedureReturn CallFunctionFast(cbInWord,a,b)
EndProcedure

ProcedureDLL.l cbLoadConfig(BoardConfig.s); cbLoadConfig(BoardConfig.s)
  ProcedureReturn CallFunctionFast(cbLoadConfig,BoardConfig)
EndProcedure

ProcedureDLL.l cbMemRead(a.l,b.l,c.l,d.l)
  ProcedureReturn CallFunctionFast(cbMemRead,a,b,c,d)
EndProcedure

ProcedureDLL.l cbMemReadPretrig(a.l,b.l,c.l,d.l)
  ProcedureReturn CallFunctionFast(cbMemReadPretrig,a,b,c,d)
EndProcedure

ProcedureDLL.l cbMemReset(a.l)
  ProcedureReturn CallFunctionFast(cbMemReset,a)
EndProcedure

ProcedureDLL.l cbMemWrite(a.l,b.l,c.l,d.l)
  ProcedureReturn CallFunctionFast(cbMemWrite,a,b,c,d)
EndProcedure

ProcedureDLL.l cbOutByte(a.l,b.l,c.l)
  ProcedureReturn CallFunctionFast(cbOutByte,a,b,c)
EndProcedure

ProcedureDLL.l cbOutDoubleWord(a.l,b.l,c.l)
  ProcedureReturn CallFunctionFast(cbOutDoubleWord,a,b,c)
EndProcedure

ProcedureDLL.l cbOutWord(a.l,b.l,c.l)
  ProcedureReturn CallFunctionFast(cbOutWord,a,b,c)
EndProcedure

ProcedureDLL.l cbRS485(a.l,b.l,c.l)
  ProcedureReturn CallFunctionFast(cbRS485,a,b,c)
EndProcedure

ProcedureDLL.l cbSaveConfig(Config.s); cbSaveConfig(Config.s)  .... Steht nirgends in der Hilfe, und habe es hinbekommen ;)
  ProcedureReturn CallFunctionFast(cbSaveConfig,Config)
EndProcedure

ProcedureDLL.l cbSelectSignal(a.l,b.l,c.l,d.l,e.l)
  ProcedureReturn CallFunctionFast(cbSelectSignal,a,b,c,d,e)
EndProcedure

ProcedureDLL.l cbSetCalCoeff(a.l,b.l,c.l,d.l,e.l,f.l,g.l)
  ProcedureReturn CallFunctionFast(cbSetCalCoeff,a,b,c,d,e,f,g)
EndProcedure

 ProcedureDLL.l cbSetConfig(InfoType.l,BoardNum.l,DevNum.l,ConfigItem.l,ConfigVal.l); cbSetConfig(InfoType.l,BoardNum.l,DevNum.l,ConfigItem.l,ConfigVal.l)
   ProcedureReturn CallFunctionFast(cbSetConfig,InfoType,BoardNum,DevNum,ConfigItem,ConfigVal)
 EndProcedure

ProcedureDLL.l cbSetTrigger(a.l,b.l,c.l,d.l)
  ProcedureReturn CallFunctionFast(cbSetTrigger,a,b,c,d)
EndProcedure

ProcedureDLL.l cbStopBackground(FunctionsType.l)
  ProcedureReturn CallFunctionFast(cbStopBackground,a)
EndProcedure

ProcedureDLL.l cbStopIOBackground(a.l,b.l)
  ProcedureReturn CallFunctionFast(cbStopIOBackground,a,b)
EndProcedure

ProcedureDLL.l cbTIn(a.l,b.l,c.l,d.l,e.l)
  ProcedureReturn CallFunctionFast(cbTIn,a,b,c,d,e)
EndProcedure

ProcedureDLL.l cbTInScan(a.l,b.l,c.l,d.l,e.l,f.l)
  ProcedureReturn CallFunctionFast(cbTInScan,a,b,c,d,e,f)
EndProcedure

ProcedureDLL.l cbToEngUnits(a.l,b.l,c.l,d.l)
  ProcedureReturn CallFunctionFast(cbToEngUnits,a,b,c,d)
EndProcedure

ProcedureDLL.l cbWinArrayToBuf(a.l,b.l,c.l,d.l)
  ProcedureReturn CallFunctionFast(cbWinArrayToBuf,a,b,c,d)
EndProcedure

ProcedureDLL.l cbWinBufAlloc(a.l)
  ProcedureReturn CallFunctionFast(cbWinBufAlloc,a)
EndProcedure

ProcedureDLL.l cbWinBufFree(a.l)
  ProcedureReturn CallFunctionFast(cbWinBufFree,a)
EndProcedure

ProcedureDLL.l cbWinBufFromEngUnits(a.l,b.l,c.l,d.l,e.l,f.l,g.l)
  ProcedureReturn CallFunctionFast(cbWinBufFromEngUnits,a,b,c,d,e,f,g)
EndProcedure

ProcedureDLL.l cbWinBufToArray(a.l,b.l,c.l,d.l)
  ProcedureReturn CallFunctionFast(cbWinBufToArray,a,b,c,d)
EndProcedure

ProcedureDLL.l cbWinBufToEngUnits(a.l,b.l,c.l,d.l,e.l,f.l,g.l)
  ProcedureReturn CallFunctionFast(cbWinBufToEngUnits,a,b,c,d,e,f,g)
EndProcedure

ProcedureDLL.l lvPromptInstaCAL()
  ProcedureReturn CallFunctionFast(lvPromptInstaCAL)
EndProcedure
Und mit folgenden PB-Source ein kleiner Test für mein USB-1024HLS bzw. PMD-1024HLS Me-RedLab - USB -Modul.


Test_Bit_Get_Set.pb

Code: Alles auswählen

BoardNum=0

; Config$= GetRegKey(#HKEY_LOCAL_MACHINE,"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\inscal32.exe","Path")+"\cb.cfg"
; OpenFile(1,Config$)
; lenght=Lof()
; FileSeek(211)
; string$= ReadString()
; If string$="Board #0"
;   String1$=ReplaceString (string$,string$,"Board #"+Str(BoardNum))
;   FileSeek(211)
;   WriteString(String1$)
; EndIf
; CloseFile(1)
; Delay(500)
   
IncludeFile("CBW_PBI.pbi")
cbw32_Init()

;Debug cbCreateBoard(BoardNum,2); Da noch ein Fehler hier ist, denke ich auch, das dort anstelle der 2 ein Stringwert hinein muss.
; Debug cbDeleteBoard(0)
;Debug RemoveBoardFromList(1); Entfernt Board 1 von der Liste
Debug cbGetBoardName(BoardNum)
Debug Str(cbGetConfig(#GLOBALINFO,BoardNum,0,#GIVERSION))+ " bd in CB.CFG file format "
Debug Str(cbGetConfig(#BOARDINFO,BoardNum,0,#BICLOCK))+ " MHz Clock"

;Debug cbGetConfig(#EXPANSIONINFO, BoardNum, 0,#XIBOARDTYPE)
;Debug cbSetConfig(#EXPANSIONINFO, BoardNum, 0,#XIBOARDTYPE,45)
Debug cbSetConfig(#BOARDINFO, BoardNum, 0,#BIBASEADR,2);  

cbSaveConfig("BoardNum.CFG"); Hiermit wird eine neue Configdatei nach Änderung gespeichert. Name ist wahlweise.
cbLoadConfig("BoardNum.CFG"); Und hiermit kannst du diese wieder öffnen.
BoardNum=0 ; Da die neue Config geladen wird, muss dann auch mit der neuen Adresse gearbeitet werden!
Debug Str(cbGetConfig(#BOARDINFO,BoardNum,0,#BIBASEADR))+ " Base address of board"
Debug Str(cbGetConfig(#DIGITALINFO,BoardNum,0,#DINUMBITS))+ " bits in portA"
Debug Str(cbGetConfig(#DIGITALINFO,BoardNum,1,#DINUMBITS))+ " bits in portB"
Debug Str(cbGetConfig(#DIGITALINFO,BoardNum,2,#DINUMBITS))+ " bits in portC_h"
Debug Str(cbGetConfig(#DIGITALINFO,BoardNum,3,#DINUMBITS))+ " bits in portC_l"
Debug Str(cbGetConfig(#DIGITALINFO,BoardNum,4,#DINUMBITS))+ " bits in port X, da kein höherer Port existiert ist der Wert 0"
; Debug "----------------------------------------------------------------------------------"
; Debug "                           Settings to Board 6"
; Debug "----------------------------------------------------------------------------------"
;cbSetConfig(#BOARDINFO, BoardNum, 0,#BIBASEADR, BoardNum);
;Debug Str(cbGetConfig(#BOARDINFO,BoardNum,0,#BIBASEADR))+ " Base address of board"
; Debug "----------------------------------------------------------------------------------"
; Debug "                           Settings to Board 0"
; Debug "----------------------------------------------------------------------------------"
; cbSetConfig(#BOARDINFO, BoardNum, 0,#BIBASEADR, 0);
; Debug Str(cbGetConfig(#BOARDINFO,BoardNum,0,#BIBASEADR))+ " Base address of board"

cbw32_End()
Dank an ts-soft (Thomas) für sein Tool :allright:
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Feri
Beiträge: 10
Registriert: 03.09.2004 18:34

Beitrag von Feri »

Hallo Falko,

was für einen USB-Chip verwendet Meilhaus in dem USB-Modul? Vielleicht
gibt es da ja besser dokumetierte DLL vom Chiphersteller.

cu Feri
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Beitrag von Falko »

Der USB-Chip müsste ein Lattice IM4A5-32 , 10VC-12VCI sein. Zusätzlich ist dort leider ein Microchip PIC16C765 den 82C55A simuliert.

Die Herstellerfirma dieser Hardware als auch der Userlibrary ist
http://www.measurementcomputing.com/ von denen man keine Antworten bekommt und nur über die angegebenen Distributoren sich die
Infos einholen kann. Das ist in diesem Falle
http://www.meilhaus.de . Die haben mir auch soweit es geht, meine Fragen beantworten können.
Zur Frage undokumentierte Universallibrary-Befehle bei Meilhaus bekam ich auch eine passende Antwort.

Der Hersteller gibt keine Beschreibung der undokumentierten Befehle heraus. Naja, hätte man die volle Funktion dieser teuren Library, dann könnte man seine Konigurationsdatei CB.cfg mit den geänderten Werten speichern als auch selbst das Modul über das eigene Programm suchcen lassen. Damit wäre der Blödsinn mit der InstaCall überflüssig.
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Feri
Beiträge: 10
Registriert: 03.09.2004 18:34

Beitrag von Feri »

Da muß ich passen. Der M4A5-32/32-10VC von Lattice ist ein programmierbarer Logicbaustein und eigentlich kein USB-Chip.

Aber mal was anderes:
Läßt sich mit der RS232-Library von Mark über einen Virtuellen COM-Port Treiber eine über USB umgesetzte RS-232-Schnittstelle ansprechen?

Dann müssten sich eigentlich über USB ohne großen Aufwand I/O-Ports betreiben lassen. Als USB-Chip den FT232BM von FTDI. Am Ausgang
liegt dann eine komplette RS-232 an (mit TTL-Pegel). Davon 2 Leitungen als I2C-Bus verwendet und daran den PCF8574 als 8-Bit-I/O-Baustein
(bis maximal 16 Stück = 128 I/O-Ports), oder den PCF8591 als DA/AD-Wandler für analoge Signale ...
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Beitrag von Falko »

Hallo Feri,

Da du von einem USB-Chip sprichts, den ich ebenfalls in einem zweiten Modul habe,
welches sich Voltcraft AD-USB 4 nennt und genau diese Chips enthält
habe ich mich mal auf die Suche gemacht.

Hier das Ergebnis und die DLL lässt sich mit ts-soft sein Tool LIB2PB auslesen.
Die müsste eigendlich all die eigenschaften haben, wie die serielle
Schnittstelle und USB.

Ob Mark Vitry sein Programm das machen kann, habe ich noch nie probiert, da sie wohl intern komplett mit der API erstellt ist.
Theortisch könnte es schon möglich sein.

Aber da ich gerade zufällig FTDI lese,

schau dir mal diesen Link an. Die gleichen Treiber sind auch für mein Modul installiert. Ich versuche schon die ganze Zeit mit den ActiveX-Beispielen von der Lorenz GmbH was in PB und OOP hinzubekommen. Aber so einfach ist das mit dem COM für mich leider nicht.

Von Meilhaus klappt ja mit den Treibern, was ich mit Jens zusammen ausprobiert habe. Also für die Grundsätzlichen Sachen kann man das schon nutzen, da dort dierekt von der DLL die Funktionen aufgerufen
werden können und soweit die Hilfe es gut beschreibt.

Beim Voltcraft AD-USB 4 wird alles in VB bcw VC++ erklärt, was mit Objekten und Methoden zu tun hat, welches über die AD_USB2XX.ocx
angesprochen wird.


Hier der Link zu den USB-Treiber:

http://www.phyton.com/downloads/USB_drivers.zip

Über diesen Treiber wird hier speziell über Phyton programmiert.

Ich selbst habe Sourcen für VB als Beispiel dazu mit ActiveX-Controls.

Hier ist noch der Link von der kompletten HP unter Phyton.
http://www.phyton.com/htdocs/main.shtml ... ds.shtml~D

MfG Falko
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Feri
Beiträge: 10
Registriert: 03.09.2004 18:34

Beitrag von Feri »

Ja, dem Treiber nach scheint das der gleiche Chip zu sein. Aber ohne
entsprechendes Modul läßt sich schlecht experimentieren. Habe also mal
etwas im Netz gesucht und bin hier fündig geworden:

http://www.embedded-msr.de/

Das RAMUSB 232 - Modul scheint ideal zu sein, um damit mal ein paar
Versuche mit den Treibern und auch mit der Hardware zu machen.
Die Bestellung ist schon unterwegs ... :)

Bei FTDI habe ich auch noch ein paar Informationen zu den Treibern
gefunden:

http://www.ftdichip.com/Support/Knowled ... index.html

Mfg Feri
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Beitrag von Falko »

Hallo Feri,
danke für die Links :allright: , wenn du das Modul hast, sag bescheid.
Mal schauen, ob man über die DLL antstelle der OCX auch zum Ergebnis.

In der Zeit kann ich ja noch versuchen das OCX bzw. ActiveX-Control, in
PB zu verstehen.

MfG Falko
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Feri
Beiträge: 10
Registriert: 03.09.2004 18:34

Beitrag von Feri »

Hallo Falko,

das Modul ist heute angekommen. Angesteckt, VCP-Treiber installiert und
die Lib von Marc probiert - funktioniert genauso problemlos wie an der
originalen RS232 :D

Da werde ich mich erstmal nicht weiter mit der DLL auseinandersetzen,
die API-Funktionen aus der MVCOM reichen für Steuerungszwecke aus.
Das hat auch den Vorteil, daß die gleiche Software ohne Änderungen
sowohl für RS232 als auch USB funktioniert.

Auf der Treiber-CD habe ich die Beschreibung für die FTD2XX.DLL
gefunden und dir das File mal ins Netz gestellt:

http://www.baoo.de/purebasic/Programmer ... D2XX21.pdf

mfg Feri
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Beitrag von Falko »

Hallo Feri,
das hört sich gut an. Das mit der MVCOM wäre dannoch praktischer, weil
dessen Funktionen nachher komplett im eigenen Source enthalten sind
und nicht wie bei einer DLL extern aufgerufen werden müssen. :)

Wenn man ein FTDXX2-USB-Chip direkt ansteuern möchte, ist es
vielleicht einfach. Aber was ist, wenn man extra IC's für Analoge als auch
Digitale Signale einen AD/Wandler und einen IOExpander (o.ä) hat?.
Dann wird es wieder kompliziert, das zu progen. Zwar könnte ich mich
hinsetzen, und die DLL mit einer PB-Lib wrappen, da ja auch die c-
headerdatei mit all ihren Konstanten und Funktionen vorhanden ist, aber
leider bringt mich das nicht weiter. Dazu müsste ich mir alle Bauteile nach
dem USB-Chip anschauen und dessen Beschreibung finden die es dazu
gibt. Da ist ein A/D (8Kanal) und D/A(2Kanal)- Wandler und ein IC für
Optogekoppelte IO's. Damit man diese nutzen kann, hat der liebe
Programmierer zu Gunsten von VB, VCC und Delphi es sich ganz einfach
gemacht und eine AD-USB.OCX geprogt, mit der man die Hardware dann
so steuern kann, wie man es möchte. Nur intern macht die OCX das, was
du über die DLL steuern kannst. Und weis auch, wie die nach dem USB-
Chip angeschlossenen ICs gesteuert wird, damit komplette Modul das
macht, was es am Ende machen soll. 8Bits schalten bzw. lesen als auch
analoge Spannungen von -10V bis +10V erzeugen. Und alles ohne extra
Stromversorgung.

Nur schade, das PB es einem mit ActiveX-Controls nicht leicht macht.
Denn sich einfach ein Interface aus so einer VCC-Datei zu machen habe
ich noch nicht kapiert und funst nicht mit dieser OCX.


Das ist aber leider mein Problem worauf ich im Moment fest
sitze. :mrgreen:


Aber ich glaube, das Modul, welches du hier mal aufgelistet hast könnte
ich mir auch mal bestellen. Was danach gesteuert wird kann man dann ja
selbst bestimmten.


Aber danke @Feri. Wir können uns dann mal so Gedanken machen, was
mit der DLL möglich ist.
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Antworten