Compare commits
29
Commits
master
...
d979f45179
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d979f45179 | ||
|
|
a726babc1c | ||
|
|
4e2d8d4b22 | ||
|
|
bec5e29e2c | ||
|
|
a1c727c71f | ||
|
|
9ad09ee77b | ||
|
|
87954d40d9 | ||
|
|
e2eac4dd48 | ||
|
|
850a66e620 | ||
|
|
d1bd233399 | ||
|
|
b7eae9d469 | ||
|
|
b80ad585da | ||
|
|
4d1f7fdbe9 | ||
|
|
a44043593c | ||
|
|
b7ba42765b | ||
|
|
77005d7863 | ||
|
|
bf25bed9aa | ||
|
|
b4abb2eea2 | ||
|
|
fcde0a3d2b | ||
|
|
5a817dc910 | ||
|
|
8c283cb262 | ||
|
|
291c0af714 | ||
|
|
c0bc702c24 | ||
|
|
fdcce2ca58 | ||
|
|
4005818a19 | ||
|
|
2755d0a7ae | ||
|
|
60c823a8e2 | ||
|
|
317a4afc60 | ||
|
|
60a5c90c88 |
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>BF_PC_companion</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
@@ -0,0 +1,9 @@
|
||||
// Default configuration for BF_companion main_state
|
||||
// Format: field value // optional comment
|
||||
|
||||
run_mode FINITE_RUN // TEST | FINITE_RUN | INF_RUN
|
||||
BF_mode TRANSPARENT // TRANSPARENT | AVG
|
||||
run_length 100 // milliseconds
|
||||
runs_N 10000 // total runs (used in FINITE_RUN)
|
||||
run_I 0 // starting run index
|
||||
data_path /home/feda/MIPT/RadioPhotonic_Subserface_radar/Receiver_GUI/data // base directory for output files
|
||||
@@ -0,0 +1,9 @@
|
||||
// Default configuration for BF_companion main_state
|
||||
// Format: field value // optional comment
|
||||
|
||||
run_mode FINITE_RUN // TEST | FINITE_RUN | INF_RUN
|
||||
BF_mode TRANSPARENT // TRANSPARENT | AVG
|
||||
run_length 100 // milliseconds
|
||||
runs_N 1000 // total runs (used in FINITE_RUN)
|
||||
run_I 0 // starting run index
|
||||
data_path /home/feda/MIPT/RadioPhotonic_Subserface_radar/Receiver_GUI/data // base directory for output files
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+10
@@ -0,0 +1,10 @@
|
||||
// Default configuration for BF_companion main_state
|
||||
// Format: field value // optional comment
|
||||
|
||||
run_mode TEST // TEST | FINITE_RUN | INF_RUN
|
||||
BF_mode TRANSPARENT // TRANSPARENT | AVG
|
||||
BlackFin_mode TRANSPARENT // TRANSPARENT | AVG | FFT
|
||||
run_length 100 // milliseconds
|
||||
runs_N 10 // total runs (used in FINITE_RUN)
|
||||
run_I 0 // starting run index
|
||||
data_path data // base directory for output files
|
||||
@@ -0,0 +1,2 @@
|
||||
#!/usr/bin/bash
|
||||
./plotter.py "$(./BF_companion 2>&1 1>/dev/tty)"
|
||||
@@ -0,0 +1,9 @@
|
||||
// Default configuration for BF_companion main_state
|
||||
// Format: field value // optional comment
|
||||
|
||||
run_mode FINITE_RUN // TEST | FINITE_RUN | INF_RUN
|
||||
BF_mode TRANSPARENT // TRANSPARENT | AVG
|
||||
run_length 100 // milliseconds
|
||||
runs_N 10 // total runs (used in FINITE_RUN)
|
||||
run_I 0 // starting run index
|
||||
data_path /home/feda/MIPT/RadioPhotonic_Subserface_radar/Receiver_GUI/data // base directory for output files
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 26 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,149 @@
|
||||
[Version]
|
||||
Signature="$WINDOWS NT$"
|
||||
Class=LPCIE
|
||||
ClassGuid={73FE9311-0D50-4FCD-A895-571CA87A26DC}
|
||||
Provider=%LCardMfg%
|
||||
CatalogFile=lpcie.cat
|
||||
;PnpLockDown=1
|
||||
DriverPackageDisplayName=%PkgName%
|
||||
DriverPackageType=PlugAndPlay
|
||||
DriverVer=11/16/2016,1.0.11.0
|
||||
|
||||
|
||||
[SourceDisksFiles]
|
||||
lpcie.sys=1
|
||||
|
||||
[SourceDisksNames]
|
||||
1=%DISK_NAME%,,,.
|
||||
|
||||
[PreCopySection]
|
||||
HKR,,NoSetupUI,,1
|
||||
|
||||
[DestinationDirs]
|
||||
DefaultDestDir = 12 ;%SystemRoot%\system32\drivers
|
||||
|
||||
; ================= Class section =====================
|
||||
|
||||
[ClassInstall32]
|
||||
Addreg=LpcieClassReg
|
||||
|
||||
[LpcieClassReg]
|
||||
HKR,,,0,%ClassName%
|
||||
HKR,,Icon,,-5
|
||||
HKR,,DeviceCharacteristics,0x10001,0x100 ;Use same security checks on relative opens
|
||||
;HKR,,Security,,"D:P(A;;GA;;;SY)(A;;GA;;;BA)" ;Allow generic all access to system and built-in Admin.
|
||||
;[HKR,,Exclusive,0x10001,1]
|
||||
;[HKR,,SilentInstall,,1]
|
||||
|
||||
; ================= Device Install section =====================
|
||||
|
||||
[ControlFlags]
|
||||
ExcludeFromSelect=*
|
||||
|
||||
[Manufacturer]
|
||||
%LCardMfg%=LCardMfg,NTx86
|
||||
|
||||
|
||||
|
||||
; For Win2K
|
||||
[LCardMfg]
|
||||
; DisplayName Section DeviceId
|
||||
; ----------- ------- --------
|
||||
%L502.DeviceDescr% = lpcie_inst, PCI\VEN_1172&DEV_0502&SUBSYS_4C353032
|
||||
|
||||
|
||||
; For XP and later
|
||||
[LCardMfg.NTx86]
|
||||
; DisplayName Section DeviceId
|
||||
; ----------- ------- --------
|
||||
%L502.DeviceDescr% = lpcie_inst, PCI\VEN_1172&DEV_0502&SUBSYS_4C353032
|
||||
|
||||
|
||||
|
||||
[lpcie_inst.HW]
|
||||
AddReg = lpcie_hw_addreg
|
||||
|
||||
[lpcie_inst.NT.HW]
|
||||
AddReg = lpcie_hw_addreg
|
||||
|
||||
;Äîáàâëÿåì â ðååñòð ôëàã, ÷òî ìîæíî èñïîëüçîâàòü MSI
|
||||
[lpcie_hw_addreg]
|
||||
HKR, Interrupt Management,, 0x00000010
|
||||
HKR, Interrupt Management\MessageSignaledInterruptProperties,, 0x00000010
|
||||
HKR, Interrupt Management\MessageSignaledInterruptProperties, MSISupported, 0x00010001, 1
|
||||
|
||||
|
||||
|
||||
|
||||
[lpcie_inst]
|
||||
CopyFiles=Lpcie.CopyFiles
|
||||
|
||||
[lpcie_inst.NT]
|
||||
CopyFiles=Lpcie.CopyFiles
|
||||
|
||||
[Lpcie.CopyFiles]
|
||||
lpcie.sys
|
||||
|
||||
|
||||
[lpcie_inst.Services]
|
||||
AddService=lpcie,0x00000002,lpcie_service
|
||||
|
||||
[lpcie_inst.NT.Services]
|
||||
AddService=lpcie,0x00000002,lpcie_service
|
||||
|
||||
[lpcie_service]
|
||||
DisplayName = %LPCIE.SVCDESC%
|
||||
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
|
||||
StartType = 1 ; SERVICE_AUTO_START
|
||||
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
|
||||
ServiceBinary = %12%\lpcie.sys
|
||||
;AddReg = Pci9x5x_Parameters_AddReg
|
||||
|
||||
;-------------- Coinstaller installation
|
||||
[DestinationDirs]
|
||||
CoInstaller_CopyFiles = 11
|
||||
|
||||
|
||||
[lpcie_inst.CoInstallers]
|
||||
AddReg=CoInstaller_AddReg
|
||||
CopyFiles=CoInstaller_CopyFiles
|
||||
|
||||
[lpcie_inst.NT.CoInstallers]
|
||||
AddReg=CoInstaller_AddReg
|
||||
CopyFiles=CoInstaller_CopyFiles
|
||||
|
||||
[CoInstaller_CopyFiles]
|
||||
WdfCoInstaller01009.dll
|
||||
|
||||
[SourceDisksFiles]
|
||||
WdfCoInstaller01009.dll=1 ; make sure the number matches with SourceDisksNames
|
||||
|
||||
[CoInstaller_AddReg]
|
||||
HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01009.dll,WdfCoInstaller"
|
||||
|
||||
|
||||
[lpcie_inst.Wdf]
|
||||
KmdfService = lpcie, lpcie_wdfsect
|
||||
|
||||
[lpcie_inst.NT.Wdf]
|
||||
KmdfService = lpcie, lpcie_wdfsect
|
||||
[lpcie_wdfsect]
|
||||
KmdfLibraryVersion = 1.9
|
||||
|
||||
[Strings]
|
||||
LCardMfg = "L Card"
|
||||
L502.DeviceDescr = "L-502"
|
||||
ClassName = "'L Card' PCI Express devices"
|
||||
LPCIE.SVCDESC = "KMDF driver for 'L-Card' PCI Express devices"
|
||||
PkgName = "driver for PCI Express boards"
|
||||
DISK_NAME = "'L Card' Software Install Disk"
|
||||
|
||||
[Strings.0419]
|
||||
LCardMfg="Ë Êàðä"
|
||||
L502.DeviceDescr = "L-502"
|
||||
LPCIE.SVCDESC="KMDF äðàéâåð äëÿ PCI Express óñòðîéñòâ ôèðìû 'Ë Êàðä'"
|
||||
PkgName = "Äðàéâåð äëÿ ïëàò PCI Express"
|
||||
ClassName="PCI Express óñòðîéñòâà îò ôèðìû 'Ë Êàðä'"
|
||||
DISK_NAME = "Äèñê ñ ïðîãðàììíûì îáåñïå÷åíèåì 'Ë Êàðä'"
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,80 @@
|
||||
История изменений L-Card L502/E502 SDK:
|
||||
|
||||
1.0.4 (24.10.2012):
|
||||
- обновление описания, билиотеки l502api и драйвера (исправления ошибок, добавлен режим циклического вывода)
|
||||
- добавлена обертка dotNet с возможностью установки в GAC
|
||||
- добавлены примеры для delphi, C#, LabView
|
||||
- добавлен приемер режима циклического генератора для С
|
||||
- добавлена утилита для обновления прошивки ПЛИС с версией прошивки 0.2
|
||||
|
||||
1.0.5 (21.02.2013)
|
||||
- добавлено низкоуровневое описание для модуля L502
|
||||
- добавлен исходный код прошивки BlackFin (устанавливается вместе с файлами для разработчика)
|
||||
- обновлены библиотека и драйвер (исправления и изменения для работы с сигнальным процессором)
|
||||
- включена версия 0.3 прошивки ПЛИС для модуля L502
|
||||
|
||||
1.0.6 (27.02.2013)
|
||||
- добавлена новая прошивка ПЛИС модуля L502 (версия 0.4)
|
||||
- добавлен файл firm_versions.txt с описаниями изменений в прошивках ПЛИС
|
||||
- незначительные коррекции драйвера и библиотеки
|
||||
1.1.0 (29.05.2015)
|
||||
- обновление драйвера для L502 (1.0.8) с критическим исправлением зависания на некоторых ПК
|
||||
- включение поддержки модуля E502, добавлено новое API для возможности работать с обоими модулями
|
||||
(добавлен драйвер USB, обновлены библиотеки и описание, изменены все примеры для работы как с L502, так и E502)
|
||||
- включена опция установки службы Bonjour для поиска в сети модулей E502
|
||||
- утилита lpcie-firm-update переименована в lxfw-update и включена возможность обновлять прошивки ПЛИС модуля E502.
|
||||
1.1.1 (08.06.2015)
|
||||
- обновление библиотеки до версии 1.1.1 (исправлены ошибки в функциях обнаружения устройств в сети и утечка памяти)
|
||||
1.1.2 (08.07.2015)
|
||||
- обновление библиотеки до версии 1.1.2, драйвера L502 до версии 1.0.9 и документации (для поддержки флага
|
||||
X502_OUT_CYCLE_FLAGS_WAIT_DONE и функции X502_OutCycleCheckSetupDone())
|
||||
1.1.3 (21.07.2015)
|
||||
- обновление библиотеки до версии 1.1.3 (исправлена ошибка при загрузке прошивки BlackFin в L502)
|
||||
1.1.4 (28.07.2015)
|
||||
- обновление библиотеки до версии 1.1.4 (добавлены функции X502_SetExtRefFreqValue() и X502_GetRefFreqValue())
|
||||
1.1.5 (22.12.2015)
|
||||
- в примере на C# исправлена установка режима синхронизации старта
|
||||
1.1.6 (23.06.2016)
|
||||
- в lxfw_update обновлена прошивка ПЛИС модуля E502 до версии 0.2 (рекомендуется обновить в модулях с прошивкой ARM)
|
||||
- обновление библиотеки до версии 1.1.5 (добавлены функции для изменения портов E502 при работе по TCP/IP)
|
||||
- добавлен пример LabView с выводом на ЦАП в циклическом режиме, а также более корректное завершение при ошибке в примерах
|
||||
1.1.7 (05.07.2016)
|
||||
- в lxfw_update обновлены прошивки ПЛИС: модуля L502 до версии 0.5, а модуля E502 до версии 0.3
|
||||
- обновление библиотеки до версии 1.1.6 (проверка возможности установки делителя частоты вывода, добавление функций
|
||||
X502_CheckFeature() и X502_OutGetStatusFlags(), выставление шага прерывнаия на вывода)
|
||||
- Обновление драйвера L502 до версии 1.0.10 (включена возможность настройки шага прерывания в циклическом выводе для низких частот вывода)
|
||||
1.1.8 (04.08.2016)
|
||||
- добавлен пример для Visual Basic 6
|
||||
1.1.9 (24.08.2016)
|
||||
- обновлено низкоуровневое описание программиcта (добавлены сведения по E502)
|
||||
- обновление библиотеки до версии 1.1.7 (исправление привязки первого отсчета АЦП к моменту запуска
|
||||
исправления некоторых команд в режиме с DSP)
|
||||
- исправления и небольшие дополнения примера прошивки BlackFin
|
||||
- в lxfw_update обновлены прошивки ПЛИС: модуля L502 до версии 0.7 и модуля E502 до версии 0.11
|
||||
1.1.10 (05.09.2016)
|
||||
- обновлена библиотека до версии 1.1.8 (включена в экспортируемые функции ранее забытая X502_GetEnabledStreams())
|
||||
1.1.11 (16.11.2016)
|
||||
- обновление x502api до 1.1.9 (включены функции X502_CalcAdcFreq, X502_CalcDinFreq и X502_CalcOutFreq) и описания программиста
|
||||
- обновление низкоуровнего описания (включена версия с описанием протокола обмена с модулем E502)
|
||||
1.1.12 (27.02.2017)
|
||||
- обновление x502api до 1.1.10 (исправлены коды режимов синхронизации для Pascal и C#, а также работа функции X502_OutGetStatusFlags)
|
||||
- в lxfw_update обновлена прошивка ПЛИС модулей L502 и E502 до версий 0.8 и 0.13 соответственно, добавлена прошивка для индустриального исполнения модуля E502
|
||||
1.1.13 (12.10.2017)
|
||||
- в lxfw_update обновлена прошивка ПЛИС модуля L502 до версии 0.9
|
||||
- обновление x502api до 1.1.11 (незначительные коррекции библиотеки)
|
||||
- в низкоуровневом описании исправлены адреса Flash-памяти, по которым хранится информация о модуле
|
||||
1.1.14 (11.12.2017)
|
||||
- обновление x502api до 1.1.12 - исправлена проблема работы с одновременной работой с 4 и более модулями E502, подключенными по USB, из одной программы
|
||||
1.1.15 (13.03.2018)
|
||||
- обновление x502api до 1.1.13 (исправлена утечка памяти при закрытии соединения по TCP).
|
||||
1.1.16 (10.08.2018)
|
||||
- в lxfw_update обновлена прошивка ПЛИС модулей L502 и E502 до версий 0.10 и 0.14 соответственно
|
||||
1.1.17 (28.08.2018)
|
||||
- обновление lpcieNet до версии 1.1.7.0 - исправление возможного падения в 64-битных приложениях при получении списка записей о найденных устройствах
|
||||
1.1.18 (20.11.2019)
|
||||
- в lxfw_update обновлена прошивка ПЛИС модуля E502 до версии 0.15
|
||||
1.1.19 (25.12.2019)
|
||||
- обновление x502api до версии 1.1.14 и ее документации до версии 1.1.9, а также обновление низкоуровневого описания до версии 1.0.5.
|
||||
|
||||
1.1.33 (22.01.2025)
|
||||
- поддержка модулей E16
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,149 @@
|
||||
[Version]
|
||||
Signature="$WINDOWS NT$"
|
||||
Class=LPCIE
|
||||
ClassGuid={73FE9311-0D50-4FCD-A895-571CA87A26DC}
|
||||
Provider=%LCardMfg%
|
||||
CatalogFile=lpcie.cat
|
||||
;PnpLockDown=1
|
||||
DriverPackageDisplayName=%PkgName%
|
||||
DriverPackageType=PlugAndPlay
|
||||
DriverVer=11/16/2016,1.0.11.0
|
||||
|
||||
|
||||
[SourceDisksFiles]
|
||||
lpcie.sys=1
|
||||
|
||||
[SourceDisksNames]
|
||||
1=%DISK_NAME%,,,.
|
||||
|
||||
[PreCopySection]
|
||||
HKR,,NoSetupUI,,1
|
||||
|
||||
[DestinationDirs]
|
||||
DefaultDestDir = 12 ;%SystemRoot%\system32\drivers
|
||||
|
||||
; ================= Class section =====================
|
||||
|
||||
[ClassInstall32]
|
||||
Addreg=LpcieClassReg
|
||||
|
||||
[LpcieClassReg]
|
||||
HKR,,,0,%ClassName%
|
||||
HKR,,Icon,,-5
|
||||
HKR,,DeviceCharacteristics,0x10001,0x100 ;Use same security checks on relative opens
|
||||
;HKR,,Security,,"D:P(A;;GA;;;SY)(A;;GA;;;BA)" ;Allow generic all access to system and built-in Admin.
|
||||
;[HKR,,Exclusive,0x10001,1]
|
||||
;[HKR,,SilentInstall,,1]
|
||||
|
||||
; ================= Device Install section =====================
|
||||
|
||||
[ControlFlags]
|
||||
ExcludeFromSelect=*
|
||||
|
||||
[Manufacturer]
|
||||
%LCardMfg%=LCardMfg,NTAMD64
|
||||
|
||||
|
||||
|
||||
; For Win2K
|
||||
[LCardMfg]
|
||||
; DisplayName Section DeviceId
|
||||
; ----------- ------- --------
|
||||
%L502.DeviceDescr% = lpcie_inst, PCI\VEN_1172&DEV_0502&SUBSYS_4C353032
|
||||
|
||||
|
||||
; For XP and later
|
||||
[LCardMfg.NTAMD64]
|
||||
; DisplayName Section DeviceId
|
||||
; ----------- ------- --------
|
||||
%L502.DeviceDescr% = lpcie_inst, PCI\VEN_1172&DEV_0502&SUBSYS_4C353032
|
||||
|
||||
|
||||
|
||||
[lpcie_inst.HW]
|
||||
AddReg = lpcie_hw_addreg
|
||||
|
||||
[lpcie_inst.NT.HW]
|
||||
AddReg = lpcie_hw_addreg
|
||||
|
||||
;Äîáàâëÿåì â ðååñòð ôëàã, ÷òî ìîæíî èñïîëüçîâàòü MSI
|
||||
[lpcie_hw_addreg]
|
||||
HKR, Interrupt Management,, 0x00000010
|
||||
HKR, Interrupt Management\MessageSignaledInterruptProperties,, 0x00000010
|
||||
HKR, Interrupt Management\MessageSignaledInterruptProperties, MSISupported, 0x00010001, 1
|
||||
|
||||
|
||||
|
||||
|
||||
[lpcie_inst]
|
||||
CopyFiles=Lpcie.CopyFiles
|
||||
|
||||
[lpcie_inst.NT]
|
||||
CopyFiles=Lpcie.CopyFiles
|
||||
|
||||
[Lpcie.CopyFiles]
|
||||
lpcie.sys
|
||||
|
||||
|
||||
[lpcie_inst.Services]
|
||||
AddService=lpcie,0x00000002,lpcie_service
|
||||
|
||||
[lpcie_inst.NT.Services]
|
||||
AddService=lpcie,0x00000002,lpcie_service
|
||||
|
||||
[lpcie_service]
|
||||
DisplayName = %LPCIE.SVCDESC%
|
||||
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
|
||||
StartType = 1 ; SERVICE_AUTO_START
|
||||
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
|
||||
ServiceBinary = %12%\lpcie.sys
|
||||
;AddReg = Pci9x5x_Parameters_AddReg
|
||||
|
||||
;-------------- Coinstaller installation
|
||||
[DestinationDirs]
|
||||
CoInstaller_CopyFiles = 11
|
||||
|
||||
|
||||
[lpcie_inst.CoInstallers]
|
||||
AddReg=CoInstaller_AddReg
|
||||
CopyFiles=CoInstaller_CopyFiles
|
||||
|
||||
[lpcie_inst.NT.CoInstallers]
|
||||
AddReg=CoInstaller_AddReg
|
||||
CopyFiles=CoInstaller_CopyFiles
|
||||
|
||||
[CoInstaller_CopyFiles]
|
||||
WdfCoInstaller01009.dll
|
||||
|
||||
[SourceDisksFiles]
|
||||
WdfCoInstaller01009.dll=1 ; make sure the number matches with SourceDisksNames
|
||||
|
||||
[CoInstaller_AddReg]
|
||||
HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01009.dll,WdfCoInstaller"
|
||||
|
||||
|
||||
[lpcie_inst.Wdf]
|
||||
KmdfService = lpcie, lpcie_wdfsect
|
||||
|
||||
[lpcie_inst.NT.Wdf]
|
||||
KmdfService = lpcie, lpcie_wdfsect
|
||||
[lpcie_wdfsect]
|
||||
KmdfLibraryVersion = 1.9
|
||||
|
||||
[Strings]
|
||||
LCardMfg = "L Card"
|
||||
L502.DeviceDescr = "L-502"
|
||||
ClassName = "'L Card' PCI Express devices"
|
||||
LPCIE.SVCDESC = "KMDF driver for 'L-Card' PCI Express devices"
|
||||
PkgName = "driver for PCI Express boards"
|
||||
DISK_NAME = "'L Card' Software Install Disk"
|
||||
|
||||
[Strings.0419]
|
||||
LCardMfg="Ë Êàðä"
|
||||
L502.DeviceDescr = "L-502"
|
||||
LPCIE.SVCDESC="KMDF äðàéâåð äëÿ PCI Express óñòðîéñòâ ôèðìû 'Ë Êàðä'"
|
||||
PkgName = "Äðàéâåð äëÿ ïëàò PCI Express"
|
||||
ClassName="PCI Express óñòðîéñòâà îò ôèðìû 'Ë Êàðä'"
|
||||
DISK_NAME = "Äèñê ñ ïðîãðàììíûì îáåñïå÷åíèåì 'Ë Êàðä'"
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,149 @@
|
||||
[Version]
|
||||
Signature="$WINDOWS NT$"
|
||||
Class=LPCIE
|
||||
ClassGuid={73FE9311-0D50-4FCD-A895-571CA87A26DC}
|
||||
Provider=%LCardMfg%
|
||||
CatalogFile=lpcie.cat
|
||||
;PnpLockDown=1
|
||||
DriverPackageDisplayName=%PkgName%
|
||||
DriverPackageType=PlugAndPlay
|
||||
DriverVer=11/16/2016,1.0.11.0
|
||||
|
||||
|
||||
[SourceDisksFiles]
|
||||
lpcie.sys=1
|
||||
|
||||
[SourceDisksNames]
|
||||
1=%DISK_NAME%,,,.
|
||||
|
||||
[PreCopySection]
|
||||
HKR,,NoSetupUI,,1
|
||||
|
||||
[DestinationDirs]
|
||||
DefaultDestDir = 12 ;%SystemRoot%\system32\drivers
|
||||
|
||||
; ================= Class section =====================
|
||||
|
||||
[ClassInstall32]
|
||||
Addreg=LpcieClassReg
|
||||
|
||||
[LpcieClassReg]
|
||||
HKR,,,0,%ClassName%
|
||||
HKR,,Icon,,-5
|
||||
HKR,,DeviceCharacteristics,0x10001,0x100 ;Use same security checks on relative opens
|
||||
;HKR,,Security,,"D:P(A;;GA;;;SY)(A;;GA;;;BA)" ;Allow generic all access to system and built-in Admin.
|
||||
;[HKR,,Exclusive,0x10001,1]
|
||||
;[HKR,,SilentInstall,,1]
|
||||
|
||||
; ================= Device Install section =====================
|
||||
|
||||
[ControlFlags]
|
||||
ExcludeFromSelect=*
|
||||
|
||||
[Manufacturer]
|
||||
%LCardMfg%=LCardMfg,NTx86
|
||||
|
||||
|
||||
|
||||
; For Win2K
|
||||
[LCardMfg]
|
||||
; DisplayName Section DeviceId
|
||||
; ----------- ------- --------
|
||||
%L502.DeviceDescr% = lpcie_inst, PCI\VEN_1172&DEV_0502&SUBSYS_4C353032
|
||||
|
||||
|
||||
; For XP and later
|
||||
[LCardMfg.NTx86]
|
||||
; DisplayName Section DeviceId
|
||||
; ----------- ------- --------
|
||||
%L502.DeviceDescr% = lpcie_inst, PCI\VEN_1172&DEV_0502&SUBSYS_4C353032
|
||||
|
||||
|
||||
|
||||
[lpcie_inst.HW]
|
||||
AddReg = lpcie_hw_addreg
|
||||
|
||||
[lpcie_inst.NT.HW]
|
||||
AddReg = lpcie_hw_addreg
|
||||
|
||||
;Äîáàâëÿåì â ðååñòð ôëàã, ÷òî ìîæíî èñïîëüçîâàòü MSI
|
||||
[lpcie_hw_addreg]
|
||||
HKR, Interrupt Management,, 0x00000010
|
||||
HKR, Interrupt Management\MessageSignaledInterruptProperties,, 0x00000010
|
||||
HKR, Interrupt Management\MessageSignaledInterruptProperties, MSISupported, 0x00010001, 1
|
||||
|
||||
|
||||
|
||||
|
||||
[lpcie_inst]
|
||||
CopyFiles=Lpcie.CopyFiles
|
||||
|
||||
[lpcie_inst.NT]
|
||||
CopyFiles=Lpcie.CopyFiles
|
||||
|
||||
[Lpcie.CopyFiles]
|
||||
lpcie.sys
|
||||
|
||||
|
||||
[lpcie_inst.Services]
|
||||
AddService=lpcie,0x00000002,lpcie_service
|
||||
|
||||
[lpcie_inst.NT.Services]
|
||||
AddService=lpcie,0x00000002,lpcie_service
|
||||
|
||||
[lpcie_service]
|
||||
DisplayName = %LPCIE.SVCDESC%
|
||||
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
|
||||
StartType = 1 ; SERVICE_AUTO_START
|
||||
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
|
||||
ServiceBinary = %12%\lpcie.sys
|
||||
;AddReg = Pci9x5x_Parameters_AddReg
|
||||
|
||||
;-------------- Coinstaller installation
|
||||
[DestinationDirs]
|
||||
CoInstaller_CopyFiles = 11
|
||||
|
||||
|
||||
[lpcie_inst.CoInstallers]
|
||||
AddReg=CoInstaller_AddReg
|
||||
CopyFiles=CoInstaller_CopyFiles
|
||||
|
||||
[lpcie_inst.NT.CoInstallers]
|
||||
AddReg=CoInstaller_AddReg
|
||||
CopyFiles=CoInstaller_CopyFiles
|
||||
|
||||
[CoInstaller_CopyFiles]
|
||||
WdfCoInstaller01009.dll
|
||||
|
||||
[SourceDisksFiles]
|
||||
WdfCoInstaller01009.dll=1 ; make sure the number matches with SourceDisksNames
|
||||
|
||||
[CoInstaller_AddReg]
|
||||
HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01009.dll,WdfCoInstaller"
|
||||
|
||||
|
||||
[lpcie_inst.Wdf]
|
||||
KmdfService = lpcie, lpcie_wdfsect
|
||||
|
||||
[lpcie_inst.NT.Wdf]
|
||||
KmdfService = lpcie, lpcie_wdfsect
|
||||
[lpcie_wdfsect]
|
||||
KmdfLibraryVersion = 1.9
|
||||
|
||||
[Strings]
|
||||
LCardMfg = "L Card"
|
||||
L502.DeviceDescr = "L-502"
|
||||
ClassName = "'L Card' PCI Express devices"
|
||||
LPCIE.SVCDESC = "KMDF driver for 'L-Card' PCI Express devices"
|
||||
PkgName = "driver for PCI Express boards"
|
||||
DISK_NAME = "'L Card' Software Install Disk"
|
||||
|
||||
[Strings.0419]
|
||||
LCardMfg="Ë Êàðä"
|
||||
L502.DeviceDescr = "L-502"
|
||||
LPCIE.SVCDESC="KMDF äðàéâåð äëÿ PCI Express óñòðîéñòâ ôèðìû 'Ë Êàðä'"
|
||||
PkgName = "Äðàéâåð äëÿ ïëàò PCI Express"
|
||||
ClassName="PCI Express óñòðîéñòâà îò ôèðìû 'Ë Êàðä'"
|
||||
DISK_NAME = "Äèñê ñ ïðîãðàììíûì îáåñïå÷åíèåì 'Ë Êàðä'"
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,18 @@
|
||||
Данный пример демонстрирует работу с модулеми L502 и E502 из среды "Borland C++ Builder".
|
||||
Пример содержит файл проекта для среды "Borland C++ Builder 6" (x502_example.dpr) и для
|
||||
среды "Embarcadero C++ Builder XE" (x502_example.cbproj)
|
||||
|
||||
Для того чтобы собрать проект, необходимо изменить путь к заголовочным файлам,
|
||||
на путь где находится на Вашем компьютере файлы x502api.h, e502api.h, l502api.h и lcard_pstdint.h и заменить добавленые
|
||||
в проект файлы x502api.lib, e5l502api.lib и l502api.lib на те, которые находится на Вашем компьютере (ставятся в SDK_DIR/lib/borland).
|
||||
|
||||
Проект демонстрирует в первую очередь как можно работать с модулями L502 и E502, а не как нужно программировать
|
||||
в среде C++ Builder.
|
||||
|
||||
Пример демонстрирует синхронный потоковый ввод с АЦП для трех логических каналов
|
||||
с возможностью запуска синхронного ввода с цифроых линий, а так же
|
||||
асинхронный ввод/вывод для цифровых линий, ЦАП и асинхронный ввод одного кадра АЦП.
|
||||
|
||||
Синхронный ввод осуществляется в отдельном потоке (X502_ProcessThread), который создается
|
||||
и запускается по нажатию кнопки. В потоке осуществляется прием, обработка данных и вывод их
|
||||
на индикаторы (указатели на элементы индикаторов сохраняются в объекте потока перед его запуском).
|
||||
@@ -0,0 +1,526 @@
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#include <vcl.h>
|
||||
#pragma hdrstop
|
||||
|
||||
#include "unit.h"
|
||||
#include <stdio.h>
|
||||
//---------------------------------------------------------------------------
|
||||
#pragma package(smart_init)
|
||||
#pragma resource "*.dfm"
|
||||
TForm1 *Form1;
|
||||
|
||||
/* ìåòîä îïðåäåëÿåò êàêèå óïðàâëÿþùèå ýëåìåíòû ðàçðåøåíû, à êàêèå çàïðåùåíû */
|
||||
void TForm1::updateControls() {
|
||||
/* êíîïêà îáíîâèòü ñïèñîê äîñòóïíà ïîêà íå îòêðûëè óñòðîéñòâî */
|
||||
btnRefreshDeviceList->Enabled = (hnd==NULL);
|
||||
cbbDevList->Enabled = (hnd==NULL);
|
||||
|
||||
btnOpen->Caption = hnd == NULL ? "Óñòàíîâèòü ñâÿçü ñ ìîäóëåì" :
|
||||
"Ðàçîðâàòü ñâÿçü ñ ìîäóëåì";
|
||||
btnOpen->Enabled = (hnd!=NULL) || (cbbDevList->ItemIndex >= 0);
|
||||
btnOpenByIP->Enabled = (hnd==NULL);
|
||||
edtIpAddr->Enabled = (hnd==NULL);
|
||||
|
||||
chkSyncDin->Enabled = (hnd!=NULL) && !threadRunning;
|
||||
btnStart->Enabled = (hnd!=NULL) && !threadRunning;
|
||||
btnStop->Enabled = (hnd!=NULL) && threadRunning;
|
||||
|
||||
btnSetAdcFreq->Enabled = (hnd!=NULL) && !threadRunning;
|
||||
|
||||
btnAsyncDigOut->Enabled = (hnd!=NULL);
|
||||
btnAsyncDigIn->Enabled = (hnd!=NULL);
|
||||
btnAsyncDac1->Enabled = (hnd!=NULL) && chkDacPresent->Checked;
|
||||
btnAsyncDac2->Enabled = (hnd!=NULL) && chkDacPresent->Checked;
|
||||
btnAsyncAdcFrame->Enabled = (hnd!=NULL) && !threadRunning;
|
||||
|
||||
}
|
||||
|
||||
void TForm1::freeDevList() {
|
||||
if (devrecList.Length != 0) {
|
||||
X502_FreeDevRecordList(&devrecList[0], devrecList.Length);
|
||||
devrecList.Length = 0;
|
||||
}
|
||||
cbbDevList->Items->Clear();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* îáíîâëåíèå ñïèñêà ïîäêëþ÷åííûõ ïëàò L502 è E502*/
|
||||
void TForm1::refreshDeviceList(void) {
|
||||
uint32_t pci_devcnt = 0;
|
||||
uint32_t usb_devcnt = 0;
|
||||
int32_t fnd_devcnt = 0;
|
||||
|
||||
int old_index = cbbDevList->ItemIndex;
|
||||
|
||||
/* î÷èùàåì ðåñóðñû çàïèñåé, åñëè áûëè âûäåëåíû */
|
||||
freeDevList();
|
||||
|
||||
/* ïîëó÷àåì êîëè÷åñòâî ïîäêëþ÷åííûõ óñòðîéñòâ ïî èíòåðôåéñàì PCI è USB */
|
||||
L502_GetDevRecordsList(NULL, 0, 0, &pci_devcnt);
|
||||
E502_UsbGetDevRecordsList(NULL, 0, 0, &usb_devcnt);
|
||||
|
||||
if ((pci_devcnt+usb_devcnt) != 0) {
|
||||
/* âûäåëÿåì ïàìÿòü äëÿ ìàññèâà äëÿ ñîõðàíåíèÿ íàéäåííîãî
|
||||
êîëè÷åñòâà çàïèñåé */
|
||||
devrecList.Length = pci_devcnt + usb_devcnt;
|
||||
|
||||
/* ïîëó÷àåì çàïèñè î ìîäóëÿõ L502, íî íå áîëüøå pci_devcnt */
|
||||
if (pci_devcnt!=0) {
|
||||
int32_t res = L502_GetDevRecordsList(&devrecList[fnd_devcnt],
|
||||
pci_devcnt, 0, NULL);
|
||||
if (res >= 0) {
|
||||
fnd_devcnt += res;
|
||||
}
|
||||
}
|
||||
/* äîáàâëÿåì çàïèñè î ìîäóëÿõ E502, ïîäêëþ÷åííûõ ïî USB, â êîíåö ìàññèâà */
|
||||
if (usb_devcnt!=0) {
|
||||
int32_t res = E502_UsbGetDevRecordsList(&devrecList[fnd_devcnt],
|
||||
usb_devcnt, 0, NULL);
|
||||
if (res >= 0) {
|
||||
fnd_devcnt += res;
|
||||
}
|
||||
}
|
||||
|
||||
devrecList.Length = fnd_devcnt;
|
||||
if (fnd_devcnt > 0) {
|
||||
/* äîáàâëÿåì âñå íàéäåííûå çàïèñè â ñïèñîê ComboBox'à äëÿ âûáîðà */
|
||||
for (int32_t i=0; i < fnd_devcnt; i++) {
|
||||
cbbDevList->Items->Add(AnsiString(devrecList[i].devname) + ", " + AnsiString(devrecList[i].serial));
|
||||
}
|
||||
/* åñëè äî îáíîâëåíèÿ ñïèñêà áûë âûáðàí äåéñòâèòåëüíûé èíäåêñ - âîññòàíàâëèâàåì åãî */
|
||||
cbbDevList->ItemIndex = (old_index >= 0) && (old_index < fnd_devcnt) ? old_index : 0;
|
||||
}
|
||||
}
|
||||
updateControls();
|
||||
}
|
||||
|
||||
|
||||
/* Óñòàíîâêà ïåðàìåòðîâ ñáîðà ìîäóëÿ â ñîîòâåòñòâèè ñ ýëåìåíòàìè GUI */
|
||||
int32_t TForm1::setupParams() {
|
||||
int32_t err = 0;
|
||||
uint32_t lch_cnt = cbbLChCnt->ItemIndex+1;
|
||||
/* òàáëèöà ñîîòâåòñòâèÿ èíäåêñîâ â ComboBox è êîäîâ ðåæèìà èçìåðåíèÿ */
|
||||
static uint32_t f_mode_tbl[] = {X502_LCH_MODE_COMM, X502_LCH_MODE_DIFF, X502_LCH_MODE_ZERO};
|
||||
/* òàáëèöà ñîîòâåòñòâèÿ èíäåêñîâ â ComboBox è êîäîâ äèàïàçîíîâ ÀÖÏ */
|
||||
static uint32_t f_range_tbl[] = {X502_ADC_RANGE_10, X502_ADC_RANGE_5, X502_ADC_RANGE_2,
|
||||
X502_ADC_RANGE_1, X502_ADC_RANGE_05, X502_ADC_RANGE_02};
|
||||
/* òàáëèöà ñîîòâåòñòâèÿ èíäåêñîâ â ComboBox è êîäîâ èñòî÷íèêà ñèíõðîíèçàöèè */
|
||||
static uint32_t f_sync_tbl[] = {X502_SYNC_INTERNAL, X502_SYNC_EXTERNAL_MASTER,
|
||||
X502_SYNC_DI_SYN1_RISE, X502_SYNC_DI_SYN2_RISE,
|
||||
X502_SYNC_DI_SYN1_FALL, X502_SYNC_DI_SYN2_FALL};
|
||||
|
||||
/* Óñòàíàâëèâàåì êîë-âî ëîãè÷åñêèõ êàíàëîâ */
|
||||
err = X502_SetLChannelCount(hnd, lch_cnt);
|
||||
if (err == X502_ERR_OK) {
|
||||
err = X502_SetLChannel(hnd, 0, cbbLCh1_Channel->ItemIndex,
|
||||
f_mode_tbl[cbbLCh1_Mode->ItemIndex], f_range_tbl[cbbLCh1_Range->ItemIndex],0);
|
||||
}
|
||||
if ((err == X502_ERR_OK) && (lch_cnt>=2)) {
|
||||
err = X502_SetLChannel(hnd, 1, cbbLCh2_Channel->ItemIndex,
|
||||
f_mode_tbl[cbbLCh2_Mode->ItemIndex], f_range_tbl[cbbLCh2_Range->ItemIndex],0);
|
||||
}
|
||||
if ((err == X502_ERR_OK) && (lch_cnt>=3)) {
|
||||
err = X502_SetLChannel(hnd, 2, cbbLCh3_Channel->ItemIndex,
|
||||
f_mode_tbl[cbbLCh3_Mode->ItemIndex], f_range_tbl[cbbLCh3_Range->ItemIndex],0);
|
||||
}
|
||||
|
||||
/* Íàñòðàèâàåì èñòî÷íèê ÷àñòîòû ñèíõðîíèçàöèè è çàïóñêà ñáîðà */
|
||||
if (err == X502_ERR_OK)
|
||||
err = X502_SetSyncMode(hnd, f_sync_tbl[cbbSyncMode->ItemIndex]);
|
||||
if (err == X502_ERR_OK)
|
||||
err = X502_SetSyncStartMode(hnd, f_sync_tbl[cbbSyncStartMode->ItemIndex]);
|
||||
|
||||
/* íàñòðàèâàåì ÷àñòîòó ñáîðà ñ ÀÖÏ */
|
||||
if (err == X502_ERR_OK)
|
||||
err = setAdcFreq();
|
||||
|
||||
/* Çàïèñûâàåì íàñòðîéêè â ìîäóëü */
|
||||
if (err == X502_ERR_OK)
|
||||
err = X502_Configure(hnd, 0);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
int32_t TForm1::setAdcFreq() {
|
||||
double f_acq = StrToFloat(edtAdcFreq->Text);
|
||||
double f_lch = StrToFloat(edtAdcFreqLch->Text);
|
||||
double f_din = StrToFloat(edtDinFreq->Text);
|
||||
/* óñòàíàâëèâàåì òðåáóåìóþ ÷àñòîòó ñáîðà. */
|
||||
int32_t err = X502_SetAdcFreq(hnd, &f_acq, &f_lch);
|
||||
if (err == X502_ERR_OK) {
|
||||
/* îáíîâëÿåì çíà÷åíèå èíäèêàòîðà, äëÿ îòîáðàæåíèÿ
|
||||
ðåàëüíî óñòàíîâèâøåéñÿ ÷àñòîòû */
|
||||
edtAdcFreq->Text = FloatToStr(f_acq);
|
||||
edtAdcFreqLch->Text = FloatToStr(f_lch);
|
||||
|
||||
/* Óñòàíàâëèâàåì ÷àñòîòó ñèíõðîííîãî ñáîðà */
|
||||
err = X502_SetDinFreq(hnd, &f_din);
|
||||
if (err == X502_ERR_OK)
|
||||
edtDinFreq->Text = FloatToStr(f_din);
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
int32_t TForm1::setSyncDinStream() {
|
||||
int32_t err;
|
||||
/* ðàçðåøàåì èëè çàïðåùàåì ïîòîê ñèíõðîííîãî ââîäà
|
||||
â çàâèñèìîñòè îò ñîñòîÿíèÿ ïåðåêëþ÷àòåëÿ */
|
||||
if (chkSyncDin->Checked) {
|
||||
err = X502_StreamsEnable(hnd, X502_STREAM_DIN);
|
||||
} else {
|
||||
err = X502_StreamsDisable(hnd, X502_STREAM_DIN);
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
void __fastcall TForm1::OnThreadTerminate(TObject *obj) {
|
||||
if (thread->err != X502_ERR_OK) {
|
||||
MessageDlg("Ñáîð äàííûõ çàâåðøåí ñ îøèáêîé: " + String(X502_GetErrorString(thread->err)),
|
||||
mtError, TMsgDlgButtons() << mbOK,NULL);
|
||||
}
|
||||
|
||||
threadRunning = false;
|
||||
updateControls();
|
||||
}
|
||||
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
__fastcall TForm1::TForm1(TComponent* Owner)
|
||||
: TForm(Owner), hnd(NULL) {
|
||||
refreshDeviceList();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
|
||||
void __fastcall TForm1::btnRefreshDeviceListClick(TObject *Sender) {
|
||||
refreshDeviceList();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TForm1::btnStartClick(TObject *Sender) {
|
||||
/* íàñòðàèâàåì âñå ïàðàìåòðû â ñîîòâåòñòâèè ñ ýëåìåíòàìè óïðàâëåíèÿ */
|
||||
int32_t err = setupParams();
|
||||
if (err != X502_ERR_OK) {
|
||||
MessageDlg("Îøèáêà íàñòðîéêè ïàðàìåòðîâ ïëàòû: " + String(X502_GetErrorString(err)),
|
||||
mtError, TMsgDlgButtons() << mbOK,NULL);
|
||||
}
|
||||
|
||||
/* ðàçðåøàåì ñèíõðîííûé ââîä ÀÖÏ */
|
||||
if (err == X502_ERR_OK)
|
||||
err = X502_StreamsEnable(hnd, X502_STREAM_ADC);
|
||||
/* ðàçðåøàåì ñèíõðîííûé ââîä ñ öèôðîâûõ ëèíèé â çàâèñèìîñòè îò ïåðåêëþ÷àòåëÿ */
|
||||
if (err == X502_ERR_OK)
|
||||
err = setSyncDinStream();
|
||||
|
||||
|
||||
if (err == X502_ERR_OK) {
|
||||
/* åñëè îñòàëñÿ íå óäàëåííûé îáúåêò ïîòîêà - óäàëÿåì */
|
||||
if (thread) {
|
||||
delete thread;
|
||||
thread = NULL;
|
||||
}
|
||||
//ñîçäàíèå êëàññà ïîòîêà
|
||||
thread = new X502_ProcessThread(true);
|
||||
thread->hnd = hnd;
|
||||
|
||||
//ïåðåäà÷à ïîòîêó ýëåìåíòîâ óïðàâëåíèÿ äëÿ îòîáðàæåíèÿ ðåçóëüòàòîâ ñáîðà
|
||||
thread->lchResEdits[0] = edtLCh1_Result;
|
||||
thread->lchResEdits[1] = edtLCh2_Result;
|
||||
thread->lchResEdits[2] = edtLCh3_Result;
|
||||
thread->dinResEdit = edtDin_Result;
|
||||
|
||||
edtLCh1_Result->Text="";
|
||||
edtLCh2_Result->Text="";
|
||||
edtLCh3_Result->Text="";
|
||||
edtDin_Result->Text="";
|
||||
|
||||
/* óñòàíàâëèâàåì ôóíêöèþ íà ñîáûòèå çàâåðøåíèÿ ïîòîêà (â ÷àñòíîñòè
|
||||
÷òîáû îòñëåäèòü, åñëè ïîòîê çàâåðøèëñÿ ñàì èç-çà îøèáêè ïðè ñáîðå
|
||||
äàííûõ) */
|
||||
thread->OnTerminate = OnThreadTerminate;
|
||||
thread->Resume(); //çàïóñê ïîòîêà
|
||||
threadRunning = true;
|
||||
|
||||
updateControls();
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TForm1::btnStopClick(TObject *Sender) {
|
||||
/* óñòàíàâëèâàåì çàïðîñ íà çàâåðøåíèå ïîòîêà */
|
||||
if (threadRunning)
|
||||
thread->stop = true;
|
||||
btnStop->Enabled = false;
|
||||
}
|
||||
|
||||
|
||||
void TForm1::showDevInfo(void) {
|
||||
t_x502_info info;
|
||||
int32_t err = X502_GetDevInfo(hnd, &info);
|
||||
if (err == X502_ERR_OK) {
|
||||
chkDacPresent->Checked = info.devflags & X502_DEVFLAGS_DAC_PRESENT;
|
||||
chkGalPresent->Checked = info.devflags & X502_DEVFLAGS_GAL_PRESENT;
|
||||
chkDspPresent->Checked = info.devflags & X502_DEVFLAGS_BF_PRESENT;
|
||||
chkEthPresent->Checked = info.devflags & X502_DEVFLAGS_IFACE_SUPPORT_ETH;
|
||||
|
||||
edtPldaVer->Text = IntToStr(info.plda_ver);
|
||||
edtFpgaVer->Text = IntToStr((info.fpga_ver>>8)&0xFF) + "."
|
||||
+ IntToStr(info.fpga_ver & 0xFF);
|
||||
if (info.mcu_firmware_ver != 0) {
|
||||
edtMcuVer->Text = IntToStr((int)(info.mcu_firmware_ver>>24)&0xFF) + "." +
|
||||
IntToStr((int)(info.mcu_firmware_ver>>16)&0xFF) + "." +
|
||||
IntToStr((int)(info.mcu_firmware_ver>>8)&0xFF) + "." +
|
||||
IntToStr((int)info.mcu_firmware_ver & 0xFF);
|
||||
} else {
|
||||
edtMcuVer->Text = "";
|
||||
}
|
||||
} else {
|
||||
MessageDlg("Îøèáêà ïîëó÷åíèÿ èíôîðìàöèè î ìîäóëå: " + String(X502_GetErrorString(err)),
|
||||
mtError, TMsgDlgButtons() << mbOK,NULL);
|
||||
|
||||
X502_Close(hnd);
|
||||
X502_Free(hnd);
|
||||
hnd = NULL;
|
||||
}
|
||||
}
|
||||
/* ôóíêöèÿ îòêðûòèÿ óñòðîéñòâà ñ âûáðàííûì ñåðèéíûì íîìåðîì èëè çàêðûòèÿ åãî,
|
||||
åñëè îíî óæå áûëî îòêðûòî */
|
||||
void __fastcall TForm1::btnOpenClick(TObject *Sender) {
|
||||
|
||||
/* åñëè óñòðîéñòâî áûëî çàêðûòî - ñîçäàåì íîâûé îïèñàòåëü è îòêðûâàåì åãî */
|
||||
if (hnd==NULL) {
|
||||
int idx = cbbDevList->ItemIndex;
|
||||
if ((idx >= 0) && (idx < devrecList.Length)) {
|
||||
hnd = X502_Create();
|
||||
if (hnd==NULL) {
|
||||
MessageDlg("Îøèáêà ñîçäàíèÿ îïèñàòåëÿ ìîäóëÿ", mtError, TMsgDlgButtons() << mbOK,NULL);
|
||||
} else {
|
||||
/* îòêðûâàåì ìîäóëü, ñîîòâåòñòâóþùèé çàïèñè ñ âûáðàííûì èíäåêñîì */
|
||||
int32_t err = X502_OpenByDevRecord(hnd, &devrecList[idx]);
|
||||
if (err != X502_ERR_OK) {
|
||||
MessageDlg("Îøèáêà îòêðûòèÿ ìîäóëÿ: " + String(X502_GetErrorString(err)),
|
||||
mtError, TMsgDlgButtons() << mbOK,NULL);
|
||||
X502_Free(hnd);
|
||||
hnd = NULL;
|
||||
} else {
|
||||
showDevInfo();
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* åñëè óñòðîéñòâî áûëî îòêðûòî - çàêðûâàåì */
|
||||
closeDevice();
|
||||
}
|
||||
updateControls();
|
||||
}
|
||||
|
||||
uint32_t TForm1::parseIpAddr(AnsiString addr) {
|
||||
int a[4],i;
|
||||
if (sscanf(addr.c_str(), "%d.%d.%d.%d", &a[0], &a[1], &a[2], &a[3])!=4) {
|
||||
throw new Exception("Íåâåðíûé ôîðìàò IP-àäðåñà!!");
|
||||
}
|
||||
|
||||
for (i=0; i < 4; i++) {
|
||||
if ((a[i]<0) || (a[i] > 255)) {
|
||||
throw new Exception("Íåäåéñòâèòåëüíûé IP-àäðåñ!!");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return (a[0] << 24) | (a[1]<<16) | (a[2]<<8) | a[3];
|
||||
}
|
||||
void __fastcall TForm1::btnOpenByIPClick(TObject *Sender) {
|
||||
t_x502_devrec devrec;
|
||||
int32_t err = E502_MakeDevRecordByIpAddr(&devrec, parseIpAddr(edtIpAddr->Text), 0, 5000);
|
||||
if (err != X502_ERR_OK) {
|
||||
MessageDlg("Îøèáêà ñîçäàíèÿ çàïèñè: " + String(X502_GetErrorString(err)),
|
||||
mtError, TMsgDlgButtons() << mbOK,NULL);
|
||||
} else {
|
||||
hnd = X502_Create();
|
||||
if (hnd==NULL) {
|
||||
MessageDlg("Îøèáêà ñîçäàíèÿ îïèñàòåëÿ ìîäóëÿ", mtError, TMsgDlgButtons() << mbOK,NULL);
|
||||
} else {
|
||||
/* óñòàíàâëèâàåì ñâÿçü ïî ñîçäàííîé çàïèñè */
|
||||
int32_t err = X502_OpenByDevRecord(hnd, &devrec);
|
||||
if (err != X502_ERR_OK) {
|
||||
MessageDlg("Îøèáêà îòêðûòèÿ ìîäóëÿ: " + String(X502_GetErrorString(err)),
|
||||
mtError, TMsgDlgButtons() << mbOK,NULL);
|
||||
X502_Free(hnd);
|
||||
hnd = NULL;
|
||||
} else {
|
||||
showDevInfo();
|
||||
}
|
||||
}
|
||||
}
|
||||
updateControls();
|
||||
}
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void TForm1::closeDevice() {
|
||||
if (hnd != NULL) {
|
||||
/* åñëè çàïóùåí ïîòîê ñáîðà äàííûõ - òî îñòàíàâëèâàåì åãî */
|
||||
if (threadRunning) {
|
||||
thread->stop=1;
|
||||
thread->WaitFor();
|
||||
}
|
||||
/* çàêðûòèå ñâÿçè ñ ìîäóëåì */
|
||||
X502_Close(hnd);
|
||||
/* îñâîáîæäåíèå îïèñàòåëÿ */
|
||||
X502_Free(hnd);
|
||||
hnd = NULL;
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) {
|
||||
closeDevice();
|
||||
freeDevList();
|
||||
if (thread)
|
||||
delete thread;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TForm1::btnAsyncDigOutClick(TObject *Sender) {
|
||||
if (hnd!=NULL) {
|
||||
uint32_t val = StrToInt(edtAsyncDigOut->Text);
|
||||
int32_t err = X502_AsyncOutDig(hnd, val, 0);
|
||||
if (err != X502_ERR_OK) {
|
||||
MessageDlg("Îøèáêà àñèíõðîííîãî âûâîäà íà öèôðîâûå ëèíèè: " + String(X502_GetErrorString(err)),
|
||||
mtError, TMsgDlgButtons() << mbOK,NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TForm1::adcFreqEditChange(TObject *Sender) {
|
||||
if (hnd != NULL) {
|
||||
/* óñòàíàâëèâàåì êîë-âî ëîãè÷åñêèõ êàíàëîâ, ÷òîáû ïðàâèëüíî
|
||||
ðàñ÷èòàòü ÷àñòîòó íà êàíàë */
|
||||
int32_t err = X502_SetLChannelCount(hnd, cbbLChCnt->ItemIndex+1);
|
||||
if (err == X502_ERR_OK)
|
||||
err = setAdcFreq();
|
||||
if (err != X502_ERR_OK) {
|
||||
MessageDlg("Îøèáêà óñòàíîâêè ÷àñòîòû ñáîðà: " + String(X502_GetErrorString(err)),
|
||||
mtError, TMsgDlgButtons() << mbOK,NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TForm1::chkSyncDinClick(TObject *Sender) {
|
||||
if (hnd != NULL) {
|
||||
int32_t err = setSyncDinStream();
|
||||
if (err != X502_ERR_OK) {
|
||||
MessageDlg("Îøèáêà ðàçðåøåíèÿ/çàïðåòà ñèíõðîííîãî ââîäà: " + String(X502_GetErrorString(err)),
|
||||
mtError, TMsgDlgButtons() << mbOK,NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TForm1::btnAsyncDigInClick(TObject *Sender) {
|
||||
if (hnd != NULL) {
|
||||
uint32_t din;
|
||||
int32_t err = X502_AsyncInDig(hnd, &din);
|
||||
if (err != X502_ERR_OK) {
|
||||
MessageDlg("Îøèáêà àñèíõðîííîãî ââîäà ñ öèôðîâûõ ëèíèé: " + String(X502_GetErrorString(err)),
|
||||
mtError, TMsgDlgButtons() << mbOK,NULL);
|
||||
} else {
|
||||
edtAsyncDigIn->Text = IntToHex((int)din&0x3FFFF, 5);
|
||||
}
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TForm1::btnAsyncDac1Click(TObject *Sender) {
|
||||
if (hnd != NULL) {
|
||||
double val = StrToFloat(edtAsyncDac1->Text);;
|
||||
int32_t err;
|
||||
err = X502_AsyncOutDac(hnd, X502_DAC_CH1, val, X502_DAC_FLAGS_CALIBR |
|
||||
X502_DAC_FLAGS_VOLT);
|
||||
if (err != X502_ERR_OK) {
|
||||
MessageDlg("Îøèáêà âûâîäà íà ÖÀÏ: " + String(X502_GetErrorString(err)),
|
||||
mtError, TMsgDlgButtons() << mbOK,NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TForm1::btnAsyncDac2Click(TObject *Sender) {
|
||||
if (hnd != NULL) {
|
||||
double val = StrToFloat(edtAsyncDac2->Text);;
|
||||
int32_t err;
|
||||
err = X502_AsyncOutDac(hnd, X502_DAC_CH2, val, X502_DAC_FLAGS_CALIBR |
|
||||
X502_DAC_FLAGS_VOLT);
|
||||
if (err != X502_ERR_OK) {
|
||||
MessageDlg("Îøèáêà âûâîäà íà ÖÀÏ: " + String(X502_GetErrorString(err)),
|
||||
mtError, TMsgDlgButtons() << mbOK,NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TForm1::btnAsyncAdcFrameClick(TObject *Sender) {
|
||||
if (hnd != NULL) {
|
||||
uint32_t lch_cnt;
|
||||
/* íàñòðàèâàåì ëîãè÷åñêóþ òàáëèöó ÀÖÏ */
|
||||
int32_t err = setupParams();
|
||||
if (err == X502_ERR_OK)
|
||||
err = X502_GetLChannelCount(hnd, &lch_cnt);
|
||||
|
||||
if (err != X502_ERR_OK) {
|
||||
MessageDlg("Îøèáêà íàñòðîéêè ïàðàìåòðîâ ÀÖÏ: " + String(X502_GetErrorString(err)),
|
||||
mtError, TMsgDlgButtons() << mbOK,NULL);
|
||||
}
|
||||
|
||||
if (err == X502_ERR_OK) {
|
||||
/* â ïðèìåðå èñïîëüçóåì 3 êàíàëà - ñîçäàåì ìàññèâ äëÿ ïðèåìà
|
||||
îòñ÷åòà íà êàæäûé êàíàë */
|
||||
double adc_data[3];
|
||||
err = X502_AsyncGetAdcFrame(hnd, X502_PROC_FLAGS_VOLT, 1000, adc_data);
|
||||
if (err != X502_ERR_OK) {
|
||||
MessageDlg("Îøèáêà ïðèåìà êàäðà ÀÖÏ: " + String(X502_GetErrorString(err)),
|
||||
mtError, TMsgDlgButtons() << mbOK,NULL);
|
||||
} else {
|
||||
edtLCh1_Result->Text = FloatToStrF(adc_data[0], ffFixed, 4, 8);
|
||||
if (lch_cnt>=2) {
|
||||
edtLCh2_Result->Text = FloatToStrF(adc_data[1], ffFixed, 4, 8);
|
||||
} else {
|
||||
edtLCh2_Result->Text ="";
|
||||
}
|
||||
|
||||
if (lch_cnt>=3) {
|
||||
edtLCh3_Result->Text = FloatToStrF(adc_data[2], ffFixed, 4, 8);
|
||||
} else {
|
||||
edtLCh3_Result->Text = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
|
||||
void __fastcall TForm1::cbbDevListChange(TObject *Sender) {
|
||||
//refreshDeviceList();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
|
||||
void __fastcall TForm1::cbbLChCntChange(TObject *Sender) {
|
||||
if (cbbLChCnt->ItemIndex < 0)
|
||||
cbbLChCnt->ItemIndex = 0;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
@@ -0,0 +1,669 @@
|
||||
object Form1: TForm1
|
||||
Left = 599
|
||||
Top = 94
|
||||
Caption = 'L502/E502 test'
|
||||
ClientHeight = 702
|
||||
ClientWidth = 577
|
||||
Color = clBtnFace
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -11
|
||||
Font.Name = 'MS Sans Serif'
|
||||
Font.Style = []
|
||||
OldCreateOrder = False
|
||||
OnClose = FormClose
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object btnRefreshDeviceList: TButton
|
||||
Left = 16
|
||||
Top = 8
|
||||
Width = 217
|
||||
Height = 25
|
||||
Caption = #1054#1073#1085#1086#1074#1080#1090#1100' '#1089#1087#1080#1089#1082#1086' '#1091#1089#1090#1088#1086#1081#1089#1090#1074
|
||||
TabOrder = 0
|
||||
OnClick = btnRefreshDeviceListClick
|
||||
end
|
||||
object cbbDevList: TComboBox
|
||||
Left = 264
|
||||
Top = 8
|
||||
Width = 225
|
||||
Height = 21
|
||||
TabOrder = 1
|
||||
OnChange = cbbDevListChange
|
||||
end
|
||||
object btnStart: TButton
|
||||
Left = 16
|
||||
Top = 88
|
||||
Width = 217
|
||||
Height = 25
|
||||
Caption = #1047#1072#1087#1091#1089#1082' '#1089#1073#1086#1088#1072' '#1076#1072#1085#1085#1099#1093
|
||||
TabOrder = 2
|
||||
OnClick = btnStartClick
|
||||
end
|
||||
object GroupBox1: TGroupBox
|
||||
Left = 16
|
||||
Top = 376
|
||||
Width = 513
|
||||
Height = 153
|
||||
Caption = #1050#1072#1085#1072#1083#1099
|
||||
TabOrder = 3
|
||||
object Label2: TLabel
|
||||
Left = 8
|
||||
Top = 40
|
||||
Width = 31
|
||||
Height = 13
|
||||
Caption = #1050#1072#1085#1072#1083
|
||||
end
|
||||
object Label1: TLabel
|
||||
Left = 64
|
||||
Top = 40
|
||||
Width = 51
|
||||
Height = 13
|
||||
Caption = #1044#1080#1072#1087#1072#1079#1086#1085
|
||||
end
|
||||
object Label3: TLabel
|
||||
Left = 152
|
||||
Top = 40
|
||||
Width = 94
|
||||
Height = 13
|
||||
Caption = #1056#1077#1078#1080#1084' '#1080#1079#1084#1077#1088#1077#1085#1080#1103
|
||||
end
|
||||
object Label4: TLabel
|
||||
Left = 336
|
||||
Top = 40
|
||||
Width = 52
|
||||
Height = 13
|
||||
Caption = #1056#1077#1079#1091#1083#1100#1090#1072#1090
|
||||
end
|
||||
object Label9: TLabel
|
||||
Left = 16
|
||||
Top = 16
|
||||
Width = 164
|
||||
Height = 13
|
||||
Caption = #1050#1086#1083#1080#1095#1077#1089#1090#1074#1086' '#1083#1086#1075#1080#1095#1077#1089#1082#1080#1093' '#1082#1072#1085#1072#1083#1086#1074
|
||||
end
|
||||
object cbbLCh1_Channel: TComboBox
|
||||
Left = 8
|
||||
Top = 56
|
||||
Width = 41
|
||||
Height = 21
|
||||
ItemIndex = 0
|
||||
TabOrder = 0
|
||||
Text = '1'
|
||||
Items.Strings = (
|
||||
'1'
|
||||
'2'
|
||||
'3'
|
||||
'4'
|
||||
'5'
|
||||
'6'
|
||||
'7'
|
||||
'8'
|
||||
'9'
|
||||
'10'
|
||||
'11'
|
||||
'12'
|
||||
'13'
|
||||
'14'
|
||||
'15'
|
||||
'16'
|
||||
'17'
|
||||
'18'
|
||||
'19'
|
||||
'20'
|
||||
'21'
|
||||
'22'
|
||||
'23'
|
||||
'24'
|
||||
'25'
|
||||
'26'
|
||||
'27'
|
||||
'28'
|
||||
'29'
|
||||
'30'
|
||||
'31'
|
||||
'32')
|
||||
end
|
||||
object cbbLCh1_Range: TComboBox
|
||||
Left = 64
|
||||
Top = 56
|
||||
Width = 57
|
||||
Height = 21
|
||||
ItemIndex = 0
|
||||
TabOrder = 1
|
||||
Text = '10 '#1042
|
||||
Items.Strings = (
|
||||
'10 '#1042
|
||||
'5 '#1042
|
||||
'2 '#1042
|
||||
'1 '#1042
|
||||
'0.5 '#1042
|
||||
'0.2 '#1042)
|
||||
end
|
||||
object cbbLCh1_Mode: TComboBox
|
||||
Left = 136
|
||||
Top = 56
|
||||
Width = 169
|
||||
Height = 21
|
||||
ItemIndex = 1
|
||||
TabOrder = 2
|
||||
Text = #1044#1080#1092#1092#1077#1088#1077#1085#1094#1080#1072#1083#1100#1085#1099#1081
|
||||
Items.Strings = (
|
||||
#1057' '#1086#1073#1097#1077#1081' '#1079#1077#1084#1083#1077#1081
|
||||
#1044#1080#1092#1092#1077#1088#1077#1085#1094#1080#1072#1083#1100#1085#1099#1081
|
||||
#1048#1079#1084#1077#1088#1077#1085#1080#1077' '#1085#1091#1083#1103)
|
||||
end
|
||||
object edtLCh1_Result: TEdit
|
||||
Left = 328
|
||||
Top = 56
|
||||
Width = 121
|
||||
Height = 21
|
||||
TabOrder = 3
|
||||
end
|
||||
object cbbLCh2_Channel: TComboBox
|
||||
Left = 8
|
||||
Top = 80
|
||||
Width = 41
|
||||
Height = 21
|
||||
ItemIndex = 1
|
||||
TabOrder = 4
|
||||
Text = '2'
|
||||
Items.Strings = (
|
||||
'1'
|
||||
'2'
|
||||
'3'
|
||||
'4'
|
||||
'5'
|
||||
'6'
|
||||
'7'
|
||||
'8'
|
||||
'9'
|
||||
'10'
|
||||
'11'
|
||||
'12'
|
||||
'13'
|
||||
'14'
|
||||
'15'
|
||||
'16'
|
||||
'17'
|
||||
'18'
|
||||
'19'
|
||||
'20'
|
||||
'21'
|
||||
'22'
|
||||
'23'
|
||||
'24'
|
||||
'25'
|
||||
'26'
|
||||
'27'
|
||||
'28'
|
||||
'29'
|
||||
'30'
|
||||
'31'
|
||||
'32')
|
||||
end
|
||||
object cbbLCh2_Range: TComboBox
|
||||
Left = 64
|
||||
Top = 80
|
||||
Width = 57
|
||||
Height = 21
|
||||
ItemIndex = 0
|
||||
TabOrder = 5
|
||||
Text = '10 '#1042
|
||||
Items.Strings = (
|
||||
'10 '#1042
|
||||
'5 '#1042
|
||||
'2 '#1042
|
||||
'1 '#1042
|
||||
'0.5 '#1042
|
||||
'0.2 '#1042)
|
||||
end
|
||||
object cbbLCh2_Mode: TComboBox
|
||||
Left = 136
|
||||
Top = 80
|
||||
Width = 169
|
||||
Height = 21
|
||||
ItemIndex = 1
|
||||
TabOrder = 6
|
||||
Text = #1044#1080#1092#1092#1077#1088#1077#1085#1094#1080#1072#1083#1100#1085#1099#1081
|
||||
Items.Strings = (
|
||||
#1057' '#1086#1073#1097#1077#1081' '#1079#1077#1084#1083#1077#1081
|
||||
#1044#1080#1092#1092#1077#1088#1077#1085#1094#1080#1072#1083#1100#1085#1099#1081
|
||||
#1048#1079#1084#1077#1088#1077#1085#1080#1077' '#1085#1091#1083#1103)
|
||||
end
|
||||
object edtLCh2_Result: TEdit
|
||||
Left = 328
|
||||
Top = 80
|
||||
Width = 121
|
||||
Height = 21
|
||||
TabOrder = 7
|
||||
end
|
||||
object cbbLCh3_Channel: TComboBox
|
||||
Left = 8
|
||||
Top = 104
|
||||
Width = 41
|
||||
Height = 21
|
||||
ItemIndex = 2
|
||||
TabOrder = 8
|
||||
Text = '3'
|
||||
Items.Strings = (
|
||||
'1'
|
||||
'2'
|
||||
'3'
|
||||
'4'
|
||||
'5'
|
||||
'6'
|
||||
'7'
|
||||
'8'
|
||||
'9'
|
||||
'10'
|
||||
'11'
|
||||
'12'
|
||||
'13'
|
||||
'14'
|
||||
'15'
|
||||
'16'
|
||||
'17'
|
||||
'18'
|
||||
'19'
|
||||
'20'
|
||||
'21'
|
||||
'22'
|
||||
'23'
|
||||
'24'
|
||||
'25'
|
||||
'26'
|
||||
'27'
|
||||
'28'
|
||||
'29'
|
||||
'30'
|
||||
'31'
|
||||
'32')
|
||||
end
|
||||
object cbbLCh3_Range: TComboBox
|
||||
Left = 64
|
||||
Top = 104
|
||||
Width = 57
|
||||
Height = 21
|
||||
ItemIndex = 0
|
||||
TabOrder = 9
|
||||
Text = '10 '#1042
|
||||
Items.Strings = (
|
||||
'10 '#1042
|
||||
'5 '#1042
|
||||
'2 '#1042
|
||||
'1 '#1042
|
||||
'0.5 '#1042
|
||||
'0.2 '#1042)
|
||||
end
|
||||
object cbbLCh3_Mode: TComboBox
|
||||
Left = 136
|
||||
Top = 104
|
||||
Width = 169
|
||||
Height = 21
|
||||
ItemIndex = 1
|
||||
TabOrder = 10
|
||||
Text = #1044#1080#1092#1092#1077#1088#1077#1085#1094#1080#1072#1083#1100#1085#1099#1081
|
||||
Items.Strings = (
|
||||
#1057' '#1086#1073#1097#1077#1081' '#1079#1077#1084#1083#1077#1081
|
||||
#1044#1080#1092#1092#1077#1088#1077#1085#1094#1080#1072#1083#1100#1085#1099#1081
|
||||
#1048#1079#1084#1077#1088#1077#1085#1080#1077' '#1085#1091#1083#1103)
|
||||
end
|
||||
object edtLCh3_Result: TEdit
|
||||
Left = 328
|
||||
Top = 104
|
||||
Width = 121
|
||||
Height = 21
|
||||
TabOrder = 11
|
||||
end
|
||||
object chkSyncDin: TCheckBox
|
||||
Left = 120
|
||||
Top = 128
|
||||
Width = 185
|
||||
Height = 17
|
||||
Caption = #1056#1072#1079#1088#1072#1096#1077#1085#1080#1077' '#1089#1080#1085#1093#1088#1086#1085#1085#1086#1075#1086' '#1074#1074#1086#1076#1072
|
||||
TabOrder = 12
|
||||
OnClick = chkSyncDinClick
|
||||
end
|
||||
object edtDin_Result: TEdit
|
||||
Left = 328
|
||||
Top = 128
|
||||
Width = 121
|
||||
Height = 21
|
||||
TabOrder = 13
|
||||
end
|
||||
object cbbLChCnt: TComboBox
|
||||
Left = 192
|
||||
Top = 16
|
||||
Width = 73
|
||||
Height = 21
|
||||
ItemIndex = 2
|
||||
TabOrder = 14
|
||||
Text = '3'
|
||||
OnChange = cbbLChCntChange
|
||||
Items.Strings = (
|
||||
'1'
|
||||
'2'
|
||||
'3')
|
||||
end
|
||||
end
|
||||
object btnStop: TButton
|
||||
Left = 16
|
||||
Top = 120
|
||||
Width = 217
|
||||
Height = 25
|
||||
Caption = #1054#1089#1090#1072#1085#1086#1074' '#1089#1073#1086#1088#1072' '#1076#1072#1085#1085#1099#1093
|
||||
Enabled = False
|
||||
TabOrder = 4
|
||||
OnClick = btnStopClick
|
||||
end
|
||||
object btnOpen: TButton
|
||||
Left = 16
|
||||
Top = 56
|
||||
Width = 217
|
||||
Height = 25
|
||||
Caption = #1054#1090#1082#1088#1099#1090#1100' '#1091#1089#1090#1088#1086#1081#1089#1090#1074#1086
|
||||
TabOrder = 5
|
||||
OnClick = btnOpenClick
|
||||
end
|
||||
object btnAsyncDigOut: TButton
|
||||
Left = 16
|
||||
Top = 600
|
||||
Width = 217
|
||||
Height = 25
|
||||
Caption = #1040#1089#1080#1085#1093#1088#1086#1085#1085#1099#1081' '#1074#1099#1074#1086#1076' '#1094#1080#1092#1088#1086#1074#1099#1093' '#1083#1080#1085#1080#1081
|
||||
TabOrder = 6
|
||||
OnClick = btnAsyncDigOutClick
|
||||
end
|
||||
object edtAsyncDigOut: TEdit
|
||||
Left = 248
|
||||
Top = 600
|
||||
Width = 121
|
||||
Height = 21
|
||||
TabOrder = 7
|
||||
Text = '0x0000'
|
||||
end
|
||||
object edtAsyncDigIn: TEdit
|
||||
Left = 248
|
||||
Top = 568
|
||||
Width = 121
|
||||
Height = 21
|
||||
Enabled = False
|
||||
TabOrder = 8
|
||||
Text = '0x0000'
|
||||
end
|
||||
object btnAsyncDigIn: TButton
|
||||
Left = 16
|
||||
Top = 568
|
||||
Width = 217
|
||||
Height = 25
|
||||
Caption = #1040#1089#1080#1085#1093#1088#1086#1085#1085#1099#1081' '#1074#1074#1086#1076' '#1094#1080#1092#1088#1086#1099#1093' '#1083#1080#1085#1080#1081
|
||||
TabOrder = 9
|
||||
OnClick = btnAsyncDigInClick
|
||||
end
|
||||
object GroupBox2: TGroupBox
|
||||
Left = 264
|
||||
Top = 40
|
||||
Width = 257
|
||||
Height = 169
|
||||
Caption = #1048#1085#1092#1086#1088#1084#1072#1094#1080#1103' '#1086' '#1084#1086#1076#1091#1083#1077
|
||||
TabOrder = 10
|
||||
object Label6: TLabel
|
||||
Left = 112
|
||||
Top = 93
|
||||
Width = 124
|
||||
Height = 13
|
||||
Caption = #1042#1077#1088#1089#1080#1103' '#1087#1088#1086#1096#1080#1074#1082#1080' '#1055#1051#1048#1057
|
||||
end
|
||||
object labelPldaVer: TLabel
|
||||
Left = 112
|
||||
Top = 117
|
||||
Width = 121
|
||||
Height = 13
|
||||
Caption = #1042#1077#1088#1089#1080#1103' '#1087#1088#1086#1096#1080#1074#1082#1080' PLDA'
|
||||
end
|
||||
object lbl11: TLabel
|
||||
Left = 112
|
||||
Top = 144
|
||||
Width = 117
|
||||
Height = 13
|
||||
Caption = #1042#1077#1088#1089#1080#1103' '#1087#1088#1086#1096#1080#1074#1082#1080' ARM'
|
||||
end
|
||||
object chkDacPresent: TCheckBox
|
||||
Left = 16
|
||||
Top = 24
|
||||
Width = 97
|
||||
Height = 17
|
||||
Caption = #1053#1072#1083#1080#1095#1080#1077' '#1062#1040#1055
|
||||
Enabled = False
|
||||
TabOrder = 0
|
||||
end
|
||||
object edtFpgaVer: TEdit
|
||||
Left = 16
|
||||
Top = 93
|
||||
Width = 89
|
||||
Height = 21
|
||||
ReadOnly = True
|
||||
TabOrder = 1
|
||||
end
|
||||
object edtPldaVer: TEdit
|
||||
Left = 16
|
||||
Top = 117
|
||||
Width = 89
|
||||
Height = 21
|
||||
ReadOnly = True
|
||||
TabOrder = 2
|
||||
end
|
||||
object edtMcuVer: TEdit
|
||||
Left = 16
|
||||
Top = 144
|
||||
Width = 89
|
||||
Height = 21
|
||||
ReadOnly = True
|
||||
TabOrder = 3
|
||||
end
|
||||
object chkEthPresent: TCheckBox
|
||||
Left = 16
|
||||
Top = 72
|
||||
Width = 209
|
||||
Height = 17
|
||||
Caption = #1053#1072#1083#1080#1095#1080#1077' '#1089#1077#1090#1077#1074#1086#1075#1086' '#1080#1085#1090#1077#1088#1092#1077#1081#1089#1072
|
||||
Enabled = False
|
||||
TabOrder = 4
|
||||
end
|
||||
end
|
||||
object chkGalPresent: TCheckBox
|
||||
Left = 280
|
||||
Top = 80
|
||||
Width = 169
|
||||
Height = 17
|
||||
Caption = #1053#1072#1083#1080#1095#1080#1077' '#1075#1072#1083#1100#1074#1072#1085#1086#1088#1072#1079#1074#1103#1079#1082#1080
|
||||
Enabled = False
|
||||
TabOrder = 11
|
||||
end
|
||||
object chkDspPresent: TCheckBox
|
||||
Left = 280
|
||||
Top = 96
|
||||
Width = 209
|
||||
Height = 17
|
||||
Caption = #1053#1072#1083#1080#1095#1080#1077' '#1089#1080#1075#1085#1072#1083#1100#1085#1086#1075#1086' '#1087#1088#1086#1094#1077#1089#1089#1086#1088#1072
|
||||
Enabled = False
|
||||
TabOrder = 12
|
||||
end
|
||||
object edtAsyncDac1: TEdit
|
||||
Left = 248
|
||||
Top = 640
|
||||
Width = 81
|
||||
Height = 21
|
||||
TabOrder = 13
|
||||
Text = '5'
|
||||
end
|
||||
object btnAsyncDac1: TButton
|
||||
Left = 16
|
||||
Top = 640
|
||||
Width = 217
|
||||
Height = 25
|
||||
Caption = #1040#1089#1080#1085#1093#1088#1086#1085#1085#1099#1081' '#1074#1099#1074#1086#1076' '#1085#1072' '#1062#1040#1055'1 ('#1042#1086#1083#1100#1090#1099')'
|
||||
TabOrder = 14
|
||||
OnClick = btnAsyncDac1Click
|
||||
end
|
||||
object btnAsyncDac2: TButton
|
||||
Left = 16
|
||||
Top = 672
|
||||
Width = 217
|
||||
Height = 25
|
||||
Caption = #1040#1089#1080#1085#1093#1088#1086#1085#1085#1099#1081' '#1074#1099#1074#1086#1076' '#1085#1072' '#1062#1040#1055'2 ('#1042#1086#1083#1100#1090#1099')'
|
||||
TabOrder = 15
|
||||
OnClick = btnAsyncDac2Click
|
||||
end
|
||||
object edtAsyncDac2: TEdit
|
||||
Left = 248
|
||||
Top = 672
|
||||
Width = 81
|
||||
Height = 21
|
||||
TabOrder = 16
|
||||
Text = '5'
|
||||
end
|
||||
object btnAsyncAdcFrame: TButton
|
||||
Left = 16
|
||||
Top = 536
|
||||
Width = 217
|
||||
Height = 25
|
||||
Caption = #1040#1089#1080#1085#1093#1088#1086#1085#1085#1099#1081' '#1074#1074#1086#1076' '#1082#1072#1076#1088#1072' '#1040#1062#1055
|
||||
TabOrder = 17
|
||||
OnClick = btnAsyncAdcFrameClick
|
||||
end
|
||||
object GroupBox3: TGroupBox
|
||||
Left = 16
|
||||
Top = 240
|
||||
Width = 513
|
||||
Height = 65
|
||||
Caption = #1063#1072#1089#1090#1086#1090#1099' '#1089#1080#1085#1093#1088#1086#1085#1085#1086#1075#1086' '#1089#1073#1086#1088#1072' '#1076#1072#1085#1085#1099#1093
|
||||
TabOrder = 18
|
||||
object Label5: TLabel
|
||||
Left = 16
|
||||
Top = 20
|
||||
Width = 136
|
||||
Height = 13
|
||||
Caption = #1063#1072#1089#1090#1086#1090#1072' '#1089#1073#1086#1088#1072' '#1076#1072#1085#1085#1099#1093' ('#1043#1094')'
|
||||
end
|
||||
object Label7: TLabel
|
||||
Left = 168
|
||||
Top = 20
|
||||
Width = 111
|
||||
Height = 13
|
||||
Caption = #1063#1072#1089#1090#1086#1090#1072' '#1085#1072' '#1082#1072#1085#1072#1083' ('#1043#1094')'
|
||||
end
|
||||
object Label8: TLabel
|
||||
Left = 296
|
||||
Top = 20
|
||||
Width = 163
|
||||
Height = 13
|
||||
Caption = #1063#1072#1089#1090#1086#1090#1072' '#1089#1080#1085#1093#1088#1086#1085#1085#1086#1075#1086' '#1074#1074#1086#1076#1072' ('#1043#1094')'
|
||||
end
|
||||
object btnSetAdcFreq: TButton
|
||||
Left = 432
|
||||
Top = 32
|
||||
Width = 73
|
||||
Height = 25
|
||||
Caption = #1059#1089#1090#1072#1085#1086#1074#1080#1090#1100
|
||||
TabOrder = 0
|
||||
OnClick = adcFreqEditChange
|
||||
end
|
||||
object edtAdcFreq: TEdit
|
||||
Left = 16
|
||||
Top = 36
|
||||
Width = 105
|
||||
Height = 21
|
||||
TabOrder = 1
|
||||
Text = '2000000'
|
||||
end
|
||||
object edtAdcFreqLch: TEdit
|
||||
Left = 176
|
||||
Top = 36
|
||||
Width = 105
|
||||
Height = 21
|
||||
TabOrder = 2
|
||||
Text = '2000000'
|
||||
end
|
||||
object edtDinFreq: TEdit
|
||||
Left = 296
|
||||
Top = 36
|
||||
Width = 105
|
||||
Height = 21
|
||||
TabOrder = 3
|
||||
Text = '2000000'
|
||||
end
|
||||
end
|
||||
object GroupBox4: TGroupBox
|
||||
Left = 16
|
||||
Top = 311
|
||||
Width = 513
|
||||
Height = 65
|
||||
Caption = #1057#1080#1085#1093#1088#1086#1085#1080#1079#1072#1094#1080#1103
|
||||
TabOrder = 19
|
||||
object Label10: TLabel
|
||||
Left = 16
|
||||
Top = 20
|
||||
Width = 172
|
||||
Height = 13
|
||||
Caption = #1048#1089#1090#1086#1095#1085#1080#1082' '#1095#1072#1089#1090#1086#1090#1099' '#1089#1080#1085#1093#1088#1086#1085#1080#1079#1072#1094#1080#1080
|
||||
end
|
||||
object Label11: TLabel
|
||||
Left = 264
|
||||
Top = 20
|
||||
Width = 238
|
||||
Height = 13
|
||||
Caption = #1048#1089#1090#1086#1095#1085#1080#1082' '#1079#1072#1087#1091#1089#1082#1072' '#1089#1080#1085#1093#1088#1086#1085#1085#1086#1075#1086' '#1074#1074#1086#1076#1072'/'#1074#1099#1074#1086#1076#1072
|
||||
end
|
||||
object cbbSyncMode: TComboBox
|
||||
Left = 16
|
||||
Top = 38
|
||||
Width = 169
|
||||
Height = 21
|
||||
ItemIndex = 0
|
||||
TabOrder = 0
|
||||
Text = #1042#1085#1091#1090#1088#1077#1085#1085#1080#1081
|
||||
Items.Strings = (
|
||||
#1042#1085#1091#1090#1088#1077#1085#1085#1080#1081
|
||||
#1054#1090' '#1074#1085#1077#1096#1085#1077#1075#1086' '#1084#1072#1089#1090#1077#1088#1072
|
||||
#1060#1088#1086#1085#1090' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN1'
|
||||
#1060#1088#1086#1085#1090' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN2'
|
||||
#1057#1087#1072#1076' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN1'
|
||||
#1057#1087#1072#1076' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN2')
|
||||
end
|
||||
object cbbSyncStartMode: TComboBox
|
||||
Left = 264
|
||||
Top = 38
|
||||
Width = 169
|
||||
Height = 21
|
||||
ItemIndex = 0
|
||||
TabOrder = 1
|
||||
Text = #1042#1085#1091#1090#1088#1077#1085#1085#1080#1081
|
||||
Items.Strings = (
|
||||
#1042#1085#1091#1090#1088#1077#1085#1085#1080#1081
|
||||
#1054#1090' '#1074#1085#1077#1096#1085#1077#1075#1086' '#1084#1072#1089#1090#1077#1088#1072
|
||||
#1060#1088#1086#1085#1090' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN1'
|
||||
#1060#1088#1086#1085#1090' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN2'
|
||||
#1057#1087#1072#1076' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN1'
|
||||
#1057#1087#1072#1076' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN2')
|
||||
end
|
||||
end
|
||||
object btnOpenByIP: TButton
|
||||
Left = 16
|
||||
Top = 168
|
||||
Width = 217
|
||||
Height = 25
|
||||
Caption = #1059#1089#1090#1072#1085#1086#1074#1080#1090#1100' '#1089#1086#1077#1076#1080#1085#1077#1085#1080#1077' '#1087#1086' IP-'#1072#1076#1088#1077#1089#1091
|
||||
TabOrder = 20
|
||||
OnClick = btnOpenByIPClick
|
||||
end
|
||||
object edtIpAddr: TEdit
|
||||
Left = 16
|
||||
Top = 200
|
||||
Width = 217
|
||||
Height = 21
|
||||
TabOrder = 21
|
||||
Text = '192.168.0.1'
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,122 @@
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#ifndef unitH
|
||||
#define unitH
|
||||
|
||||
#include "l502api.h"
|
||||
#include "e502api.h"
|
||||
#include "x502_thread.h"
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
#include <Classes.hpp>
|
||||
#include <Controls.hpp>
|
||||
#include <StdCtrls.hpp>
|
||||
#include <Forms.hpp>
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
class TForm1 : public TForm
|
||||
{
|
||||
__published: // IDE-managed Components
|
||||
TButton *btnRefreshDeviceList;
|
||||
TComboBox *cbbDevList;
|
||||
TButton *btnStart;
|
||||
TGroupBox *GroupBox1;
|
||||
TLabel *Label2;
|
||||
TLabel *Label1;
|
||||
TComboBox *cbbLCh1_Channel;
|
||||
TComboBox *cbbLCh1_Range;
|
||||
TComboBox *cbbLCh1_Mode;
|
||||
TEdit *edtLCh1_Result;
|
||||
TComboBox *cbbLCh2_Channel;
|
||||
TComboBox *cbbLCh2_Range;
|
||||
TComboBox *cbbLCh2_Mode;
|
||||
TEdit *edtLCh2_Result;
|
||||
TComboBox *cbbLCh3_Channel;
|
||||
TComboBox *cbbLCh3_Range;
|
||||
TComboBox *cbbLCh3_Mode;
|
||||
TComboBox *cbbSyncMode;
|
||||
TComboBox *cbbSyncStartMode;
|
||||
TEdit *edtLCh3_Result;
|
||||
TButton *btnStop;
|
||||
TLabel *Label3;
|
||||
TLabel *Label4;
|
||||
TCheckBox *chkSyncDin;
|
||||
TEdit *edtDin_Result;
|
||||
TButton *btnOpen;
|
||||
TButton *btnAsyncDigOut;
|
||||
TEdit *edtAsyncDigOut;
|
||||
TEdit *edtAsyncDigIn;
|
||||
TButton *btnAsyncDigIn;
|
||||
TGroupBox *GroupBox2;
|
||||
TCheckBox *chkDacPresent;
|
||||
TCheckBox *chkGalPresent;
|
||||
TCheckBox *chkDspPresent;
|
||||
TEdit *edtFpgaVer;
|
||||
TLabel *Label6;
|
||||
TEdit *edtPldaVer;
|
||||
TLabel *labelPldaVer;
|
||||
TEdit *edtAsyncDac1;
|
||||
TButton *btnAsyncDac1;
|
||||
TButton *btnAsyncDac2;
|
||||
TEdit *edtAsyncDac2;
|
||||
TButton *btnAsyncAdcFrame;
|
||||
TGroupBox *GroupBox3;
|
||||
TButton *btnSetAdcFreq;
|
||||
TLabel *Label5;
|
||||
TEdit *edtAdcFreq;
|
||||
TEdit *edtAdcFreqLch;
|
||||
TEdit *edtDinFreq;
|
||||
TLabel *Label7;
|
||||
TLabel *Label8;
|
||||
TComboBox *cbbLChCnt;
|
||||
TLabel *Label9;
|
||||
TLabel *lbl11;
|
||||
TEdit *edtMcuVer;
|
||||
TCheckBox *chkEthPresent;
|
||||
TButton *btnOpenByIP;
|
||||
TEdit *edtIpAddr;
|
||||
|
||||
void __fastcall btnRefreshDeviceListClick(TObject *Sender);
|
||||
void __fastcall btnStartClick(TObject *Sender);
|
||||
void __fastcall btnStopClick(TObject *Sender);
|
||||
void __fastcall btnOpenClick(TObject *Sender);
|
||||
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
|
||||
void __fastcall btnAsyncDigOutClick(TObject *Sender);
|
||||
void __fastcall adcFreqEditChange(TObject *Sender);
|
||||
void __fastcall chkSyncDinClick(TObject *Sender);
|
||||
void __fastcall btnAsyncDigInClick(TObject *Sender);
|
||||
void __fastcall btnAsyncDac1Click(TObject *Sender);
|
||||
void __fastcall btnAsyncDac2Click(TObject *Sender);
|
||||
void __fastcall btnAsyncAdcFrameClick(TObject *Sender);
|
||||
void __fastcall cbbDevListChange(TObject *Sender);
|
||||
void __fastcall cbbLChCntChange(TObject *Sender);
|
||||
void __fastcall btnOpenByIPClick(TObject *Sender);
|
||||
private: // User declarations
|
||||
t_x502_hnd hnd; //îïèñàòåëü ìîäóëÿ
|
||||
bool threadRunning; //ïðèçíàê, çàïóùåí ëè ïîòîê ñáîðà äàííûõ
|
||||
X502_ProcessThread *thread; //ïîòîê äëÿ ñèíõðîííîãî ââîäà
|
||||
|
||||
DynamicArray<t_x502_devrec> devrecList;
|
||||
void freeDevList();
|
||||
void refreshDeviceList();
|
||||
void closeDevice();
|
||||
void showDevInfo();
|
||||
uint32_t parseIpAddr(AnsiString addr);
|
||||
|
||||
int32_t setSyncDinStream();
|
||||
int32_t setAdcFreq();
|
||||
int32_t setupParams();
|
||||
|
||||
void updateControls();
|
||||
|
||||
__fastcall void OnThreadTerminate(TObject *obj);
|
||||
|
||||
|
||||
|
||||
public: // User declarations
|
||||
__fastcall TForm1(TComponent* Owner);
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
extern PACKAGE TForm1 *Form1;
|
||||
//---------------------------------------------------------------------------
|
||||
#endif
|
||||
@@ -0,0 +1,146 @@
|
||||
<?xml version='1.0' encoding='utf-8' ?>
|
||||
<!-- C++Builder XML Project -->
|
||||
<PROJECT>
|
||||
<MACROS>
|
||||
<VERSION value="BCB.06.00"/>
|
||||
<PROJECT value="x502_example.exe"/>
|
||||
<OBJFILES value="x502_example.obj unit.obj x502_thread.obj"/>
|
||||
<RESFILES value="x502_example.res"/>
|
||||
<IDLFILES value=""/>
|
||||
<IDLGENFILES value=""/>
|
||||
<DEFFILE value=""/>
|
||||
<RESDEPEN value="$(RESFILES) unit.dfm"/>
|
||||
<LIBFILES value=""C:\Program Files (x86)\L-Card\lpcie\lib\borland\e502api.lib"
|
||||
"C:\Program Files (x86)\L-Card\lpcie\lib\borland\l502api.lib" "C:\Program Files (x86)\L-Card\lpcie\lib\borland\x502api.lib""/>
|
||||
<LIBRARIES value=""/>
|
||||
<SPARELIBS value="vcl.lib rtl.lib"/>
|
||||
<PACKAGES value="vcl.bpi rtl.bpi dbrtl.bpi adortl.bpi vcldb.bpi vclx.bpi bdertl.bpi
|
||||
vcldbx.bpi ibxpress.bpi dsnap.bpi cds.bpi bdecds.bpi qrpt.bpi teeui.bpi
|
||||
teedb.bpi tee.bpi dss.bpi teeqr.bpi visualclx.bpi visualdbclx.bpi
|
||||
dsnapcrba.bpi dsnapcon.bpi bcbsmp.bpi vclie.bpi xmlrtl.bpi inet.bpi
|
||||
inetdbbde.bpi inetdbxpress.bpi inetdb.bpi nmfast.bpi webdsnap.bpi
|
||||
bcbie.bpi websnap.bpi soaprtl.bpi dclocx.bpi dbexpress.bpi dbxcds.bpi
|
||||
indy.bpi bcb2kaxserver.bpi"/>
|
||||
<PATHCPP value=".;"/>
|
||||
<PATHPAS value=".;"/>
|
||||
<PATHRC value=".;"/>
|
||||
<PATHASM value=".;"/>
|
||||
<DEBUGLIBPATH value="$(BCB)\lib\debug"/>
|
||||
<RELEASELIBPATH value="$(BCB)\lib\release"/>
|
||||
<LINKER value="ilink32"/>
|
||||
<USERDEFINES value="_DEBUG"/>
|
||||
<SYSDEFINES value="_RTLDLL;NO_STRICT;USEPACKAGES"/>
|
||||
<MAINSOURCE value="x502_example.cpp"/>
|
||||
<INCLUDEPATH value="$(BCB)\include;$(BCB)\include\vcl;"C:\Program Files (x86)\L-Card\lpcie\include""/>
|
||||
<LIBPATH value=""C:\Program Files (x86)\Borland\CBuilder6\Projects";$(BCB)\lib\obj;$(BCB)\lib"/>
|
||||
<WARNINGS value="-w-par"/>
|
||||
<OTHERFILES value=""/>
|
||||
</MACROS>
|
||||
<OPTIONS>
|
||||
<IDLCFLAGS value="-I$(BCB)\include -I$(BCB)\include\vcl
|
||||
-I"C:\Program Files (x86)\L-Card\lpcie\include" -src_suffix cpp -D_DEBUG
|
||||
-boa"/>
|
||||
<CFLAG1 value="-Od -H=$(BCB)\lib\vcl60.csm -Hc -Vx -Ve -X- -r- -a8 -b- -k -y -v -vi- -c
|
||||
-tW -tWM"/>
|
||||
<PFLAGS value="-$YD -$W -$O- -$A8 -v -JPHNE -M"/>
|
||||
<RFLAGS value=""/>
|
||||
<AFLAGS value="/mx /w2 /zd"/>
|
||||
<LFLAGS value="-D"" -aa -Tpe -x -Gn -v"/>
|
||||
<OTHERFILES value=""/>
|
||||
</OPTIONS>
|
||||
<LINKER>
|
||||
<ALLOBJ value="c0w32.obj $(PACKAGES) Memmgr.Lib sysinit.obj $(OBJFILES)"/>
|
||||
<ALLRES value="$(RESFILES)"/>
|
||||
<ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cp32mti.lib"/>
|
||||
<OTHERFILES value=""/>
|
||||
</LINKER>
|
||||
<FILELIST>
|
||||
<FILE FILENAME="x502_example.res" FORMNAME="" UNITNAME="x502_example.res" CONTAINERID="ResTool" DESIGNCLASS="" LOCALCOMMAND=""/>
|
||||
<FILE FILENAME="x502_example.cpp" FORMNAME="" UNITNAME="x502_example" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
|
||||
<FILE FILENAME="unit.cpp" FORMNAME="Form1" UNITNAME="unit" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
|
||||
<FILE FILENAME="x502_thread.cpp" FORMNAME="" UNITNAME="x502_thread" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
|
||||
<FILE FILENAME="C:\Program Files (x86)\L-Card\lpcie\lib\borland\e502api.lib" FORMNAME="" UNITNAME="e502api.lib" CONTAINERID="LibTool" DESIGNCLASS="" LOCALCOMMAND=""/>
|
||||
<FILE FILENAME="C:\Program Files (x86)\L-Card\lpcie\lib\borland\l502api.lib" FORMNAME="" UNITNAME="l502api.lib" CONTAINERID="LibTool" DESIGNCLASS="" LOCALCOMMAND=""/>
|
||||
<FILE FILENAME="C:\Program Files (x86)\L-Card\lpcie\lib\borland\x502api.lib" FORMNAME="" UNITNAME="x502api.lib" CONTAINERID="LibTool" DESIGNCLASS="" LOCALCOMMAND=""/>
|
||||
</FILELIST>
|
||||
<BUILDTOOLS>
|
||||
</BUILDTOOLS>
|
||||
|
||||
<IDEOPTIONS>
|
||||
[Version Info]
|
||||
IncludeVerInfo=0
|
||||
AutoIncBuild=0
|
||||
MajorVer=1
|
||||
MinorVer=0
|
||||
Release=0
|
||||
Build=0
|
||||
Debug=0
|
||||
PreRelease=0
|
||||
Special=0
|
||||
Private=0
|
||||
DLL=0
|
||||
Locale=1049
|
||||
CodePage=1251
|
||||
|
||||
[Version Info Keys]
|
||||
CompanyName=
|
||||
FileDescription=
|
||||
FileVersion=1.0.0.0
|
||||
InternalName=
|
||||
LegalCopyright=
|
||||
LegalTrademarks=
|
||||
OriginalFilename=
|
||||
ProductName=
|
||||
ProductVersion=1.0.0.0
|
||||
Comments=
|
||||
|
||||
[Excluded Packages]
|
||||
c:\program files (x86)\borland\cbuilder6\Bin\dclite60.bpl=Borland Integrated Translation Environment
|
||||
|
||||
[HistoryLists\hlIncludePath]
|
||||
Count=5
|
||||
Item0=$(BCB)\include;$(BCB)\include\vcl;C:\Program Files (x86)\L-Card\lpcie\include
|
||||
Item1=C:\Program Files (x86)\Borland\CBuilder6\Projects;C:\Program Files (x86)\L-Card\lpcie\include
|
||||
Item2=C:\Program Files (x86)\Borland\CBuilder6\Projects;
|
||||
Item3=$(BCB)\include;$(BCB)\include\vcl;
|
||||
Item4=$(BCB)\include;$(BCB)\include\vcl
|
||||
|
||||
[HistoryLists\hlLibraryPath]
|
||||
Count=2
|
||||
Item0=C:\Program Files (x86)\Borland\CBuilder6\Projects
|
||||
Item1=$(BCB)\lib\obj;$(BCB)\lib
|
||||
|
||||
[HistoryLists\hlDebugSourcePath]
|
||||
Count=1
|
||||
Item0=$(BCB)\source\vcl
|
||||
|
||||
[HistoryLists\hlConditionals]
|
||||
Count=1
|
||||
Item0=_DEBUG
|
||||
|
||||
[Debugging]
|
||||
DebugSourceDirs=$(BCB)\source\vcl
|
||||
|
||||
[Parameters]
|
||||
RunParams=
|
||||
Launcher=
|
||||
UseLauncher=0
|
||||
DebugCWD=
|
||||
HostApplication=
|
||||
RemoteHost=
|
||||
RemotePath=
|
||||
RemoteLauncher=
|
||||
RemoteCWD=
|
||||
RemoteDebug=0
|
||||
|
||||
[Compiler]
|
||||
ShowInfoMsgs=0
|
||||
LinkDebugVcl=0
|
||||
LinkCGLIB=0
|
||||
|
||||
[CORBA]
|
||||
AddServerUnit=1
|
||||
AddClientUnit=1
|
||||
PrecompiledHeaders=1
|
||||
</IDEOPTIONS>
|
||||
</PROJECT>
|
||||
@@ -0,0 +1,294 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectGuid>{52F5121E-CB05-4B98-8B26-2A5FA28782E4}</ProjectGuid>
|
||||
<ProjectType>CppVCLApplication</ProjectType>
|
||||
<MainSource>x502_example.cpp</MainSource>
|
||||
<Base>True</Base>
|
||||
<Config Condition="'$(Config)'==''">Debug</Config>
|
||||
<TargetedPlatforms>1</TargetedPlatforms>
|
||||
<AppType>Application</AppType>
|
||||
<FrameworkType>VCL</FrameworkType>
|
||||
<ProjectVersion>15.4</ProjectVersion>
|
||||
<Platform Condition="'$(Platform)'==''">Win32</Platform>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
|
||||
<Base_Win32>true</Base_Win32>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
|
||||
<Base_Win64>true</Base_Win64>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
|
||||
<Cfg_1>true</Cfg_1>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''">
|
||||
<Cfg_1_Win32>true</Cfg_1_Win32>
|
||||
<CfgParent>Cfg_1</CfgParent>
|
||||
<Cfg_1>true</Cfg_1>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win64)'!=''">
|
||||
<Cfg_1_Win64>true</Cfg_1_Win64>
|
||||
<CfgParent>Cfg_1</CfgParent>
|
||||
<Cfg_1>true</Cfg_1>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
|
||||
<Cfg_2>true</Cfg_2>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''">
|
||||
<Cfg_2_Win32>true</Cfg_2_Win32>
|
||||
<CfgParent>Cfg_2</CfgParent>
|
||||
<Cfg_2>true</Cfg_2>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win64)'!=''">
|
||||
<Cfg_2_Win64>true</Cfg_2_Win64>
|
||||
<CfgParent>Cfg_2</CfgParent>
|
||||
<Cfg_2>true</Cfg_2>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base)'!=''">
|
||||
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
|
||||
<SanitizedProjectName>x502_example</SanitizedProjectName>
|
||||
<DCC_Namespace>Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)</DCC_Namespace>
|
||||
<VerInfo_Locale>1049</VerInfo_Locale>
|
||||
<AllPackageLibs>vcl.lib;rtl.lib</AllPackageLibs>
|
||||
<DCC_UnitSearchPath>.\;$(BDS)\lib;$(BDS)\lib\obj;$(DCC_UnitSearchPath)</DCC_UnitSearchPath>
|
||||
<FinalOutputDir>.</FinalOutputDir>
|
||||
<TASM_AdditionalSwitches> /w2</TASM_AdditionalSwitches>
|
||||
<BCC_SourceDebuggingOn>true</BCC_SourceDebuggingOn>
|
||||
<BRCC_IncludePath>$(BDS)\include;$(BDS)\include\vcl;C:\Program Files (x86)\L-Card\lpcie\include;$(BRCC_IncludePath)</BRCC_IncludePath>
|
||||
<BCC_DisableOptimizations>true</BCC_DisableOptimizations>
|
||||
<DCC_AdditionalSwitches> -M</DCC_AdditionalSwitches>
|
||||
<BCC_InlineFunctionExpansion>false</BCC_InlineFunctionExpansion>
|
||||
<UsePackages>true</UsePackages>
|
||||
<ILINK_AppType>Windows</ILINK_AppType>
|
||||
<DCC_CBuilderOutput>JPHNE</DCC_CBuilderOutput>
|
||||
<DCC_IncludePath>.\;$(BDS)\lib;$(BDS)\lib\obj;$(DCC_IncludePath)</DCC_IncludePath>
|
||||
<BCC_IncludePath>$(BDS)\include;$(BDS)\include\vcl;C:\Program Files (x86)\L-Card\lpcie\include;$(BCC_IncludePath)</BCC_IncludePath>
|
||||
<TASM_IncludePath>$(BDS)\include;$(BDS)\include\vcl;C:\Program Files (x86)\L-Card\lpcie\include;$(TASM_IncludePath)</TASM_IncludePath>
|
||||
<ILINK_FullDebugInfo>true</ILINK_FullDebugInfo>
|
||||
<DynamicRTL>true</DynamicRTL>
|
||||
<ILINK_LibraryPath>C:\Program Files (x86)\Borland\CBuilder6\Projects;$(BDS)\lib\obj;$(BDS)\lib;$(BDS)\lib\psdk;$(ILINK_LibraryPath)</ILINK_LibraryPath>
|
||||
<BCC_GenerateWindowsApp>true</BCC_GenerateWindowsApp>
|
||||
<BCC_DebugLineNumbers>true</BCC_DebugLineNumbers>
|
||||
<BCC_PCHCache>true</BCC_PCHCache>
|
||||
<PackageImports>vcl.bpi;rtl.bpi;dbrtl.bpi;adortl.bpi;vcldb.bpi;vclx.bpi;bdertl.bpi;vcldbx.bpi;ibxpress.bpi;dsnap.bpi;dsnap.bpi;dsnapcon.bpi;teeui.bpi;teedb.bpi;tee.bpi;dss.bpi;dsnapcon.bpi;bcbsmp.bpi;vclie.bpi;xmlrtl.bpi;inet.bpi;inetdbbde.bpi;inetdbxpress.bpi;inetdb.bpi;webdsnap.bpi;bcbie.bpi;websnap.bpi;soaprtl.bpi;dbexpress.bpi;dbxcds.bpi;indycore.bpi;indysystem.bpi;bcboffice2k.bpi;$(PackageImports)</PackageImports>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Win32)'!=''">
|
||||
<BCC_UserSuppliedOptions> -tWM -Vx -r- -k -Ve</BCC_UserSuppliedOptions>
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
|
||||
<IncludePath>$(BDSINCLUDE)\windows\vcl;$(IncludePath)</IncludePath>
|
||||
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
|
||||
<OutputExt>.exe</OutputExt>
|
||||
<BRCC_Defines>_DEBUG;$(BRCC_Defines)</BRCC_Defines>
|
||||
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
|
||||
<TASM_Defines>_DEBUG;$(TASM_Defines)</TASM_Defines>
|
||||
<ILINK_LibraryPath>C:\Program Files (x86)\L-Card\lpcie\lib\borland\;$(ILINK_LibraryPath)</ILINK_LibraryPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Win64)'!=''">
|
||||
<IncludePath>$(BDSINCLUDE)\windows\vcl;$(IncludePath)</IncludePath>
|
||||
<TASM_Defines>_DEBUG;$(TASM_Defines)</TASM_Defines>
|
||||
<BRCC_Defines>_DEBUG;$(BRCC_Defines)</BRCC_Defines>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_1)'!=''">
|
||||
<IntermediateOutputDir>Debug_Build</IntermediateOutputDir>
|
||||
<DCC_AdditionalSwitches> -M -V</DCC_AdditionalSwitches>
|
||||
<TASM_DisplaySourceLines>true</TASM_DisplaySourceLines>
|
||||
<TASM_Debugging>Full</TASM_Debugging>
|
||||
<DCC_Define>DEBUG;$(DCC_Define);$(DCC_Define)</DCC_Define>
|
||||
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
|
||||
<ILINK_DisableIncrementalLinking>true</ILINK_DisableIncrementalLinking>
|
||||
<ILINK_LibraryPath>$(BDS)\lib\debug;$(ILINK_LibraryPath);$(ILINK_LibraryPath)</ILINK_LibraryPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
<BCC_UserSuppliedOptions> -tWM -Vx -r- -k -Ve -k</BCC_UserSuppliedOptions>
|
||||
<BCC_Defines>_DEBUG;$(BCC_Defines);$(BCC_Defines)</BCC_Defines>
|
||||
<LinkPackageImports>vcl.bpi;rtl.bpi</LinkPackageImports>
|
||||
<OutputExt>exe</OutputExt>
|
||||
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
|
||||
<ILINK_LibraryPath>$(BDS)\lib\win32\release\;$(ILINK_LibraryPath)</ILINK_LibraryPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_1_Win64)'!=''">
|
||||
<BCC_Defines>_DEBUG;$(BCC_Defines);$(BCC_Defines)</BCC_Defines>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_2)'!=''">
|
||||
<BCC_OptimizationLevel>Level2</BCC_OptimizationLevel>
|
||||
<DCC_AdditionalSwitches> -M -$O+</DCC_AdditionalSwitches>
|
||||
<ILINK_LibraryPath>$(BDS)\lib\release;$(ILINK_LibraryPath);$(ILINK_LibraryPath)</ILINK_LibraryPath>
|
||||
<TASM_Debugging>None</TASM_Debugging>
|
||||
<IntermediateOutputDir>Release_Build</IntermediateOutputDir>
|
||||
<BCC_InlineFunctionExpansion>true</BCC_InlineFunctionExpansion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
|
||||
<BCC_Defines>NDEBUG;$(BCC_Defines);$(BCC_Defines)</BCC_Defines>
|
||||
<BCC_UserSuppliedOptions> -tWM -Vx -r- -k -Ve -r</BCC_UserSuppliedOptions>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_2_Win64)'!=''">
|
||||
<BCC_Defines>NDEBUG;$(BCC_Defines);$(BCC_Defines)</BCC_Defines>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<CppCompile Include="unit.cpp">
|
||||
<BuildOrder>8</BuildOrder>
|
||||
<Form>Form1</Form>
|
||||
<DependentOn>unit.h</DependentOn>
|
||||
<BuildOrder>6</BuildOrder>
|
||||
</CppCompile>
|
||||
<CppCompile Include="x502_example.cpp">
|
||||
<BuildOrder>5</BuildOrder>
|
||||
<BuildOrder>5</BuildOrder>
|
||||
</CppCompile>
|
||||
<ResFiles Include="x502_example.res">
|
||||
<BuildOrder>2</BuildOrder>
|
||||
<BuildOrder>4</BuildOrder>
|
||||
</ResFiles>
|
||||
<CppCompile Include="x502_thread.cpp">
|
||||
<BuildOrder>11</BuildOrder>
|
||||
<BuildOrder>3</BuildOrder>
|
||||
</CppCompile>
|
||||
<LibFiles Include="C:\Program Files (x86)\L-Card\lpcie\lib\borland\e502api.lib" Condition="'$(Platform)'=='Win32'">
|
||||
<BuildOrder>4</BuildOrder>
|
||||
<IgnorePath>true</IgnorePath>
|
||||
</LibFiles>
|
||||
<LibFiles Include="C:\Program Files (x86)\L-Card\lpcie\lib\borland\l502api.lib" Condition="'$(Platform)'=='Win32'">
|
||||
<BuildOrder>5</BuildOrder>
|
||||
<IgnorePath>true</IgnorePath>
|
||||
</LibFiles>
|
||||
<LibFiles Include="C:\Program Files (x86)\L-Card\lpcie\lib\borland\x502api.lib" Condition="'$(Platform)'=='Win32'">
|
||||
<BuildOrder>6</BuildOrder>
|
||||
<IgnorePath>true</IgnorePath>
|
||||
</LibFiles>
|
||||
<FormResources Include="unit.dfm"/>
|
||||
<BuildConfiguration Include="Release">
|
||||
<Key>Cfg_2</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Base">
|
||||
<Key>Base</Key>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Debug">
|
||||
<Key>Cfg_1</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
</BuildConfiguration>
|
||||
</ItemGroup>
|
||||
<Import Project="$(BDS)\Bin\CodeGear.Cpp.Targets"/>
|
||||
<ProjectExtensions>
|
||||
<Borland.Personality>CPlusPlusBuilder.Personality.12</Borland.Personality>
|
||||
<Borland.ProjectType>CppVCLApplication</Borland.ProjectType>
|
||||
<BorlandProject>
|
||||
<CPlusPlusBuilder.Personality>
|
||||
<VersionInfo>
|
||||
<VersionInfo Name="IncludeVerInfo">0</VersionInfo>
|
||||
<VersionInfo Name="AutoIncBuild">0</VersionInfo>
|
||||
<VersionInfo Name="MajorVer">1</VersionInfo>
|
||||
<VersionInfo Name="MinorVer">0</VersionInfo>
|
||||
<VersionInfo Name="Release">0</VersionInfo>
|
||||
<VersionInfo Name="Build">0</VersionInfo>
|
||||
<VersionInfo Name="Debug">0</VersionInfo>
|
||||
<VersionInfo Name="PreRelease">0</VersionInfo>
|
||||
<VersionInfo Name="Special">0</VersionInfo>
|
||||
<VersionInfo Name="Private">0</VersionInfo>
|
||||
<VersionInfo Name="DLL">0</VersionInfo>
|
||||
<VersionInfo Name="Locale">1049</VersionInfo>
|
||||
<VersionInfo Name="CodePage">1251</VersionInfo>
|
||||
</VersionInfo>
|
||||
<VersionInfoKeys>
|
||||
<VersionInfoKeys Name="CompanyName"/>
|
||||
<VersionInfoKeys Name="FileDescription"/>
|
||||
<VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
|
||||
<VersionInfoKeys Name="InternalName"/>
|
||||
<VersionInfoKeys Name="LegalCopyright"/>
|
||||
<VersionInfoKeys Name="LegalTrademarks"/>
|
||||
<VersionInfoKeys Name="OriginalFilename"/>
|
||||
<VersionInfoKeys Name="ProductName"/>
|
||||
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
|
||||
<VersionInfoKeys Name="Comments"/>
|
||||
</VersionInfoKeys>
|
||||
<ExcludedPackages>
|
||||
<ExcludedPackages Name="c:\program files (x86)\borland\cbuilder6\Bin\dclite60.bpl">Borland Integrated Translation Environment</ExcludedPackages>
|
||||
</ExcludedPackages>
|
||||
<HistoryLists_hlIncludePath>
|
||||
<HistoryLists_hlIncludePath Name="Count">5</HistoryLists_hlIncludePath>
|
||||
<HistoryLists_hlIncludePath Name="Item0">$(BCB)\include;$(BCB)\include\vcl;C:\Program Files (x86)\L-Card\lpcie\include</HistoryLists_hlIncludePath>
|
||||
<HistoryLists_hlIncludePath Name="Item1">C:\Program Files (x86)\Borland\CBuilder6\Projects;C:\Program Files (x86)\L-Card\lpcie\include</HistoryLists_hlIncludePath>
|
||||
<HistoryLists_hlIncludePath Name="Item2">C:\Program Files (x86)\Borland\CBuilder6\Projects;</HistoryLists_hlIncludePath>
|
||||
<HistoryLists_hlIncludePath Name="Item3">$(BCB)\include;$(BCB)\include\vcl;</HistoryLists_hlIncludePath>
|
||||
<HistoryLists_hlIncludePath Name="Item4">$(BCB)\include;$(BCB)\include\vcl</HistoryLists_hlIncludePath>
|
||||
</HistoryLists_hlIncludePath>
|
||||
<HistoryLists_hlLibraryPath>
|
||||
<HistoryLists_hlLibraryPath Name="Count">2</HistoryLists_hlLibraryPath>
|
||||
<HistoryLists_hlLibraryPath Name="Item0">C:\Program Files (x86)\Borland\CBuilder6\Projects</HistoryLists_hlLibraryPath>
|
||||
<HistoryLists_hlLibraryPath Name="Item1">$(BCB)\lib\obj;$(BCB)\lib</HistoryLists_hlLibraryPath>
|
||||
</HistoryLists_hlLibraryPath>
|
||||
<HistoryLists_hlDebugSourcePath>
|
||||
<HistoryLists_hlDebugSourcePath Name="Count">1</HistoryLists_hlDebugSourcePath>
|
||||
<HistoryLists_hlDebugSourcePath Name="Item0">$(BCB)\source\vcl</HistoryLists_hlDebugSourcePath>
|
||||
</HistoryLists_hlDebugSourcePath>
|
||||
<HistoryLists_hlConditionals>
|
||||
<HistoryLists_hlConditionals Name="Count">1</HistoryLists_hlConditionals>
|
||||
<HistoryLists_hlConditionals Name="Item0">_DEBUG</HistoryLists_hlConditionals>
|
||||
</HistoryLists_hlConditionals>
|
||||
<Debugging>
|
||||
<Debugging Name="DebugSourceDirs">$(BCB)\source\vcl</Debugging>
|
||||
</Debugging>
|
||||
<Parameters>
|
||||
<Parameters Name="RunParams"/>
|
||||
<Parameters Name="Launcher"/>
|
||||
<Parameters Name="UseLauncher">0</Parameters>
|
||||
<Parameters Name="DebugCWD"/>
|
||||
<Parameters Name="HostApplication"/>
|
||||
<Parameters Name="RemoteHost"/>
|
||||
<Parameters Name="RemotePath"/>
|
||||
<Parameters Name="RemoteLauncher"/>
|
||||
<Parameters Name="RemoteCWD"/>
|
||||
<Parameters Name="RemoteDebug">0</Parameters>
|
||||
</Parameters>
|
||||
<Compiler>
|
||||
<Compiler Name="ShowInfoMsgs">0</Compiler>
|
||||
<Compiler Name="LinkDebugVcl">0</Compiler>
|
||||
<Compiler Name="LinkCGLIB">0</Compiler>
|
||||
</Compiler>
|
||||
<CORBA>
|
||||
<CORBA Name="AddServerUnit">1</CORBA>
|
||||
<CORBA Name="AddClientUnit">1</CORBA>
|
||||
<CORBA Name="PrecompiledHeaders">1</CORBA>
|
||||
</CORBA>
|
||||
<ProjectProperties>
|
||||
<ProjectProperties Name="AutoShowDeps">False</ProjectProperties>
|
||||
<ProjectProperties Name="ManagePaths">True</ProjectProperties>
|
||||
<ProjectProperties Name="VerifyPackages">True</ProjectProperties>
|
||||
<ProjectProperties Name="IndexFiles">False</ProjectProperties>
|
||||
</ProjectProperties>
|
||||
<Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\bcboffice2k200.bpl">Embarcadero C++Builder Office 2000 Servers Package</Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\bcbofficexp200.bpl">Embarcadero C++Builder Office XP Servers Package</Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k200.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\dclofficexp200.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
|
||||
</Excluded_Packages>
|
||||
<Source>
|
||||
<Source Name="MainSource">x502_example.cpp</Source>
|
||||
</Source>
|
||||
</CPlusPlusBuilder.Personality>
|
||||
<Platforms>
|
||||
<Platform value="Win32">True</Platform>
|
||||
<Platform value="Win64">False</Platform>
|
||||
</Platforms>
|
||||
</BorlandProject>
|
||||
<ProjectFileVersion>12</ProjectFileVersion>
|
||||
</ProjectExtensions>
|
||||
<Import Project="$(BDS)\Bin\CodeGear.Cpp.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Cpp.Targets')"/>
|
||||
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
|
||||
</Project>
|
||||
@@ -0,0 +1,40 @@
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#include <vcl.h>
|
||||
#pragma hdrstop
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
USEFORM("unit.cpp", Form1);
|
||||
//---------------------------------------------------------------------------
|
||||
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
|
||||
{
|
||||
try
|
||||
{
|
||||
Application->Initialize();
|
||||
Application->CreateForm(__classid(TForm1), &Form1);
|
||||
Application->Run();
|
||||
}
|
||||
catch (Exception &exception)
|
||||
{
|
||||
Application->ShowException(&exception);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
try
|
||||
{
|
||||
throw Exception("");
|
||||
}
|
||||
catch (Exception &exception)
|
||||
{
|
||||
Application->ShowException(&exception);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
Binary file not shown.
@@ -0,0 +1,100 @@
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
|
||||
#pragma hdrstop
|
||||
|
||||
#include "x502_thread.h"
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#pragma package(smart_init)
|
||||
|
||||
#define RECV_BUF_SIZE 8*1024*1024
|
||||
#define RECV_TOUT 250
|
||||
|
||||
|
||||
__fastcall X502_ProcessThread::X502_ProcessThread(bool CreateSuspended)
|
||||
: TThread(CreateSuspended), stop(false), err (X502_ERR_OK) {
|
||||
|
||||
}
|
||||
|
||||
/* обновление индикаторов формы результатами последнего измерения.
|
||||
Метод должен выполняться только через Syncronize, который нужен
|
||||
для доступа к элементам VCL не из основного потока */
|
||||
void __fastcall X502_ProcessThread::updateData() {
|
||||
uint32_t lch_cnt;
|
||||
err = X502_GetLChannelCount(hnd, &lch_cnt);
|
||||
if (err == X502_ERR_OK) {
|
||||
/* устанавливаем в индикаторах значение первого отсчета из массива */
|
||||
for (uint32_t i=0; (i < lch_cnt) && (i < adcSize); i++)
|
||||
lchResEdits[(firstLch + i)%lch_cnt]->Text = FloatToStrF(adcData[i], ffFixed, 4, 8);
|
||||
|
||||
/* если есть данные цифрового выхода, то устанавливаем индикатор
|
||||
в соответствии с первым значением */
|
||||
if (dinSize) {
|
||||
dinResEdit->Text = IntToHex((int)dinData[0]&0x3FFFF, 5);
|
||||
} else {
|
||||
dinResEdit->Text = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void __fastcall X502_ProcessThread::Execute() {
|
||||
/* выделяем буферы под принимаемые данные */
|
||||
uint32_t *rcv_buf = new uint32_t[RECV_BUF_SIZE];
|
||||
dinData = new uint32_t[RECV_BUF_SIZE];
|
||||
adcData = new double[RECV_BUF_SIZE];
|
||||
|
||||
|
||||
if (!rcv_buf || !dinData || !adcData) {
|
||||
err = X502_ERR_MEMORY_ALLOC;
|
||||
} else {
|
||||
/* запускаем синхронные потоки */
|
||||
err = X502_StreamsStart(hnd);
|
||||
if (err == X502_ERR_OK) {
|
||||
/* выполняем прием пока не произойдет ошибка или
|
||||
не будет запроса на останов от основного приложения */
|
||||
while (!stop && (err == X502_ERR_OK)) {
|
||||
/* принимаем данные синхронного ввода */
|
||||
int32_t rcv_size = X502_Recv(hnd, rcv_buf, RECV_BUF_SIZE, RECV_TOUT);
|
||||
/* значение меньше нуля означает ошибку... */
|
||||
if (rcv_size < 0) {
|
||||
err = rcv_size;
|
||||
} else if (rcv_size>0) {
|
||||
/* если больше нуля - значит приняли новые данные */
|
||||
dinSize=RECV_BUF_SIZE;
|
||||
adcSize=RECV_BUF_SIZE;
|
||||
/* получаем номер лог. какнала, соответствующий первому
|
||||
отсчету АЦП, так как до этого могли обработать
|
||||
некратное количество кадров */
|
||||
err = X502_GetNextExpectedLchNum(hnd, &firstLch);
|
||||
if (err == X502_ERR_OK) {
|
||||
/* разбираем данные на синхронный ввод и отсчеты АЦП и
|
||||
переводим АЦП в Вольты */
|
||||
err = X502_ProcessData(hnd, rcv_buf, rcv_size, L502_PROC_FLAGS_VOLT,
|
||||
adcData, &adcSize, dinData, &dinSize);
|
||||
}
|
||||
|
||||
if (err == X502_ERR_OK) {
|
||||
/* обновляем значения элементов управления */
|
||||
Synchronize(updateData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* по выходу из цикла отсанавливаем поток.
|
||||
Чтобы не сбросить код ошибки (если вышли по ошибке)
|
||||
результат останова сохраняем в отдельную переменную */
|
||||
int32_t stop_err = X502_StreamsStop(hnd);
|
||||
if (err == X502_ERR_OK)
|
||||
err = stop_err;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* освобождаем выделенную память */
|
||||
delete rcv_buf;
|
||||
delete dinData;
|
||||
delete adcData;
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#ifndef X502_THREAD_H
|
||||
#define X502_THREAD_H
|
||||
|
||||
|
||||
#include "l502api.h"
|
||||
#include "e502api.h"
|
||||
|
||||
#include <vcl.h>
|
||||
|
||||
|
||||
class X502_ProcessThread : public TThread {
|
||||
|
||||
protected:
|
||||
void __fastcall Execute();
|
||||
|
||||
public:
|
||||
bool stop; //çàïðîñ íà îñòàíîâ (óñòàíàâëèâàåòñÿ èç îñíîâíîãî ïîòîêà)
|
||||
int err; //êîä îøèáêè ïðè âûïîëíåíèè ïîòîêà ñáîðà
|
||||
|
||||
t_x502_hnd hnd; //îïèñàòåëü ìîäóëÿ
|
||||
TEdit* lchResEdits[X502_LTABLE_MAX_CH_CNT];
|
||||
TEdit* dinResEdit;
|
||||
|
||||
__fastcall X502_ProcessThread(bool CreateSuspended);
|
||||
|
||||
private:
|
||||
void __fastcall updateData() ;
|
||||
double* adcData;
|
||||
uint32_t firstLch; /* íîìåð ïåðâîãî ëîãè÷åñêîãî êàíàëà â áóôåðå ÀÖÏ */
|
||||
uint32_t adcSize;
|
||||
uint32_t* dinData;
|
||||
uint32_t dinSize;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
#endif
|
||||
@@ -0,0 +1,681 @@
|
||||
object MainForm: TMainForm
|
||||
Left = 630
|
||||
Top = 162
|
||||
Width = 585
|
||||
Height = 774
|
||||
Caption = 'X502 Example'
|
||||
Color = clBtnFace
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -11
|
||||
Font.Name = 'Tahoma'
|
||||
Font.Style = []
|
||||
OldCreateOrder = False
|
||||
OnClose = FormClose
|
||||
OnCreate = FormCreate
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object btnRefreshDeviceList: TButton
|
||||
Left = 8
|
||||
Top = 8
|
||||
Width = 217
|
||||
Height = 25
|
||||
Caption = #1054#1073#1085#1086#1074#1080#1090#1100' '#1089#1087#1080#1089#1086#1082' '#1091#1089#1090#1088#1086#1081#1089#1090#1074
|
||||
TabOrder = 0
|
||||
OnClick = btnRefreshDeviceListClick
|
||||
end
|
||||
object cbbDevList: TComboBox
|
||||
Left = 256
|
||||
Top = 8
|
||||
Width = 241
|
||||
Height = 21
|
||||
ItemHeight = 13
|
||||
TabOrder = 1
|
||||
end
|
||||
object btnOpen: TButton
|
||||
Left = 8
|
||||
Top = 48
|
||||
Width = 217
|
||||
Height = 25
|
||||
Caption = #1054#1090#1082#1088#1099#1090#1100' '#1091#1089#1090#1088#1086#1081#1089#1090#1074#1086
|
||||
TabOrder = 2
|
||||
OnClick = btnOpenClick
|
||||
end
|
||||
object grpDevInfo: TGroupBox
|
||||
Left = 256
|
||||
Top = 40
|
||||
Width = 241
|
||||
Height = 169
|
||||
Caption = #1048#1085#1092#1086#1088#1084#1072#1094#1080#1103' '#1086' '#1084#1086#1076#1091#1083#1077
|
||||
TabOrder = 3
|
||||
object lbl1: TLabel
|
||||
Left = 104
|
||||
Top = 96
|
||||
Width = 119
|
||||
Height = 13
|
||||
Caption = #1042#1077#1088#1089#1080#1103' '#1087#1088#1086#1096#1080#1074#1082#1080' '#1055#1051#1048#1057
|
||||
end
|
||||
object lbl2: TLabel
|
||||
Left = 104
|
||||
Top = 120
|
||||
Width = 116
|
||||
Height = 13
|
||||
Caption = #1042#1077#1088#1089#1080#1103' '#1087#1088#1086#1096#1080#1074#1082#1080' PLDA'
|
||||
end
|
||||
object lbl11: TLabel
|
||||
Left = 104
|
||||
Top = 144
|
||||
Width = 113
|
||||
Height = 13
|
||||
Caption = #1042#1077#1088#1089#1080#1103' '#1087#1088#1086#1096#1080#1074#1082#1080' ARM'
|
||||
end
|
||||
object chkDacPresent: TCheckBox
|
||||
Left = 8
|
||||
Top = 24
|
||||
Width = 97
|
||||
Height = 17
|
||||
Caption = #1053#1072#1083#1080#1095#1080#1077' '#1062#1040#1055
|
||||
Enabled = False
|
||||
TabOrder = 0
|
||||
end
|
||||
object chkGalPresent: TCheckBox
|
||||
Left = 8
|
||||
Top = 40
|
||||
Width = 177
|
||||
Height = 17
|
||||
Caption = #1053#1072#1083#1080#1095#1080#1077' '#1075#1072#1083#1100#1074#1072#1085#1086#1088#1072#1079#1074#1103#1079#1082#1080
|
||||
Enabled = False
|
||||
TabOrder = 1
|
||||
end
|
||||
object chkDspPresent: TCheckBox
|
||||
Left = 8
|
||||
Top = 56
|
||||
Width = 209
|
||||
Height = 17
|
||||
Caption = #1053#1072#1083#1080#1095#1080#1077' '#1089#1080#1075#1085#1072#1083#1100#1085#1086#1075#1086' '#1087#1088#1086#1094#1077#1089#1089#1086#1088#1072
|
||||
Enabled = False
|
||||
TabOrder = 2
|
||||
end
|
||||
object edtFpgaVer: TEdit
|
||||
Left = 8
|
||||
Top = 96
|
||||
Width = 89
|
||||
Height = 21
|
||||
ReadOnly = True
|
||||
TabOrder = 3
|
||||
end
|
||||
object edtPldaVer: TEdit
|
||||
Left = 8
|
||||
Top = 120
|
||||
Width = 89
|
||||
Height = 21
|
||||
ReadOnly = True
|
||||
TabOrder = 4
|
||||
end
|
||||
object chkEthPresent: TCheckBox
|
||||
Left = 8
|
||||
Top = 72
|
||||
Width = 209
|
||||
Height = 17
|
||||
Caption = #1053#1072#1083#1080#1095#1080#1077' '#1089#1077#1090#1077#1074#1086#1075#1086' '#1080#1085#1090#1077#1088#1092#1077#1081#1089#1072
|
||||
Enabled = False
|
||||
TabOrder = 5
|
||||
end
|
||||
object edtMcuVer: TEdit
|
||||
Left = 8
|
||||
Top = 144
|
||||
Width = 89
|
||||
Height = 21
|
||||
ReadOnly = True
|
||||
TabOrder = 6
|
||||
end
|
||||
end
|
||||
object btnAsyncDigIn: TButton
|
||||
Left = 8
|
||||
Top = 560
|
||||
Width = 217
|
||||
Height = 25
|
||||
Caption = #1040#1089#1080#1085#1093#1088#1086#1085#1085#1099#1081' '#1074#1074#1086#1076' '#1094#1080#1092#1088#1086#1099#1093' '#1083#1080#1085#1080#1081
|
||||
TabOrder = 4
|
||||
OnClick = btnAsyncDigInClick
|
||||
end
|
||||
object edtAsyncDigIn: TEdit
|
||||
Left = 248
|
||||
Top = 560
|
||||
Width = 121
|
||||
Height = 21
|
||||
Enabled = False
|
||||
TabOrder = 5
|
||||
Text = '0x0000'
|
||||
end
|
||||
object btnAsyncDigOut: TButton
|
||||
Left = 8
|
||||
Top = 592
|
||||
Width = 217
|
||||
Height = 25
|
||||
Caption = #1040#1089#1080#1085#1093#1088#1086#1085#1085#1099#1081' '#1074#1099#1074#1086#1076' '#1094#1080#1092#1088#1086#1074#1099#1093' '#1083#1080#1085#1080#1081
|
||||
TabOrder = 6
|
||||
OnClick = btnAsyncDigOutClick
|
||||
end
|
||||
object edtAsyncDigOut: TEdit
|
||||
Left = 248
|
||||
Top = 592
|
||||
Width = 121
|
||||
Height = 21
|
||||
TabOrder = 7
|
||||
Text = '0x0000'
|
||||
end
|
||||
object grp1: TGroupBox
|
||||
Left = 8
|
||||
Top = 224
|
||||
Width = 513
|
||||
Height = 65
|
||||
Caption = #1063#1072#1089#1090#1086#1090#1099' '#1089#1080#1085#1093#1088#1086#1085#1085#1086#1075#1086' '#1089#1073#1086#1088#1072' '#1076#1072#1085#1085#1099#1093
|
||||
TabOrder = 8
|
||||
object lbl3: TLabel
|
||||
Left = 16
|
||||
Top = 20
|
||||
Width = 139
|
||||
Height = 13
|
||||
Caption = #1063#1072#1089#1090#1086#1090#1072' '#1089#1073#1086#1088#1072' '#1076#1072#1085#1085#1099#1093' ('#1043#1094')'
|
||||
end
|
||||
object lbl4: TLabel
|
||||
Left = 168
|
||||
Top = 20
|
||||
Width = 113
|
||||
Height = 13
|
||||
Caption = #1063#1072#1089#1090#1086#1090#1072' '#1085#1072' '#1082#1072#1085#1072#1083' ('#1043#1094')'
|
||||
end
|
||||
object lbl5: TLabel
|
||||
Left = 296
|
||||
Top = 20
|
||||
Width = 166
|
||||
Height = 13
|
||||
Caption = #1063#1072#1089#1090#1086#1090#1072' '#1089#1080#1085#1093#1088#1086#1085#1085#1086#1075#1086' '#1074#1074#1086#1076#1072' ('#1043#1094')'
|
||||
end
|
||||
object btnSetAdcFreq: TButton
|
||||
Left = 432
|
||||
Top = 32
|
||||
Width = 73
|
||||
Height = 25
|
||||
Caption = #1059#1089#1090#1072#1085#1086#1074#1080#1090#1100
|
||||
TabOrder = 0
|
||||
OnClick = btnSetAdcFreqClick
|
||||
end
|
||||
object edtAdcFreq: TEdit
|
||||
Left = 16
|
||||
Top = 36
|
||||
Width = 105
|
||||
Height = 21
|
||||
TabOrder = 1
|
||||
Text = '2000000'
|
||||
end
|
||||
object edtAdcFreqLch: TEdit
|
||||
Left = 176
|
||||
Top = 36
|
||||
Width = 105
|
||||
Height = 21
|
||||
TabOrder = 2
|
||||
Text = '2000000'
|
||||
end
|
||||
object edtDinFreq: TEdit
|
||||
Left = 296
|
||||
Top = 36
|
||||
Width = 105
|
||||
Height = 21
|
||||
TabOrder = 3
|
||||
Text = '2000000'
|
||||
end
|
||||
end
|
||||
object grp2: TGroupBox
|
||||
Left = 8
|
||||
Top = 368
|
||||
Width = 513
|
||||
Height = 153
|
||||
Caption = #1050#1072#1085#1072#1083#1099
|
||||
TabOrder = 9
|
||||
object lbl6: TLabel
|
||||
Left = 8
|
||||
Top = 40
|
||||
Width = 31
|
||||
Height = 13
|
||||
Caption = #1050#1072#1085#1072#1083
|
||||
end
|
||||
object lbl7: TLabel
|
||||
Left = 64
|
||||
Top = 40
|
||||
Width = 49
|
||||
Height = 13
|
||||
Caption = #1044#1080#1072#1087#1072#1079#1086#1085
|
||||
end
|
||||
object lbl8: TLabel
|
||||
Left = 152
|
||||
Top = 40
|
||||
Width = 88
|
||||
Height = 13
|
||||
Caption = #1056#1077#1078#1080#1084' '#1080#1079#1084#1077#1088#1077#1085#1080#1103
|
||||
end
|
||||
object lbl9: TLabel
|
||||
Left = 336
|
||||
Top = 40
|
||||
Width = 53
|
||||
Height = 13
|
||||
Caption = #1056#1077#1079#1091#1083#1100#1090#1072#1090
|
||||
end
|
||||
object lbl10: TLabel
|
||||
Left = 16
|
||||
Top = 16
|
||||
Width = 166
|
||||
Height = 13
|
||||
Caption = #1050#1086#1083#1080#1095#1077#1089#1090#1074#1086' '#1083#1086#1075#1080#1095#1077#1089#1082#1080#1093' '#1082#1072#1085#1072#1083#1086#1074
|
||||
end
|
||||
object cbbLCh1_Channel: TComboBox
|
||||
Left = 8
|
||||
Top = 56
|
||||
Width = 41
|
||||
Height = 21
|
||||
ItemHeight = 13
|
||||
ItemIndex = 0
|
||||
TabOrder = 0
|
||||
Text = '1'
|
||||
Items.Strings = (
|
||||
'1'
|
||||
'2'
|
||||
'3'
|
||||
'4'
|
||||
'5'
|
||||
'6'
|
||||
'7'
|
||||
'8'
|
||||
'9'
|
||||
'10'
|
||||
'11'
|
||||
'12'
|
||||
'13'
|
||||
'14'
|
||||
'15'
|
||||
'16'
|
||||
'17'
|
||||
'18'
|
||||
'19'
|
||||
'20'
|
||||
'21'
|
||||
'22'
|
||||
'23'
|
||||
'24'
|
||||
'25'
|
||||
'26'
|
||||
'27'
|
||||
'28'
|
||||
'29'
|
||||
'30'
|
||||
'31'
|
||||
'32')
|
||||
end
|
||||
object cbbLCh1_Range: TComboBox
|
||||
Left = 64
|
||||
Top = 56
|
||||
Width = 57
|
||||
Height = 21
|
||||
ItemHeight = 13
|
||||
ItemIndex = 0
|
||||
TabOrder = 1
|
||||
Text = '10 '#1042
|
||||
Items.Strings = (
|
||||
'10 '#1042
|
||||
'5 '#1042
|
||||
'2 '#1042
|
||||
'1 '#1042
|
||||
'0.5 '#1042
|
||||
'0.2 '#1042)
|
||||
end
|
||||
object cbbLCh1_Mode: TComboBox
|
||||
Left = 136
|
||||
Top = 56
|
||||
Width = 169
|
||||
Height = 21
|
||||
ItemHeight = 13
|
||||
ItemIndex = 1
|
||||
TabOrder = 2
|
||||
Text = #1044#1080#1092#1092#1077#1088#1077#1085#1094#1080#1072#1083#1100#1085#1099#1081
|
||||
Items.Strings = (
|
||||
#1057' '#1086#1073#1097#1077#1081' '#1079#1077#1084#1083#1077#1081
|
||||
#1044#1080#1092#1092#1077#1088#1077#1085#1094#1080#1072#1083#1100#1085#1099#1081
|
||||
#1048#1079#1084#1077#1088#1077#1085#1080#1077' '#1085#1091#1083#1103)
|
||||
end
|
||||
object edtLCh1_Result: TEdit
|
||||
Left = 328
|
||||
Top = 56
|
||||
Width = 121
|
||||
Height = 21
|
||||
TabOrder = 3
|
||||
end
|
||||
object cbbLCh2_Channel: TComboBox
|
||||
Left = 8
|
||||
Top = 80
|
||||
Width = 41
|
||||
Height = 21
|
||||
ItemHeight = 13
|
||||
ItemIndex = 1
|
||||
TabOrder = 4
|
||||
Text = '2'
|
||||
Items.Strings = (
|
||||
'1'
|
||||
'2'
|
||||
'3'
|
||||
'4'
|
||||
'5'
|
||||
'6'
|
||||
'7'
|
||||
'8'
|
||||
'9'
|
||||
'10'
|
||||
'11'
|
||||
'12'
|
||||
'13'
|
||||
'14'
|
||||
'15'
|
||||
'16'
|
||||
'17'
|
||||
'18'
|
||||
'19'
|
||||
'20'
|
||||
'21'
|
||||
'22'
|
||||
'23'
|
||||
'24'
|
||||
'25'
|
||||
'26'
|
||||
'27'
|
||||
'28'
|
||||
'29'
|
||||
'30'
|
||||
'31'
|
||||
'32')
|
||||
end
|
||||
object cbbLCh2_Range: TComboBox
|
||||
Left = 64
|
||||
Top = 80
|
||||
Width = 57
|
||||
Height = 21
|
||||
ItemHeight = 13
|
||||
ItemIndex = 0
|
||||
TabOrder = 5
|
||||
Text = '10 '#1042
|
||||
Items.Strings = (
|
||||
'10 '#1042
|
||||
'5 '#1042
|
||||
'2 '#1042
|
||||
'1 '#1042
|
||||
'0.5 '#1042
|
||||
'0.2 '#1042)
|
||||
end
|
||||
object cbbLCh2_Mode: TComboBox
|
||||
Left = 136
|
||||
Top = 80
|
||||
Width = 169
|
||||
Height = 21
|
||||
ItemHeight = 13
|
||||
ItemIndex = 1
|
||||
TabOrder = 6
|
||||
Text = #1044#1080#1092#1092#1077#1088#1077#1085#1094#1080#1072#1083#1100#1085#1099#1081
|
||||
Items.Strings = (
|
||||
#1057' '#1086#1073#1097#1077#1081' '#1079#1077#1084#1083#1077#1081
|
||||
#1044#1080#1092#1092#1077#1088#1077#1085#1094#1080#1072#1083#1100#1085#1099#1081
|
||||
#1048#1079#1084#1077#1088#1077#1085#1080#1077' '#1085#1091#1083#1103)
|
||||
end
|
||||
object edtLCh2_Result: TEdit
|
||||
Left = 328
|
||||
Top = 80
|
||||
Width = 121
|
||||
Height = 21
|
||||
TabOrder = 7
|
||||
end
|
||||
object cbbLCh3_Channel: TComboBox
|
||||
Left = 8
|
||||
Top = 104
|
||||
Width = 41
|
||||
Height = 21
|
||||
ItemHeight = 13
|
||||
ItemIndex = 2
|
||||
TabOrder = 8
|
||||
Text = '3'
|
||||
Items.Strings = (
|
||||
'1'
|
||||
'2'
|
||||
'3'
|
||||
'4'
|
||||
'5'
|
||||
'6'
|
||||
'7'
|
||||
'8'
|
||||
'9'
|
||||
'10'
|
||||
'11'
|
||||
'12'
|
||||
'13'
|
||||
'14'
|
||||
'15'
|
||||
'16'
|
||||
'17'
|
||||
'18'
|
||||
'19'
|
||||
'20'
|
||||
'21'
|
||||
'22'
|
||||
'23'
|
||||
'24'
|
||||
'25'
|
||||
'26'
|
||||
'27'
|
||||
'28'
|
||||
'29'
|
||||
'30'
|
||||
'31'
|
||||
'32')
|
||||
end
|
||||
object cbbLCh3_Range: TComboBox
|
||||
Left = 64
|
||||
Top = 104
|
||||
Width = 57
|
||||
Height = 21
|
||||
ItemHeight = 13
|
||||
ItemIndex = 0
|
||||
TabOrder = 9
|
||||
Text = '10 '#1042
|
||||
Items.Strings = (
|
||||
'10 '#1042
|
||||
'5 '#1042
|
||||
'2 '#1042
|
||||
'1 '#1042
|
||||
'0.5 '#1042
|
||||
'0.2 '#1042)
|
||||
end
|
||||
object cbbLCh3_Mode: TComboBox
|
||||
Left = 136
|
||||
Top = 104
|
||||
Width = 169
|
||||
Height = 21
|
||||
ItemHeight = 13
|
||||
ItemIndex = 1
|
||||
TabOrder = 10
|
||||
Text = #1044#1080#1092#1092#1077#1088#1077#1085#1094#1080#1072#1083#1100#1085#1099#1081
|
||||
Items.Strings = (
|
||||
#1057' '#1086#1073#1097#1077#1081' '#1079#1077#1084#1083#1077#1081
|
||||
#1044#1080#1092#1092#1077#1088#1077#1085#1094#1080#1072#1083#1100#1085#1099#1081
|
||||
#1048#1079#1084#1077#1088#1077#1085#1080#1077' '#1085#1091#1083#1103)
|
||||
end
|
||||
object edtLCh3_Result: TEdit
|
||||
Left = 328
|
||||
Top = 104
|
||||
Width = 121
|
||||
Height = 21
|
||||
TabOrder = 11
|
||||
end
|
||||
object chkSyncDin: TCheckBox
|
||||
Left = 120
|
||||
Top = 128
|
||||
Width = 185
|
||||
Height = 17
|
||||
Caption = #1056#1072#1079#1088#1072#1096#1077#1085#1080#1077' '#1089#1080#1085#1093#1088#1086#1085#1085#1086#1075#1086' '#1074#1074#1086#1076#1072
|
||||
TabOrder = 12
|
||||
OnClick = chkSyncDinClick
|
||||
end
|
||||
object edtDin_Result: TEdit
|
||||
Left = 328
|
||||
Top = 128
|
||||
Width = 121
|
||||
Height = 21
|
||||
TabOrder = 13
|
||||
end
|
||||
object cbbLChCnt: TComboBox
|
||||
Left = 192
|
||||
Top = 16
|
||||
Width = 73
|
||||
Height = 21
|
||||
ItemHeight = 13
|
||||
ItemIndex = 2
|
||||
TabOrder = 14
|
||||
Text = '3'
|
||||
Items.Strings = (
|
||||
'1'
|
||||
'2'
|
||||
'3')
|
||||
end
|
||||
end
|
||||
object btnAsyncAdcFrame: TButton
|
||||
Left = 8
|
||||
Top = 528
|
||||
Width = 217
|
||||
Height = 25
|
||||
Caption = #1040#1089#1080#1085#1093#1088#1086#1085#1085#1099#1081' '#1074#1074#1086#1076' '#1082#1072#1076#1088#1072' '#1040#1062#1055
|
||||
TabOrder = 10
|
||||
OnClick = btnAsyncAdcFrameClick
|
||||
end
|
||||
object btnStop: TButton
|
||||
Left = 8
|
||||
Top = 112
|
||||
Width = 217
|
||||
Height = 25
|
||||
Caption = #1054#1089#1090#1072#1085#1086#1074' '#1089#1073#1086#1088#1072' '#1076#1072#1085#1085#1099#1093
|
||||
Enabled = False
|
||||
TabOrder = 11
|
||||
OnClick = btnStopClick
|
||||
end
|
||||
object btnStart: TButton
|
||||
Left = 8
|
||||
Top = 80
|
||||
Width = 217
|
||||
Height = 25
|
||||
Caption = #1047#1072#1087#1091#1089#1082' '#1089#1073#1086#1088#1072' '#1076#1072#1085#1085#1099#1093
|
||||
TabOrder = 12
|
||||
OnClick = btnStartClick
|
||||
end
|
||||
object btnAsyncDac1: TButton
|
||||
Left = 8
|
||||
Top = 624
|
||||
Width = 217
|
||||
Height = 25
|
||||
Caption = #1040#1089#1080#1085#1093#1088#1086#1085#1085#1099#1081' '#1074#1099#1074#1086#1076' '#1085#1072' '#1062#1040#1055'1 ('#1042#1086#1083#1100#1090#1099')'
|
||||
TabOrder = 13
|
||||
OnClick = btnAsyncDac1Click
|
||||
end
|
||||
object edtAsyncDac1: TEdit
|
||||
Left = 248
|
||||
Top = 624
|
||||
Width = 81
|
||||
Height = 21
|
||||
TabOrder = 14
|
||||
Text = '5'
|
||||
end
|
||||
object edtAsyncDac2: TEdit
|
||||
Left = 248
|
||||
Top = 656
|
||||
Width = 81
|
||||
Height = 21
|
||||
TabOrder = 15
|
||||
Text = '5'
|
||||
end
|
||||
object btnAsyncDac2: TButton
|
||||
Left = 8
|
||||
Top = 656
|
||||
Width = 217
|
||||
Height = 25
|
||||
Caption = #1040#1089#1080#1085#1093#1088#1086#1085#1085#1099#1081' '#1074#1099#1074#1086#1076' '#1085#1072' '#1062#1040#1055'2 ('#1042#1086#1083#1100#1090#1099')'
|
||||
TabOrder = 16
|
||||
OnClick = btnAsyncDac2Click
|
||||
end
|
||||
object GroupBox4: TGroupBox
|
||||
Left = 8
|
||||
Top = 295
|
||||
Width = 513
|
||||
Height = 65
|
||||
Caption = #1057#1080#1085#1093#1088#1086#1085#1080#1079#1072#1094#1080#1103
|
||||
TabOrder = 17
|
||||
object Label10: TLabel
|
||||
Left = 16
|
||||
Top = 20
|
||||
Width = 173
|
||||
Height = 13
|
||||
Caption = #1048#1089#1090#1086#1095#1085#1080#1082' '#1095#1072#1089#1090#1086#1090#1099' '#1089#1080#1085#1093#1088#1086#1085#1080#1079#1072#1094#1080#1080
|
||||
end
|
||||
object Label11: TLabel
|
||||
Left = 264
|
||||
Top = 20
|
||||
Width = 238
|
||||
Height = 13
|
||||
Caption = #1048#1089#1090#1086#1095#1085#1080#1082' '#1079#1072#1087#1091#1089#1082#1072' '#1089#1080#1085#1093#1088#1086#1085#1085#1086#1075#1086' '#1074#1074#1086#1076#1072'/'#1074#1099#1074#1086#1076#1072
|
||||
end
|
||||
object cbbSyncMode: TComboBox
|
||||
Left = 16
|
||||
Top = 38
|
||||
Width = 169
|
||||
Height = 21
|
||||
ItemHeight = 13
|
||||
ItemIndex = 0
|
||||
TabOrder = 0
|
||||
Text = #1042#1085#1091#1090#1088#1077#1085#1085#1080#1081
|
||||
Items.Strings = (
|
||||
#1042#1085#1091#1090#1088#1077#1085#1085#1080#1081
|
||||
#1054#1090' '#1074#1085#1077#1096#1085#1077#1075#1086' '#1084#1072#1089#1090#1077#1088#1072
|
||||
#1060#1088#1086#1085#1090' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN1'
|
||||
#1060#1088#1086#1085#1090' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN2'
|
||||
#1057#1087#1072#1076' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN1'
|
||||
#1057#1087#1072#1076' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN2')
|
||||
end
|
||||
object cbbSyncStartMode: TComboBox
|
||||
Left = 264
|
||||
Top = 38
|
||||
Width = 169
|
||||
Height = 21
|
||||
ItemHeight = 13
|
||||
ItemIndex = 0
|
||||
TabOrder = 1
|
||||
Text = #1042#1085#1091#1090#1088#1077#1085#1085#1080#1081
|
||||
Items.Strings = (
|
||||
#1042#1085#1091#1090#1088#1077#1085#1085#1080#1081
|
||||
#1054#1090' '#1074#1085#1077#1096#1085#1077#1075#1086' '#1084#1072#1089#1090#1077#1088#1072
|
||||
#1060#1088#1086#1085#1090' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN1'
|
||||
#1060#1088#1086#1085#1090' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN2'
|
||||
#1057#1087#1072#1076' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN1'
|
||||
#1057#1087#1072#1076' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN2')
|
||||
end
|
||||
end
|
||||
object btnOpenByIP: TButton
|
||||
Left = 8
|
||||
Top = 160
|
||||
Width = 217
|
||||
Height = 25
|
||||
Caption = #1059#1089#1090#1072#1085#1086#1074#1080#1090#1100' '#1089#1086#1077#1076#1080#1085#1077#1085#1080#1077' '#1087#1086' IP-'#1072#1076#1088#1077#1089#1091
|
||||
TabOrder = 18
|
||||
OnClick = btnOpenByIPClick
|
||||
end
|
||||
object edtIpAddr: TEdit
|
||||
Left = 8
|
||||
Top = 192
|
||||
Width = 217
|
||||
Height = 21
|
||||
TabOrder = 19
|
||||
Text = '192.168.0.1'
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,712 @@
|
||||
unit MainUnit;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
||||
Dialogs, StdCtrls,
|
||||
l502api, x502api, e502api, X502_ProcessThread;
|
||||
|
||||
type
|
||||
TMainForm = class(TForm)
|
||||
btnRefreshDeviceList: TButton;
|
||||
cbbDevList: TComboBox;
|
||||
btnOpen: TButton;
|
||||
grpDevInfo: TGroupBox;
|
||||
chkDacPresent: TCheckBox;
|
||||
chkGalPresent: TCheckBox;
|
||||
chkDspPresent: TCheckBox;
|
||||
edtFpgaVer: TEdit;
|
||||
edtPldaVer: TEdit;
|
||||
lbl1: TLabel;
|
||||
lbl2: TLabel;
|
||||
btnAsyncDigIn: TButton;
|
||||
edtAsyncDigIn: TEdit;
|
||||
btnAsyncDigOut: TButton;
|
||||
edtAsyncDigOut: TEdit;
|
||||
grp1: TGroupBox;
|
||||
lbl3: TLabel;
|
||||
lbl4: TLabel;
|
||||
lbl5: TLabel;
|
||||
btnSetAdcFreq: TButton;
|
||||
edtAdcFreq: TEdit;
|
||||
edtAdcFreqLch: TEdit;
|
||||
edtDinFreq: TEdit;
|
||||
grp2: TGroupBox;
|
||||
lbl6: TLabel;
|
||||
lbl7: TLabel;
|
||||
lbl8: TLabel;
|
||||
lbl9: TLabel;
|
||||
lbl10: TLabel;
|
||||
cbbLCh1_Channel: TComboBox;
|
||||
cbbLCh1_Range: TComboBox;
|
||||
cbbLCh1_Mode: TComboBox;
|
||||
edtLCh1_Result: TEdit;
|
||||
cbbLCh2_Channel: TComboBox;
|
||||
cbbLCh2_Range: TComboBox;
|
||||
cbbLCh2_Mode: TComboBox;
|
||||
edtLCh2_Result: TEdit;
|
||||
cbbLCh3_Channel: TComboBox;
|
||||
cbbLCh3_Range: TComboBox;
|
||||
cbbLCh3_Mode: TComboBox;
|
||||
edtLCh3_Result: TEdit;
|
||||
chkSyncDin: TCheckBox;
|
||||
edtDin_Result: TEdit;
|
||||
cbbLChCnt: TComboBox;
|
||||
btnAsyncAdcFrame: TButton;
|
||||
btnStop: TButton;
|
||||
btnStart: TButton;
|
||||
btnAsyncDac1: TButton;
|
||||
edtAsyncDac1: TEdit;
|
||||
edtAsyncDac2: TEdit;
|
||||
btnAsyncDac2: TButton;
|
||||
GroupBox4: TGroupBox;
|
||||
Label10: TLabel;
|
||||
Label11: TLabel;
|
||||
cbbSyncMode: TComboBox;
|
||||
cbbSyncStartMode: TComboBox;
|
||||
chkEthPresent: TCheckBox;
|
||||
edtMcuVer: TEdit;
|
||||
lbl11: TLabel;
|
||||
btnOpenByIP: TButton;
|
||||
edtIpAddr: TEdit;
|
||||
procedure btnRefreshDeviceListClick(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure btnOpenClick(Sender: TObject);
|
||||
procedure btnAsyncDigInClick(Sender: TObject);
|
||||
procedure btnAsyncDigOutClick(Sender: TObject);
|
||||
procedure btnSetAdcFreqClick(Sender: TObject);
|
||||
procedure btnAsyncAdcFrameClick(Sender: TObject);
|
||||
procedure btnStartClick(Sender: TObject);
|
||||
procedure btnAsyncDac1Click(Sender: TObject);
|
||||
procedure btnAsyncDac2Click(Sender: TObject);
|
||||
procedure btnStopClick(Sender: TObject);
|
||||
procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
||||
procedure chkSyncDinClick(Sender: TObject);
|
||||
procedure btnOpenByIPClick(Sender: TObject);
|
||||
private
|
||||
hnd : t_x502_hnd; //îïèñàòåëü ìîäóëÿ
|
||||
devrecList : array of t_x502_devrec;
|
||||
threadRunning : Boolean; //ïðèçíàê, çàïóùåí ëè ïîòîê ñáîðà äàííûõ
|
||||
thread: TX502_ProcessThread; //ïîòîê äëÿ ñèíõðîííîãî ââîäà
|
||||
|
||||
procedure updateControls();
|
||||
procedure freeDevList();
|
||||
procedure refreshDeviceList();
|
||||
procedure showDevInfo();
|
||||
procedure closeDevice();
|
||||
procedure OnThreadTerminate(par : TObject);
|
||||
function setAdcFreq() : LongInt;
|
||||
function setupParams() : LongInt;
|
||||
function setSyncDinStream() : LongInt;
|
||||
function parseIpAddr(addr : string) : LongWord;
|
||||
|
||||
{ Private declarations }
|
||||
public
|
||||
{ Public declarations }
|
||||
end;
|
||||
|
||||
var
|
||||
MainForm: TMainForm;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.dfm}
|
||||
|
||||
procedure TMainForm.updateControls();
|
||||
begin
|
||||
//êíîïêà îáíîâèòü ñïèñîê äîñòóïíà ïîêà íå îòêðûëè óñòðîéñòâî
|
||||
btnRefreshDeviceList.Enabled := hnd=nil;
|
||||
cbbDevList.Enabled:= hnd=nil;
|
||||
|
||||
if hnd = nil then
|
||||
btnOpen.Caption := 'Óñòàíîâèòü ñâÿçü ñ ìîäóëåì'
|
||||
else
|
||||
btnOpen.Caption := 'Ðàçîðâàòü ñâÿçü ñ ìîäóëåì';
|
||||
btnOpen.Enabled := (hnd<>nil) or (cbbDevList.ItemIndex >= 0);
|
||||
btnOpenByIP.Enabled := hnd=nil;
|
||||
edtIpAddr.Enabled := hnd=nil;
|
||||
|
||||
chkSyncDin.Enabled := (hnd<>nil) and not threadRunning;
|
||||
|
||||
btnStart.Enabled := (hnd<>nil) and not threadRunning;
|
||||
btnStop.Enabled := (hnd<>nil) and threadRunning;
|
||||
|
||||
btnSetAdcFreq.Enabled := (hnd<>nil) and not threadRunning;
|
||||
|
||||
btnAsyncDigOut.Enabled := (hnd<>nil);
|
||||
btnAsyncDigIn.Enabled := (hnd<>nil);
|
||||
btnAsyncDac1.Enabled := (hnd<>nil) and chkDacPresent.Checked;
|
||||
btnAsyncDac2.Enabled := (hnd<>nil) and chkDacPresent.Checked;
|
||||
btnAsyncAdcFrame.Enabled := (hnd<>nil) and not threadRunning;
|
||||
end;
|
||||
|
||||
procedure TMainForm.freeDevList();
|
||||
begin
|
||||
if Length(devrecList) <> 0 then
|
||||
begin
|
||||
X502_FreeDevRecordList(devrecList, Length(devrecList));
|
||||
SetLength(devrecList, 0);
|
||||
end;
|
||||
cbbDevList.Items.Clear;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
{ Ôóíêöèÿ îáíîâëÿåò ñïèñîê ñåðèéíûõ íîìåðîâ ïîäêëþ÷åííûõ óñòðîéñòâ }
|
||||
procedure TMainForm.refreshDeviceList();
|
||||
var
|
||||
//óêàçàòåëü íà ìàññèâ ñåðèéíûõ íîìåðîâ, êîòîðûé âûäåëèì äèíàìè÷åñêè
|
||||
res,i, old_index : LongInt;
|
||||
devcnt : LongWord;
|
||||
pci_devrecs, usb_devrecs : array of t_x502_devrec;
|
||||
begin
|
||||
old_index := cbbDevList.ItemIndex;
|
||||
|
||||
freeDevList;
|
||||
|
||||
L502_GetDevRecordsList(pci_devrecs, 0, devcnt);
|
||||
if devcnt > 0 then
|
||||
begin
|
||||
//óñòàíàâëèâàåì ðàçìåð ìàññèâà, ÷òîáû åãî õâàòàëî äëÿ íóæíîãî êîë-âà íîìåðîâ
|
||||
SetLength(pci_devrecs, devcnt);
|
||||
//ïîëó÷àåì ñåðèéíûå íîìåðà ìîäóëåé
|
||||
res := L502_GetDevRecordsList(pci_devrecs, 0);
|
||||
if res > 0 then
|
||||
SetLength(pci_devrecs, res)
|
||||
else
|
||||
SetLength(pci_devrecs, 0);
|
||||
end;
|
||||
|
||||
E502_UsbGetDevRecordsList(usb_devrecs, 0, devcnt);
|
||||
if devcnt > 0 then
|
||||
begin
|
||||
//óñòàíàâëèâàåì ðàçìåð ìàññèâà, ÷òîáû åãî õâàòàëî äëÿ íóæíîãî êîë-âà íîìåðîâ
|
||||
SetLength(usb_devrecs, devcnt);
|
||||
//ïîëó÷àåì ñåðèéíûå íîìåðà ìîäóëåé
|
||||
res := E502_UsbGetDevRecordsList(usb_devrecs, 0);
|
||||
if res > 0 then
|
||||
SetLength(usb_devrecs, res)
|
||||
else
|
||||
SetLength(usb_devrecs, 0);
|
||||
end;
|
||||
|
||||
|
||||
// Â devrecList ñîõðàíÿåì îáà ìàññèâà çàïèñåé
|
||||
SetLength(devrecList, Length(pci_devrecs) + Length(usb_devrecs));
|
||||
if Length(devrecList) > 0 then
|
||||
begin
|
||||
for i:=0 to Length(pci_devrecs)-1 do
|
||||
devrecList[i] := pci_devrecs[i];
|
||||
for i:=0 to Length(usb_devrecs)-1 do
|
||||
devrecList[i+Length(pci_devrecs)] := usb_devrecs[i];
|
||||
|
||||
|
||||
// äîáàâëÿåì âñå íàéäåííûå çàïèñè â ñïèñîê ComboBox'à äëÿ âûáîðà
|
||||
for i:=0 to Length(devrecList)-1 do
|
||||
cbbDevList.Items.Add(AnsiString(devrecList[i].devname) + ', ' + AnsiString(devrecList[i].serial));
|
||||
|
||||
//åñëè äî îáíîâëåíèÿ ñïèñêà áûë âûáðàí äåéñòâèòåëüíûé èíäåêñ - âîññòàíàâëèâàåì åãî
|
||||
if (old_index >= 0) and (old_index < Length(pci_devrecs)) then
|
||||
cbbDevList.ItemIndex := old_index
|
||||
else
|
||||
cbbDevList.ItemIndex := 0;
|
||||
end;
|
||||
|
||||
|
||||
updateControls;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
// Óñòàíîâêà ïåðàìåòðîâ ñáîðà ìîäóëÿ â ñîîòâåòñòâèè ñ ýëåìåíòàìè GUI
|
||||
function TMainForm.setupParams() : Integer;
|
||||
var
|
||||
err : Integer;
|
||||
lch_cnt : LongWord;
|
||||
const
|
||||
{ òàáëèöà ñîîòâåòñòâèÿ èíäåêñîâ â ComboBox è êîäîâ ðåæèìà èçìåðåíèÿ }
|
||||
mode_tbl: array[0..2] of LongWord = (X502_LCH_MODE_COMM, X502_LCH_MODE_DIFF, X502_LCH_MODE_ZERO);
|
||||
{ òàáëèöà ñîîòâåòñòâèÿ èíäåêñîâ â ComboBox è êîäîâ äèàïàçîíîâ ÀÖÏ }
|
||||
range_tbl: array[0..5] of LongWord = (X502_ADC_RANGE_10, X502_ADC_RANGE_5, X502_ADC_RANGE_2,
|
||||
X502_ADC_RANGE_1, X502_ADC_RANGE_05, X502_ADC_RANGE_02);
|
||||
{ òàáëèöà ñîîòâåòñòâèÿ èíäåêñîâ â ComboBox è êîäîâ èñòî÷íèêà ñèíõðîíèçàöèè }
|
||||
f_sync_tbl: array[0..5] of LongWord = (X502_SYNC_INTERNAL, X502_SYNC_EXTERNAL_MASTER,
|
||||
X502_SYNC_DI_SYN1_RISE, X502_SYNC_DI_SYN2_RISE,
|
||||
X502_SYNC_DI_SYN1_FALL, X502_SYNC_DI_SYN2_FALL);
|
||||
begin
|
||||
lch_cnt := cbbLChCnt.ItemIndex + 1;
|
||||
// Óñòàíàâëèâàåì êîë-âî ëîãè÷åñêèõ êàíàëîâ
|
||||
err := X502_SetLChannelCount(hnd, lch_cnt);
|
||||
|
||||
// Íàñòðàíèâàåì òàáëèöó ëîãè÷åñêèõ êàíàëîâ
|
||||
if err = X502_ERR_OK then
|
||||
begin
|
||||
err := X502_SetLChannel(hnd,0, cbbLCh1_Channel.ItemIndex,
|
||||
mode_tbl[cbbLCh1_Mode.ItemIndex], range_tbl[cbbLCh1_Range.ItemIndex],0);
|
||||
end;
|
||||
if (err = X502_ERR_OK) and (lch_cnt>=2) then
|
||||
begin
|
||||
err := X502_SetLChannel(hnd,1, cbbLCh2_Channel.ItemIndex,
|
||||
mode_tbl[cbbLCh2_Mode.ItemIndex], range_tbl[cbbLCh2_Range.ItemIndex],0);
|
||||
end;
|
||||
if (err = X502_ERR_OK) and (lch_cnt>=3) then
|
||||
begin
|
||||
err := X502_SetLChannel(hnd,2, cbbLCh3_Channel.ItemIndex,
|
||||
mode_tbl[cbbLCh3_Mode.ItemIndex], range_tbl[cbbLCh3_Range.ItemIndex],0);
|
||||
end;
|
||||
|
||||
// Íàñòðàèâàåì èñòî÷íèê ÷àñòîòû ñèíõðîíèçàöèè è çàïóñêà ñáîðà
|
||||
if err = X502_ERR_OK then
|
||||
err := X502_SetSyncMode(hnd, f_sync_tbl[cbbSyncMode.ItemIndex]);
|
||||
if err = X502_ERR_OK then
|
||||
err := X502_SetSyncStartMode(hnd, f_sync_tbl[cbbSyncStartMode.ItemIndex]);
|
||||
|
||||
// íàñòðàèâàåì ÷àñòîòó ñáîðà ñ ÀÖÏ
|
||||
if err = X502_ERR_OK then
|
||||
err := setAdcFreq();
|
||||
|
||||
// Çàïèñûâàåì íàñòðîéêè â ìîäóëü
|
||||
if err = X502_ERR_OK then
|
||||
err := X502_Configure(hnd, 0);
|
||||
|
||||
setupParams:= err;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
procedure TMainForm.closeDevice();
|
||||
begin
|
||||
if hnd<>nil then
|
||||
begin
|
||||
//åñëè çàïóùåí ïîòîê ñáîðà äàííûõ - òî îñòàíàâëèâàåì åãî
|
||||
if threadRunning then
|
||||
begin
|
||||
thread.stop:=True;
|
||||
thread.WaitFor;
|
||||
end;
|
||||
// çàêðûòèå ñâÿçè ñ ìîäóëåì
|
||||
X502_Close(hnd);
|
||||
// îñâîáîæäåíèå îïèñàòåëÿ
|
||||
X502_Free(hnd);
|
||||
hnd := nil;
|
||||
end;
|
||||
end;
|
||||
|
||||
//óñòàíîâêà ÷àñòîòû ÀÖÏ â ñîîòâåòñòâèè ñî çíà÷åíèÿìè
|
||||
//ýëåìåíòîâ óïðàâëåíèÿ, è îáíîâëåíèå èõ â ñîîòâåòñòâèè
|
||||
//ñ ðåàëüíî óñòàíîâëåííûìè
|
||||
function TMainForm.setAdcFreq() : Integer;
|
||||
var f_acq, f_lch, f_din: Double;
|
||||
err : Integer;
|
||||
begin
|
||||
f_acq := StrToFloat(edtAdcFreq.Text);
|
||||
f_lch := StrToFloat(edtAdcFreqLch.Text);
|
||||
f_din := StrToFloat(edtDinFreq.Text);
|
||||
// óñòàíàâëèâàåì òðåáóåìóþ ÷àñòîòó ñáîðà.
|
||||
err := X502_SetAdcFreq(hnd, f_acq, f_lch);
|
||||
if err = X502_ERR_OK then
|
||||
begin
|
||||
// îáíîâëÿåì çíà÷åíèå èíäèêàòîðà, äëÿ îòîáðàæåíèÿ
|
||||
// ðåàëüíî óñòàíîâèâøåéñÿ ÷àñòîòû
|
||||
edtAdcFreq.Text := FloatToStr(f_acq);
|
||||
edtAdcFreqLch.Text := FloatToStr(f_lch);
|
||||
// Óñòàíàâëèâàåì ÷àñòîòó ñèíõðîííîãî ñáîðà
|
||||
err := X502_SetDinFreq(hnd, f_din);
|
||||
if err = X502_ERR_OK then
|
||||
edtDinFreq.Text := FloatToStr(f_din);
|
||||
end;
|
||||
setAdcFreq:= err;
|
||||
end;
|
||||
|
||||
function TMainForm.setSyncDinStream : LongInt;
|
||||
var err : LongInt;
|
||||
begin
|
||||
{ ðàçðåøàåì èëè çàïðåùàåì ïîòîê ñèíõðîííîãî ââîäà
|
||||
â çàâèñèìîñòè îò ñîñòîÿíèÿ ïåðåêëþ÷àòåëÿ }
|
||||
if chkSyncDin.Checked then
|
||||
err := X502_StreamsEnable(hnd, X502_STREAM_DIN)
|
||||
else
|
||||
err := X502_StreamsDisable(hnd, X502_STREAM_DIN);
|
||||
|
||||
setSyncDinStream:= err;
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnRefreshDeviceListClick(Sender: TObject);
|
||||
begin
|
||||
refreshDeviceList;
|
||||
end;
|
||||
|
||||
procedure TMainForm.FormCreate(Sender: TObject);
|
||||
begin
|
||||
hnd := nil;
|
||||
refreshDeviceList;
|
||||
end;
|
||||
|
||||
|
||||
procedure TMainForm.showDevInfo();
|
||||
var
|
||||
err : LongInt;
|
||||
info : t_x502_info;
|
||||
begin
|
||||
//ïîëó÷àåì èíôîðìàöèþ î óñòðîéñòâå
|
||||
err := X502_GetDevInfo(hnd,info);
|
||||
if err <> X502_ERR_OK then
|
||||
begin
|
||||
MessageDlg('Îøèáêà ïîëó÷åíèÿ èíôîðìàöèè î óñòðîéñòâå: ' + X502_GetErrorString(err),
|
||||
mtError, [mbOK], 0);
|
||||
//ïðè îøèáêå çàêðûâàåì ñâÿçü ñ óñòðîéñòâîì
|
||||
X502_Close(hnd);
|
||||
X502_Free(hnd);
|
||||
hnd := nil;
|
||||
end
|
||||
else
|
||||
begin
|
||||
//âûâîäèì ïðîè÷èòàííóþ èíôîðìàöèþ íà èíäèêàòîðû
|
||||
chkDacPresent.Checked := (info.devflags and X502_DEVFLAGS_DAC_PRESENT) <> 0;
|
||||
chkGalPresent.Checked := (info.devflags and X502_DEVFLAGS_GAL_PRESENT) <> 0;
|
||||
chkDspPresent.Checked := (info.devflags and X502_DEVFLAGS_BF_PRESENT) <> 0;
|
||||
chkEthPresent.Checked := (info.devflags and X502_DEVFLAGS_IFACE_SUPPORT_ETH) <> 0;
|
||||
|
||||
edtPldaVer.Text := IntToStr(info.plda_ver);
|
||||
edtFpgaVer.Text := IntToStr((info.fpga_ver shr 8) and $FF) + '.' +
|
||||
IntToStr(info.fpga_ver and $FF);
|
||||
if info.mcu_firmware_ver <> 0 then
|
||||
begin
|
||||
edtMcuVer.Text := IntToStr((info.mcu_firmware_ver shr 24) and $FF) + '.' +
|
||||
IntToStr((info.mcu_firmware_ver shr 16) and $FF) + '.' +
|
||||
IntToStr((info.mcu_firmware_ver shr 8) and $FF) + '.' +
|
||||
IntToStr((info.mcu_firmware_ver) and $FF);
|
||||
end
|
||||
else
|
||||
begin
|
||||
edtMcuVer.Text := '';
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnOpenClick(Sender: TObject);
|
||||
var
|
||||
idx : integer;
|
||||
err : LongInt;
|
||||
begin
|
||||
if hnd=nil then
|
||||
begin
|
||||
// ïîëó÷àåì èíäåêñ âûáðàííîãî ìîäóëÿ
|
||||
idx := cbbDevList.ItemIndex;
|
||||
if (idx >= 0) and (idx < Length(devrecList)) then
|
||||
begin
|
||||
//ñîçäàåì îïèñàòåëü
|
||||
hnd := X502_Create();
|
||||
if hnd=nil then
|
||||
MessageDlg('Îøèáêà ñîçäàíèÿ îïèñàòåëÿ ìîäóëÿ',mtError, [mbOK], 0)
|
||||
else
|
||||
begin
|
||||
// îòêðûâàåì ìîäóëü, ñîîòâåòñòâóþùèé çàïèñè ñ âûáðàííûì èíäåêñîì
|
||||
err := X502_OpenByDevRecord(hnd, devrecList[idx]);
|
||||
if err <> X502_ERR_OK then
|
||||
begin
|
||||
// Íå ñìîãëè îòêðûòü => îñâîáîæäàåì îïèñàòåëü
|
||||
MessageDlg('Îøèáêà îòêðûòèÿ ìîäóëÿ: ' + X502_GetErrorString(err),mtError, [mbOK], 0);
|
||||
X502_Free(hnd);
|
||||
hnd := nil;
|
||||
end
|
||||
else
|
||||
begin
|
||||
showDevInfo;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end
|
||||
else
|
||||
begin
|
||||
//åñëè óñòðîéñòâî áûëî îòêðûòî - çàêðûâàåì
|
||||
closeDevice;
|
||||
end;
|
||||
|
||||
updateControls;
|
||||
end;
|
||||
|
||||
{ ïðåîáðàçîâàíèå ñòðîêè ñ ip-àäðåñîì â DWORD }
|
||||
function TMainForm.parseIpAddr(addr : string) : LongWord;
|
||||
var
|
||||
S: TStrings;
|
||||
begin
|
||||
S := TStringList.Create;
|
||||
S.Delimiter := '.';
|
||||
S.DelimitedText := addr;
|
||||
|
||||
// do preeliminary check. The IP4 Address string must consists of 4 parts. Less or more than that would be invalid values
|
||||
if S.Count<>4 then
|
||||
begin
|
||||
S.Free;
|
||||
raise Exception.Create('Invalid IP4 Address string');
|
||||
end;
|
||||
|
||||
Result := (StrToInt(S[0]) shl 24) + (StrToInt(S[1]) shl 16) +
|
||||
(StrToInt(S[2]) shl 8) + (StrToInt(S[3]));
|
||||
|
||||
S.Free;
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnOpenByIPClick(Sender: TObject);
|
||||
var
|
||||
devrec : t_x502_devrec;
|
||||
err : LongInt;
|
||||
begin
|
||||
// Ñîçäàåì çàïèñü, ñîîòâåòñòâóþùóþ çàäàííîìó àäðåñó
|
||||
err := E502_MakeDevRecordByIpAddr(devrec, parseIpAddr(edtIpAddr.Text), 0, 5000);
|
||||
if err <> X502_ERR_OK then
|
||||
MessageDlg('Îøèáêà ñîçäàíèÿ çàïèñè: ' + X502_GetErrorString(err),mtError, [mbOK], 0)
|
||||
else
|
||||
begin
|
||||
// Ñîçäàíèå îïèñàòåëÿ ìîäóëÿ
|
||||
hnd := X502_Create;
|
||||
if hnd=nil then
|
||||
MessageDlg('Îøèáêà ñîçäàíèÿ îïèñàòåëÿ ìîäóëÿ',mtError, [mbOK], 0)
|
||||
else
|
||||
begin
|
||||
// óñòàíàâëèâàåì ñâÿçü ïî ñîçäàííîé çàïèñè
|
||||
err := X502_OpenByDevRecord(hnd, devrec);
|
||||
if err <> X502_ERR_OK then
|
||||
begin
|
||||
// Íå ñìîãëè îòêðûòü => îñâîáîæäàåì îïèñàòåëü
|
||||
MessageDlg('Îøèáêà îòêðûòèÿ ìîäóëÿ: ' + X502_GetErrorString(err),mtError, [mbOK], 0);
|
||||
X502_Free(hnd);
|
||||
hnd := nil;
|
||||
end
|
||||
else
|
||||
begin
|
||||
showDevInfo;
|
||||
end;
|
||||
end;
|
||||
|
||||
X502_FreeDevRecordList(devrec);
|
||||
end;
|
||||
updateControls();
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnAsyncDigInClick(Sender: TObject);
|
||||
var din: Cardinal;
|
||||
var err: Integer;
|
||||
begin
|
||||
if hnd<>nil then
|
||||
begin
|
||||
err := X502_AsyncInDig(hnd, din);
|
||||
if err<>X502_ERR_OK then
|
||||
MessageDlg('Îøèáêà àñèíõðîííîãî ââîäà ñ öèôðîâûõ ëèíèé: ' + X502_GetErrorString(err),
|
||||
mtError, [mbOK], 0)
|
||||
else
|
||||
edtAsyncDigIn.Text := IntToHex(din and $3FFFF, 5);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnAsyncDigOutClick(Sender: TObject);
|
||||
var dout: Cardinal;
|
||||
var err: Integer;
|
||||
begin
|
||||
if hnd<>nil then
|
||||
begin
|
||||
dout:= StrToInt(edtAsyncDigOut.Text);
|
||||
err := X502_AsyncOutDig(hnd, dout, 0);
|
||||
if err <> X502_ERR_OK then
|
||||
MessageDlg('Îøèáêà àñèíõðîííîãî âûâîäà öèôðîâûõ ëèíèé: ' + X502_GetErrorString(err),
|
||||
mtError, [mbOK], 0)
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnSetAdcFreqClick(Sender: TObject);
|
||||
var err : Integer;
|
||||
begin
|
||||
{ óñòàíàâëèâàåì êîë-âî ëîãè÷åñêèõ êàíàëîâ, ÷òîáû ïðàâèëüíî
|
||||
ðàñ÷èòàòü ÷àñòîòó íà êàíàë }
|
||||
err := X502_SetLChannelCount(hnd, cbbLChCnt.ItemIndex+1);
|
||||
if err = X502_ERR_OK then
|
||||
err := setAdcFreq();
|
||||
if err <> X502_ERR_OK then
|
||||
MessageDlg('Îøèáêà óñòàíîâêè ÷àñòîòû: ' + X502_GetErrorString(err),
|
||||
mtError, [mbOK], 0)
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnAsyncAdcFrameClick(Sender: TObject);
|
||||
var err : Integer;
|
||||
adc_data : array of double;
|
||||
lch_cnt : LongWord;
|
||||
|
||||
begin
|
||||
if hnd <> nil then
|
||||
begin
|
||||
// óñòàíàâëèâàåì ïàðàìåòðû ìîäóëÿ
|
||||
err := setupParams();
|
||||
if err = X502_ERR_OK then
|
||||
err := X502_GetLChannelCount(hnd, lch_cnt);
|
||||
|
||||
if err = X502_ERR_OK then
|
||||
begin
|
||||
// óñòàíàâëèâàåì ðàçìåð ìàññèâà ðàâíûì êîëè÷åñòâó ëîãè÷åñêèõ êàíàëîâ
|
||||
SetLength(adc_data, lch_cnt);
|
||||
err := X502_AsyncGetAdcFrame(hnd, X502_PROC_FLAGS_VOLT, 1000, adc_data);
|
||||
|
||||
if err = X502_ERR_OK then
|
||||
begin
|
||||
//âûâîäèì ðåçóëüòàò
|
||||
edtLCh1_Result.Text := FloatToStrF(adc_data[0], ffFixed, 4, 8);
|
||||
if lch_cnt >= 2 then
|
||||
edtLCh2_Result.Text := FloatToStrF(adc_data[1], ffFixed, 4, 8)
|
||||
else
|
||||
edtLCh2_Result.Text := '';
|
||||
|
||||
if lch_cnt >= 3 then
|
||||
edtLCh3_Result.Text := FloatToStrF(adc_data[2], ffFixed, 4, 8)
|
||||
else
|
||||
edtLCh3_Result.Text := '';
|
||||
|
||||
end
|
||||
else
|
||||
begin
|
||||
MessageDlg('Îøèáêà ïðèåìà êàäðà ÀÖÏ: ' + X502_GetErrorString(err),
|
||||
mtError, [mbOK], 0);
|
||||
end
|
||||
end
|
||||
else
|
||||
begin
|
||||
MessageDlg('Îøèáêà íàñòðîéêè ïàðàìåòðîâ ÀÖÏ: ' + X502_GetErrorString(err),
|
||||
mtError, [mbOK], 0);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnStartClick(Sender: TObject);
|
||||
var
|
||||
err : LongInt;
|
||||
begin
|
||||
//íàñòðàèâàåì âñå ïàðàìåòðû â ñîîòâåòñòâèè ñ ýëåìåíòàìè óïðàâëåíèÿ
|
||||
err := setupParams();
|
||||
//ðàçðåøàåì ñèíõðîííûé ââîä ÀÖÏ
|
||||
if err = X502_ERR_OK then
|
||||
err := X502_StreamsEnable(hnd, X502_STREAM_ADC);
|
||||
|
||||
// ðàçðåøàåì ñèíõðîííûé ââîä ñ öèôðîâûõ ëèíèé â çàâèñèìîñòè îò ïåðåêëþ÷àòåëÿ
|
||||
if err = X502_ERR_OK then
|
||||
err := setSyncDinStream();
|
||||
|
||||
if err <> X502_ERR_OK then
|
||||
begin
|
||||
MessageDlg('Îøèáêà íàñòðîéêè ïàðàìåòðîâ ìîäóëÿ: ' + X502_GetErrorString(err),
|
||||
mtError, [mbOK], 0);
|
||||
end
|
||||
else
|
||||
begin
|
||||
if thread <> nil then
|
||||
begin
|
||||
FreeAndNil(thread);
|
||||
end;
|
||||
|
||||
thread := TX502_ProcessThread.Create(True);
|
||||
thread.hnd := hnd;
|
||||
SetLength(thread.LChEdits, 3);
|
||||
thread.LChEdits[0] := edtLCh1_Result;
|
||||
thread.LChEdits[1] := edtLCh2_Result;
|
||||
thread.LChEdits[2] := edtLCh3_Result;
|
||||
thread.dinResEdit := edtDin_Result;
|
||||
|
||||
edtLCh1_Result.Text:= '';
|
||||
edtLCh2_Result.Text:= '';
|
||||
edtLCh3_Result.Text:= '';
|
||||
edtDin_Result.Text:= '';
|
||||
{ óñòàíàâëèâàåì ôóíêöèþ íà ñîáûòèå çàâåðøåíèÿ ïîòîêà (â ÷àñòíîñòè
|
||||
÷òîáû îòñëåäèòü, åñëè ïîòîê çàâåðøèëñÿ ñàì èç-çà îøèáêè ïðè ñáîðå
|
||||
äàííûõ) }
|
||||
thread.OnTerminate := OnThreadTerminate;
|
||||
thread.Resume; //äëÿ Delphi 2010 è âûøå ðåêîìåíäóåòñÿ èñïîëüçîâàòü Start
|
||||
threadRunning := True;
|
||||
|
||||
updateControls;
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
//ôóíêöèÿ, âûçûâàåìàÿ ïî çàâåðøåíèþ ïîòîêà ñáîðà äàííûõ
|
||||
//ðàçðåøàåò ñòàðò íîâîãî, óñòàíàâëèâàåò thread_run
|
||||
procedure TMainForm.OnThreadTerminate(par : TObject);
|
||||
begin
|
||||
if thread.err <> X502_ERR_OK then
|
||||
begin
|
||||
MessageDlg('Ñáîð äàííûõ çàâåðøåí ñ îøèáêîé: ' + X502_GetErrorString(thread.err),
|
||||
mtError, [mbOK], 0);
|
||||
end;
|
||||
|
||||
threadRunning := false;
|
||||
updateControls();
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnAsyncDac1Click(Sender: TObject);
|
||||
var
|
||||
err : LongInt;
|
||||
val : Double;
|
||||
begin
|
||||
if hnd<>nil then
|
||||
begin
|
||||
val := StrToFloat(edtAsyncDac1.Text);;
|
||||
err := X502_AsyncOutDac(hnd, X502_DAC_CH1, val, X502_DAC_FLAGS_CALIBR or
|
||||
X502_DAC_FLAGS_VOLT);
|
||||
if err <> X502_ERR_OK then
|
||||
begin
|
||||
MessageDlg('Îøèáêà âûâîäà íà ÖÀÏ: ' + X502_GetErrorString(err),
|
||||
mtError, [mbOK], 0);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnAsyncDac2Click(Sender: TObject);
|
||||
var
|
||||
err : LongInt;
|
||||
val : Double;
|
||||
begin
|
||||
if hnd<>nil then
|
||||
begin
|
||||
val := StrToFloat(edtAsyncDac2.Text);;
|
||||
err := X502_AsyncOutDac(hnd, X502_DAC_CH2, val, X502_DAC_FLAGS_CALIBR or
|
||||
X502_DAC_FLAGS_VOLT);
|
||||
if err <> X502_ERR_OK then
|
||||
begin
|
||||
MessageDlg('Îøèáêà âûâîäà íà ÖÀÏ: ' + X502_GetErrorString(err),
|
||||
mtError, [mbOK], 0);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnStopClick(Sender: TObject);
|
||||
begin
|
||||
// óñòàíàâëèâàåì çàïðîñ íà çàâåðøåíèå ïîòîêà
|
||||
if threadRunning then
|
||||
thread.stop:=True;
|
||||
btnStop.Enabled:= False;
|
||||
end;
|
||||
|
||||
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
|
||||
begin
|
||||
closeDevice;
|
||||
freeDevList;
|
||||
if thread <> nil then
|
||||
FreeAndNil(thread);
|
||||
end;
|
||||
|
||||
procedure TMainForm.chkSyncDinClick(Sender: TObject);
|
||||
var err : LongInt;
|
||||
begin
|
||||
if hnd<>nil then
|
||||
begin
|
||||
err := setSyncDinStream();
|
||||
if err <> X502_ERR_OK then
|
||||
begin
|
||||
MessageDlg('Îøèáêà ðàçðåøåíèÿ/çàïðåòà ñèíõðîííîãî ââîäà: ' + X502_GetErrorString(err),
|
||||
mtError, [mbOK], 0);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
|
||||
end.
|
||||
@@ -0,0 +1,123 @@
|
||||
unit X502_ProcessThread;
|
||||
|
||||
interface
|
||||
uses Classes, Math, SyncObjs,StdCtrls,SysUtils, x502api;
|
||||
const RECV_BUF_SIZE = 8*1024*1024;
|
||||
const RECV_TOUT = 250;
|
||||
|
||||
type TX502_ProcessThread = class(TThread)
|
||||
public
|
||||
LChEdits : array of TEdit;
|
||||
dinResEdit : TEdit;
|
||||
hnd: t_x502_hnd; //îïèñàòåëü ìîäóëÿ
|
||||
|
||||
err : LongInt; //êîä îøèáêè ïðè âûïîëíåíèè ïîòîêà ñáîðà
|
||||
stop : Boolean; //çàïðîñ íà îñòàíîâ (óñòàíàâëèâàåòñÿ èç îñíîâíîãî ïîòîêà)
|
||||
|
||||
constructor Create(SuspendCreate : Boolean);
|
||||
destructor Free();
|
||||
|
||||
private
|
||||
{ Private declarations }
|
||||
adcData : array [0..RECV_BUF_SIZE-1] of double;
|
||||
dinData : array [0..RECV_BUF_SIZE-1] of LongWord;
|
||||
adcSize, dinSize, firstLch : LongWord;
|
||||
|
||||
|
||||
procedure updateData;
|
||||
protected
|
||||
procedure Execute; override;
|
||||
end;
|
||||
implementation
|
||||
|
||||
|
||||
constructor TX502_ProcessThread.Create(SuspendCreate : Boolean);
|
||||
begin
|
||||
Inherited Create(SuspendCreate);
|
||||
stop:=False;
|
||||
hnd:=Nil;
|
||||
err:=X502_ERR_OK;
|
||||
end;
|
||||
|
||||
destructor TX502_ProcessThread.Free();
|
||||
begin
|
||||
Inherited Free();
|
||||
end;
|
||||
|
||||
{ îáíîâëåíèå èíäèêàòîðîâ ôîðìû ðåçóëüòàòàìè ïîñëåäíåãî èçìåðåíèÿ.
|
||||
Ìåòîä äîëæåí âûïîëíÿòüñÿ òîëüêî ÷åðåç Syncronize, êîòîðûé íóæåí
|
||||
äëÿ äîñòóïà ê ýëåìåíòàì VCL íå èç îñíîâíîãî ïîòîêà }
|
||||
procedure TX502_ProcessThread.updateData;
|
||||
var
|
||||
lch_cnt, i : LongWord;
|
||||
err : LongInt;
|
||||
begin
|
||||
err := X502_GetLChannelCount(hnd, lch_cnt);
|
||||
if err=X502_ERR_OK then
|
||||
begin
|
||||
// óñòàíàâëèâàåì â èíäèêàòîðàõ çíà÷åíèå ïåðâîãî îòñ÷åòà èç ìàññèâà
|
||||
for i:=0 to Min(lch_cnt, adcSize) do
|
||||
LChEdits[(firstLch + i) mod lch_cnt].Text := FloatToStrF(adcData[i], ffFixed, 4, 8);
|
||||
|
||||
{ åñëè åñòü äàííûå öèôðîâîãî âûõîäà, òî óñòàíàâëèâàåì èíäèêàòîð
|
||||
â ñîîòâåòñòâèè ñ ïåðâûì çíà÷åíèåì }
|
||||
if dinSize <> 0 then
|
||||
dinResEdit.Text := IntToHex(dinData[0] and $3FFFF, 5)
|
||||
else
|
||||
dinResEdit.Text := '';
|
||||
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TX502_ProcessThread.Execute;
|
||||
var
|
||||
stoperr, rcv_size : LongInt;
|
||||
rcv_buf : array of LongWord;
|
||||
begin
|
||||
setlength(rcv_buf, RECV_BUF_SIZE);
|
||||
// çàïóñêàåì ñèíõðîííûå ïîòîêè
|
||||
err:= X502_StreamsStart(hnd);
|
||||
if err = X502_ERR_OK then
|
||||
begin
|
||||
{ âûïîëíÿåì ïðèåì ïîêà íå ïðîèçîéäåò îøèáêà èëè
|
||||
íå áóäåò çàïðîñà íà îñòàíîâ îò îñíîâíîãî ïðèëîæåíèÿ }
|
||||
while not stop and (err = X502_ERR_OK) do
|
||||
begin
|
||||
//ïðèíèìàåì äàííûå ñèíõðîííîãî ââîäà
|
||||
rcv_size := X502_Recv(hnd, rcv_buf, RECV_BUF_SIZE, RECV_TOUT);
|
||||
// çíà÷åíèå ìåíüøå íóëÿ îçíà÷àåò îøèáêó...
|
||||
if rcv_size < 0 then
|
||||
err := rcv_size
|
||||
else if rcv_size>0 then
|
||||
begin
|
||||
//åñëè áîëüøå íóëÿ - çíà÷èò ïðèíÿëè íîâûå äàííûå
|
||||
dinSize:=RECV_BUF_SIZE;
|
||||
adcSize:=RECV_BUF_SIZE;
|
||||
{ ïîëó÷àåì íîìåð ëîã. êàêíàëà, ñîîòâåòñòâóþùèé ïåðâîìó
|
||||
îòñ÷åòó ÀÖÏ, òàê êàê äî ýòîãî ìîãëè îáðàáîòàòü
|
||||
íåêðàòíîå êîëè÷åñòâî êàäðîâ }
|
||||
err:=X502_GetNextExpectedLchNum(hnd, firstLch);
|
||||
if err = X502_ERR_OK then
|
||||
begin
|
||||
{ ðàçáèðàåì äàííûå íà ñèíõðîííûé ââîä è îòñ÷åòû ÀÖÏ è
|
||||
ïåðåâîäèì ÀÖÏ â Âîëüòû }
|
||||
err := X502_ProcessData(hnd, rcv_buf, rcv_size, X502_PROC_FLAGS_VOLT,
|
||||
adcData, adcSize, dinData, dinSize);
|
||||
if err = X502_ERR_OK then
|
||||
begin
|
||||
// îáíîâëÿåì çíà÷åíèÿ ýëåìåíòîâ óïðàâëåíèÿ
|
||||
Synchronize(updateData);
|
||||
end;
|
||||
end;
|
||||
end
|
||||
end;
|
||||
|
||||
{ Ïî âûõîäó èç öèêëà îòñàíàâëèâàåì ïîòîê.
|
||||
×òîáû íå ñáðîñèòü êîä îøèáêè (åñëè âûøëè ïî îøèáêå)
|
||||
ðåçóëüòàò îñòàíîâà ñîõðàíÿåì â îòäåëüíóþ ïåðåìåííóþ }
|
||||
stoperr:= X502_StreamsStop(hnd);
|
||||
if err = X502_ERR_OK then
|
||||
err:= stoperr;
|
||||
end;
|
||||
end;
|
||||
end.
|
||||
@@ -0,0 +1,24 @@
|
||||
Данный пример демонстрирует работу с модулеми L502 и E502 из среды Delphi.
|
||||
Пример содержит файл проекта для среды "Delphi 7" (x502_example.dpr) и для
|
||||
среды "Embarcadero Delphi XE" (x502_example.dproj).
|
||||
В последнем проекте также добавлена платформа Win64, для сборки 64-битных приложений.
|
||||
|
||||
В проекте необходимо указать путь к файлам x502api.pas, l502api.pas и e502api.pas,
|
||||
которые устанавливаются вместе с SDK в SDK_DIR/pas
|
||||
|
||||
Путь можно задать следующим образом:
|
||||
Delphi 7 - "Project->Options->Directories/Conditionals->Search path",
|
||||
Delphi XE - "Project->Options->Delphi Compiler->Search path"
|
||||
|
||||
|
||||
|
||||
Проект демонстрирует в первую очередь как можно работать с модулями L502 и E502, а не как нужно программировать
|
||||
в среде Delphi.
|
||||
|
||||
Пример аналогичен примеру для "Borland C++ Builder" и демонстрирует синхронный потоковый
|
||||
ввод с АЦП для трех логических каналов с возможностью запуска синхронного ввода с цифроых линий, а так же
|
||||
асинхронный ввод/вывод для цифровых линий, ЦАП и асинхронный ввод одного кадра АЦП.
|
||||
|
||||
Синхронный ввод осуществляется в отдельном потоке (TX502_ProcessThread), который создается
|
||||
и запускается по нажатию кнопки. В потоке осуществляется прием, обработка данных и вывод их
|
||||
на индикаторы (указатели на элементы индикаторов сохраняются в объекте потока перед его запуском).
|
||||
@@ -0,0 +1,141 @@
|
||||
[FileVersion]
|
||||
Version=7.0
|
||||
[Compiler]
|
||||
A=8
|
||||
B=0
|
||||
C=1
|
||||
D=1
|
||||
E=0
|
||||
F=0
|
||||
G=1
|
||||
H=1
|
||||
I=1
|
||||
J=0
|
||||
K=0
|
||||
L=1
|
||||
M=0
|
||||
N=1
|
||||
O=1
|
||||
P=1
|
||||
Q=0
|
||||
R=0
|
||||
S=0
|
||||
T=0
|
||||
U=0
|
||||
V=1
|
||||
W=0
|
||||
X=1
|
||||
Y=1
|
||||
Z=1
|
||||
ShowHints=1
|
||||
ShowWarnings=1
|
||||
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
|
||||
NamespacePrefix=
|
||||
SymbolDeprecated=1
|
||||
SymbolLibrary=1
|
||||
SymbolPlatform=1
|
||||
UnitLibrary=1
|
||||
UnitPlatform=1
|
||||
UnitDeprecated=1
|
||||
HResultCompat=1
|
||||
HidingMember=1
|
||||
HiddenVirtual=1
|
||||
Garbage=1
|
||||
BoundsError=1
|
||||
ZeroNilCompat=1
|
||||
StringConstTruncated=1
|
||||
ForLoopVarVarPar=1
|
||||
TypedConstVarPar=1
|
||||
AsgToTypedConst=1
|
||||
CaseLabelRange=1
|
||||
ForVariable=1
|
||||
ConstructingAbstract=1
|
||||
ComparisonFalse=1
|
||||
ComparisonTrue=1
|
||||
ComparingSignedUnsigned=1
|
||||
CombiningSignedUnsigned=1
|
||||
UnsupportedConstruct=1
|
||||
FileOpen=1
|
||||
FileOpenUnitSrc=1
|
||||
BadGlobalSymbol=1
|
||||
DuplicateConstructorDestructor=1
|
||||
InvalidDirective=1
|
||||
PackageNoLink=1
|
||||
PackageThreadVar=1
|
||||
ImplicitImport=1
|
||||
HPPEMITIgnored=1
|
||||
NoRetVal=1
|
||||
UseBeforeDef=1
|
||||
ForLoopVarUndef=1
|
||||
UnitNameMismatch=1
|
||||
NoCFGFileFound=1
|
||||
MessageDirective=1
|
||||
ImplicitVariants=1
|
||||
UnicodeToLocale=1
|
||||
LocaleToUnicode=1
|
||||
ImagebaseMultiple=1
|
||||
SuspiciousTypecast=1
|
||||
PrivatePropAccessor=1
|
||||
UnsafeType=1
|
||||
UnsafeCode=1
|
||||
UnsafeCast=1
|
||||
[Linker]
|
||||
MapFile=0
|
||||
OutputObjs=0
|
||||
ConsoleApp=1
|
||||
DebugInfo=0
|
||||
RemoteSymbols=0
|
||||
MinStackSize=16384
|
||||
MaxStackSize=1048576
|
||||
ImageBase=4194304
|
||||
ExeDescription=
|
||||
[Directories]
|
||||
OutputDir=
|
||||
UnitOutputDir=
|
||||
PackageDLLOutputDir=
|
||||
PackageDCPOutputDir=
|
||||
SearchPath=c:\Program Files (x86)\L-Card\lpcie\pas\
|
||||
Packages=vcl;rtl;dbrtl;inet;inetdb;dsnap;bdertl;vclx;vcldb;vcldbx;visualclx;visualdbclx;vclactnband;vclshlctrls;vclie;xmlrtl;inetdbbde;inetdbxpress;webdsnap;soaprtl;websnap;adortl;dbexpress;dsnapcon;dbxcds;ibxpress;teeui;teedb;tee;dss;indy;VclSmp;qrpt;teeqr;Rave50CLX;Rave50VCL;IntrawebDB_50_70;Intraweb_50_70;VclNewlyext
|
||||
Conditionals=
|
||||
DebugSourceDirs=
|
||||
UsePackages=0
|
||||
[Parameters]
|
||||
RunParams=
|
||||
HostApplication=
|
||||
Launcher=
|
||||
UseLauncher=0
|
||||
DebugCWD=
|
||||
[Language]
|
||||
ActiveLang=
|
||||
ProjectLang=
|
||||
RootDir=
|
||||
[Version Info]
|
||||
IncludeVerInfo=1
|
||||
AutoIncBuild=0
|
||||
MajorVer=1
|
||||
MinorVer=0
|
||||
Release=0
|
||||
Build=0
|
||||
Debug=0
|
||||
PreRelease=0
|
||||
Special=0
|
||||
Private=0
|
||||
DLL=0
|
||||
Locale=1033
|
||||
CodePage=1252
|
||||
[Version Info Keys]
|
||||
CompanyName=
|
||||
FileDescription=
|
||||
FileVersion=1.0.0.0
|
||||
InternalName=
|
||||
LegalCopyright=
|
||||
LegalTrademarks=
|
||||
OriginalFilename=
|
||||
ProductName=
|
||||
ProductVersion=1.0.0.0
|
||||
[HistoryLists\hlUnitAliases]
|
||||
Count=1
|
||||
Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
|
||||
[HistoryLists\hlSearchPath]
|
||||
Count=1
|
||||
Item0=c:\Program Files (x86)\L-Card\lpcie\pas\
|
||||
@@ -0,0 +1,14 @@
|
||||
program x502_example;
|
||||
|
||||
uses
|
||||
Forms,
|
||||
MainUnit in 'MainUnit.pas' {MainForm},
|
||||
X502_ProcessThread in 'X502_ProcessThread.pas';
|
||||
|
||||
{$R *.res}
|
||||
|
||||
begin
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TMainForm, MainForm);
|
||||
Application.Run;
|
||||
end.
|
||||
@@ -0,0 +1,119 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectGuid>{7C3D1E6C-FE9D-4A33-89CC-FFA83DED1261}</ProjectGuid>
|
||||
<MainSource>x502_example.dpr</MainSource>
|
||||
<Base>True</Base>
|
||||
<Config Condition="'$(Config)'==''">Debug</Config>
|
||||
<TargetedPlatforms>3</TargetedPlatforms>
|
||||
<AppType>Application</AppType>
|
||||
<FrameworkType>VCL</FrameworkType>
|
||||
<ProjectVersion>15.4</ProjectVersion>
|
||||
<Platform Condition="'$(Platform)'==''">Win32</Platform>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
|
||||
<Base_Win32>true</Base_Win32>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
|
||||
<Base_Win64>true</Base_Win64>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
|
||||
<Cfg_1>true</Cfg_1>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
|
||||
<Cfg_2>true</Cfg_2>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base)'!=''">
|
||||
<SanitizedProjectName>x502_example</SanitizedProjectName>
|
||||
<DCC_K>false</DCC_K>
|
||||
<DCC_UsePackage>vcl;rtl;dbrtl;inet;inetdb;dsnap;bdertl;vclx;vcldb;vcldbx;visualclx;visualdbclx;vclactnband;vclshlctrls;vclie;xmlrtl;inetdbbde;inetdbxpress;webdsnap;soaprtl;websnap;adortl;dbexpress;dsnapcon;dbxcds;ibxpress;teeui;teedb;tee;dss;indy;VclSmp;qrpt;teeqr;Rave50CLX;Rave50VCL;IntrawebDB_50_70;Intraweb_50_70;VclNewlyext;$(DCC_UsePackage)</DCC_UsePackage>
|
||||
<DCC_SymbolReferenceInfo>1</DCC_SymbolReferenceInfo>
|
||||
<DCC_F>false</DCC_F>
|
||||
<DCC_Namespace>Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace)</DCC_Namespace>
|
||||
<DCC_ImageBase>00400000</DCC_ImageBase>
|
||||
<DCC_E>false</DCC_E>
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
<DCC_UNSAFE_CAST>true</DCC_UNSAFE_CAST>
|
||||
<DCC_DebugInformation>1</DCC_DebugInformation>
|
||||
<DCC_N>true</DCC_N>
|
||||
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
|
||||
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0</VerInfo_Keys>
|
||||
<DCC_UNSAFE_CODE>true</DCC_UNSAFE_CODE>
|
||||
<DCC_UnitSearchPath>c:\Program Files (x86)\L-Card\lpcie\pas\;$(DCC_UnitSearchPath)</DCC_UnitSearchPath>
|
||||
<DCC_UNSAFE_TYPE>true</DCC_UNSAFE_TYPE>
|
||||
<DCC_S>false</DCC_S>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Win32)'!=''">
|
||||
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
<DCC_Namespace>System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
|
||||
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
|
||||
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
|
||||
<Icon_MainIcon>x502_example_Icon.ico</Icon_MainIcon>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Win64)'!=''">
|
||||
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
|
||||
<DCC_Namespace>System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)</DCC_Namespace>
|
||||
<Icon_MainIcon>x502_example_Icon.ico</Icon_MainIcon>
|
||||
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_1)'!=''">
|
||||
<DCC_DebugInformation>0</DCC_DebugInformation>
|
||||
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
|
||||
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
|
||||
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_2)'!=''">
|
||||
<DCC_Optimize>false</DCC_Optimize>
|
||||
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
|
||||
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<DelphiCompile Include="$(MainSource)">
|
||||
<MainSource>MainSource</MainSource>
|
||||
</DelphiCompile>
|
||||
<DCCReference Include="MainUnit.pas">
|
||||
<Form>MainForm</Form>
|
||||
</DCCReference>
|
||||
<DCCReference Include="X502_ProcessThread.pas"/>
|
||||
<BuildConfiguration Include="Debug">
|
||||
<Key>Cfg_2</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Base">
|
||||
<Key>Base</Key>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Release">
|
||||
<Key>Cfg_1</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
</BuildConfiguration>
|
||||
</ItemGroup>
|
||||
<ProjectExtensions>
|
||||
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
|
||||
<Borland.ProjectType/>
|
||||
<BorlandProject>
|
||||
<Delphi.Personality>
|
||||
<Source>
|
||||
<Source Name="MainSource">x502_example.dpr</Source>
|
||||
</Source>
|
||||
</Delphi.Personality>
|
||||
<Platforms>
|
||||
<Platform value="Win32">True</Platform>
|
||||
<Platform value="Win64">True</Platform>
|
||||
</Platforms>
|
||||
</BorlandProject>
|
||||
<ProjectFileVersion>12</ProjectFileVersion>
|
||||
</ProjectExtensions>
|
||||
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
|
||||
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
|
||||
</Project>
|
||||
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 766 B |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,9 @@
|
||||
Пример демонстрирует вариант написания программы потокового сбора данных с АЦП и DIN на LabView для модулей L502 или E502.
|
||||
В примере сперва обнаруживаются все модули, подключенные по интерфейсам PCIe и USB и пользователю предоставляется список для выбора модуля.
|
||||
Также есть опция использовать устройство подключенное по Ethernet с заданным IP-адресом.
|
||||
По нажатию кнопки СТАРТ устанавливаться связь с выбранным устройством и идет сбор данных.
|
||||
|
||||
Пример использует библиотеку lpcieNet.dll, которая должна распространяться с примером (или устанавливаться в GAC),
|
||||
которая требует наличия в системе билиотек x502api.dll, l502api.dll и e502api.dll (которая ставится в систему вместе с SDK)
|
||||
|
||||
Пример сохранен в для LabView 8 и LabView 2010 (так как новые версии LabView могут не совсем корректно открывать проекты от LabView 8)
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user