Технический форум по робототехнике.
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]
dccharacter » 18 авг 2011, 15:31
Слуш, пихай целый буффер без всяких циклов и ищи проблему в терминале/протеусе. Как вариант попробуй сделать любой порт (например, блютуфный), и сериал-сниффером посмотреть что там улетает в порт у тебя. Либо протестируй настройки протеуса с каким-нибудь софтом заведомо рабочим, типа настрой puTTy на 9600 и проверь - работает ли.
Korbofos » 23 авг 2011, 19:33
Спасибо dccharacter!
Подцепил к теминалу монитор ком порта и определил что врёт протез!
Терминал по тихоньку оживает.
- Вложения
-
dccharacter » 25 авг 2011, 15:17
А еще, посмотрев на скриншот, хочу порекомендовать взять orfa-terminal, поставить себе QT и переться - там уже все сделано.
Korbofos » 25 авг 2011, 18:47
Так не итересно)
Это пока только рулёжка,а потом туда автоматический режим приделаю.
Тем более, что в контроллере прошивка своя стоит дружить не будет.
dccharacter » 26 авг 2011, 19:40
у меня тоже свой протокол - я допиливал орфу под работу с ТСП/ИП, менял свой протокол... В общем я на ней научился немножко работать с QT, серийным портом, ТСП и т.д. - правда в режиме почти процедурного программирования, но скоро перейду на нрмальный ООП
Короче, хороший старт... Спасибо ребятам.
Dmitry__ » 26 авг 2011, 23:09
dccharacter писал(а):почти процедурного программирования, но скоро перейду на нрмальный ООП
спасиба, поржал
dccharacter » 27 авг 2011, 02:08
Не, ну а че, читаем пока... Наследование, фигедование.
Пока моих убогих скилов хватает только на это:
- Вложения
-
Grem » 27 авг 2011, 11:53
Dmitry__ писал(а):dccharacter писал(а):почти процедурного программирования, но скоро перейду на нрмальный ООП
спасиба, поржал
На самом деле это не смешно, и ведь каждый, кто умеет нарисовать форму в дизайнере и дописать события - считает себя мега программистом
dccharacter » 29 авг 2011, 10:49
Че прилезли? Я ж написал - "хороший старт". У меня иллюзий нет, так что отлезьте
=DeaD= » 29 авг 2011, 10:53
Grem писал(а):На самом деле это не смешно, и ведь каждый, кто умеет нарисовать форму в дизайнере и дописать события - считает себя мега программистом
Угу, можно еще обсудить сколько людей из считающих себя программистами понимает в таких вещах, как вычислительная сложность алгоритмов и т.п.
тут то и выяснится, что реальных программистов вообще мало
Korbofos » 29 авг 2011, 13:05
Я начал изучать программирование для
роботостроения, роботомучения
Korbofos » 08 ноя 2011, 08:20
Меня тут сомнения терзают. Как лучше сделать работу радара(servo + sharp)?
Сейчас сделал так: Терминал кидает на контроллер: в какое положение выставить серву с дальномером. МК отвечает положение сервы и показания дальномера. Может лучше запускать функцию на мк двигать серву с дальномером каждые 40 милисекунд на несколько градусов и отправлять на данные ПК? Так сказать для экономии трафика!
=DeaD= » 08 ноя 2011, 09:11
Korbofos писал(а):Так не итересно)
И вот так уже скоро 10 лет и практически каждый. Итого все топчутся на месте
Добавлено спустя 59 секунд:Korbofos писал(а):Может лучше запускать функцию на мк двигать серву с дальномером каждые 40 милисекунд на несколько градусов и отправлять на данные ПК? Так сказать для экономии трафика!
А его реально надо экономить уже, не пролезаете по трафику?
Korbofos » 08 ноя 2011, 10:34
=DeaD= писал(а):И вот так уже скоро 10 лет и практически каждый. Итого все топчутся на месте
Согласен с вами.
Но что бы с чего-то готового начать, надо хоть немного разбираться в этом. А я "пришёл сюда" к сожалению нечего не понимал в программировании. Ну вот и разминаюсь так сказать
=DeaD= писал(а):А его реально надо экономить уже, не пролезаете по трафику?
Иногда где-то минут через пять работы. Мк начинает отправлять символы не в правильной последовательности,
думаю не успевает что-ли? А так пусть шлёт данные в своём темпе ну и входящего трафика не нужно.