Я сделал интерфейсное программное обеспечение, используя Delphi 7 для извлечения данных из arduino. У Arduino есть 3 датчика. Arduino отправит 16 символов для значения датчика. Пример:String Operation so Slow
m 0 0 . 0 1 0 0 . 0 2 0 0 . 0 3
[1][2][3][4][5][6][7][8][9][10][11][12][13][14][15][16]
[1] Flag for Start value
[2],[7],[12] are sensors status (0=disconnected, 1=connected)
[3][4][5][6] first sensor value
[8][9][10][11] second sensor value
[13][14][15][16] third sensor value
Я назначаю строковое значение из arduino в editText с названием Edit1. После этого я использую строку «Копировать», чтобы получить значение датчика по одному. Затем значение датчика будет отображаться по одному на этикетке. Но ярлык требует много времени, чтобы изменить значение. В первый раз, я думаю, это вызвало ярлык, который замедляется при обновлении. Затем я меняю ярлык с помощью editText, но работаю одинаково (для обновления значения требуется много времени). Так есть способ сделать это быстрее? или что-то не так со строкой?
Это мой код:
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
Str,Buffer,Rstatus,Sstatus,Tstatus: String;
arus : real;
i : integer;
begin
DecimalSeparator:='.';
ComPort1.ReadStr(Str, 1);
begin
Buffer:=Buffer + Str;
Edit1.Text:=Edit1.Text+Str;
if Str='m' then
edit1.Text:='';
if Length(Edit1.Text) >=15 then
begin
Rstatus:=copy(Edit1.Text,1,1);
Sstatus:=copy(Edit1.Text,6,1);
Tstatus:=copy(Edit1.Text,11,1);
if Rstatus='0' then
begin
Label1.Caption:='0 A';
Label1.Update
end
else
begin
Label1.Caption:=copy(Edit1.Text,2,4)+' A';
Label1.Update
end;
if Sstatus='0' then
begin
Label2.Caption:='0 A';
Label2.Update
end
else
begin
Label2.Caption:=copy(Edit1.Text,7,4)+' A';
Label2.Update;
end;
if Tstatus='0' then
begin
Label3.Caption:='0 A';
Label3.Update
end
else
begin
Label3.Caption:=copy(Edit1.Text,12,4)+' A';
Label3.Update;
end;
end;
end;
end;
Код в вопросе, который работает со строками, может быть несколько улучшен, я уверен. Тем не менее, несмотря на это, он все равно будет выполняться в минимальные промежутки времени, конечно, быстрее, чем вы сможете обнаружить. Поэтому я предполагаю, что фактическая задержка находится в сообщениях. Если вы не согласны, пожалуйста, покажите свои тайминги, которые доказывают, что манипуляция строкой является узким местом. –
Очевидными способами улучшения кода являются использование символа 'char', а не строки для значений одного символа. И использовать индексный оператор '[]', а не 'Copy' при извлечении одиночных значений. Кроме того, вы не инициализируете «Буфер». –
Я так быстро наблюдал за изменением Edit1. Но не с надписью «Надписи». – izzuddin