roboforum.ru

Технический форум по робототехнике.

Терминал Help !!

Re: Терминал Help !!

Korbofos » 18 авг 2011, 14:46

Вот оно
Код: Выделить всёРазвернуть
#include <vcl.h>
#include <windows.h>
#include <stdio.h>
#pragma hdrstop

#include "Unit1.h"
unsigned char tx_buffer[3];
unsigned char rx_buffer[3];
unsigned char status_rx_buffer;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void Open_Port (char name)
{
char port_name[8];
sprintf(port_name, "COM%d", name);
hCom = CreateFile(port_name ,GENERIC_READ | GENERIC_WRITE,0,NULL,
OPEN_EXISTING,0, NULL);
if( hCom == INVALID_HANDLE_VALUE )
{
ShowMessage("Com port error");
CloseHandle(hCom);
}
else
{
SetupComm(hCom,128,128);
GetCommState(hCom, &dcb);
dcb.fOutxCtsFlow = FALSE;
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.fInX = FALSE;
dcb.fOutX = FALSE;

dcb.BaudRate = CBR_9600;
dcb.fBinary = TRUE;
dcb.fAbortOnError = FALSE;
dcb.fNull = FALSE;
dcb.ByteSize = 8;
dcb.fParity = NOPARITY;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
if (!SetCommState(hCom, &dcb))
{
CloseHandle(hCom);
ShowMessage("Com port error");
}

comm_timeouts.ReadIntervalTimeout = 5000;
comm_timeouts.ReadTotalTimeoutMultiplier = 5000;
comm_timeouts.ReadTotalTimeoutConstant = 5000;
comm_timeouts.WriteTotalTimeoutMultiplier = 5000;
comm_timeouts.WriteTotalTimeoutConstant =5000;
SetCommTimeouts(hCom, &comm_timeouts);

PurgeComm(hCom, PURGE_RXCLEAR);
PurgeComm(hCom, PURGE_TXCLEAR);
}
}
//--------------------------------------------------------------------------
void Close_Port(void)
{
CloseHandle(hCom);
}
//----------------------------------------------------------------------------

char Write_Port (unsigned char *buf, size_t raz)
{
DWORD dwWritten;
WriteFile(hCom,buf,raz,&dwWritten,NULL);
if(raz==dwWritten)
{return 1;}
else
{return 0;}
}

//-----------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (ComboBox1->ItemIndex==0)
{
ShowMessage("Select COM Port");
return;
}
else
{
Open_Port(ComboBox1->ItemIndex);
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
Close_Port();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
if (!hCom)
{
ShowMessage("First COM port connect");
return;
}
tx_buffer[0]=1;
tx_buffer[1]=3;
tx_buffer[2]=150;

if(Write_Port(tx_buffer,3)==false)
{ShowMessage("error write_port");}

}
Последний раз редактировалось Vooon 18 авг 2011, 18:04, всего редактировалось 1 раз.
Причина: [code=cpp]

Re: Терминал Help !!

dccharacter » 18 авг 2011, 15:31

Слуш, пихай целый буффер без всяких циклов и ищи проблему в терминале/протеусе. Как вариант попробуй сделать любой порт (например, блютуфный), и сериал-сниффером посмотреть что там улетает в порт у тебя. Либо протестируй настройки протеуса с каким-нибудь софтом заведомо рабочим, типа настрой puTTy на 9600 и проверь - работает ли.

Re: Терминал Help !!

Korbofos » 23 авг 2011, 19:33

Спасибо dccharacter!
Подцепил к теминалу монитор ком порта и определил что врёт протез!
Терминал по тихоньку оживает. :)
Вложения
2.JPG

Re: Терминал Help !!

dccharacter » 25 авг 2011, 15:17

А еще, посмотрев на скриншот, хочу порекомендовать взять orfa-terminal, поставить себе QT и переться - там уже все сделано.

Re: Терминал Help !!

Korbofos » 25 авг 2011, 18:47

