線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:6471
推到 Plurk!
推到 Facebook!

Rs232錯誤

尚未結案
b09101015
一般會員


發表:4
回覆:11
積分:3
註冊:2011-01-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-01-21 16:48:29 IP:114.33.xxx.xxx 訂閱
我現在使用BCB然後加上SPCOMM元件抓取RS232的資料
但是再接收數次後 就會跳出附檔的訊息
請問各位 這個有可能是什麼情況
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-01-21 17:28:49 IP:210.64.xxx.xxx 訂閱
指標指向錯誤的記憶體位置。一般是…
1/ 沒有配置記憶體就使用,即沒有new…
2/ 被指向的地方已被釋放,但你還是去存取
總之,應該不會是spcomm的問題,而是你自己的實作部份,關於指標、初始化,配置等有問題。
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
b09101015
一般會員


發表:4
回覆:11
積分:3
註冊:2011-01-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-01-21 17:35:54 IP:114.33.xxx.xxx 訂閱
她顯示 是在ch = fgetc(setting);
這行會停住
當我傳送了十次左右的DATA就會跳出剛剛的訊息
是我這邊寫錯了嗎?
麻煩您幫我看一下 謝謝
[code cpp]
void __fastcall TForm1::CheckBox5Click(TObject *Sender)
{
if(CheckBox5->Checked == true && Edit_ID->Text.Length() == 10)
{
int i;
char ch,countx;
sprintf(filename, "measure_data\\%s_measure.txt", Edit_ID->Text);
FILE *setting = fopen(filename,"r");
i = 0;
countx = 0;
String ss = "" ;
ch = 0;
float aa[100][1];
do{
ch = fgetc(setting);
if(ch == ',' || ch == '_' || ch == '/' || ch == 0x0D || ch == '\n')
i ;
switch(i)
{
case 6:
if(ch != ',')
{
ss = ch;
// weight
}
break;
case 7:
if(ch == ',')
{
/* Weight */
aa[countx][0]=StrToFloat(ss);//AnsiString(ss);
if(CheckBox5->Checked == true)
Series10->AddY(aa[countx][0]);
countx ;
ss = "";
}
break;
default:
break;
}
if(i == 14)
i = 0;
}while(ch != EOF);
}
else
Series10->Clear();
}
[/code]
編輯記錄
b09101015 重新編輯於 2011-01-21 02:36:47, 註解 無‧
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-01-21 17:59:42 IP:210.64.xxx.xxx 訂閱
大致粗略看一下,建議先調整如下:

StrToFloat 改成 StrToFloatDef(ss,0)

ss = ch; 改成 ss = AnsiString(ch) --> 很重要,不要以為這樣寫很癈物,因為可能會有意想不到的情形…說來話太長,照做就是。

float aa[100][1]; 改成; float aa[100][1] = {0};

StrToFloatDef(ss,0) 前面 請加入 if (countx > 100) ShowMessage("Out of boundary") // 查看是否有出界的情形。
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2011-01-21 03:00:47, 註解 無‧
b09101015
一般會員


發表:4
回覆:11
積分:3
註冊:2011-01-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2011-01-24 10:11:29 IP:114.33.xxx.xxx 訂閱
   謝謝您的指導~前面的已經沒有再跳出錯誤
可是他現在出現一樣的訊息 只是改出現在下面紅色那行
我真的找不太到問題耶@@


FILE *output; // 用來指向一個輸出的位置
sprintf(filename, "patient_data\\%s_patient.txt", Edit_ID->Text);
output=fopen(filename,"w"); // 第1個參數是檔名, 第2個參數是開啟檔案的模式, w代write, t代text
fprintf( output, "%s,%s\n",Edit_name->Text,Edit_patient->Text );
while(0 == fclose(output));
sprintf(filename, "measure_data\\%s_measure.txt", Edit_ID->Text);
output=fopen(filename,"a"); // 第1個參數是檔名, 第2個參數是開啟檔案的模式, w代write, t代text
fprintf( output, "%s_%s\n",Label_date->Caption,buf);
while(0 == fclose(output));
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2011-01-24 11:24:57 IP:210.64.xxx.xxx 訂閱
sprintf(filename, "patient_data\\%s_patient.txt", .c_str() );


