<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>ZETLAB [тема: Неправильный вывод значений напряжения (ZET 220)  на трех каналах]</title>
		<link>http://zetlab.ru</link>
		<description>Новое в теме Неправильный вывод значений напряжения (ZET 220)  на трех каналах форума Форум по вопросам о продукции компании ZETLAB на сайте ZETLAB [zetlab.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Wed, 14 Oct 2026 10:45:57 +0300</pubDate>
		<item>
			<title>Неправильный вывод значений напряжения (ZET 220)  на трех каналах</title>
			<description><![CDATA[<b><a href="http://zetlab.ru/forums/messages/forum4/message5005/636-nepravilnyiy-vyivod-znacheniy-napryazheniya-zet-220-na-treh-kanalah/">Неправильный вывод значений напряжения (ZET 220)  на трех каналах</a></b> в форуме <a href="http://zetlab.ru/forums/forum4/">Форум по вопросам о продукции компании ZETLAB</a>. <br />
			Спасибо за ответ, понятно. <br />
			<i>12.02.2021 14:45:23, starostinalex.</i>]]></description>
			<link>http://zetlab.ru/forums/messages/forum4/message5005/636-nepravilnyiy-vyivod-znacheniy-napryazheniya-zet-220-na-treh-kanalah/</link>
			<guid>http://zetlab.ru/forums/messages/forum4/message5005/636-nepravilnyiy-vyivod-znacheniy-napryazheniya-zet-220-na-treh-kanalah/</guid>
			<pubDate>Fri, 12 Feb 2021 14:45:23 +0300</pubDate>
			<category>Форум по вопросам о продукции компании ZETLAB</category>
		</item>
		<item>
			<title>Неправильный вывод значений напряжения (ZET 220)  на трех каналах</title>
			<description><![CDATA[<b><a href="http://zetlab.ru/forums/messages/forum4/message5004/636-nepravilnyiy-vyivod-znacheniy-napryazheniya-zet-220-na-treh-kanalah/">Неправильный вывод значений напряжения (ZET 220)  на трех каналах</a></b> в форуме <a href="http://zetlab.ru/forums/forum4/">Форум по вопросам о продукции компании ZETLAB</a>. <br />
			При использования библиотеки Zadc.dll, ZETLAB STUDIO поддерживает только устройства производства ZETLAB. А любые графические элементы можно использовать с устройствами сторонних производителей. <br />
			<i>12.02.2021 09:32:04, Екатерина Сатарова.</i>]]></description>
			<link>http://zetlab.ru/forums/messages/forum4/message5004/636-nepravilnyiy-vyivod-znacheniy-napryazheniya-zet-220-na-treh-kanalah/</link>
			<guid>http://zetlab.ru/forums/messages/forum4/message5004/636-nepravilnyiy-vyivod-znacheniy-napryazheniya-zet-220-na-treh-kanalah/</guid>
			<pubDate>Fri, 12 Feb 2021 09:32:04 +0300</pubDate>
			<category>Форум по вопросам о продукции компании ZETLAB</category>
		</item>
		<item>
			<title>Неправильный вывод значений напряжения (ZET 220)  на трех каналах</title>
			<description><![CDATA[<b><a href="http://zetlab.ru/forums/messages/forum4/message5003/636-nepravilnyiy-vyivod-znacheniy-napryazheniya-zet-220-na-treh-kanalah/">Неправильный вывод значений напряжения (ZET 220)  на трех каналах</a></b> в форуме <a href="http://zetlab.ru/forums/forum4/">Форум по вопросам о продукции компании ZETLAB</a>. <br />
			Из описания я не понял, с помощью ZETLAB STUDIO можно работать с любыми приборами или только с приборами фирмы ZETLAB. Исходя из цены, можно предположить, что только с приборами фирмы ZetLab. Я правильно понял, что студия может работать только с приборами фирмы Zetlab? <br />
			<i>11.02.2021 22:07:41, starostinalex.</i>]]></description>
			<link>http://zetlab.ru/forums/messages/forum4/message5003/636-nepravilnyiy-vyivod-znacheniy-napryazheniya-zet-220-na-treh-kanalah/</link>
			<guid>http://zetlab.ru/forums/messages/forum4/message5003/636-nepravilnyiy-vyivod-znacheniy-napryazheniya-zet-220-na-treh-kanalah/</guid>
			<pubDate>Thu, 11 Feb 2021 22:07:41 +0300</pubDate>
			<category>Форум по вопросам о продукции компании ZETLAB</category>
		</item>
		<item>
			<title>Неправильный вывод значений напряжения (ZET 220)  на трех каналах</title>
			<description><![CDATA[<b><a href="http://zetlab.ru/forums/messages/forum4/message5002/636-nepravilnyiy-vyivod-znacheniy-napryazheniya-zet-220-na-treh-kanalah/">Неправильный вывод значений напряжения (ZET 220)  на трех каналах</a></b> в форуме <a href="http://zetlab.ru/forums/forum4/">Форум по вопросам о продукции компании ZETLAB</a>. <br />
			В программе происходит чтение значения PointerADC, т.е. того индекса в буфере драйвера, куда будут копироваться драйвером вновь пришедшие данные от АЦП. Соответственно все данные до этого индекса - это те данные, которые от АЦП уже пришли. Буфер циклический, поэтому данные все время будут затираться, но поскольку размер буфера довольно большой, то программа успеет их скопировать и обработать. 

АЦП присылает данные порциями, которые могут быть не кратны количеству каналов, поэтому в общем случае текущее значение PointerADC может не указывать на отсчет по первому включенному каналу. Именно для этого pointerADC нужно выравнивать на количество включенных каналов. А это значит, что в программе нужно завести еще одну переменную (PointerAdc_User) и в ней хранить  это выравненное значение и читать данные именно по нему. 

В приведенном выше примере PointerAdc_Real - это  то, что вернула функция, PointerAdc_User - это пересчитанное значение. После старта АЦП обе переменные (user и real)  равны 0, т.е. никаких данных в буфер еще не поступало. Теперь предположим, что Real стал равен 4, а следовательно мы должны пересчитать User относительно того, что у нас включено 3 канала, поэтому User у нас становится равным 3 и читать из буфера мы будем именно относительно User, а не относительно Real. И так далее.

Помощь в написании кода программы доступна только при запросе по электронной почте info@zetlab.com при наличии лицензии <a href="https://zetlab.com/shop/programmnoe-obespechenie/zetlab-studio/zetlab-studio/">ZETLAB STUDIO</a>. <br />
			<i>11.02.2021 14:47:36, Екатерина Сатарова.</i>]]></description>
			<link>http://zetlab.ru/forums/messages/forum4/message5002/636-nepravilnyiy-vyivod-znacheniy-napryazheniya-zet-220-na-treh-kanalah/</link>
			<guid>http://zetlab.ru/forums/messages/forum4/message5002/636-nepravilnyiy-vyivod-znacheniy-napryazheniya-zet-220-na-treh-kanalah/</guid>
			<pubDate>Thu, 11 Feb 2021 14:47:36 +0300</pubDate>
			<category>Форум по вопросам о продукции компании ZETLAB</category>
		</item>
		<item>
			<title>Неправильный вывод значений напряжения (ZET 220)  на трех каналах</title>
			<description><![CDATA[<b><a href="http://zetlab.ru/forums/messages/forum4/message5001/636-nepravilnyiy-vyivod-znacheniy-napryazheniya-zet-220-na-treh-kanalah/">Неправильный вывод значений напряжения (ZET 220)  на трех каналах</a></b> в форуме <a href="http://zetlab.ru/forums/forum4/">Форум по вопросам о продукции компании ZETLAB</a>. <br />
			Я плохо понял Ваше объяснение. Где нужно ввести свое значение pointerADC  (в цикле while или где-нибудь еще) и как оно будет связано с получением указателя функцией ZGetPointerADC? Указатель Real - это получение указателя функцией ZGetPointerADC? Почему такие соотношения чисел для real  и user? Хорошо бы Вы пояснили это в коде. Я разместил проект на яндекс-диске <noindex><a href="https://yadi.sk/d/UEpUEY6aeM2A9g" target="_blank" rel="nofollow" >https://yadi.sk/d/UEpUEY6aeM2A9g</a></noindex> <br />
			<i>10.02.2021 17:21:48, starostinalex.</i>]]></description>
			<link>http://zetlab.ru/forums/messages/forum4/message5001/636-nepravilnyiy-vyivod-znacheniy-napryazheniya-zet-220-na-treh-kanalah/</link>
			<guid>http://zetlab.ru/forums/messages/forum4/message5001/636-nepravilnyiy-vyivod-znacheniy-napryazheniya-zet-220-na-treh-kanalah/</guid>
			<pubDate>Wed, 10 Feb 2021 17:21:48 +0300</pubDate>
			<category>Форум по вопросам о продукции компании ZETLAB</category>
		</item>
		<item>
			<title>Неправильный вывод значений напряжения (ZET 220)  на трех каналах</title>
			<description><![CDATA[<b><a href="http://zetlab.ru/forums/messages/forum4/message5000/636-nepravilnyiy-vyivod-znacheniy-napryazheniya-zet-220-na-treh-kanalah/">Неправильный вывод значений напряжения (ZET 220)  на трех каналах</a></b> в форуме <a href="http://zetlab.ru/forums/forum4/">Форум по вопросам о продукции компании ZETLAB</a>. <br />
			Для реализации этого алгоритма нужно ввести свое значение PointerADC и читать по нему. Такой пример:
1) PointerAdc_Real = 0, PointerAdc_User = 0
2) PointerAdc_Real = 4 => PointerAdc_User = 3. 
3) PointerAdc_Real = 8 => PointerAdc_User = 6
4) PointerAdc_Real = 12 => PointerAdc_User = 12
На первом шаге оба указателя равны 0. На всех последующих шагах указатель в буфере изменился, но свой указатель можно изменить только на число, кратное количеству каналов. <br />
			<i>10.02.2021 14:39:50, Екатерина Сатарова.</i>]]></description>
			<link>http://zetlab.ru/forums/messages/forum4/message5000/636-nepravilnyiy-vyivod-znacheniy-napryazheniya-zet-220-na-treh-kanalah/</link>
			<guid>http://zetlab.ru/forums/messages/forum4/message5000/636-nepravilnyiy-vyivod-znacheniy-napryazheniya-zet-220-na-treh-kanalah/</guid>
			<pubDate>Wed, 10 Feb 2021 14:39:50 +0300</pubDate>
			<category>Форум по вопросам о продукции компании ZETLAB</category>
		</item>
		<item>
			<title>Неправильный вывод значений напряжения (ZET 220)  на трех каналах</title>
			<description><![CDATA[<b><a href="http://zetlab.ru/forums/messages/forum4/message4999/636-nepravilnyiy-vyivod-znacheniy-napryazheniya-zet-220-na-treh-kanalah/">Неправильный вывод значений напряжения (ZET 220)  на трех каналах</a></b> в форуме <a href="http://zetlab.ru/forums/forum4/">Форум по вопросам о продукции компании ZETLAB</a>. <br />
			"После запроса текущего значения pointerADC нужно понять на значение какого из каналов он указывает: 1, 2 или 3". 
А как это понять? Что нужно сделать в программе? <br />
			<i>10.02.2021 11:32:46, starostinalex.</i>]]></description>
			<link>http://zetlab.ru/forums/messages/forum4/message4999/636-nepravilnyiy-vyivod-znacheniy-napryazheniya-zet-220-na-treh-kanalah/</link>
			<guid>http://zetlab.ru/forums/messages/forum4/message4999/636-nepravilnyiy-vyivod-znacheniy-napryazheniya-zet-220-na-treh-kanalah/</guid>
			<pubDate>Wed, 10 Feb 2021 11:32:46 +0300</pubDate>
			<category>Форум по вопросам о продукции компании ZETLAB</category>
		</item>
		<item>
			<title>Неправильный вывод значений напряжения (ZET 220)  на трех каналах</title>
			<description><![CDATA[<b><a href="http://zetlab.ru/forums/messages/forum4/message4998/636-nepravilnyiy-vyivod-znacheniy-napryazheniya-zet-220-na-treh-kanalah/">Неправильный вывод значений напряжения (ZET 220)  на трех каналах</a></b> в форуме <a href="http://zetlab.ru/forums/forum4/">Форум по вопросам о продукции компании ZETLAB</a>. <br />
			Добрый день!
Проблема в том, что значение pointerADC не обязательно кратно количеству каналов, т.е. после запроса текущего значения pointerADC нужно понять на значение какого из каналов он указывает: 1, 2 или 3. При двух каналах все хорошо, потому что значение pointerADC всегда кратно 2. <br />
			<i>09.02.2021 17:36:17, Екатерина Сатарова.</i>]]></description>
			<link>http://zetlab.ru/forums/messages/forum4/message4998/636-nepravilnyiy-vyivod-znacheniy-napryazheniya-zet-220-na-treh-kanalah/</link>
			<guid>http://zetlab.ru/forums/messages/forum4/message4998/636-nepravilnyiy-vyivod-znacheniy-napryazheniya-zet-220-na-treh-kanalah/</guid>
			<pubDate>Tue, 09 Feb 2021 17:36:17 +0300</pubDate>
			<category>Форум по вопросам о продукции компании ZETLAB</category>
		</item>
		<item>
			<title>Неправильный вывод значений напряжения (ZET 220)  на трех каналах</title>
			<description><![CDATA[<b><a href="http://zetlab.ru/forums/messages/forum4/message2903/636-nepravilnyiy-vyivod-znacheniy-napryazheniya-zet-220-na-treh-kanalah/">Неправильный вывод значений напряжения (ZET 220)  на трех каналах</a></b> в форуме <a href="http://zetlab.ru/forums/forum4/">Форум по вопросам о продукции компании ZETLAB</a>. <br />
			ZetLab ZET 220 с интерфейсом USB нужно использовать как многоканальный АЦП (количество подключенных каналов не менее 8). Я взял пример с сайта ZetLab Test_Zadc_C++ и немного его переделал:
<pre>
====code====
<pre>#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;string&#38;gt;
#include &#38;lt;sstream&#38;gt;
#include &#38;quot;zadc_int.h&#38;quot;&nbsp;&nbsp;&nbsp;

using namespace std;

int ErrorMessage(std::string MessageError)
{
&nbsp;&nbsp;&nbsp;std::cout &#38;lt;&#38;lt; MessageError &#38;lt;&#38;lt; std::endl;
&nbsp;&nbsp;&nbsp;std::cin.get();
&nbsp;&nbsp;&nbsp;exit(EXIT_FAILURE);
}

template&#38;lt;typename T, long n&#38;gt;&nbsp;&nbsp;
inline long arraySize(const T(&#38;amp;arr)&#91;n&#93;)
{
&nbsp;&nbsp;&nbsp;return n;
}

template&#38;lt;typename T&#38;gt;
inline string NumToStr(T num)
{
&nbsp;&nbsp;&nbsp;ostringstream stream;
&nbsp;&nbsp;&nbsp;stream &#38;lt;&#38;lt; num;
&nbsp;&nbsp;&nbsp;string str = stream.str();
&nbsp;&nbsp;&nbsp;return str;
}

int main(int argc, char* argv&#91;&#93;)
{
&nbsp;&nbsp;&nbsp;setlocale(LC_ALL, &#38;quot;&#38;quot;);
&nbsp;&nbsp;&nbsp;long numChannelsOn&#91;&#93; = {1, 4, 15}; // 2, 5 и 16 каналы
&nbsp;&nbsp;&nbsp;//long numChannelsOn&#91;&#93; = {1, 15}; // программа работает правильно
&nbsp;&nbsp;&nbsp;long typeDevice = 16;&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 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;// Открытие устройства
&nbsp;&nbsp;&nbsp;if(ZOpen(typeDevice, numberDSP) != 0 ) 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage(&#38;quot;Не удалось открыть АЦП&#38;quot;);
&nbsp;&nbsp;&nbsp;// Проверка возможности АЦП&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;if(ZGetEnableADC(typeDevice, numberDSP, &#38;amp;enable) != 0 &#38;amp;&#38;amp; enable != 0) 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage(&#38;quot;Устройство не может работать как АЦП&#38;quot;);
&nbsp;&nbsp;&nbsp;std::cout &#38;lt;&#38;lt; &#38;quot;Устройство может работать как АЦП&#38;quot;&nbsp;&nbsp;&#38;lt;&#38;lt; std::endl;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Определение количества каналов&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;if(ZGetQuantityChannelADC(typeDevice, numberDSP, &#38;amp;numChannelsADC) != 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage(&#38;quot;Не удалось определить общее количество каналов: &#38;quot; + NumToStr(numChannelsADC));
&nbsp;&nbsp;&nbsp;std::cout &#38;lt;&#38;lt; &#38;quot;АЦП имеет &#38;quot; +&nbsp;&nbsp;NumToStr(numChannelsADC) + &#38;quot; каналов&#38;quot; &#38;lt;&#38;lt; std::endl;
&nbsp;&nbsp;&nbsp;// Отключение всех каналов
&nbsp;&nbsp;enable = 0;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;for(long i = 0; i &#38;lt; numChannelsADC; i++) 
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(ZSetInputADC(typeDevice, numberDSP, i, enable) != 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout &#38;lt;&#38;lt; &#38;quot;Не удалось отключить канал: &#38;quot; + NumToStr(i) &#38;lt;&#38;lt; std::endl;
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;long NumChannelsOn = arraySize(numChannelsOn); // число включенных каналов
&nbsp;&nbsp;&nbsp;// включение нужных каналов&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;enable = 1;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;for(long i = 0; i &#38;lt; NumChannelsOn; i++)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(ZSetInputADC(typeDevice, numberDSP, numChannelsOn&#91;i&#93;, 1) != 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage(&#38;quot;Не удалось включить канал: &#38;quot; + NumToStr(numChannelsOn&#91;i&#93;));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout &#38;lt;&#38;lt; &#38;quot;Включен канал: &#38;quot; + NumToStr(numChannelsOn&#91;i&#93; + 1) &#38;lt;&#38;lt; std::endl;
&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;// проверка правильности определения количества включенных каналов&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;if(ZGetNumberInputADC(typeDevice, numberDSP, &#38;amp;numChannelsADC) != 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage(&#38;quot;Не удалось определить количество включенных каналов&#38;quot;);
&nbsp;&nbsp;&nbsp;if(NumChannelsOn != numChannelsADC)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage(&#38;quot;Количество нужных каналов &#38;quot; + NumToStr(NumChannelsOn) + &#38;quot; не соответствует &#38;quot; 
&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ NumToStr(numChannelsADC) + &#38;quot; включенным каналам&#38;quot;);
&nbsp;&nbsp;&nbsp;std::cout &#38;lt;&#38;lt; &#38;quot;Количество заданных каналов &#38;quot;&nbsp;&nbsp;&nbsp;&nbsp;+ NumToStr(NumChannelsOn) + 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#38;quot; равно &#38;quot; + NumToStr(numChannelsADC) + &#38;quot; - результату выполнения функции ZGetNumberInputADC &#38;quot;&nbsp;&nbsp;&#38;lt;&#38;lt; std::endl;
&nbsp;&nbsp;&nbsp;double *ardAmpl = new double&#91;NumChannelsOn&#93;;
&nbsp;&nbsp;&nbsp;for (long i = 0; i &#38;lt; NumChannelsOn; i++)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (ZGetAmplifyADC(typeDevice, numberDSP, numChannelsOn&#91;i&#93;, &#38;amp;ardAmpl&#91;i&#93;) != 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage(&#38;quot;Не удалось определить усиление канала: &#38;quot; + NumToStr(numChannelsOn&#91;i&#93;));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout &#38;lt;&#38;lt; &#38;quot;Усиление канала &#38;quot; + NumToStr(numChannelsOn&#91;i&#93; + 1) + &#38;quot; равно &#38;quot; + NumToStr(ardAmpl&#91;i&#93;) &#38;lt;&#38;lt; std::endl;
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;// Опрос веса младшего разряда АЦП включенных каналов устройства
&nbsp;&nbsp;&nbsp;double *ardResol = new double&#91;numChannelsADC&#93;;
&nbsp;&nbsp;&nbsp;for (long i = 0; i &#38;lt; NumChannelsOn; i++)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (ZGetDigitalResolChanADC(typeDevice, numberDSP, numChannelsOn&#91;i&#93;, &#38;amp;ardResol&#91;i&#93;) != 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage(&#38;quot;Не удалось определить разрешение канала: &#38;quot; + NumToStr(i));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout &#38;lt;&#38;lt; &#38;quot;Разрешение канала &#38;quot; + NumToStr(numChannelsOn&#91;i&#93; + 1) + &#38;quot; равно &#38;quot; + NumToStr(ardResol&#91;i&#93;) &#38;lt;&#38;lt; std::endl;
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;// Опрос количества слов в одном отсчета АЦП устройства
&nbsp;&nbsp;&nbsp;if (ZGetWordsADC(typeDevice, numberDSP, &#38;amp;numWordsADC) != 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage(&#38;quot;Не удалось определить количество слов в одном отсчете АЦП&#38;quot;);
&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout &#38;lt;&#38;lt; &#38;quot;В одном отсчета АЦП &#38;quot; + NumToStr(numWordsADC) + &#38;quot; слова&#38;quot; &#38;lt;&#38;lt; std::endl;
&nbsp;&nbsp;&nbsp;// Запрос буфера АЦП
&nbsp;&nbsp;&nbsp;if (ZGetBufferADC(typeDevice, numberDSP, (void**) &#38;amp;pBuffer16ADC, &#38;amp;sizeBufferADC) != 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage(&#38;quot;Не удалось определить буфер устройства&#38;quot;);
&nbsp;&nbsp;&nbsp;pBuffer32ADC = (long*) pBuffer16ADC;
&nbsp;&nbsp;&nbsp;std::cout &#38;lt;&#38;lt; &#38;quot;Указатель на буфер pBuffer32ADC равен &#38;quot; + NumToStr(pBuffer32ADC) &#38;lt;&#38;lt; std::endl;
&nbsp;&nbsp;&nbsp; //Запрос на останов АЦП
&nbsp;&nbsp;&nbsp;if(ZStopADC(typeDevice, numberDSP) != 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage(&#38;quot;Не удалось остановить устройство&#38;quot;); 
&nbsp;&nbsp;&nbsp; //Запрос на запуск АЦП
&nbsp;&nbsp;if(ZStartADC(typeDevice, numberDSP) != 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage(&#38;quot;Не удалось запустить устройство&#38;quot;);
&nbsp;&nbsp;&nbsp;double *volt = new double&#91;numChannelsADC&#93;;
&nbsp;&nbsp;&nbsp;std::cout.setf(ios::fixed);
&nbsp;&nbsp;&nbsp;std::cout.width(10); // задает ширину поля
&nbsp;&nbsp;&nbsp;std::cout.precision(5);&nbsp;&nbsp;// задает количество знаков после десятичной точки
&nbsp;&nbsp;&nbsp;// Цикл чтения данных АЦП
&nbsp;&nbsp;&nbsp;while(!_kbhit())
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Задержка обновления данных АЦП для отображения
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(500);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Запрос указателя на текущий элемент буфера
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(ZGetPointerADC(typeDevice, numberDSP, &#38;amp;pointerADC) != 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage(&#38;quot;Не удалось получить указатель на буфер устройства&#38;quot;);
&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;volt&#91;0&#93; = ardResol&#91;0&#93; * (pBuffer32ADC&#91;pointerADC / numWordsADC&#93;) / ardAmpl&#91;0&#93;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout &#38;lt;&#38;lt; volt&#91;0&#93; &#38;lt;&#38;lt; endl;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(long i = 1; i &#38;lt; NumChannelsOn; i++)
&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;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;volt&#91;i&#93; = ardResol&#91;i&#93; * (pBuffer32ADC&#91;pointerADC / numWordsADC&#93;) / ardAmpl&#91;i&#93;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout &#38;lt;&#38;lt; volt&#91;i&#93; &#38;lt;&#38;lt; endl;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} // for
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout &#38;lt;&#38;lt; &#38;quot; ---------------------------------------------&#38;quot; &#38;lt;&#38;lt; endl;
&nbsp;&nbsp;&nbsp;} // while
&nbsp;&nbsp;&nbsp;// Запрос на останов АЦП
&nbsp;&nbsp;&nbsp;if (ZStopADC(typeDevice, numberDSP) != 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage(&#38;quot;Не удалось остановить устройство&#38;quot;);
&nbsp;&nbsp;&nbsp;// Запрос на освобождение буфера АЦП
&nbsp;&nbsp;&nbsp;if(pBuffer16ADC != NULL)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(ZRemBufferADC(typeDevice, numberDSP, (void**) &#38;amp;pBuffer16ADC) != 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage(&#38;quot;Не удалось освободить буфер устройства&#38;quot;);
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;// Отключение от драйвера устройства
&nbsp;&nbsp;&nbsp;if(ZClose(typeDevice, numberDSP) != 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage(&#38;quot;Не удалось отключить устройство&#38;quot;);
&nbsp;&nbsp;&nbsp;delete &#91;&#93; volt;
&nbsp;&nbsp;&nbsp;delete &#91;&#93; ardResol;
&nbsp;&nbsp;&nbsp;delete &#91;&#93; ardAmpl;

&nbsp;&nbsp;&nbsp;if(!_kbhit())
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_getch();

&nbsp;&nbsp;&nbsp;std::cout &#38;lt;&#38;lt; &#38;quot;Press any key for exit...&#38;quot; &#38;lt;&#38;lt; std::endl;
&nbsp;&nbsp;&nbsp;_getch();

 &nbsp;&nbsp;&nbsp;return 0;
}</pre>
=============
</pre>

Проверку правильности работы программы я сделал на 3 каналах: второй канал  подключил к одной батарейке (1,5 В), 5 и 16 каналы - соотвественно к 2 и 4 батарейкам (3 и 6 В). Значения напряжение определяются правильно, но вывод значений не соответствует порядку каналов:
<pre>
====code====
<pre>6.53385
1.45083
3.19009
 ---------------------------------------------
3.20306
6.51513
1.44911
 ---------------------------------------------
1.45500
3.19388
6.50739
 ---------------------------------------------
6.53386
1.45084
3.19009
 ---------------------------------------------
3.20306
6.51515
1.44911
 ---------------------------------------------
1.45500
3.19388
6.50740</pre>
=============
</pre>

Мне нужно строить графики и при таком выводе это невозможно. Если использовать только 2 канала (2 и 15) вместо трех, то вывод идет нормально:
<pre>
====code====
<pre>1.45499
6.47789
 ---------------------------------------------
1.45494
6.47786
 ---------------------------------------------
1.45501
6.47784
 ---------------------------------------------
1.45497
6.47788</pre>
=============
</pre>

Подскажите, пожалуйста, как исправить программу, чтобы при количестве каналов более двух порядок вывода значений напряжения был правильным. <br />
			<i>09.02.2021 14:06:05, starostinalex.</i>]]></description>
			<link>http://zetlab.ru/forums/messages/forum4/message2903/636-nepravilnyiy-vyivod-znacheniy-napryazheniya-zet-220-na-treh-kanalah/</link>
			<guid>http://zetlab.ru/forums/messages/forum4/message2903/636-nepravilnyiy-vyivod-znacheniy-napryazheniya-zet-220-na-treh-kanalah/</guid>
			<pubDate>Tue, 09 Feb 2021 14:06:05 +0300</pubDate>
			<category>Форум по вопросам о продукции компании ZETLAB</category>
		</item>
	</channel>
</rss>
