roboforum.ru

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

Терминал Help !!

Терминал Help !!

Korbofos » 30 июл 2011, 21:08

Взялся написать терминал,буду задавать очень много глупых вопросов,по мере накопления :oops:
1.Какими средствами лучше воспользоваться при работе с СОМ портом: функциями API или средствами языка С++?
2.Какая версия С++ builder удобна в использовании?

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

dccharacter » 30 июл 2011, 21:24

На хабре был цикл статей по терминалам, ищи-читай. Два твоих вопроса, насколько я понимаю в теме, к терминалу вообще никакого отношения не имеют.

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

setar » 30 июл 2011, 23:12

для тренировки взялся за такую затею?

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

=DeaD= » 30 июл 2011, 23:14

Korbofos писал(а):Взялся написать терминал
2.Какая версия С++ builder удобна в использовании?

Записывайте:
1. Скачать исходники отсюда - http://slydiman.narod.ru/rus/index.htm
2. Изучить
3. Написать свой аналогичный
4. Бинго! :crazy:

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

Korbofos » 11 авг 2011, 22:58

Как отправить массив? вроде так должно отправиться, но нет только один байтик уходит...

Код: Выделить всёРазвернуть
void Write_Port (byte* BufWrite,DWORD index)
{
DWORD dwWritten;
for(unsigned i=0;i<index;i++)
{
   //Может сюда добавить какую-то api функцию ожидаю отчисти буфера???
   WriteFile(hCom,&(BufWrite[i]),sizeof(char),&dwWritten,NULL);
   Sleep(1);
  }
}

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

Vooon » 12 авг 2011, 00:49

А если приглядеться к параметрам WriteFile()?
Вот я из этого кусочка кода вижу что она сама принимает буфер. Зачем пихать по байтику не понятно.

Код: Выделить всёРазвернуть
ssize_t writep(char *buf, size_t len)
{
   DWORD dwWritten;
   WriteFile(hCom, buf, len, &dwWritten, NULL);
   return dwWritten;
}

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

Korbofos » 12 авг 2011, 01:22

Тогда вот так?
Код: Выделить всёРазвернуть
char buf[3];

void Write_Port (byte* BufWrite, size_t raz )
{
DWORD dwWritten;
WriteFile(hCom,BufWrite,raz,&dwWritten,NULL);
}

Write_Port(buf,3);

Как-то так?
Всёравно один байт уходит(

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

=DeaD= » 12 авг 2011, 08:54

Как определяете, что уходит 1 байт?

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

Vooon » 12 авг 2011, 20:48

А проверка на ошибки не нужна чтоль? Обычно сверяют len2 = write(buf, len); if (len2 != len) err("write");

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

Korbofos » 13 авг 2011, 05:48

=DeaD= писал(а):Как определяете, что уходит 1 байт?

Подцепил терминал к протеусу(compim) там оно и видно.

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

Korbofos » 14 авг 2011, 16:52

Всё ровно уходит 1 байт :(
Код: Выделить всёРазвернуть
unsigned char tx_bufer[3];

//Функция
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;}
}

//Отправляем три байта с проверкой
tx_buffer[3]=1,2,150;

if(Write_Port(tx_buffer,3)==0)
{ShowMessage("error write_port");}
//Ошибку почемуто не показывает


На мк прилетает один байт FF

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

Korbofos » 18 авг 2011, 11:41

Вот так уходит три байта, но и то с не тем содержанием.
Код: Выделить всёРазвернуть
char Write_Port (unsigned char *buf, size_t raz)
{
DWORD dwWritten;
for(char i=0;i<raz;i++)
{
WriteFile(hCom,buf+i,1,&dwWritten,NULL);
Sleep(200);
}

Почему WriteFile(hCom,buf,3,&dwWritten,NULL); Так не работает?

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

dccharacter » 18 авг 2011, 13:27

Что вот это такое: tx_buffer[3]=1,2,150; ???

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

Korbofos » 18 авг 2011, 13:40

tx_buffer[3]=1,2,150; - Это означает:
первая цифра означает, какую функцию на мк нужно запустить...
Две следующие цифры аргументы для этой функции...

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

dccharacter » 18 авг 2011, 14:28

не, я не про это. я про инициализацию массива - разве не должно быть так:

tx_buffer[3]={1,2,150};

Дальше, тебе выше указали, что write file кушает буффер. А ты его опять байтами кормишь. Соответственно ты проблему свою не решаешь, а повторяешь ее три раза.

Добавлено спустя 6 минут 31 секунду:
кинь полностью листинг - скорее всего ты криво парамеры порта задаешь и у тебя скорость порта раза в четыре выше скорости терминала.


Rambler\'s Top100 Mail.ru counter