通讯时的指示灯显示

zhoolong 2012-10-08 10:26:24
上位机接收到数据,
比如说:AA 55 00 00 ff 00 00 ff 00 00,共10个数据,
AA为Data[1],依次则最后一个数据为Data[10],
如果第五个数据Data[5]和第八个数据Data[8]我想用指示灯显示,Data[5]为State1,Data[8]为State2,
当我在TTimer1中用语句State1=Data[5]时,
会提示:
Project Project1.exe raised exception class EDBEngineError with message 'Invalid use of keyword.,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,Line Number:1'.Process stopped. Use Step or Run to continue。

如果没有语句State1=Data[5]时,接收数据正常,但指示灯没反应,然后我单独试了一下,
State1:

static int onoff=0;
Shape1->Brush->Color=clRed;
Shape2->Brush->Color=clRed;
Shape3->Brush->Color=clRed;
Shape4->Brush->Color=clRed;
Shape5->Brush->Color=clRed;
Shape6->Brush->Color=clRed;
Shape7->Brush->Color=clRed;
Shape8->Brush->Color=clRed;

Shape1-Shape8都是红色的,
我判断是接收的数据Data[5]没有跟State1连起来

请教怎么连接数据,还有报错是什么原因,谢谢
...全文
301 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhoolong 2012-10-10
  • 打赏
  • 举报
回复
谢谢,已解决
ccrun.com 2012-10-09
  • 打赏
  • 举报
回复
你的代码中什么地方涉及到数据库操作了?
勉励前行 2012-10-09
  • 打赏
  • 举报
回复
可能为线程问题吧。如果你不知道线程具体的加锁方式时,
假设你的公共数据为 setparameeprom 的话,当你需要数据库操作这类比较耗时的动作时,可以考虑先快速做一份拷贝,然后再读这份拷贝的数据,以避免锁的影响。因为有多个数据,当然最好是加锁再读,才能保障一致性。
njquzhan2010 2012-10-09
  • 打赏
  • 举报
回复
你会不会出现互斥问题了
在给State1赋值时把定时器暂停下试试
Timer1->Disable
State1=Data[5]
Timer1->Enable
另外你说灯的颜色没变,那你试试家个Refresh试试呢,是不是没刷新哦
缘中人 2012-10-09
  • 打赏
  • 举报
回复
你这个里面没有State1=Data[5]这句话啊
zhoolong 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

[/Quote]

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
static int onoff=0;

if(onoff==1)onoff=0;
else onoff=1;

if(onoff==1)//flash
{
if(setparameeprom.state1 & 0x01)Shape1->Brush->Color=clRed;
else Shape1->Brush->Color=clGreen;
if(setparameeprom.state1 & 0x02)Shape2->Brush->Color=clRed;
else Shape2->Brush->Color=clGreen;
if(setparameeprom.state1 & 0x04)Shape3->Brush->Color=clRed;
else Shape3->Brush->Color=clGreen;
if(setparameeprom.state1 & 0x08)Shape4->Brush->Color=clRed;
else Shape4->Brush->Color=clGreen;
if(setparameeprom.state1 & 0x10)Shape5->Brush->Color=clRed;
else Shape5->Brush->Color=clGreen;
if(setparameeprom.state1 & 0x20)Shape6->Brush->Color=clRed;
else Shape6->Brush->Color=clGreen;
if(setparameeprom.state1 & 0x40)Shape7->Brush->Color=clRed;
else Shape7->Brush->Color=clGreen;
if(setparameeprom.state1 & 0x80)Shape8->Brush->Color=clRed;
else Shape8->Brush->Color=clGreen;
}
else //close
{
if(Shape1->Brush->Color==clRed)Shape1->Brush->Color=clBlack;
if(Shape2->Brush->Color==clRed)Shape2->Brush->Color=clBlack;
if(Shape3->Brush->Color==clRed)Shape3->Brush->Color=clBlack;
if(Shape4->Brush->Color==clRed)Shape4->Brush->Color=clBlack;
if(Shape5->Brush->Color==clRed)Shape5->Brush->Color=clBlack;
if(Shape6->Brush->Color==clRed)Shape6->Brush->Color=clBlack;
if(Shape7->Brush->Color==clRed)Shape7->Brush->Color=clBlack;
if(Shape8->Brush->Color==clRed)Shape8->Brush->Color=clBlack;
}
}
dfdscx 2012-10-09
  • 打赏
  • 举报
回复
EDBEngineError ...数据库操作错误么
zhoolong 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

你这个里面没有State1=Data[5]这句话啊
[/Quote]


加了之后没问题,接收数据的时候就会报问题里的错误了,不过好像跟这个没什么关联,但是的确是加了这句以后才报错的,但是不加好像又不行
zhoolong 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]


[/Quote]



unsigned char last_state1;
AnsiString aa;

if(last_state1 != setparameeprom.state1 || last_state2 != setparameeprom.state2)
{
Query3->Close();
Query3->SQL->Clear();

aa="insert into alarmrecord (s10,s11,s12,s13,s14,s15,s16,s17,alarmtime) values("; //表格

if(setparameeprom.state1 & (1<<0))aa+=",1";
else aa+=",0";
if(setparameeprom.state1 & (1<<1))aa+=",1";
else aa+=",0";
if(setparameeprom.state1 & (1<<2))aa+=",1";
else aa+=",0";
if(setparameeprom.state1 & (1<<3))aa+=",1";
else aa+=",0";
if(setparameeprom.state1 & (1<<4))aa+=",1";
else aa+=",0";
if(setparameeprom.state1 & (1<<5))aa+=",1";
else aa+=",0";
if(setparameeprom.state1 & (1<<6))aa+=",1";
else aa+=",0";
if(setparameeprom.state1 & (1<<7))aa+=",1";
else aa+=",0";

Query3->SQL->Add(aa);
Query3->ExecSQL();

Query1->Close();
Query1->Open();
last_state1 = setparameeprom.state1;
last_state2 = setparameeprom.state2;
last_state3 = setparameeprom.state3;
last_state4 = setparameeprom.state4;
last_state5 = setparameeprom.state5;
last_state6 = setparameeprom.state6;
last_state7 = setparameeprom.state7;
last_state8 = setparameeprom.state8;
last_state9 = setparameeprom.state9;

}
Kanson 2012-10-08
  • 打赏
  • 举报
回复
都定义成byte型的试试
缘中人 2012-10-08
  • 打赏
  • 举报
回复
State1和Data[5]是怎么定义的,什么类型
ccrun.com 2012-10-08
  • 打赏
  • 举报
回复
把定时器执行的函数代码贴出来。
zhoolong 2012-10-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

State1和Data[5]是怎么定义的,什么类型
[/Quote]

unsigned char State1;
unsigned char Data[40];

Data[]是用来存放接收的数据;

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