Так не итересно)
Это пока только рулёжка,а потом туда автоматический режим приделаю.
Тем более, что в контроллере прошивка своя стоит дружить не будет. :pardon:

Re: Терминал Help !!

dccharacter » 26 авг 2011, 19:40

у меня тоже свой протокол - я допиливал орфу под работу с ТСП/ИП, менял свой протокол... В общем я на ней научился немножко работать с QT, серийным портом, ТСП и т.д. - правда в режиме почти процедурного программирования, но скоро перейду на нрмальный ООП :-) Короче, хороший старт... Спасибо ребятам.

Re: Терминал Help !!

Dmitry__ » 26 авг 2011, 23:09

dccharacter писал(а):почти процедурного программирования, но скоро перейду на нрмальный ООП

спасиба, поржал :D

Re: Терминал Help !!

dccharacter » 27 авг 2011, 02:08

Не, ну а че, читаем пока... Наследование, фигедование.

Пока моих убогих скилов хватает только на это:
Вложения
terminal.jpg

Re: Терминал Help !!

Grem » 27 авг 2011, 11:53

Dmitry__ писал(а):
dccharacter писал(а):почти процедурного программирования, но скоро перейду на нрмальный ООП

спасиба, поржал :D

На самом деле это не смешно, и ведь каждый, кто умеет нарисовать форму в дизайнере и дописать события - считает себя мега программистом :crazy:

Re: Терминал Help !!

dccharacter » 29 авг 2011, 10:49

Че прилезли? Я ж написал - "хороший старт". У меня иллюзий нет, так что отлезьте :no:

Re: Терминал Help !!

=DeaD= » 29 авг 2011, 10:53

Grem писал(а):На самом деле это не смешно, и ведь каждый, кто умеет нарисовать форму в дизайнере и дописать события - считает себя мега программистом :crazy:

Угу, можно еще обсудить сколько людей из считающих себя программистами понимает в таких вещах, как вычислительная сложность алгоритмов и т.п. :) тут то и выяснится, что реальных программистов вообще мало :crazy:

Re: Терминал Help !!

Korbofos » 29 авг 2011, 13:05

Я начал изучать программирование для роботостроения, роботомучения :)

Re: Терминал Help !!

Korbofos » 08 ноя 2011, 08:20

Меня тут сомнения терзают. Как лучше сделать работу радара(servo + sharp)?
Сейчас сделал так: Терминал кидает на контроллер: в какое положение выставить серву с дальномером. МК отвечает положение сервы и показания дальномера. Может лучше запускать функцию на мк двигать серву с дальномером каждые 40 милисекунд на несколько градусов и отправлять на данные ПК? Так сказать для экономии трафика!

Re: Терминал Help !!

=DeaD= » 08 ноя 2011, 09:11

Korbofos писал(а):Так не итересно)

И вот так уже скоро 10 лет и практически каждый. Итого все топчутся на месте :cry:

Добавлено спустя 59 секунд:
Korbofos писал(а):Может лучше запускать функцию на мк двигать серву с дальномером каждые 40 милисекунд на несколько градусов и отправлять на данные ПК? Так сказать для экономии трафика!

А его реально надо экономить уже, не пролезаете по трафику? :)

Re: Терминал Help !!

Korbofos » 08 ноя 2011, 10:34

=DeaD= писал(а):И вот так уже скоро 10 лет и практически каждый. Итого все топчутся на месте

Согласен с вами.
Но что бы с чего-то готового начать, надо хоть немного разбираться в этом. А я "пришёл сюда" к сожалению нечего не понимал в программировании. Ну вот и разминаюсь так сказать :)

=DeaD= писал(а):А его реально надо экономить уже, не пролезаете по трафику?

Иногда где-то минут через пять работы. Мк начинает отправлять символы не в правильной последовательности,
думаю не успевает что-ли? А так пусть шлёт данные в своём темпе ну и входящего трафика не нужно.


Rambler\'s Top100 Mail.ru counter