Russian Qt Forum
Ноябрь 23, 2024, 14:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: структуры. ошибки  (Прочитано 5415 раз)
Firefox
Гость
« : Сентябрь 23, 2009, 07:53 »

есть проект в котором используются структуры, в которые будут записываться дискретные и аналоговые данные с платы сбора данных.
вот файлы проекта:
файл Signals.h:
Код:
#include <QtGui/QWidget>
#include "structure.h"
#define USHORT  unsigned short
typedef struct // структура для дискретных сигналов
{

USHORT      port;

USHORT      bit;

USHORT      state;

} PCI_InfD;

typedef struct // структура для аналоговых сигналов
{
USHORT      port;
short       level;

} PCI_InfA;



//входные дискретные сигналы с платы сбора данных
// должны быть упорядочены по номеру порта, затем по битам в байте
PCI_InfD IN_PCI_PD[13]={                       
//-------------------------------------
// Номер | Номер   | Номер   |Состояние
//       | порта   | бита    |  бита
//       |         |         |
//-------------------------------------
{  /*0*/     0,        0,       0x0,  },
{  /*1*/     0,        1,       0x0,  },
{  /*2*/     0,        2,       0x0,  },
{  /*3*/     0,        3,       0x0,  },
{  /*4*/     0,        4,       0x0,  },
{  /*5*/     0,        5,       0x0,  },
{  /*6*/     0,        6,       0x0,  },
{  /*7*/     0,        7,       0x0,  },
{  /*8*/     1,        0,       0x0,  },
{  /*9*/     1,        1,       0x0,  },
{  /*10*/    1,        2,       0x0,  },
{  /*11*/    1,        3,       0x0,  },
{  /*12*/    1,        4,       0x0   }

};
// входные аналоговые данные с ПСД

PCI_InfA IN_PCI_PA[1]={
//-------------------------------
// Номер | Номер   | Состояние
//       | порта   |   
//       |         |         
//-------------------------------
{  /*0*/     0,        0 }

};
// входные  аналоговые сигналы с управляющей программы
// должны быть упорядочены по номеру порта, значению
PCI_InfA IN_YP_A[1]={                     
//-------------------------------
// Номер | Номер   | Состояние
//       | порта   |   
//       |         |         
//-------------------------------
{  /*0*/     1,        0 }

};

// выходные аналоговые данные с ПСД

PCI_InfD OUT_PCD_PA[1]={

///-------------------------------------
// Номер | Номер     |Состояние
//       | порта     |  бита
//       |           |
//-------------------------------
{   /*13*/    1,     5,      0x0}
};


//определение сигналов
#define  Rez_E     IN_PCI_PD[0].state
#define  Rez_K IN_PCI_PD[1].state
#define  Rez_I IN_PCI_PD[2].state
#define  Rez_R IN_PCI_PD[3].state
#define  Del_1 IN_PCI_PD[4].state
#define  Del_5 IN_PCI_PD[5].state
#define  Del_50 IN_PCI_PD[6].state
#define  Del_250 IN_PCI_PD[7].state
#define  Kont_12V IN_PCI_PD[8].state
#define  Kont_GN IN_PCI_PD[9].state
#define  Kont_YC1 IN_PCI_PD[10].state
#define  Kont_EXT IN_PCI_PD[11].state
#define  PITANIE IN_PCI_PD[12].state
#define  KAVIT OUT_PCI_PD[0].state

#define  Shum_PCD IN_PCI_PA[1].level
#define  Shum_YP IN_PCI_YA[1].level

