<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>ZETLAB [тема: Работа с драйвером Zadc.dll]</title>
		<link>http://zetlab.ru</link>
		<description>Новое в теме Работа с драйвером Zadc.dll форума Форум по вопросам о продукции компании ZETLAB на сайте ZETLAB [zetlab.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Wed, 14 Oct 2026 12:52:20 +0300</pubDate>
		<item>
			<title>Работа с драйвером Zadc.dll</title>
			<description><![CDATA[<b><a href="http://zetlab.ru/forums/messages/forum4/message4733/582-rabota-s-drayverom-zadc-dll/">Работа с драйвером Zadc.dll</a></b> в форуме <a href="http://zetlab.ru/forums/forum4/">Форум по вопросам о продукции компании ZETLAB</a>. <br />
			Добрый день!
Во-первых, Вы в бесконечном цикле считываете значения, поступившие в буфер АЦП и не используете Sleep, что будет приводить к тому, что ваша программа будет зависать.
Во-вторых, в файл Вы выводите одно единственное значение, полученное, когда указатель в буфере АЦП меняет свое значение. Указатель буфера изменяет свое значение не на один отсчет за раз, а на гораздо большее число. Это означает, что за одно изменение указателя в буфере появляется не одно новое значение, а много. Таким образом, чтобы получить в файле синус, Вам нужно писать туда все новые пришедшие отсчеты. Все новые пришедшие отсчеты хранятся в буфере с индекса pointerADC_old до индекса pointerADC (естественно нужно учитывать количество каналов и количество слов в одном отсчете АЦП). <br />
			<i>18.07.2018 15:21:04, Екатерина Сатарова.</i>]]></description>
			<link>http://zetlab.ru/forums/messages/forum4/message4733/582-rabota-s-drayverom-zadc-dll/</link>
			<guid>http://zetlab.ru/forums/messages/forum4/message4733/582-rabota-s-drayverom-zadc-dll/</guid>
			<pubDate>Wed, 18 Jul 2018 15:21:04 +0300</pubDate>
			<category>Форум по вопросам о продукции компании ZETLAB</category>
		</item>
		<item>
			<title>Работа с драйвером Zadc.dll</title>
			<description><![CDATA[<b><a href="http://zetlab.ru/forums/messages/forum4/message4732/582-rabota-s-drayverom-zadc-dll/">Работа с драйвером Zadc.dll</a></b> в форуме <a href="http://zetlab.ru/forums/forum4/">Форум по вопросам о продукции компании ZETLAB</a>. <br />
			Да данные моменты учитывались при использовании Zet210. Включены два канала, частота дискретизации на каждом 200 кГц. При подаче на канал синуса с частотой 10 кГц, и записи полученных значений в файл. я получаю график сигнала отличный от синуса, хотя частота дискретизации  на порядок превышает частоту `поданного сигнала.
Код программы:
<pre>
====code====
<pre>// Программа, включающая два канала АЦП устройства и отображающая мгновенное амплитудное значение по двум каналам два раза в секунду
// © ЗАО &#38;quot;ЭТМС&#38;quot; 1992-2011. Все права защищены

#include &#38;quot;stdafx.h&#38;quot;
#include &#38;lt;windows.h&#38;gt; 
#include &#38;lt;conio.h&#38;gt;
#include &#38;lt;stdio.h&#38;gt;
#include &#38;lt;iostream&#38;gt;
#include &#38;lt;fstream&#38;gt;
#include &#38;quot;zadc_int.h&#38;quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Интерфейс библиотеки Zadc.dll
using namespace std;

#define MAX_TYPE_DSP&nbsp;&nbsp;&nbsp;20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Максимальное поддерживаемое количество типов устройств
#define MAX_DEVICE_NAME&nbsp;&nbsp;&nbsp;16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Максимальное значение длины возвращаемого имени устройства

int main(int argc, char* argv&#91;&#93;)
{
&nbsp;&nbsp;&nbsp;long typeDevice;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Тип устройства
&nbsp;&nbsp;&nbsp;long numberDSP = 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Порядковый номер сигнального процессора
&nbsp;&nbsp;&nbsp;long Err;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Код ошибки
&nbsp;&nbsp;&nbsp;long enable;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Флаг поддерживается / не поддерживается
&nbsp;&nbsp;&nbsp;long numChannelsADC;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Количество включенных каналов АЦП
&nbsp;&nbsp;&nbsp;long numWordsADC;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Количество слов (по два байта) в одном отсчете АЦП
&nbsp;&nbsp;&nbsp;short *pBuffer16ADC = NULL;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Указатель на начало буфера драйвера для АЦП с разрядностью не более 16 бит
&nbsp;&nbsp;&nbsp;long *pBuffer32ADC = NULL;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Указатель на начало буфера драйвера для АЦП с разрядностью более 16 бит 
&nbsp;&nbsp;&nbsp;long sizeBufferADC;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Размер буфера драйвера в словах
&nbsp;&nbsp;&nbsp;long pointerADC = 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Указатель на текущий элемент заполнения буфера драйвера (кратен 2)
&nbsp;&nbsp;&nbsp;long pointerADC_old = 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Предыдущее значение указателя на буфер драйвера
&nbsp;&nbsp;&nbsp;double amplifyADC0, amplifyADC1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Коэффициент усиления по первым двум каналам 
&nbsp;&nbsp;&nbsp;double resolutionADC0, resolutionADC1;&nbsp;&nbsp;&nbsp;// Вес младшего разряда АЦП по первым двум каналам
&nbsp;&nbsp;&nbsp;double volt0, volt1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Мгновенное текущее значение АЦП (в вольтах)
&nbsp;&nbsp;&nbsp;long serial;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Серийный номер устройства
&nbsp;&nbsp;&nbsp;char deviceName&#91;MAX_DEVICE_NAME&#93;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Имя устройства

&nbsp;&nbsp;&nbsp;// Цикл подключения к первому поддерживаемому устройству
&nbsp;&nbsp;&nbsp;for(typeDevice = 0; typeDevice &#38;lt; MAX_TYPE_DSP; typeDevice++)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Подключение к драйверу устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err = ZOpen(typeDevice, numberDSP);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Если подключение прошло без ошибок
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Err == 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Проверка поддержки устройством АЦП
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err = ZGetEnableADC(typeDevice, numberDSP, &#38;amp;enable);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Если устройство поддерживает АЦП
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Err == 0 &#38;amp;&#38;amp; enable != 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Выход из цикла подключения
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Если устройство не поддерживает АЦП
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод информации об ошибке
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;ZGetEnableADC() return Error = 0x%X&#92;n&#92;r&#38;quot;, Err);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Отключение от драйвера устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err = ZClose(typeDevice, numberDSP);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;// Если не удалось подключиться к драйверу устройства
&nbsp;&nbsp;&nbsp;if(typeDevice &#38;gt;= MAX_TYPE_DSP)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод информации об ошибке
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;Device not found! Error = 0x%X&#92;n&#92;r&#38;quot;, Err);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getch();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;// Если удалось подключиться к драйверу устройства
&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод информации о том, что произошло подключение к драйверу устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;Device found...&#92;n&#92;r&#38;quot;);
&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;// Опрос имени устройства
&nbsp;&nbsp;&nbsp;Err = ZGetNameDevice(typeDevice, numberDSP, deviceName, MAX_DEVICE_NAME);
&nbsp;&nbsp;&nbsp;// Если опрос выполнился с ошибкой
&nbsp;&nbsp;&nbsp;if(Err != 0)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод информации об ошибке
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;ZGetNameDevice() return Error = 0x%X&#92;n&#92;r&#38;quot;, Err);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Отключение от драйвера устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err = ZClose(typeDevice, numberDSP);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getch();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;// Если опрос выполнился без ошибок
&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод имени устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;Device name: %s&#92;n&#92;r&#38;quot;, deviceName);
&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;// Опрос серийного номера устройства
&nbsp;&nbsp;&nbsp;Err = ZGetSerialNumberDSP(typeDevice, numberDSP, &#38;amp;serial);
&nbsp;&nbsp;&nbsp;// Если опрос выполнился с ошибкой
&nbsp;&nbsp;&nbsp;if(Err != 0)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод информации об ошибке
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;ZGetNameDevice() return Error = 0x%X&#92;n&#92;r&#38;quot;, Err);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Отключение от драйвера устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err = ZClose(typeDevice, numberDSP);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getch();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;// Если опрос выполнился без ошибок
&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод серийного номера устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;Serial number: %ld&#92;n&#92;r&#38;quot;, serial);
&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;// Опрос колличества каналов АЦП устройства
&nbsp;&nbsp;&nbsp;Err = ZGetQuantityChannelADC(typeDevice, numberDSP, &#38;amp;numChannelsADC);
&nbsp;&nbsp;&nbsp;// Если опрос выполнился с ошибкой
&nbsp;&nbsp;&nbsp;if(Err != 0)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод информации об ошибке
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;ZGetQuantityChannelADC() return Error = 0x%X&#92;n&#92;r&#38;quot;, Err);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Отключение от драйвера устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err = ZClose(typeDevice, numberDSP);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getch();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;// Если опрос выполнился без ошибок
&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод количества каналов АЦП устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;Quantity of ADC channel: %ld&#92;n&#92;r&#38;quot;, numChannelsADC);
&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;// Запрос на включение первого канала АЦП устройства
&nbsp;&nbsp;&nbsp;Err = ZSetInputADC(typeDevice, numberDSP, 0, 1);
&nbsp;&nbsp;&nbsp;// Если запрос выполнился с ошибкой
&nbsp;&nbsp;&nbsp;if(Err != 0)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод информации об ошибке
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;ZSetInputADC() return Error = 0x%X&#92;n&#92;r&#38;quot;, Err);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Отключение от драйвера устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err = ZClose(typeDevice, numberDSP);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getch();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;// Если запрос выполнился без ошибок
&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод информации об успешном включении первого канала АЦП устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;First channel activation is successful...&#92;n&#92;r&#38;quot;);
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;// Если количество каналов устройства больше одного
&nbsp;&nbsp;&nbsp;if(numChannelsADC &#38;gt; 1)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Запрос на включение второго канала АЦП устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err = ZSetInputADC(typeDevice, numberDSP, 1, 1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Если запрос выполнился с ошибкой
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Err != 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод информации об ошибке
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;ZSetInputADC() return Error = 0x%X&#92;n&#92;r&#38;quot;, Err);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Отключение от драйвера устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err = ZClose(typeDevice, numberDSP);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getch();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Если запрос выполнился без ошибок
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод информации об успешном включении первого канала устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;Second channel activation is successful...&#92;n&#92;r&#38;quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;// Опрос коэффициента усиления по первому каналу АЦП
&nbsp;&nbsp;&nbsp;Err = ZGetAmplifyADC(typeDevice, numberDSP, 0, &#38;amp;amplifyADC0);
&nbsp;&nbsp;&nbsp;// Если опрос выполнился с ошибкой
&nbsp;&nbsp;&nbsp;if(Err != 0)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод информации об ошибке
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;ZGetAmplifyADC() return Error = 0x%X&#92;n&#92;r&#38;quot;, Err);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Отключение от драйвера устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err = ZClose(typeDevice, numberDSP);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getch();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;// Если опрос выполнился без ошибок
&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод коэффициента усиления по первому каналу АЦП
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;First channel amplifier: %f&#92;n&#92;r&#38;quot;, amplifyADC0);
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;// Если количество каналов устройства больше одного
&nbsp;&nbsp;&nbsp;if(numChannelsADC &#38;gt; 1)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Опрос коэффициента усиления по второму каналу АЦП
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err = ZGetAmplifyADC(typeDevice, numberDSP, 1, &#38;amp;amplifyADC1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Если опрос выполнился с ошибкой
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Err != 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод информации об ошибке
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;ZGetAmplifyADC() return Error = 0x%X&#92;n&#92;r&#38;quot;, Err);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Отключение от драйвера устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err = ZClose(typeDevice, numberDSP);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getch();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Если опрос выполнился без ошибок
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод коэффициента усиления по второму каналу АЦП
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;Second channel amplifier: %f&#92;n&#92;r&#38;quot;, amplifyADC1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;// Опрос веса младшего разряда АЦП первого канала устройства
&nbsp;&nbsp;&nbsp;Err = ZGetDigitalResolChanADC(typeDevice, numberDSP, 0, &#38;amp;resolutionADC0);
&nbsp;&nbsp;&nbsp;// Если опрос выполнился с ошибкой
&nbsp;&nbsp;&nbsp;if(Err != 0)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод информации об ошибке
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;ZGetDigitalResolChanADC() return Error = 0x%X&#92;n&#92;r&#38;quot;, Err);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Отключение от драйвера устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err = ZClose(typeDevice, numberDSP);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getch();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;// Если опрос выполнился без ошибок
&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод веса младшего разряда АЦП первого канала устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;First channel digital resolution: %f&#92;n&#92;r&#38;quot;, resolutionADC0);
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;// Если количество каналов устройства больше одного
&nbsp;&nbsp;&nbsp;if(numChannelsADC &#38;gt; 1)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;Опрос веса младшего разряда АЦП второго канала устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err = ZGetDigitalResolChanADC(typeDevice, numberDSP, 1, &#38;amp;resolutionADC1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Если опрос выполнился с ошибкой
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Err != 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод информации об ошибке
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;ZGetDigitalResolChanADC() return Error = 0x%X&#92;n&#92;r&#38;quot;, Err);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Отключение от драйвера устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err = ZClose(typeDevice, numberDSP);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getch();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод веса младшего разряда АЦП второго канала устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;Second channel digital resolution: %f&#92;n&#92;r&#38;quot;, resolutionADC1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;Err = ZSetInputADC(typeDevice, numberDSP, 0.0, 1);
&nbsp;&nbsp;&nbsp;Err = ZSetInputADC(typeDevice, numberDSP, 1.0, 1);
&nbsp;&nbsp;&nbsp;Err = ZSetInputADC(typeDevice, numberDSP, 2.0, 0);
&nbsp;&nbsp;&nbsp;Err = ZSetInputADC(typeDevice, numberDSP, 3.0, 0);
&nbsp;&nbsp;&nbsp;Err = ZSetInputADC(typeDevice, numberDSP, 4.0, 0);
&nbsp;&nbsp;&nbsp;Err = ZSetInputADC(typeDevice, numberDSP, 5.0, 0);
&nbsp;&nbsp;&nbsp;Err = ZSetInputADC(typeDevice, numberDSP, 6.0, 0);
&nbsp;&nbsp;&nbsp;Err = ZSetInputADC(typeDevice, numberDSP, 7.0, 0);
&nbsp;&nbsp;&nbsp;Err = ZSetInputADC(typeDevice, numberDSP, 8.0, 0);
&nbsp;&nbsp;&nbsp;Err = ZSetInputADC(typeDevice, numberDSP, 9.0, 0);
&nbsp;&nbsp;&nbsp;Err = ZSetInputADC(typeDevice, numberDSP, 10.0, 0);
&nbsp;&nbsp;&nbsp;Err = ZSetInputADC(typeDevice, numberDSP, 11.0, 0);
&nbsp;&nbsp;&nbsp;Err = ZSetInputADC(typeDevice, numberDSP, 12.0, 0);
&nbsp;&nbsp;&nbsp;Err = ZSetInputADC(typeDevice, numberDSP, 13.0, 0);
&nbsp;&nbsp;&nbsp;Err = ZSetInputADC(typeDevice, numberDSP, 14.0, 0);
&nbsp;&nbsp;&nbsp;Err = ZSetInputADC(typeDevice, numberDSP, 15.0, 0);
&nbsp;&nbsp;&nbsp;if (Err != 0)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод информации об ошибке
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;Function ZSetInputADC() return Error = 0x%X&#92;n&#92;r&#38;quot;, Err);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Отключение от драйвера устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err = ZClose(typeDevice, numberDSP);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_getch();;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;
&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;// Опрос количества включенных каналов АЦП устройства
&nbsp;&nbsp;&nbsp;Err = ZGetNumberInputADC(typeDevice, numberDSP, &#38;amp;numChannelsADC);
&nbsp;&nbsp;&nbsp;// Если опрос выполнился с ошибкой
&nbsp;&nbsp;&nbsp;if(Err != 0)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод информации об ошибке
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;Function ZGetNumberInputADC() return Error = 0x%X&#92;n&#92;r&#38;quot;, Err);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Отключение от драйвера устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err = ZClose(typeDevice, numberDSP);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getch();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;// Если опрос выполнился без ошибок
&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод количества включенных каналов АЦП устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;Quantity of activated ADC channel: %ld&#92;n&#92;r&#38;quot;, numChannelsADC);
&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;// Опрос количества слов в одном отсчета АЦП устройства
&nbsp;&nbsp;&nbsp;Err = ZGetWordsADC(typeDevice, numberDSP, &#38;amp;numWordsADC);
&nbsp;&nbsp;&nbsp;// Если опрос выполнился с ошибкой
&nbsp;&nbsp;&nbsp;if(Err != 0)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод информации об ошибке
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;ZGetWordsADC() return Error = 0x%X&#92;n&#92;r&#38;quot;, Err);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Отключение от драйвера устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err = ZClose(typeDevice, numberDSP);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getch();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;// Если опрос выполнился без ошибок
&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод количества слов в одном отсчете АЦП устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;Quantity of words: %ld&#92;n&#92;r&#38;quot;, numWordsADC);
&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;//список возможных частот дискретизации
&nbsp;&nbsp;&nbsp;long next = 0;
&nbsp;&nbsp;&nbsp;double&nbsp;&nbsp;freqIn = 0;
&nbsp;&nbsp;&nbsp;double&nbsp;&nbsp;freq = 0;
&nbsp;&nbsp;&nbsp;printf(&#38;quot;List of possible discret. freq &#38;quot;);
&nbsp;&nbsp;&nbsp;while (1) //бесконечный цикл
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err = ZGetListFreqADC(typeDevice, numberDSP, next, &#38;amp;freq); //получить
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (freq &#38;gt; freqIn &#38;amp;&#38;amp; freq &#38;lt;250000.0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;freqIn = freq;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//значение частоты
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (Err != 0) break; //если ошибка, то выход из цикла
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;%E Hz&#92;n&#38;quot;, freq); //распечатать значение частоты
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next = 1; //при следующем обращении, будет
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//считываться следующее значение частоты
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;double freqOut = 0;
&nbsp;&nbsp;&nbsp;printf(&#38;quot;MAX discret. freq&#38;quot;);
&nbsp;&nbsp;&nbsp;printf(&#38;quot;%E Hz&#92;n&#38;quot;, freqIn);

&nbsp;&nbsp;&nbsp;Err = ZSetFreqADC(typeDevice, numberDSP, freqIn, &#38;amp;freqOut);
&nbsp;&nbsp;&nbsp;if (Err != 0)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод информации об ошибке
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;Function ZSetFreqADC() return Error = 0x%X&#92;n&#92;r&#38;quot;, Err);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Отключение от драйвера устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err = ZClose(typeDevice, numberDSP);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_getch();;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;
&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;printf(&#38;quot;Setup discret. freq&#38;quot;);
&nbsp;&nbsp;&nbsp;printf(&#38;quot;%E Hz&#92;n&#38;quot;, freqOut);

&nbsp;&nbsp;&nbsp;// Проверка переменных, чтобы избежать деления на ноль
&nbsp;&nbsp;&nbsp;if(numWordsADC == 0 || amplifyADC0 == 0 || amplifyADC1 == 0)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод информации об ошибке
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;Error DAC parameters&#92;n&#92;r&#38;quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Отключение от драйвера устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err = ZClose(typeDevice, numberDSP);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getch();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;
&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;// Запрос буфера АЦП
&nbsp;&nbsp;&nbsp;Err = ZGetBufferADC(typeDevice, numberDSP, (void**) &#38;amp;pBuffer16ADC, &#38;amp;sizeBufferADC);
&nbsp;&nbsp;&nbsp;// Если запрос выполнился с ошибкой
&nbsp;&nbsp;&nbsp;if(Err != 0)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод информации об ошибке
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;Function ZGetBufferADC() return Error = 0x%X&#92;n&#92;r&#38;quot;, Err);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Отключение от драйвера устройства
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err = ZClose(typeDevice, numberDSP);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getch();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;pBuffer32ADC = (long*) pBuffer16ADC;

&nbsp;&nbsp;&nbsp;// Запрос на останов АЦП
&nbsp;&nbsp;&nbsp;Err = ZStopADC(typeDevice, numberDSP);
&nbsp;&nbsp;&nbsp;// Запрос на запуск АЦП
&nbsp;&nbsp;&nbsp;Err = ZStartADC(typeDevice, numberDSP);

&nbsp;&nbsp;&nbsp;ofstream file;
&nbsp;&nbsp;&nbsp;file.open(&#38;quot;test.txt&#38;quot;, ios_base::out);

&nbsp;&nbsp;&nbsp;// Цикл чтения данных АЦП
&nbsp;&nbsp;&nbsp;while(!kbhit())
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Задержка обновления данных АЦП для отображения
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Sleep(10);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Запрос указателя на текущий элемент буфера
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err = ZGetPointerADC(typeDevice, numberDSP, &#38;amp;pointerADC);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Если запрос выполнился с ошибкой
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Err != 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод информации об ошибке
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;Function ZGetPointerADC() return Error = 0x%X&#92;n&#92;r&#38;quot;, Err);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Выход из цикла
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Если новые данные в буфер от АЦП не поступили, то перейти в начало цикла и подождать
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//if(pointerADC == pointerADC_old)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//continue;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Обновление предыдущего значения указателя
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointerADC_old = pointerADC;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Переход на отсчет первого включенного канала последнего кадра АЦП
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(pointerADC - numWordsADC * numChannelsADC &#38;lt; 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointerADC = sizeBufferADC + pointerADC - numWordsADC * numChannelsADC;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointerADC = pointerADC - numWordsADC * numChannelsADC; 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вычисление из целого значения отсчета АЦП вещественного значение отсчета (в вольтах) для первого канала
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//if(numWordsADC == 1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;volt0 = resolutionADC0 * (pBuffer16ADC&#91;pointerADC&#93;) / amplifyADC0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//volt0 = resolutionADC0 * (pBuffer32ADC&#91;pointerADC / numWordsADC&#93;) / amplifyADC0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод мгновенного значения напряжения для первого канала
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;%+8.4f&#38;quot;, volt0);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Если количество каналов устройства больше одного
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(numChannelsADC &#38;gt; 1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Переход на следующий отсчет АЦП
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointerADC += numWordsADC;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// При выходе за границу буфера, осуществляется переход в начало
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(pointerADC &#38;gt;= sizeBufferADC)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointerADC = pointerADC - sizeBufferADC;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вычисление из целого значения отсчета АЦП вещественного значение отсчета (в вольтах) для второго канала
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//if(numWordsADC == 1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;volt1 = resolutionADC1 * (pBuffer16ADC&#91;pointerADC&#93;) / amplifyADC1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//volt1 = resolutionADC1 * (pBuffer32ADC&#91;pointerADC/numWordsADC&#93;) / amplifyADC1;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод мгновенного значения напряжения для второго канала
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;&#92;t%+8.4f&#38;quot;, volt1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;&#92;n&#92;r&#38;quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file &#38;lt;&#38;lt; volt0 &#38;lt;&#38;lt; &#38;quot; &#38;quot; &#38;lt;&#38;lt; volt1 &#38;lt;&#38;lt; endl;
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;file.close();

&nbsp;&nbsp;&nbsp;// Запрос на останов АЦП
&nbsp;&nbsp;&nbsp;Err = ZStopADC(typeDevice, numberDSP);
&nbsp;&nbsp;&nbsp;// Если запрос выполнился с ошибкой
&nbsp;&nbsp;&nbsp;if(Err != 0)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод информации об ошибке
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;Function ZStopADC() return Error = 0x%X&#92;n&#92;r&#38;quot;, Err);
&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;// Запрос на освобождение буфера АЦП
&nbsp;&nbsp;&nbsp;if(pBuffer16ADC != NULL)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err = ZRemBufferADC(typeDevice, numberDSP, (void**) &#38;amp;pBuffer16ADC);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Если запрос выполнился с ошибкой
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Err != 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод информации об ошибке
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;Function ZRemBufferADC() return Error = 0x%X&#92;n&#92;r&#38;quot;, Err);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;// Отключение от драйвера устройства
&nbsp;&nbsp;&nbsp;Err = ZClose(typeDevice, numberDSP);
&nbsp;&nbsp;&nbsp;// Если запрос выполнился с ошибкой
&nbsp;&nbsp;&nbsp;if(Err != 0)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Вывод информации об ошибке
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#38;quot;Function ZClose() return Error = 0x%X&#92;n&#92;r&#38;quot;, Err);
&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;if(!kbhit())
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getch();

&nbsp;&nbsp;&nbsp;printf(&#38;quot;Press any key for exit...&#38;quot;);
&nbsp;&nbsp;&nbsp;getch();

 &nbsp;&nbsp;&nbsp;return 0;
}
</pre>
=============
</pre> <br />
			<i>18.07.2018 12:18:13, Trifonoff ilya.</i>]]></description>
			<link>http://zetlab.ru/forums/messages/forum4/message4732/582-rabota-s-drayverom-zadc-dll/</link>
			<guid>http://zetlab.ru/forums/messages/forum4/message4732/582-rabota-s-drayverom-zadc-dll/</guid>
			<pubDate>Wed, 18 Jul 2018 12:18:13 +0300</pubDate>
			<category>Форум по вопросам о продукции компании ZETLAB</category>
		</item>
		<item>
			<title>Работа с драйвером Zadc.dll</title>
			<description><![CDATA[<b><a href="http://zetlab.ru/forums/messages/forum4/message4731/582-rabota-s-drayverom-zadc-dll/">Работа с драйвером Zadc.dll</a></b> в форуме <a href="http://zetlab.ru/forums/forum4/">Форум по вопросам о продукции компании ZETLAB</a>. <br />
			Добрый день! 
Есть несколько моментов, которые нужно учитывать при использовании устройств, подробно они описаны в статье по ссылке: <noindex><a href="https://zetlab.com/programmirovanie-ustroystv-s-ispolzovaniem-biblioteki-zadc-dll/napisanie-programmnyx-prilozhenij-dlya-kontrollera-zetlab/" target="_blank" rel="nofollow" >https://zetlab.com/programmirovanie-ustroystv-s-ispolzovaniem-biblioteki-zadc-dll/napisanie-programmnyx-prilozhenij-dlya-kontrollera-zetlab/</a></noindex>.
Проверьте пожалуйста учтены ли данные рекомендации, и если да то опишите проблему подробнее. <br />
			<i>17.07.2018 17:54:02, Екатерина Сатарова.</i>]]></description>
			<link>http://zetlab.ru/forums/messages/forum4/message4731/582-rabota-s-drayverom-zadc-dll/</link>
			<guid>http://zetlab.ru/forums/messages/forum4/message4731/582-rabota-s-drayverom-zadc-dll/</guid>
			<pubDate>Tue, 17 Jul 2018 17:54:02 +0300</pubDate>
			<category>Форум по вопросам о продукции компании ZETLAB</category>
		</item>
		<item>
			<title>Работа с драйвером Zadc.dll</title>
			<description><![CDATA[<b><a href="http://zetlab.ru/forums/messages/forum4/message4730/582-rabota-s-drayverom-zadc-dll/">Работа с драйвером Zadc.dll</a></b> в форуме <a href="http://zetlab.ru/forums/forum4/">Форум по вопросам о продукции компании ZETLAB</a>. <br />
			Проблема с буферами ушла: ошибочно интерпретировали данные. Возник другой вопрос : при увеличении частоты дискретизации частота обновления значений в буфере не увеличивается. Как можно решить данный вопрос? <br />
			<i>17.07.2018 15:49:06, Trifonoff ilya.</i>]]></description>
			<link>http://zetlab.ru/forums/messages/forum4/message4730/582-rabota-s-drayverom-zadc-dll/</link>
			<guid>http://zetlab.ru/forums/messages/forum4/message4730/582-rabota-s-drayverom-zadc-dll/</guid>
			<pubDate>Tue, 17 Jul 2018 15:49:06 +0300</pubDate>
			<category>Форум по вопросам о продукции компании ZETLAB</category>
		</item>
		<item>
			<title>Работа с драйвером Zadc.dll</title>
			<description><![CDATA[<b><a href="http://zetlab.ru/forums/messages/forum4/message2849/582-rabota-s-drayverom-zadc-dll/">Работа с драйвером Zadc.dll</a></b> в форуме <a href="http://zetlab.ru/forums/forum4/">Форум по вопросам о продукции компании ZETLAB</a>. <br />
			Добрый день, использую вашу продукцию (ZET 210) для дипломного проекта. Возник вопрос по функциям: 
long ZGetBufferADC(long typeDevice, long numberDSP, void **buffer, long *size)
long ZGetMaxInterruptADC(long typeDevice, long numberDSP, long * size)

При каждом запуске  тестовой программы Test_Zadc.сpp размеры буферов меняются, принимая нулевые или отрицательные значения. Данные значения являются  нормальными  для функционирования? Также при увеличении частоты дискретизации частота обновления значений в буфере не увеличивается. Как можно решить данный вопрос? <br />
			<i>17.07.2018 11:53:14, Trifonoff ilya.</i>]]></description>
			<link>http://zetlab.ru/forums/messages/forum4/message2849/582-rabota-s-drayverom-zadc-dll/</link>
			<guid>http://zetlab.ru/forums/messages/forum4/message2849/582-rabota-s-drayverom-zadc-dll/</guid>
			<pubDate>Tue, 17 Jul 2018 11:53:14 +0300</pubDate>
			<category>Форум по вопросам о продукции компании ZETLAB</category>
		</item>
	</channel>
</rss>
