Не могу решить одну проблему,  дело скорей всего в программировании. Ошибка похоже в следующем: переполняется буфер обмена, ошибка (WriteFile) и плата перестает реагировать на команды с пк, а ошибка начинает вылетать после нажатия на любую из команд. Даже ком порт не отключается, приходится вырубать программку через диспетчер задач. после ее повторного запуска она не сразу конектится с ком портом.
Пробывал и входящий и исходящий буфер очищать, ошибка все равно вылезает. Очищаю буфер после получения ответа от платы.
Контроллер питается от бп или аккумулятора в 12В через стабилизатор 5В.
- Код: Выделить всё • Развернуть
 var
  Form1: TForm1;
   str: string;
   speed: string;
implementation
{$R *.dfm}
procedure TForm1.ApplicationEvents1ShortCut(var Msg: TWMKey;
  var Handled: Boolean);
  Var
  q: integer;
begin
  if getasynckeystate(vk_up)<0{(getasynckeystate(17)<0) and (getasynckeystate(38)<0)} then begin
      //Machine.TraverseTop(SpeedFreeMov);   вперед
      speed:=Labelededit1.Text;
      str:='DrvLR='+speed+','+speed;
      str := Str + #13#10;
      Form1.ComPort1.WriteStr(str);
      Memo1.Text := Memo1.Text + Str;
    end;
 if getasynckeystate(vk_down)<0{(getasynckeystate(17)<0) and (getasynckeystate(40)<0)} then begin
     // Machine.TraverseBottom(SpeedFreeMov); назад
     speed:='-'+Labelededit1.Text;
     str:='DrvLR='+speed+','+speed;
     str := Str + #13#10;
     Form1.ComPort1.WriteStr(str);
     Memo1.Text := Memo1.Text + Str;
    end;
    if getasynckeystate(vk_left)<0{(getasynckeystate(17)<0) and (getasynckeystate(40)<0)} then begin
     // Machine.TraverseBottom(SpeedFreeMov); Лево
    speed:=Labelededit1.Text;
 str:='DrvLR=-'+speed+','+speed;
 str := Str + #13#10;
 Form1.ComPort1.WriteStr(str);
 Memo1.Text := Memo1.Text + Str;
    end;
    if getasynckeystate(vk_right)<0{(getasynckeystate(17)<0) and (getasynckeystate(40)<0)} then begin
     // Machine.TraverseBottom(SpeedFreeMov); Право
      speed:=Labelededit1.Text;
 str:='DrvLR='+speed+',-'+speed;
 str := Str + #13#10;
 Form1.ComPort1.WriteStr(str);
 Memo1.Text := Memo1.Text + Str;
    end;
    if getasynckeystate(32)<0{(getasynckeystate(17)<0) and (getasynckeystate(40)<0)} then begin
     // Machine.TraverseBottom(SpeedFreeMov); стоп
     str:='DrvLR=0,0';
Str := Str + #13#10;
ComPort1.WriteStr(str);
    Memo1.Text := Memo1.Text + Str +'...'+Inttostr(q);
end;
end;
procedure TForm1.Button10Click(Sender: TObject); //влево
begin
 speed:=Labelededit1.Text;
 str:='DrvLR=-'+speed+','+speed;
 str := Str +#13#10;
 Form1.ComPort1.WriteStr(str);
 Memo1.Text := Memo1.Text + Str;
 Sleep(100);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.ComPort1.ShowSetupDialog;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if ComPort1.Connected then
    ComPort1.Close
  else
    ComPort1.Open;
end;
procedure TForm1.Button3Click(Sender: TObject);   //версия прошивки
begin
str:='V';
Str := Str + #13#10;
 Form1.ComPort1.WriteStr(str);
 //Memo1.Lines.Add(str);
 //Memo1.Lines.Text:=str;
 Memo1.Text := Memo1.Text + Str;
end;
procedure TForm1.Button4Click(Sender: TObject);    // закрыть
begin
ComPort1.Free;
Form1.ComPort1.Close;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
Memo1.Lines.Clear;
end;
procedure TForm1.Button6Click(Sender: TObject);    // stop
begin
str:='DrvLR=0,0';
Str := Str +#13#10;
 ComPort1.WriteStr(str);
    Memo1.Text := Memo1.Text + Str;
    Sleep(100);
end;
procedure TForm1.Button7Click(Sender: TObject);    //вперед
begin
 speed:=Labelededit1.Text;
 str:='DrvLR='+speed+','+speed;
 str := Str +#13#10;
 Form1.ComPort1.WriteStr(str);
 Memo1.Text := Memo1.Text + Str;
 Sleep(100);
end;
procedure TForm1.Button8Click(Sender: TObject);       //назад
begin
 speed:='-'+Labelededit1.Text;
 str:='DrvLR='+speed+','+speed;
 str := Str +#13#10;
 Form1.ComPort1.WriteStr(str);
 Memo1.Text := Memo1.Text + Str;
 Sleep(100);
end;
procedure TForm1.Button9Click(Sender: TObject);    //вправо
begin
  speed:=Labelededit1.Text;
 str:='DrvLR='+speed+',-'+speed;
 str := Str +#13#10;
 Form1.ComPort1.WriteStr(str);
 Memo1.Text := Memo1.Text + Str;
 Sleep(100);
end;
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
begin
  ComPort1.ReadStr(Str, count);
  Memo1.Lines.Add(str);
  //PurgeComm(ComPort1.Handle, PURGE_TXABORT or PURGE_RXABORT or PURGE_TXCLEAR or PURGE_RXCLEAR);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);  // закрыть
begin
 Form1.ComPort1.Close;
end;
end.