файл Structure.h
Код:
#include "include/c_strsys.h"
#pragma pack(1)
//
/* Структура текущих данных, передаваемых из ПСД  в ПЭВМ */
extern struct in_pcdd_mg512 {
unsigned short Rez_E; // режим работы - эквивалент
unsigned short Rez_K; //режим работы - калибровка
unsigned short Rez_I; // режим работы - изменение
unsigned short Rez_R; // режим работы - работа
unsigned short Del_1; // делитель 1
unsigned short Del_5;// делитель 5
unsigned short Del_50; // делитель 50
unsigned short Del_250; // делитель 250
unsigned short Kont_12V; // Контроль - +12В
unsigned short Kont_GN; // Контроль - ГН
unsigned short Kont_YC1; // Контроль - УС1
unsigned short Kont_EXT; // Контроль - выход
unsigned short PITANIE; // сеть включена

                         } IN_PCI_PD;

extern struct in_pcda_mg512 {
//short port;
float Shum_PCD;
                            }IN_PCD_PA;



extern struct in_ypa_mg512 {
//short port;
float Shum_YP;
} IN_YP_A;


extern struct out_pcdd_mg512{

unsigned short KAVIT;
}OUT_PCD_PA;

#pragma pack()

файл Structure.cpp
Код:
#include "structure.h"

struct in_pcdd_mg512 IN_PCI_PD={
/*unsigned short Rez_E; // режим работы - эквивалент*/      0,
/*unsigned short Rez_K; //режим работы - калибровка*/ 0,
/*unsigned short Rez_I; // режим работы - изменение*/ 0,
/*unsigned short Rez_R; // режим работы - работа*/ 0,
/*unsigned short Del_1; // делитель 1*/ 0,
/*unsigned short Del_5; // делитель 5*/ 0,
/*unsigned short Del_50; // делитель 50*/ 0,
/*unsigned short Del_250; // делитель 250*/ 0,
/*unsigned short Kont_12V; // Контроль - +12В*/ 0,
/*unsigned short Kont_GN; // Контроль - ГН*/ 0,
/*unsigned short Kont_YC1; // Контроль - УС1*/ 0,
/*unsigned short Kont_EXT; // Контроль - выход*/ 0,
/*unsigned short     PITANIE; // сеть включена*/ 1,
};
struct in_pcda_mg512 IN_PCD_PA={
                0,
};
struct in_ypa_mg512 IN_YP_A={
/*short Shum_YP; // стрелочный индикатр уровня шума*/  0,
};
struct out_pcdd_mg512 OUT_PCD_PA={
    /*unsigned short KAVIT*/  0,
};

файл mg512.h

Код:
#ifndef MG512_H
#define MG512_H
#include <QtGui>
#include <QWidget>
#include <QtGui/QWidget>
#include "xchangesystemclient.h"
#include "include\driver.h"
#include <QtGui/QWidget>
#include "ui_mg512.h"
class QNetwork;
//float a,b;
class MG512 : public QWidget
{
Q_OBJECT

public:
MG512(QWidget *parent = 0, Qt::WFlags flags = 0);
~MG512();
QTimer * Timer_time;
void open0();
void Work();
void read_data();
void read_yp();
void r_izm(float,float);
void r_rab(float,float);
void r_kal(float,float);
void r_ekv(float,float);

private:
Ui::MG512Class ui;
XchangeSystemClient *pClient_dev;
private slots:
void on_clear_clicked();
void on_ok_clicked();
void on_lineEdit_textChanged(const QString &);
void Ttime();
};

#endif // MG512_H

 файл mg512.cpp
