Не могу решить одну проблему, дело скорей всего в программировании. Ошибка похоже в следующем: переполняется буфер обмена, ошибка (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.