全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:4169
推到 Plurk!
推到 Facebook!

使用研華USB-4711 AD - 存取 Analog Input 值為DAT檔~

尚未結案
chabear
一般會員


發表:1
回覆:5
積分:1
註冊:2007-09-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-10-08 22:00:39 IP:140.118.xxx.xxx 訂閱
以下研華的BCB範例~
我修改的部份會用

///***********************
//************************

這個記號圈起來~
這是抓取Analog Input 的程式 ~
我現在有三個輸入~
範例好像是存到一個矩陣~
然後一個一個抓取矩陣的值SHOW出來~
我原來存成 .DAT 就是抓取他SHOW的值一一存起來~
但是我需要30KHZ以上的速度抓值~
這個SHOW值很花我的時間~要一.二十分鐘~
我把這個SHOW的部份砍掉~但是逃不掉FOR迴圈~

我想要把那個矩陣直接存成.DAT~
但是BCB都跟我說格式不是 string ~
所以存不起來~問題大約在程式中後半段~粗體字那邊~
請各位朋友幫幫忙~萬分感謝!!!


程式開始~

//---------------------------------------------------------------------------
#include
#pragma hdrstop

#include "Init.h"
#include "DataShow.h"
#include "Convert.h"
#include "GainListForm.h"
#include "stdio.h"
#include "..\..\..\include\driver.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFrmInit *FrmInit;

const MaxEntries = 255;
DEVLIST DeviceList[MaxEntries 1];
DEVFEATURES DevFeatures;
PT_DeviceGetFeatures ptDevGetFeatures;
DEVCONFIG_AI Devconfig_AI;
PT_AIGetConfig ptAIGetConfig;
PT_EnableEvent ptEnableEvent; // Enable event
PT_CheckEvent ptCheckEvent; // Check event
PT_FAIIntScanStart ptFAIStart;
PT_FAITransfer ptFAITransfer; // FAITransfer table

int gwDevice = 0; // The selected device in DeviceList[]
USHORT usStartChan; // Start channel(physical)
USHORT usChanNum; // The count of channels(logical)

long DeviceHandle;
long ErrCde;
char szErrMsg[80];
USHORT usGainCode[64];
USHORT usGainIndx[64]; ///Logical Channel Gain Code Index
int giMaxLogChanNum;
int giEvtFlag=1; // event enable(0)
int giFifoEnable=0; // Fifo
int giFifoSize; // Fifo Size
HGLOBAL hBuf,hUserBuf;
ULONG gulConvNum;
ULONG gdwPacerRate;
USHORT usEventType=0;
USHORT guDataType = 1; // display type : FLOAT(1)
USHORT gwOverrun;
ULONG ulIntCounter = 0; // counter by adInterruptEvent
ULONG ulBfChgCounter = 0;
ULONG ulOverrunCounter = 0;
bool gbThreadFlag = false;
// li.zhe add
USHORT gwExtTrig = 0; // 0 = internal trigger
///*****************************************************************************

String filename,data_ch0,data_ch1,data_ch2;
int counter=0;
int counter1=0;
int mod=0;

///*****************************************************************************
long ChkErr(long lErrCde)
{
if (lErrCde != 0)
{
DRV_GetErrorMessage(lErrCde, szErrMsg);
Application->MessageBox(szErrMsg, "Error!!", MB_OK);
return 1;
}
else
return 0;
}


