Технический форум по робототехнике.
Korbofos » 30 июл 2011, 21:08
Взялся написать терминал,буду задавать очень много глупых вопросов,по мере накопления
1.Какими средствами лучше воспользоваться при работе с СОМ портом: функциями API или средствами языка С++?
2.Какая версия С++ builder удобна в использовании?
dccharacter » 30 июл 2011, 21:24
На хабре был цикл статей по терминалам, ищи-читай. Два твоих вопроса, насколько я понимаю в теме, к терминалу вообще никакого отношения не имеют.
setar » 30 июл 2011, 23:12
для тренировки взялся за такую затею?
=DeaD= » 30 июл 2011, 23:14
Korbofos писал(а): Взялся написать терминал 2.Какая версия С++ builder удобна в использовании?
Записывайте:
1. Скачать исходники отсюда -
http://slydiman.narod.ru/rus/index.htm 2. Изучить
3. Написать свой аналогичный
4. Бинго!
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); } }
Vooon » 12 авг 2011, 00:49
А если приглядеться к параметрам WriteFile()?
Вот я из этого кусочка кода вижу что она сама принимает буфер. Зачем пихать по байтику не понятно.
Код: Выделить всё • Развернуть ssize_t writep(char *buf, size_t len) { DWORD dwWritten; WriteFile(hCom, buf, len, &dwWritten, NULL); return dwWritten; }
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);
Как-то так?
Всёравно один байт уходит(
=DeaD= » 12 авг 2011, 08:54
Как определяете, что уходит 1 байт?
Vooon » 12 авг 2011, 20:48
А проверка на ошибки не нужна чтоль? Обычно сверяют len2 = write(buf, len); if (len2 != len) err("write");
Korbofos » 13 авг 2011, 05:48
=DeaD= писал(а): Как определяете, что уходит 1 байт?
Подцепил терминал к протеусу(compim) там оно и видно.
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
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); Так не работает?
dccharacter » 18 авг 2011, 13:27
Что вот это такое: tx_buffer[3]=1,2,150; ???
Korbofos » 18 авг 2011, 13:40
tx_buffer[3]=1,2,150; - Это означает: первая цифра означает, какую функцию на мк нужно запустить... Две следующие цифры аргументы для этой функции...
dccharacter » 18 авг 2011, 14:28
не, я не про это. я про инициализацию массива - разве не должно быть так: tx_buffer[3]={1,2,150}; Дальше, тебе выше указали, что write file кушает буффер. А ты его опять байтами кормишь. Соответственно ты проблему свою не решаешь, а повторяешь ее три раза.Добавлено спустя 6 минут 31 секунду: кинь полностью листинг - скорее всего ты криво парамеры порта задаешь и у тебя скорость порта раза в четыре выше скорости терминала.