通讯时的指示灯显示
上位机接收到数据,
比如说: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连起来
请教怎么连接数据,还有报错是什么原因,谢谢
[解决办法]
EDBEngineError ...数据库操作错误么
[解决办法]
你这个里面没有State1=Data[5]这句话啊
[解决办法]
你会不会出现互斥问题了
在给State1赋值时把定时器暂停下试试
Timer1->Disable
State1=Data[5]
Timer1->Enable
另外你说灯的颜色没变,那你试试家个Refresh试试呢,是不是没刷新哦
[解决办法]
可能为线程问题吧。如果你不知道线程具体的加锁方式时,
假设你的公共数据为 setparameeprom 的话,当你需要数据库操作这类比较耗时的动作时,可以考虑先快速做一份拷贝,然后再读这份拷贝的数据,以避免锁的影响。因为有多个数据,当然最好是加锁再读,才能保障一致性。