注意 sprintf 與fprintf 中的 s% 是要你輸入 char* 而非 AnsiString,所以都要轉一下。

===================引 用 b09101015 文 章===================
謝謝您的指導~前面的已經沒有再跳出錯誤
可是他現在出現一樣的訊息 只是改出現在下面紅色那行
我真的找不太到問題耶@@


FILE *output; // 用來指向一個輸出的位置
sprintf(filename, "patient_data\\%s_patient.txt", Edit_ID->Text);
output=fopen(filename,"w"); // 第1個參數是檔名, 第2個參數是開啟檔案的模式, w代write, t代text
fprintf( output, "%s,%s\n",Edit_name->Text,Edit_patient->Text );
while(0 == fclose(output));
sprintf(filename, "measure_data\\%s_measure.txt", Edit_ID->Text);
output=fopen(filename,"a"); // 第1個參數是檔名, 第2個參數是開啟檔案的模式, w代write, t代text
fprintf( output, "%s_%s\n",Label_date->Caption,buf);
while(0 == fclose(output));
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
b09101015
一般會員


發表:4
回覆:11
積分:3
註冊:2011-01-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2011-01-24 12:03:39 IP:114.33.xxx.xxx 訂閱
這次又停在
fprintf( output, "%s_%s\n",Label_date->Caption,buf);
加上
Label_date->Caption.c_str()

也是一樣會停在這邊
麻煩幫我看一下了 謝謝



[code cpp]
sprintf(filename, "measure_data\\%s_measure.txt", Edit_ID->Text.c_str());
output=fopen(filename,"at"); // 第1個參數是檔名, 第2個參數是開啟檔案的模式, w代write, t代text
fprintf( output, "%s_%s\n",Label_date->Caption,buf);
while(0 == fclose(output));
[/code]
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#8 引用回覆 回覆 發表時間:2011-01-24 12:16:19 IP:210.64.xxx.xxx 訂閱
1/ 一定要Label_date->Caption.c_str()
2/ 關鍵點 你的 buf 是什麼型別? 沒看到宣告


===================引 用 b09101015 文 章===================
這次又停在
fprintf( output, "%s_%s\n",Label_date->Caption,buf);
加上
Label_date->Caption.c_str()

也是一樣會停在這邊
麻煩幫我看一下了 謝謝



[code cpp]
sprintf(filename, "measure_data\\%s_measure.txt", Edit_ID->Text.c_str());
output=fopen(filename,"at"); // 第1個參數是檔名, 第2個參數是開啟檔案的模式, w代write, t代text
fprintf( output, "%s_%s\n",Label_date->Caption,buf);
while(0 == fclose(output));
[/code]
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
b09101015
一般會員


發表:4
回覆:11
積分:3
註冊:2011-01-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2011-01-25 09:09:43 IP:114.33.xxx.xxx 訂閱
麻煩大家幫忙一下了

我一直出現問題在

fprintf( output, "%s_%s\n",Label_date->Caption.c_str(),buf);

這一段

第12行那邊

可以麻煩大家幫我看看嗎 謝謝

[code cpp]
//Edit_ID->Text = 123;
unsigned char i,common[12];
double f=0.0,weight=0.0,Fat=0.0,Fatmass=0.0,FFM=0.0;
double TBW=0.0,BMI=0.0;
unsigned char body=0,sex=0,height=0,age=0;
unsigned char index=0,index1=0;
long int a=0,impedance=0,BMR=0;
char *buf=(char*)Buffer;
char filename[80];
sprintf(filename, "measure_data\\%s_measure.txt", Edit_ID->Text.c_str());
FILE *output=fopen(filename,"a "); // 第1個參數是檔名, 第2個參數是開啟檔案的模式, w代write, t代text
fprintf( output, "%s_%s\n",Label_date->Caption.c_str(),buf);
while(0 == fclose(output));
//String x;
a = 0;
for(i=0;i<255;i )
{
if(buf[i] == 0x0A)
{
buf[i] = 0x00;
}
if(buf[i] == 0x0D)
{
buf[i] = '/';
}
if(buf[i] == 0x2C || buf[i] == 0x5C || buf[i] == '/')
{
common[a] = i;
a ;
}
}