Код:
#include "mg512.h"
#include <QtGui/QApplication>
#include <QtGui/QWidget>
//#include <QtGui>
#include "Signals.h"
//#include "Structure.h"
#include <QMessageBox>
#include "Include\os.h"
#include <qlabel.h>
#define PORT 15000
#define R 10000 //Ом
float level_yp=0,I=0,Db=0,Db1=0,Db2=0;
LRESULT ErrCde;
LRESULT dwErrCde;
char  szErrMsg[80];
USHORT usChan;
long DriverHandle;
int flag_o=0, flag_ch=0, flag_rd=0, flag_wd=0, flag_wdo=0;
#pragma comment(lib,"Adsapi32.lib")// подключаемая библиотека драйвера ПСД
PT_CounterPulseStart ptCounterPulseStart;
MG512::MG512(QWidget *parent, Qt::WFlags flags)
: QWidget(parent, flags)
{
ui.setupUi(this);
pClient_dev=new XchangeSystemClient(QString("192.168.13.1"), PORT); // соединение с управляющей программой
//pClient_dev->AddToList(171, sizeof(), &, IS_READABLE);// структура для чтения дискретных данных из УП
pClient_dev->AddToList(170, sizeof(IN_YP_A), IN_YP_A, IS_READABLE); // структура для чтения аналоговых данных от УП

Timer_time = new QTimer(this);
connect(Timer_time, SIGNAL (timeout()),SLOT(Ttime()));// соединение твймера со слотом Ttime()
Timer_time->start(1000); // таймер через 2 сек
}

MG512::~MG512()
{
delete Timer_time;
delete pClient_dev;
}
void MG512::open0() // открытие  устройства ПСД
{

ErrCde = DRV_DeviceOpen(0,(LONG far *)&DriverHandle);

if (ErrCde!= SUCCESS && flag_o==0)
{

DRV_GetErrorMessage(ErrCde, szErrMsg);
flag_o=1;
QMessageBox::warning(0,"Error","PCI-1751 is disconnect!!");
}

}
void MG512::Ttime()
{
Work();
}
void MG512::read_data()// чтение дискретных и аналоговых данных с ПСД
{
USHORT  i=0;
USHORT  j;
USHORT  k;
USHORT        gwState;
PT_DioReadBit ptDioReadBit;
PT_AIConfig ptIConfig;//?????надо ли так как функция DRV_AIConfig не возвращает данных
PT_AIVoltageIn ptAIVoltage;


j =0;

while(j <2)
{
for(k =0; k <8; k++)
{
ptDioReadBit.port = j;
ptDioReadBit.bit = k;
ptDioReadBit.state = (USHORT far *)&gwState;
if ((ErrCde = DRV_DioReadBit(DriverHandle,(LPT_DioReadBit)&ptDioReadBit)) != 0 && flag_rd==0)
{
flag_rd=1;
QMessageBox::warning(0,"Error","PCI-1710 error in reading bits!!");
DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
DRV_DeviceClose((LONG far *)&DriverHandle);


}     
IN_PCI_PD[j].port=ptDioReadBit.port;
IN_PCI_PD[k].bit=ptDioReadBit.bit;
IN_PCI_PD[i].state=gwState;


i++;
}
j++;
}
// чтение аналоговых данных
ptIConfig.DasChan= usChan;
ptIConfig.DasGain=4; // так как режим +/-10V

if (DRV_AIConfig(DriverHandle,(LPT_AIConfig)&ptIConfig)!=0) // задаються параметры передачи данных
{
QMessageBox::warning(0,"Error","PCI-1710 error in reading bits!!");
DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
DRV_DeviceClose((LONG far *)&DriverHandle);

return;
}

ptAIVoltage.chan= usChan;
ptAIVoltage.gain=0;
ptAIVoltage.TrigMode=0; // internal trigger

if (dwErrCde =DRV_AIVoltageIn(DriverHandle,(LPT_AIVoltageIn)&ptAIVoltage)!=0) //функция чтения с платы аналоговых сигналов

{
QMessageBox::warning(0,"Error","PCI-1710 error in reading bits!!");
DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
DRV_DeviceClose((LONG far *)&DriverHandle);

return;

}
else
{
IN_PCI_PA[0].port=ptAIVoltage.chan;
IN_PCI_PA[0].level=ptAIVoltage.voltage;
}


}