int PhyChanToLogChan(DEVCONFIG_AI * pDevCfg,int PhyChan)
{
int i;
int result = 0;
if(pDevCfg->ulChanConfig == 1)
{
return PhyChan;
}
for(i = 0; i<=(PhyChan>31?31:PhyChan);i )
{
if(pDevCfg->ulChanConfig & (1< i ;
result ;
}
if(PhyChan >= 32)
{
for(i = 32; i<=PhyChan;i )
{
if(pDevCfg->ulChanConfigEx[0] & (1<<(i-32)))
i ;
result ;
}
}
return result - 1;
}
int GetMaxLogChanNum(DEVCONFIG_AI * pDevCfg,DEVFEATURES *pDevFeature)
{
int i;
int result = 0;
if (pDevCfg->ulChanConfig == 1)
{
return pDevFeature->usMaxAIDiffChl;
}
for(i = 0; i< pDevFeature->usMaxAISiglChl ; i )
{
if(i<32)
if(pDevCfg->ulChanConfig & (1< i ;
else
if(pDevCfg->ulChanConfigEx[0] & (1<<(i-32)))
i ;
result ;
}
return result;
}
void TFrmInit::GainCodeFilling()
{
for (int i=0 ; i< 64 ; i )
usGainIndx[i] =cmbOverallGain->ItemIndex;
}
//---------------------------------------------------------------------------
__fastcall TFrmInit::TFrmInit(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TFrmInit::FormCreate(TObject *Sender)
{
int i;
short gnNumOfDevices;
int MaxEntries;
short nOutEntries;
MaxEntries = 100;
// Add type of PC Laboratory Card
ErrCde = DRV_DeviceGetList(&DeviceList[0], MaxEntries, &nOutEntries);
if (ChkErr(ErrCde))
return;
// Return the number of devices which you install in the system using
// Device Installation
ErrCde = DRV_DeviceGetNumOfList(&gnNumOfDevices);
if (ChkErr(ErrCde))
return;
for (i = 0; i < gnNumOfDevices; i )
{
lstDevice->Items->Add(DeviceList[i].szDeviceName);
}
giEvtFlag = 1; // event enable(0)
giFifoEnable = 0; // Fifo disable(0)
giFifoSize = FIFO_SIZE;
lstDevice->ItemIndex = 0;
lstDeviceClick(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TFrmInit::lstDeviceClick(TObject *Sender)
{
int i;
int tempNum;
long dwDeviceNum;
//
cmbOverallGain->Enabled = true;
butConvert->Enabled = false;

// Clear gain code selection items
cmbOverallGain->Clear();
gwDevice = lstDevice->ItemIndex;
// Open selected device for getting more informations
dwDeviceNum = DeviceList[lstDevice->ItemIndex].dwDeviceNum;
ErrCde = DRV_DeviceOpen(dwDeviceNum, &DeviceHandle);
if (ChkErr(ErrCde))
return;
// Device's informations is stored as Features and configurations
ptDevGetFeatures.buffer = &DevFeatures;
ErrCde = DRV_DeviceGetFeatures(DeviceHandle, &ptDevGetFeatures);
if (ChkErr(ErrCde))
{
DRV_DeviceClose(&DeviceHandle);
return;
}
// Add Gain code selection list's items
tempNum = DevFeatures.usNumGain;
if (tempNum > 0)
{
for (i = 0; i < tempNum; i )
{
cmbOverallGain->Items->Add(DevFeatures.glGainList[i].szGainStr);
}
}
///*****************************************************************************
cmbOverallGain->ItemIndex = 1; ///預設值為0(正負10V)
///*****************************************************************************
// Reset Gain code setting
for (i = 0; i <64; i )
usGainIndx[i] = 0;
GainCodeFilling();

// Add analog input start channel items
cmbStartChl->Clear();

ptAIGetConfig.buffer = &Devconfig_AI;
ErrCde = DRV_AIGetConfig(DeviceHandle, &ptAIGetConfig);
if (ChkErr(ErrCde))
{
DRV_DeviceClose(&DeviceHandle);
return;
}
giMaxLogChanNum = GetMaxLogChanNum(&Devconfig_AI,&DevFeatures);

if(Devconfig_AI.ulChanConfig == 1)
tempNum = DevFeatures.usMaxAIDiffChl;
else if(DevFeatures.usMaxAIDiffChl > DevFeatures.usMaxAISiglChl)
tempNum = DevFeatures.usMaxAIDiffChl;
else
tempNum = DevFeatures.usMaxAISiglChl;
if (tempNum > 0)
{
for (i = 0; i < tempNum; i )
{
cmbStartChl->Items->Add(IntToStr(i).c_str());
}
///*****************************************************************************
cmbStartChl->ItemIndex = 0; ///預設CHANNEL為0
///*****************************************************************************
cmbStartChlClick(Sender);
}
// Close device
DRV_DeviceClose(&DeviceHandle);
radOverall->Enabled = true;
butConvert->Enabled = true;
}
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
void __fastcall TFrmInit::cmbStartChlClick(TObject *Sender)
{
int tempNum;
int i;
// Add analog input channel count item
cmbChlCount->Clear();
for (i = 1; i <= giMaxLogChanNum; i )
cmbChlCount->Items->Add(IntToStr(i).c_str());
// Default selection
///*****************************************************************************
cmbChlCount->ItemIndex = 2; ///預設值為0(一組輸出)
///*****************************************************************************
}
//---------------------------------------------------------------------------
void __fastcall TFrmInit::butConvertClick(TObject *Sender)
{ frmDataShow->Message1->Text=" ";
filename=InputBox("檔名","請輸入檔名","") ;
data_ch0="";
data_ch1="";
data_ch2="";
counter=0;
///****
PT_EnableEvent ptEnableEvent;
int i, j;
ulIntCounter = 0; // counter by adInterruptEvent
ulBfChgCounter = 0;
ulOverrunCounter = 0;
gulConvNum = editConv->Text.ToInt();
gdwPacerRate = editPacerRate->Text.ToInt();
guDataType = (USHORT)chkFloatData->Checked;
// 1. Open device
ErrCde = DRV_DeviceOpen(DeviceList[lstDevice->ItemIndex].dwDeviceNum, &DeviceHandle);
if (ChkErr(ErrCde))
return;
ptAIGetConfig.size = sizeof(LPDEVCONFIG_AI);
ptAIGetConfig.buffer = &Devconfig_AI;
ErrCde = DRV_AIGetConfig(DeviceHandle, &ptAIGetConfig);
if (ErrCde != SUCCESS)
{
DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
Application->MessageBox((char *)szErrMsg, "Driver Message", MB_OK);
}
// 2. Set gain list
usStartChan=cmbStartChl->Text.ToInt();
usChanNum= cmbChlCount->Text.ToInt();
int logChan = PhyChanToLogChan(&Devconfig_AI,usStartChan);
for (int i=0 ; i< usChanNum ; i )
{
usGainCode[i] =
DevFeatures.glGainList[usGainIndx[(i logChan) % giMaxLogChanNum]].usGainCde;
}
ptEnableEvent.EventType = ADS_EVT_INTERRUPT |
ADS_EVT_BUFCHANGE |
ADS_EVT_OVERRUN |
ADS_EVT_TERMINATED;
ptEnableEvent.Enabled = giEvtFlag;
giFifoSize = editFifo->Text.ToInt();
if (chkFifo->Checked && giFifoSize > 0)
ptEnableEvent.Count = giFifoSize;
else
ptEnableEvent.Count = 1;
ErrCde = DRV_EnableEvent(DeviceHandle, &ptEnableEvent);
if (ChkErr(ErrCde))
return;
// 3. Start AI interrupt funciton
// 3.1 Fill element of PT_FAIIntScanStart
ptFAIStart.TrigSrc = gwExtTrig; // Ext trig mode li.zhe modify
ptFAIStart.SampleRate = editPacerRate->Text.ToInt();
ptFAIStart.NumChans = cmbChlCount->Text.ToInt();
ptFAIStart.StartChan = cmbStartChl->Text.ToInt();
ptFAIStart.GainList = usGainCode;
ptFAIStart.count = gulConvNum;
ptFAIStart.cyclic = chkCyclic->Checked;
if (giFifoEnable == 1 && giFifoSize > 0)
ptFAIStart.IntrCount = giFifoSize;
else
ptFAIStart.IntrCount = 1;
// Allocate memory
hBuf = GlobalAlloc(GHND, sizeof(USHORT) * gulConvNum);
if(hBuf == 0)
{
strcpy(szErrMsg, "Not enough memory for buffer");
Application->MessageBox(szErrMsg, "Driver Message", MB_OK);
DRV_DeviceClose(&DeviceHandle);
return;
}
ptFAIStart.buffer = (USHORT far *) hBuf;
// allocate data memory
if((hUserBuf=(FLOAT far *)GlobalAlloc(GHND, sizeof(FLOAT) * gulConvNum)) == 0)
{
lstrcpy((char *) szErrMsg, "Not enough memory for buffer");
DRV_DeviceClose((LONG far *)&DeviceHandle);
Application->MessageBox((char *)szErrMsg, "Driver Message", MB_OK);
return;
}
ptFAITransfer.DataBuffer = (FLOAT far *)GlobalLock(hUserBuf);
// 3.2 Call advantech API function DRV_FAIIntScanStart
ErrCde = DRV_FAIIntScanStart(DeviceHandle, &ptFAIStart);
if (ChkErr(ErrCde))
{
ErrCde = DRV_DeviceClose(&DeviceHandle);
GlobalFree(hBuf);
return;
}
if( giEvtFlag )
{
pThread = new CheckThread(false);
gbThreadFlag = true; // set the thread flag
}
// 4. Entering converting form
FrmConvert->txtInt->Text=IntToStr(0);
FrmConvert->txtBuffChange->Text=IntToStr(0);
FrmConvert->Show();
frmDataShow->Show();
frmDataShow->Hide();
FrmInit->Hide();
FrmConvert->prgsDataCounts->Max = editConv->Text.ToInt();
FrmConvert->tmrDataCounts->Enabled = True;
}
//---------------------------------------------------------------------------
void __fastcall TFrmInit::butGainListClick(TObject *Sender)
{
usStartChan=cmbStartChl->Text.ToInt();
usChanNum= cmbChlCount->Text.ToInt();
frmGainList->SetGainList();
frmGainList->Show();
}
//---------------------------------------------------------------------------
void __fastcall TFrmInit::butExitClick(TObject *Sender)
{
GlobalFree(hBuf);
Application->Terminate();
}
//---------------------------------------------------------------------------
void __fastcall TFrmInit::chkEventEnableClick(TObject *Sender)
{
giEvtFlag = chkEventEnable->Checked;
}
//---------------------------------------------------------------------------
void __fastcall TFrmInit::chkFifoClick(TObject *Sender)
{
long lFifoSize;
giFifoEnable = chkFifo->Checked;
if (giFifoEnable == 1)
{
editFifo->Enabled = True;
// Step 1: Device open
ErrCde = DRV_DeviceOpen(DeviceList[lstDevice->ItemIndex].dwDeviceNum, &DeviceHandle);
if (ChkErr(ErrCde))
return;
// Step 2: Get FIFO size
ErrCde = DRV_GetFIFOSize(DeviceHandle, &lFifoSize);
if (ChkErr(ErrCde))
return;
// Step 3: Close device
DRV_DeviceClose (&DeviceHandle);
giFifoSize = lFifoSize / 2; // divide by 2 for conversion from byte to word
editFifo->Text = giFifoSize;
editConv->Text = IntToStr(lFifoSize);
}
else
{
editFifo->Enabled = False;
editFifo->Text = "0";
}
}
//---------------------------------------------------------------------------

bool TFrmInit::CheckEvent()
{
//TODO: Add your source code here
ptCheckEvent.EventType = &usEventType;
if (chkCyclic->Checked )
{
ptCheckEvent.Milliseconds = INFINITE;
}
else
{
ptCheckEvent.Milliseconds = 1000 * (gulConvNum / gdwPacerRate) 2000;
}
if ((ErrCde = DRV_CheckEvent(DeviceHandle,
(LPT_CheckEvent)&ptCheckEvent)) != 0)
{
Application->MessageBox("Check Event Error !","Thread Message",MB_OK);
return false;
}
// Process interrupt event
if (usEventType & ADS_EVT_INTERRUPT)
{
ulIntCounter ;
}
// Process buffer change event
if (usEventType & ADS_EVT_BUFCHANGE)
{
ulBfChgCounter ;
}
// Process overrun event
if (usEventType == ADS_EVT_OVERRUN)
{
ulOverrunCounter ;
}
FrmConvert->txtInt->Text=IntToStr(ulIntCounter);
FrmConvert->txtBuffChange->Text=IntToStr(ulBfChgCounter);
// Process terminate event
if (usEventType & ADS_EVT_TERMINATED)
{
// process terminate event
Terminate();
return false;
}
return true ;

}
void TFrmInit::StopThread()
{
//TODO: Add your source code here
gbThreadFlag = false;
}
void TFrmInit::Terminate()
{
//TODO: Add your source code here
LPVOID temp;
FrmConvert->tmrDataCounts->Enabled = false;
gbThreadFlag = false;
ptFAITransfer.ActiveBuf = 0; // Single buffer
ptFAITransfer.DataType = guDataType;
ptFAITransfer.start = 0;
ptFAITransfer.count = gulConvNum;
ptFAITransfer.overrun = &gwOverrun;
if ((ErrCde = DRV_FAITransfer(DeviceHandle,
(LPT_FAITransfer)&ptFAITransfer)) != 0)
{
DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
GlobalUnlock(hBuf);
GlobalUnlock(hUserBuf);
GlobalFree(hBuf);
GlobalFree(hUserBuf);
DRV_DeviceClose((LONG far *)&DeviceHandle);
Application->MessageBox((char *)szErrMsg, "Driver Message", MB_OK);
return;
}

if ((ErrCde = DRV_FAITerminate(DeviceHandle)) != 0)
{
DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
GlobalUnlock(hBuf);
GlobalUnlock(hUserBuf);
GlobalFree(hBuf);
GlobalFree(hUserBuf);
DRV_DeviceClose((LONG far *)&DeviceHandle);
Application->MessageBox((char *)szErrMsg, "Driver Message", MB_OK);
}

// Display Data
frmDataShow->Show();
frmDataShow->lstData->Clear();
// if (guDataType == 0)
// temp = (USHORT far *)ptFAITransfer.DataBuffer;
// else
temp = (FLOAT far *)ptFAITransfer.DataBuffer;
///*************************************************************
///*************************************************************
//char szbuff[100];
for(ULONG i = 0; i < gulConvNum; i)
{
// if (guDataType == 0)
// sprintf(szbuff,"Buff[%2.2d] = %X",i,((USHORT far *)temp)[i]);
// else
// sprintf(szbuff,"Buff[%2.2d] = .6f",i,((float far *)temp)[i]);

///*****************************************************************************
String Data=((float far *)temp)[i];
String Data1=Data.SubString(1,8);


switch(mod)
{case 0 : {data_ch0= data_ch0 Data1 ",";mod=1; break;}
case 1 : {data_ch1= data_ch1 Data1 ",";mod=2; break;}
case 2 : {data_ch2= data_ch2 Data1 ",";mod=0; break;}
}
if (i==60000)
frmDataShow->Message->Text="33%";
if (i==120000)
frmDataShow->Message->Text="66%";

///*****************************************************************************
}
///**********************************************
TStringList *s1=new TStringList();
s1->Add(data_ch0);
s1->SaveToFile("C:\\bcb\\" filename "_AI0-before-IC1.dat");
delete s1;

TStringList *s2=new TStringList();
s2->Add(data_ch1);
s2->SaveToFile("C:\\bcb\\" filename "_AI1-before-IC14.dat");
delete s2;

TStringList *s3=new TStringList();
s3->Add(data_ch2);
s3->SaveToFile("C:\\bcb\\" filename "_AI2-after.dat");
delete s3;
data_ch0="";
data_ch1="";
data_ch2="";

FrmConvert->Close(); ///取樣值跑完才關掉
frmDataShow->Message->Text="";
frmDataShow->Message1->Text=" OK ";


///*********************************************
///**********************************************
if(pThread!=NULL)
{
pThread->Terminate();
DWORD dwExitCode;
GetExitCodeThread( (void *)pThread->Handle ,&dwExitCode) ;
if(dwExitCode == STILL_ACTIVE )
TerminateThread( (void *)pThread->Handle, dwExitCode);
pThread = NULL;
}
// Free buffer
GlobalUnlock(hBuf);
GlobalUnlock(hUserBuf);
GlobalFree(hBuf);
GlobalFree(hUserBuf);
}

void __fastcall TFrmInit::cmbOverallGainChange(TObject *Sender)
{
GainCodeFilling();
}
//---------------------------------------------------------------------------

void __fastcall TFrmInit::radOverallClick(TObject *Sender)
{
GainCodeFilling();
butGainList->Enabled = False;
cmbOverallGain->Enabled = True;
}
//---------------------------------------------------------------------------
void __fastcall TFrmInit::radGainListClick(TObject *Sender)
{
butGainList->Enabled = True;
cmbOverallGain->Enabled = False;
}
//---------------------------------------------------------------------------
// li.zhe add 2004/11/5
void __fastcall TFrmInit::radExtTrigClick(TObject *Sender)
{
gwExtTrig = 1;
radExtTrig->Checked = true;
radIntTrig->Checked = false;
}
//---------------------------------------------------------------------------
void __fastcall TFrmInit::radIntTrigClick(TObject *Sender)
{
gwExtTrig = 0;
radIntTrig->Checked = true;
radExtTrig->Checked = false;
}
// end li.zhe 2004/11/5
//---------------------------------------------------------------------------
編輯記錄
chabear 重新編輯於 2007-10-08 22:03:01, 註解 無‧
chabear 重新編輯於 2007-10-08 22:05:03, 註解 無‧
chabear 重新編輯於 2007-10-09 12:06:20, 註解 無‧
chabear 重新編輯於 2007-10-09 12:07:23, 註解 多謝提醒~以改正錯別字~T大的方法我去試看看!謝謝!‧
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-10-09 10:10:08 IP:122.124.xxx.xxx 未訂閱
//************************
我想要把那個矩陣直接存成.DAT~
陣列存成.dat可以參考下面連結
http://delphi.ktop.com.tw/board.php?cid=168&fid=913&tid=87768
副檔名換成.dat即可

但是BCB都跟我說隔時不是 string ~
是格式嗎?
發問請注意錯別字以免造成誤會
chabear
一般會員


發表:1
回覆:5
積分:1
註冊:2007-09-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-10-09 12:24:07 IP:140.118.xxx.xxx 訂閱
我的矩陣是float格式~
T大提到的方法~我會遇到BCB錯誤訊息~
cannot convert 'float * ' to 'unsigned char[1]'

但是使用FloatToStr (矩陣)又會遇到BCB錯誤訊息~
cannot convert 'float * ' to 'long double'

再次請教各位朋友!謝感激!

taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-10-09 12:27:33 IP:122.124.xxx.xxx 未訂閱
能否舉例說明你的資料內容是什麼,結果需要的是什麼?
chabear
一般會員


發表:1
回覆:5
積分:1
註冊:2007-09-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-10-09 16:48:05 IP:140.118.xxx.xxx 訂閱

===================引 用 taishyang 文 章===================
能否舉例說明你的資料內容是什麼,結果需要的是什麼?

動機:這是一個研華的AD Converter,我需要用三個類比輸入要同時取值(雖然說是同時,但硬體還是會有前後),
我利用它的多輸入範例,他會跳出一個視窗,並且顯示出他取的值,
比如說我設定 1KHZ 的取樣值,我有三個輸入,需要取 10 秒鐘,所以範例會有 30K 的資料,
然後SHOW值的動作是使用FOR迴圈 只要小於30000就一值SHOW某矩陣的值,
我當初並沒有去仔細看範例程式內容,只是單純把它SHOW出的值一一抓取,並分到三個擋去存,
就像 矩陣[0],[3],[6],[9]...存到data1, 矩陣[1],[4],[7],[10]...存到data2,
矩陣[2],[5],[8],[11]...存到data3,
但是這個FOR迴圈實在跑太久,所以直接想從矩陣存檔,要分開三筆資料以後再用程式去分。
因為這個存檔的動作是在醫院測量病人,所以不能拖太久,麻煩各位朋友幫忙。萬分感謝!!!

taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-10-09 17:36:55 IP:122.124.xxx.xxx 未訂閱
能否把你寫的那段有問題的程式PO上來讓前輩們看看問題在哪邊?
chabear
一般會員


發表:1
回覆:5
積分:1
註冊:2007-09-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-10-09 21:24:47 IP:140.118.xxx.xxx 訂閱

===================引 用 taishyang 文 章===================
能否把你寫的那段有問題的程式PO上來讓前輩們看看問題在哪邊?

我寫的程式碼在原文就有附了~
用這樣的格式PO
///**************************
我寫的程式碼
///**************************
抱歉,不太懂PO規矩,麻煩大家了。
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-10-11 11:16:12 IP:122.124.xxx.xxx 未訂閱
我的意思是,你之前提到
--------------------------------------
我的矩陣是float格式~
T大提到的方法~我會遇到BCB錯誤訊息~
cannot convert 'float * ' to 'unsigned char[1]'

但是使用FloatToStr (矩陣)又會遇到BCB錯誤訊息~
cannot convert 'float * ' to 'long double'
--------------------------------------

要問的是你這段是怎麼寫的? 把這段程式PO出來,
一開始PO的程式太長,而且沒有你的硬體,很難模擬出你的情況
你應該把有問題的部份PO出來就好,並指出哪裏出現問題,這樣問題比較好收斂




chabear
一般會員


發表:1
回覆:5
積分:1
註冊:2007-09-11

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-10-11 18:05:22 IP:140.118.xxx.xxx 訂閱

===================引 用 taishyang 文 章===================
我的意思是,你之前提到
--------------------------------------
我的矩陣是float格式~
T大提到的方法~我會遇到BCB錯誤訊息~
cannot convert 'float * ' to 'unsigned char[1]'

但是使用FloatToStr (矩陣)又會遇到BCB錯誤訊息~
cannot convert 'float * ' to 'long double'
--------------------------------------

要問的是你這段是怎麼寫的? 把這段程式PO出來,
一開始PO的程式太長,而且沒有你的硬體,很難模擬出你的情況
你應該把有問題的部份PO出來就好,並指出哪裏出現問題,這樣問題比較好收斂



我現在把問題統整起來~
範例程式AD CONVERTER 可以把我外部三個輸入轉成一個矩陣~假設矩陣有50K個轉換後的值~
而那些值是用FLOAT的格式存取~
範例是利用一個FOR迴圈 1跑到50K來SHOW值~每次迴圈會將矩陣裡面的FLOAT值指定到一個定義為CHAR的值裡面~
我絕得這個FOR迴圈幕必要SHOW值~但是我不需要~我只需要將所有資料存為一個DAT檔便可。
並且以 矩陣[0],[3],[6],[9]...存到data1, 矩陣[1],[4],[7],[10]...存到data2,
矩陣[2],[5],[8],[11]...存到data3,
這樣的存取方法~

T大所提到的方法~好像矩陣裡面就是字元,所以才能直接存嗎?
因為我將程式碼照貼就是會有
cannot convert 'float * ' to 'unsigned char[1]'
的問題!
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-10-11 18:24:34 IP:122.124.xxx.xxx 未訂閱
始終沒有辦法收斂問題,對不起,我放棄這問題了
chabear
一般會員


發表:1
回覆:5
積分:1
註冊:2007-09-11

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-10-11 19:58:50 IP:140.118.xxx.xxx 訂閱

===================引 用 taishyang 文 章===================
始終沒有辦法收斂問題,對不起,我放棄這問題了

恩~謝謝你了~
其實我本來程式也沒有問題~
只是執行太慢~因為要用程式的地方不允許等待太久~
想找其他方法讓他執行快一點~
系統時間:2024-04-19 11:26:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!