есть проект в котором используются структуры, в которые будут записываться дискретные и аналоговые данные с платы сбора данных.
вот файлы проекта:
файл 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