void MG512::Work()
{
if (IN_PCD_PD.PITANIE==true)
{
open();
}
read_data();// чтение данных с ПСД в В
read_yp();// чтение данных пришедших с УП в Дб

// перевод из В в Дб

I=IN_PCD_PA.Shum_PCD/R; // Перевод вольт в амперы, поступившего шума от прибора
//Db= ;// Перевод  в Дб поступившего шума от прибора   ??????????

// сравнени
if (IN_PCI_PD[2].state=1)r_izm(IN_YP_A.Shum_YP,Db);
if (IN_PCI_PD[3].state=1)r_rab(N_YP_A.Shum_YP,Db);
if(IN_PCI_PD[0].state=1)r_ekv();
if(IN_PCI_PD[1].state=1)r_kal(Db1, &Db2);




}
void MG512::read_yp()// чтение данных пришедших с УП
{ // чтение дискретных данных с УП
if ()
{
QMessageBox("Incorrect date. Please insert value more then 0.");// если данные с формы
}
// Режимы работы переключателя "Работа"
// Переключатель РЕЖИМ РАБОТЫ в положении ИЗМЕРЕНИЕ
void MG512::r_izm(float Db1, float &Db2)
{
if ()
{
//таблица
}

}
// Переключатель РЕЖИМ РАБОТЫ в положении РАБОТА
void MG512::r_rab(float Db1, float &Db2)
{

if(IN_PCI_PD.Del_5==1)
{
Db2=Db1-14;

}
if(IN_PCI_PD.Del_50==1)
{
Db2=Db1-34;
}
if(IN_PCI_PD.Del_250==1)
{
Db2=Db1-48;
}

}
// Переключатель РЕЖИМ РАБОТЫ в положении КАЛИБРОВКА
void MG512::r_kal( float Db1,  float &Db2)
{
Db2=Db1-48;
}
//Переключатель РЕЖИМ РАБОТЫ в положении ЭКВИВАЛЕНТ
void MG512::r_ekv()
{
// не поняла
// чтение аналоговых данных
/*PT_AIConfig.DasChan=1;
PT_AIConfig.DasGain=4; // так как режим +/-10V
IN_PCI_PA[1].port=PT_AIConfig.DasChan;
IN_PCI_PA[1].level=DRV_AIConfig(DriverHandle,*LPT_AIConfig);*/// считываются данные с другого порта ПСД
}
void MG512::on_ok_button_clicked()
{
//IN_PCD_PA[0]=ui.linetext->text();// чтение с формы данных ПСД
  IN_YP_A[0]=ui.linetext2->text();// чтение с формы данных УП
}



void MG512::on_ok_clicked()
{
IN_YP_A[0]=ui.linetext2->text();// чтение с формы данных УП
}

void MG512::on_clear_clicked()
{
ui.linetext2->clear();
}
 

При компилировании вылазит куча ошибок связанных с использованием структур в файле mg512.cpp. Перепробовала все вариации уже, но не помогает. подскажите что не так.

вот описание ошибок:
 d:\Мг-512\Version2\Mg512\mg512.cpp(88): error C2228: left of '.state' must have class/struct/union type
d:\Мг-512\Version2\Mg512\mg512.cpp(88): error C3861: 'IN_PCI_PD': identifier not found, even with argument-dependent lookup
d:\Мг-512\Version2\Mg512\mg512.cpp(125): error C2440: '=' : cannot convert from 'FLOAT *' to 'short'
        This conversion requires a reinterpret_cast, a C-style cast or function-style cast
d:\Мг-512\Version2\Mg512\mg512.cpp(133): error C2065: 'IN_PCD_PD' : undeclared identifier
d:\Мг-512\Version2\Mg512\mg512.cpp(133): error C2228: left of '.IN_PCI_PD' must have class/struct/union type
        type is ''unknown-type''
d:\Мг-512\Version2\Mg512\mg512.cpp(133): error C2228: left of '.state' must have class/struct/union type
d:\Мг-512\Version2\Mg512\mg512.cpp(135): error C3861: 'open': identifier not found, even with argument-dependent lookup
d:\Мг-512\Version2\Mg512\mg512.cpp(142): error C2039: 'IN_PCI_PA' : is not a member of 'in_pcda_mg512'
        d:\мг-512\version2\mg512\structure.h(43) : see declaration of 'in_pcda_mg512'
d:\Мг-512\Version2\Mg512\mg512.cpp(142): error C2228: left of '.level' must have class/struct/union type
d:\Мг-512\Version2\Mg512\mg512.cpp(143): error C2059: syntax error : ';'
d:\Мг-512\Version2\Mg512\mg512.cpp(146): error C2228: left of '.state' must have class/struct/union type
d:\Мг-512\Version2\Mg512\mg512.cpp(146): error C3861: 'IN_PCI_PD': identifier not found, even with argument-dependent lookup
d:\Мг-512\Version2\Mg512\mg512.cpp(146): error C2039: 'IN_PCI_YA' : is not a member of 'in_ypa_mg512'
        d:\мг-512\version2\mg512\structure.h(53) : see declaration of 'in_ypa_mg512'
d:\Мг-512\Version2\Mg512\mg512.cpp(146): error C2228: left of '.level' must have class/struct/union type
d:\Мг-512\Version2\Mg512\mg512.cpp(146): error C3861: 'IN_YP_A': identifier not found, even with argument-dependent lookup
d:\Мг-512\Version2\Mg512\mg512.cpp(147): error C2228: left of '.state' must have class/struct/union type
d:\Мг-512\Version2\Mg512\mg512.cpp(147): error C3861: 'IN_PCI_PD': identifier not found, even with argument-dependent lookup
d:\Мг-512\Version2\Mg512\mg512.cpp(147): error C2065: 'N_YP_A' : undeclared identifier
d:\Мг-512\Version2\Mg512\mg512.cpp(147): error C2228: left of '.IN_PCI_YA' must have class/struct/union type
        type is ''unknown-type''
d:\Мг-512\Version2\Mg512\mg512.cpp(147): error C2228: left of '.level' must have class/struct/union type
d:\Мг-512\Version2\Mg512\mg512.cpp(148): error C2228: left of '.state' must have class/struct/union type
d:\Мг-512\Version2\Mg512\mg512.cpp(148): error C3861: 'IN_PCI_PD': identifier not found, even with argument-dependent lookup
d:\Мг-512\Version2\Mg512\mg512.cpp(148): error C2660: 'MG512::r_ekv' : function does not take 0 arguments
d:\Мг-512\Version2\Mg512\mg512.cpp(149): error C2228: left of '.state' must have class/struct/union type
d:\Мг-512\Version2\Mg512\mg512.cpp(149): error C3861: 'IN_PCI_PD': identifier not found, even with argument-dependent lookup
 Обеспокоенный Обеспокоенный Обеспокоенный Обеспокоенный Обеспокоенный Обеспокоенный Обеспокоенный Обеспокоенный Обеспокоенный Обеспокоенный Обеспокоенный Обеспокоенный Обеспокоенный Обеспокоенный Обеспокоенный
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Сентябрь 23, 2009, 08:53 »

Ну сразу в глаза бросилось вот это:
Код:
...
if (IN_PCI_PD[2].state=1) r_izm(IN_YP_A.Shum_YP,Db);
...

Улыбающийся

а дальше - читай С/С++ и пробуй, пробуй, пробуй!!!

И вообще, ИМХО, дефайны лучше убрать, а на их место нарисовать enum , сгрупппировав по функциональному признаку + структуры на классы поменять... и т.п.
этож все-таки С++ а не Cи
« Последнее редактирование: Сентябрь 23, 2009, 08:58 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
Firefox
Гость
« Ответ #2 : Сентябрь 23, 2009, 09:48 »

ошибки со структурами разобрала))а классами не могу делать, так как в программу куда отправляются данные забито всё структурами. спасибо Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.21 секунд. Запросов: 23.