работаю с файлом
C++ (Qt)
double* CCOMTRADE::getAnalogDataVectorBIN(QString path, int channel)
{
qDebug()<<"getAnalogDataVectorBIN";
QFile pFile(path);
char* byteData;
int EntrySize = 0;
int nac = DynamicCfg->NumOfAnalogChannels;
int ndc = DynamicCfg->NumOfDigitalChannels;
int Bunches = ndc >> 4;
Bunches = (ndc == (Bunches * 16)) ? Bunches : Bunches + 1;
EntrySize = (((nac + Bunches) * 2) + 8);
if(pFile.exists())
{
if(!pFile.open(QIODevice::ReadOnly))
{
qDebug()<<"file not open";
return NULL;
}
AnalogDataVector = new double [DynamicCfg->NumSamples + 1];
if(AnalogDataVector == NULL) return NULL;
byteData = new char[(DynamicCfg->NumSamples)*EntrySize];
if(byteData == NULL) return NULL;
qint64 readNum = pFile.read(byteData,(DynamicCfg->NumSamples)*EntrySize);
if(readNum == (DynamicCfg->NumSamples + 1)*EntrySize)return NULL;
qDebug()<<"readNum = "<< readNum;
short int tmp = 0;
int ad_idx = 0;
for (int i = 0; i<DynamicCfg->NumSamples; i++)
{
ad_idx = EntrySize*(i) + 8 + (channel * 2);
tmp = byteData[ad_idx + 1] & 0x00FF;
tmp <<= 8;
tmp |= byteData[ad_idx + 0] & 0x00FF;
AnalogDataVector[i] = (double)tmp;
}
pFile.close();
qDebug()<<"return AnalogVector";
return AnalogDataVector;
}
qDebug() <<"File not exists";
return NULL;
}
Затем выше приведенный метод используется в конструкторе
C++ (Qt)
Plot::Plot(QString nameConfFile, comtrade_curve_type_t type,int number_chanel,QWidget *parent)
: QwtPlot(parent)
{
ct = new CCOMTRADE;
ct->LoadConfig(nameConfFile);
int l = nameConfFile.length();
QString fn_dat = nameConfFile.remove(l-4,4);
list_simple_markers.clear();
list_delete_markers.clear();
if(type == ANALOG_TYPE)
{
data = new QwtPointArrayData(ct->getTimeDataVector(fn_dat+".DAT"),
ct->getAnalogDataVector(fn_dat+".DAT", number_chanel),
ct->DynamicCfg->NumSamples);
...
}
Работает норм.
Затем по щелчку кнопки графики должны синхронизироваться
C++ (Qt)
double* Plot::getSynchroAnalogDataVector(synchro_time*st)
{
SynchroAnalogDataVector = new double[(int)((st->t_z_head + st->t_length + st->t_z_tail)/200) + 1];
int j = 0;
for(int i = 0; i<(int)(st->t_z_head/200) + 1; i++)
{
SynchroAnalogDataVector[i] = (double)(0);
}
for(int i = (int)(st->t_z_head/200) + 1; i<(int)(( st->t_z_head + st->t_length)/200) + 1; i++)
{
int l = s.length();
QString fn_dat = s.remove(l-4,4);
SynchroAnalogDataVector[i] = (double)(1);
//SynchroAnalogDataVector[i] =
qDebug()<<"ct->getAnalogDataVector = "<<*(ct->getAnalogDataVector(fn_dat+".DAT",n) + j);//??????????????????????????
j++;
qDebug()<<"SynchroAnalogDataVector ="<<SynchroAnalogDataVector[i];
}
for(int i = (int)((st->t_z_head + st->t_length)/200) + 1; i<(int)((st->t_z_head + st->t_length + st->t_z_tail)/200) + 1; i++)
{
SynchroAnalogDataVector[i] = (double)(0);
}
return SynchroAnalogDataVector;
}
Но в getAnalogDataVector(fn_dat+".DAT",n) программа заходит только один раз,
а потом во второй раз вываливается
типа срабатывает if(pFile.exists()),
но файл то есть и существует.
Подскажите, что не правильно??? Спасибо!
работаю с файлом
C++ (Qt)
double* CCOMTRADE::getAnalogDataVectorBIN(QString path, int channel)
{
qDebug()<<"getAnalogDataVectorBIN";
QFile pFile(path);
char* byteData;
int EntrySize = 0;
int nac = DynamicCfg->NumOfAnalogChannels;
int ndc = DynamicCfg->NumOfDigitalChannels;
int Bunches = ndc >> 4;
Bunches = (ndc == (Bunches * 16)) ? Bunches : Bunches + 1;
EntrySize = (((nac + Bunches) * 2) + 8);
if(pFile.exists())
{
if(!pFile.open(QIODevice::ReadOnly))
{
qDebug()<<"file not open";
return NULL;
}
AnalogDataVector = new double [DynamicCfg->NumSamples + 1];
if(AnalogDataVector == NULL) return NULL;
byteData = new char[(DynamicCfg->NumSamples)*EntrySize];
if(byteData == NULL) return NULL;
qint64 readNum = pFile.read(byteData,(DynamicCfg->NumSamples)*EntrySize);
if(readNum == (DynamicCfg->NumSamples + 1)*EntrySize)return NULL;
qDebug()<<"readNum = "<< readNum;
short int tmp = 0;
int ad_idx = 0;
for (int i = 0; i<DynamicCfg->NumSamples; i++)
{
ad_idx = EntrySize*(i) + 8 + (channel * 2);
tmp = byteData[ad_idx + 1] & 0x00FF;
tmp <<= 8;
tmp |= byteData[ad_idx + 0] & 0x00FF;
AnalogDataVector[i] = (double)tmp;
}
pFile.close();
qDebug()<<"return AnalogVector";
return AnalogDataVector;
}
qDebug() <<"File not exists";
return NULL;
}
Ну ладно, согласен, работаете :)
А в чем проблема или вопрос-то? :D
Разобрался
C++ (Qt)
double* Plot::getSynchroTimeVector(synchro_time*st)
{
...
int l = s.length();
QString fn_dat = s.remove(l-4,4);
double *getAnalVec = ct->getAnalogDataVector(fn_dat+".DAT",n);
for(int i = (int)(st->t_z_head/200) + 1; i<(int)(( st->t_z_head + st->t_length)/200) + 1; i++)
{
SynchroAnalogDataVector[i] = *(getAnalVec + j);
//SynchroAnalogDataVector[i] =
qDebug()<<"ct->getAnalogDataVector = "<<*(getAnalVec + j);//??????????????????????????
j++;
qDebug()<<"SynchroAnalogDataVector ="<<SynchroAnalogDataVector[i];
}
...
}
[code]
[/code]