Здравствуйте!
Сдалали тестовую программку для измерения напряжения на канале, ее код (ничего лишнего, только опрос):
//==========================================================================================
#include "stdafx.h"
#include <Windows.h>
#include "Zadc_int.h"
#include <stdio.h>
#include <conio.h>
class Z230Device
{
public:
long err;
long typeDevice;
long numberDSP;
long numChannelsADC; // Кол-во включенных каналов АЦП
long numWordsADC; // Кол-во слов (по два байта) в одном отсчете АЦП
void *pBuffer; // Указатель на начало буфера драйвера типа void
short *pBuffer16ADC; // Указатель на начало буфера драйвера для АЦП с разрядностью не более 16 бит
long *pBuffer32ADC; // Указатель на начало буфера драйвера для АЦП с разрядностью более 16 бит
long sizeBufferADC; // Размер буфера драйвера в словах
long pointerADC; // Указатель на текущий элемент заполнения буфера драйвера (кратен 2)
long pointerADC_old; // Предыдущее значение указателя на буфер драйвера
double amplifyADC[4];// Коэф. усиления по каналам
double resolutionADC; // Вес младшего разряда АЦП
double volt[4]; // Мгновенное текущее значение АЦП (в Вольтах)
double freq; //частота задатчика синхронизации
};
//==============================================================================
HINSTANCE dllHandle=NULL;
Z230Device devs[1];
//-------------------------------------------------------------------
int numDev=0;
//===================================================================
long Init230(long numDev,long typeDev, long number_DSP, long err)
{
devs[numDev].typeDevice=typeDev;
devs[numDev].numberDSP=number_DSP;
dllHandle = LoadLibrary(L"zadc.dll"

;
// подключиться к драйверу (обязательно)
err = ZOpen(devs[numDev].typeDevice, devs[numDev].numberDSP);
// опросить коэф. усиления по каналу АЦП
err = ZGetAmplifyADC(devs[numDev].typeDevice, devs[numDev].numberDSP, 0, &devs[numDev].amplifyADC[0]

;
err = ZGetAmplifyADC(devs[numDev].typeDevice, devs[numDev].numberDSP, 0, &devs[numDev].amplifyADC[1]

;
err = ZGetAmplifyADC(devs[numDev].typeDevice, devs[numDev].numberDSP, 0, &devs[numDev].amplifyADC[2]

;
err = ZGetAmplifyADC(devs[numDev].typeDevice, devs[numDev].numberDSP, 0, &devs[numDev].amplifyADC[3]

;
// опросить вес младшего разряда АЦП
err = ZGetDigitalResolutionADC(devs[numDev].typeDevice, devs[numDev].numberDSP, &devs[numDev].resolutionADC);
// опросить кол-во слов в одном отсчете АЦП
err = ZGetWordsADC(devs[numDev].typeDevice, devs[numDev].numberDSP, &devs[numDev].numWordsADC);
// запросить буфер АЦП
err = ZGetBufferADC(devs[numDev].typeDevice, devs[numDev].numberDSP, &devs[numDev].pBuffer, &devs[numDev].sizeBufferADC);
// Проинициализировать локальные указатели для конкретных типов данных
devs[numDev].pBuffer16ADC = (short*) devs[numDev].pBuffer;
devs[numDev].pBuffer32ADC = (long*) devs[numDev].pBuffer;
return 0;
}
//=========================================================================
double getValueCh(long numDev,long numCh, long err, long *CodeADC, double *ResolADC,double *AmplifADC, long *pointer)
{
// запросить указатель на текущий элемент буфера
err = ZGetPointerADC(devs[numDev].typeDevice, devs[numDev].numberDSP, &devs[numDev].pointerADC);
if(err != 0) return -1;
*pointer=devs[numDev].pointerADC;
// перейти на отсчет первого включенного канала последнего кадра АЦП
if(devs[numDev].pointerADC - devs[numDev].numWordsADC * devs[numDev].numChannelsADC < 0)
devs[numDev].pointerADC = devs[numDev].sizeBufferADC + devs[numDev].pointerADC - devs[numDev].numWordsADC * devs[numDev].numChannelsADC;
else
devs[numDev].pointerADC = devs[numDev].pointerADC - devs[numDev].numWordsADC * devs[numDev].numChannelsADC;
*CodeADC=devs[numDev].pBuffer32ADC[devs[numDev].pointerADC/devs[numDev].numWordsADC + numCh];
*ResolADC=devs[numDev].resolutionADC;
*AmplifADC=devs[numDev].amplifyADC[numCh];
// вычислить из целого значения отсчета АЦП вещественное значение отсчета (в Вольтах)
if(devs[numDev].numWordsADC == 1)
devs[numDev].volt[numCh] = devs[numDev].resolutionADC * (devs[numDev].pBuffer16ADC[devs[numDev].pointerADC + numCh]

/ devs[numDev].amplifyADC[numCh];
else
devs[numDev].volt[numCh] = devs[numDev].resolutionADC * (devs[numDev].pBuffer32ADC[devs[numDev].pointerADC/devs[numDev].numWordsADC + numCh]

/ devs[numDev].amplifyADC[numCh];
return devs[numDev].volt[numCh];
}
//------------------------------------------------------------------
int _tmain(int argc, _TCHAR* argv[]

{
long CodeADC;
long pointer;
double ResolADC;
double AmplifADC;
long err;
err=Init230(0,17,67,0);
err=ZStartADC(devs[0].typeDevice,devs[0].numberDSP);
while(!kbhit())
{
Sl eep(1000);
double val=getValueCh(0,0,0,&CodeADC,&ResolADC,&AmplifADC,&pointer);
printf("%i %i %.14f %.5f %.8f\n",pointer,CodeADC,ResolADC,AmplifADC,val);
}
ZRemBufferADC(devs[0].typeDevice, devs[0].numberDSP,&(devs[0].pBuffer));
ZClose(devs[0].typeDevice, devs[0].numberDSP);
FreeLibrary(dllHandle);
dllHandle = NULL;
return 0;
}
//===========================================================================================
Запускаем ее, и потом Вольтметр постоянного тока Зетлаб, их скрины:
формат вывода программы: указатель на элемент буфера, код АЦП, вес мл. разряда. коэфф. усиления, значение в Вольтах

Запускали много раз, ошибка воспроизводима и постоянна. По другим каналам этого модуля то же самое. Объясните пожалуйста как из кода АЦП=90358324 и веса мл.разряда 0,00000000488944
получить то что показывает вольтметр Зетлаба.
Очень рассчитываю на помощь.