/* 體型 */
body = StrToInt(buf[0]);
if(body) //Athletic
{
//BodyGroup->ItemIndex = 1;
Image_Body_normal->Visible = false;
Image_Body_Ath->Visible = true;
}
else //normal
{
//BodyGroup->ItemIndex = 0;
Image_Body_normal->Visible = true;
Image_Body_Ath->Visible = false;
}

/* 性別 */
sex = StrToInt(buf[2]);
if(sex) //man
{
Image_Sex_Woman->Visible = false;
Image_Sex_Man->Visible = true;
}
else //female
{
//SexGroup->ItemIndex = 1;
Image_Sex_Woman->Visible = true;
Image_Sex_Man->Visible = false;
}

/* 身高 */
index = common[1];
index1 = common[2];
a = 100;
height = 0;
for(i = index 1 ; i {
height = a*StrToInt(buf[i]);
a = a/10;
}
Edit_height->Text = height;

/* 體重 */
index = common[2];
index1 = common[3];
weight = 0.0;
if((index1-index) == 6)
f = 100.0;
else
f = 10.0;
for(i = index 1 ; i {
if(i != (index1-2))
{
weight = f*StrToInt(buf[i]);
f = f/10.0;
}
}
Edit_weight->Text = FloatToStrF( weight , ffFixed , 7 , 1 );
Series1->AddY(weight);

/* 阻抗 */
index = common[3];
index1 = common[4];
impedance = 0.0;
if((index1-index) == 4)
a = 100;
else if((index1-index) == 5)
a = 1000;
else
a = 10;
for(i = index 1 ; i {
impedance = a*StrToInt(buf[i]);
a = a/10;
}
Edit_imp->Text = impedance;
Series2->AddY(impedance);

/* 體脂肪率 */
index = common[4];
index1 = common[5];
Fat = 0.0;
if((index1-index) == 4)
f = 1.0;
else
f = 10.0;
for(i = index 1 ; i {
if(i != (index1-2))
{
Fat = f*StrToInt(buf[i]);
f = f/10.0;
}
}
Edit_Fat->Text = FloatToStrF( Fat , ffFixed , 7 , 1 );
Series10->AddY(Fat);

/* 體脂肪體積 */
index = common[5];
index1 = common[6];
Fatmass = 0.0;
if((index1-index) == 4)
f = 1.0;
else
f = 10.0;
for(i = index 1 ; i {
if(i != (index1-2))
{
Fatmass = f*StrToInt(buf[i]);
f = f/10.0;
}
}
Edit_Fatmass->Text = FloatToStrF( Fatmass , ffFixed , 7 , 1 );
Series6->AddY(Fatmass);

/* FFM */
index = common[6];
index1 = common[7];
FFM = 0.0;
if((index1-index) == 4)
f = 1.0;
else
f = 10.0;
for(i = index 1 ; i {
if(i != (index1-2))
{
FFM = f*StrToInt(buf[i]);
f = f/10.0;
}
}
Edit_FFM->Text = FloatToStrF( FFM , ffFixed , 7 , 1 );
Series7->AddY(FFM);

/* TBW */
index = common[7];
index1 = common[8];
TBW = 0.0;
if((index1-index) == 4)
f = 1.0;
else
f = 10.0;
for(i = index 1 ; i {
if(i != (index1-2))
{
TBW = f*StrToInt(buf[i]);
f = f/10.0;
}
}
Edit_TBW->Text = FloatToStrF( TBW , ffFixed , 7 , 1 );
Series8->AddY(TBW);

/* 年齡 */
index = common[8];
index1 = common[9];
age = 0;
if((index1-index) == 3)
a = 10;
else
a = 1;
for(i = index 1 ; i {
age = a*StrToInt(buf[i]);
a = a/10;
}
Edit_age->Text = age;

/* BMI */
index = common[9];
index1 = common[10];
BMI = 0.0;
if((index1-index) == 4)
f = 1.0;
else
f = 10.0;
for(i = index 1 ; i {
if(i != (index1-2))
{
BMI = f*StrToInt(buf[i]);
f = f/10.0;
}
}
Edit_BMI->Text = FloatToStrF( BMI , ffFixed , 7 , 1 );
Series9->AddY(BMI);

/* BMR */
index = common[10];
index1 = common[11];
//Edit3->Text
BMR = 0;
if((index1-index) == 4)
a = 100;
else if((index1-index) == 5)
a = 1000;
else
a = 10;
for(i = index 1 ; i {
BMR = a*StrToInt(buf[i]);
a = a/10;
}

Edit_BMR->Text = BMR;
Series4->AddY(BMR);

AnsiString temp;
//sprintf(dd, "%s.txt", Edit_ID->Text.c_str());
temp = AnsiString(Label_date->Caption.c_str());
temp = "_";
temp = AnsiString(buf);
//Memo1->Lines->Add(Label_date->Caption);
//Memo1->Lines->Add(" ");
//Memo1->Lines->Text = buf;
Memo1->Lines->Add(temp);
while(Memo1->Lines->Count >= StrToInt(Edit4->Text) 1)
{
//Edit_age->Text = "123";
Memo1->Lines->Delete(0);
LineOver = 1;
//Memo1->Lines->LoadFromFile(filename);
}

//FILE *output; // 用來指向一個輸出的位置
if(ID_change || Start)
{
Start = 0;
ID_change = 0;
sprintf(filename, "patient_data\\%s_patient.txt", Edit_ID->Text.c_str());
output=fopen(filename,"wt"); // 第1個參數是檔名, 第2個參數是開啟檔案的模式, w代write, t代text
fprintf( output, "%s,%s\n",Edit_name->Text,Edit_patient->Text.c_str() );
while(0 == fclose(output));
}


if(LineOver)
{
sprintf(filename, "measure_data\\%s_measure.txt", Edit_ID->Text.c_str());
output=fopen(filename,"wt"); // 第1個參數是檔名, 第2個參數是開啟檔案的模式, w代write, t代text
for(i=0;iLines->Count;i )
{
fprintf( output, "",Memo1->Lines->Strings[i].c_str());
}
while(0 == fclose(output));
output=fopen(filename,"a "); // 第1個參數是檔名, 第2個參數是開啟檔案的模式, w代write, t代text
for(i=0;iLines->Count;i )
{
fprintf( output, "%s\n",Memo1->Lines->Strings[i].c_str() );
}
while(0 == fclose(output));
Memo1->Lines->LoadFromFile(filename);
LineOver = 0;
}

Timer2->Enabled = false;
Timer2->Enabled = true;
if(CheckBox1->Checked == false)
Series1->Clear();
else
{
CheckBox1->Checked = false;
CheckBox1->Checked = true;
}
if(CheckBox2->Checked == false)
Series2->Clear();
else
{
CheckBox2->Checked = false;
CheckBox2->Checked = true;
}
if(CheckBox3->Checked == false)
Series9->Clear();
else
{
CheckBox3->Checked = false;
CheckBox3->Checked = true;
}
if(CheckBox4->Checked == false)
Series4->Clear();
else
{
CheckBox4->Checked = false;
CheckBox4->Checked = true;
}
if(CheckBox5->Checked == false)
Series10->Clear();
else
{
CheckBox5->Checked = false;
CheckBox5->Checked = true;
}
if(CheckBox6->Checked == false)
Series6->Clear();
else
{
CheckBox6->Checked = false;
CheckBox6->Checked = true;
}
if(CheckBox7->Checked == false)
Series7->Clear();
else
{
CheckBox7->Checked = false;
CheckBox7->Checked = true;
}
if(CheckBox8->Checked == false)
Series8->Clear();
else
{
CheckBox8->Checked = false;
CheckBox8->Checked = true;
}
if(close)
{Close();}
}
[/code]
編輯記錄
b09101015 重新編輯於 2011-01-25 19:29:27, 註解 無‧
系統時間:2024-04-26 10:55:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!