COM-порт. Программирование на стороне ПК. Алгоритмы связи.

Автомат, адаптивный автомат ... разум

Re: COM-порт. Программирование на стороне ПК. Алгоритмы связи.

Сообщение Vooon » 12 авг 2009, 19:36

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

http://hg.vehq.ru/liborfa/file/902a1ce5 ... rial_win.c

// Дед я отладил, теперь и под линь, и под вин. Нет внешних зависимостей, ну только libc/kernel32.
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: COM-порт. Программирование на стороне ПК. Алгоритмы связи.

Сообщение boez » 12 авг 2009, 21:39

О, сразу поставил dcb.fNull = false, эт правильно :) Я когда-то с одним подлым программатором намучился, кажется это была филипсовская ISP-утилита для LPC2xxx. Берет и ставит этот бит в конфиге порта, и не снимает :). А я ленивый - сделал GetCommState, скорость да 8N1 выставил и общаюсь. И удивляюсь почему ни с того, ни с сего кто-то грызть пакеты начинает, некоторые байты не доходят... Потом уже наковырял что не доходят именно нулевые байты и почему это происходит. Короче после этого вызов GetCommState убрал, всю структуру заполнял сам и вызывал SetCommState.

Вообще прога была написана на скорую руку, куски на делфи, куски на сях, так что выкладывать ее тут наверное нету смысла (прога - мастер протокола ModBus-RTU, позволяет через переходник RS232-RS485 читать и писать регистры слейвов, хотя и не все). Ну и типа она моему бывшему работодателю принадлежит... :oops:

Да, а нафиг тебе GetCommConfig - вообще не понял, объявил бы DCB dcb; и работал с ним. Для примера все же выложу свою инициализацию:
Код: Выделить всё
        memset(&dcb, 0, sizeof(DCB));
        dcb.DCBlength=sizeof(DCB);
       
        dcb.fBinary=1;
//        dcb.fParity=0;
//        dcb.fOutxCtsFlow=0;
//        dcb.fOutxDsrFlow=0;
        dcb.fDtrControl = 0; // +power
//        dcb.fDsrSensitivity=0;
//        dcb.fTXContinueOnXoff=0;
//        dcb.fOutX=0;
//        dcb.fInX=0;
//        dcb.fErrorChar=0;
        dcb.fRtsControl = 1; // -power
//      dcb.fNull=0;
//      dcb.fAbortOnError=0;

        dcb.ByteSize=8;
        dcb.Parity=NOPARITY;
        dcb.StopBits=TWOSTOPBITS;
        dcb.BaudRate=BaudRate;

        if (!SetCommState(h,&dcb)) {
          CloseHandle(h);
          return FALSE;
        }

+-power - это у нас схема опторазвязки переходника от этих ног питалась, поэтому такие нестандартные значения. Надо кажется обе единицы ставить.
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: COM-порт. Программирование на стороне ПК. Алгоритмы связи.

Сообщение Vooon » 13 авг 2009, 00:17

Переделал, но пока не проверял.
А поро правильно или нет понятия не имею :oops: разбираться в винапи не хочу.
Посмотрел QtExtSerialPort. Не завелось. Посмотрел avrdude. Поправил. Завелось. :)
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: COM-порт. Программирование на стороне ПК. Алгоритмы связи.

Сообщение osc » 27 сен 2009, 14:21

Народ, а вы http://pcports.ru/ смотрели?
Аватара пользователя
osc
 
Сообщения: 333
Зарегистрирован: 07 сен 2009, 20:06
прог. языки: c, c#
ФИО: Евгений

Re: COM-порт. Программирование на стороне ПК. Алгоритмы связи.

Сообщение Master » 27 сен 2009, 14:22

Смотрели.
Аватара пользователя
Master
 
Сообщения: 4468
Зарегистрирован: 21 дек 2006, 19:56
Откуда: Украина, г.Одесса
прог. языки: Delphi и С

Re: COM-порт. Программирование на стороне ПК. Алгоритмы связи.

Сообщение almazkazan » 24 окт 2009, 00:57

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

http://hg.vehq.ru/liborfa/file/902a1ce5 ... rial_win.c

// Дед я отладил, теперь и под линь, и под вин. Нет внешних зависимостей, ну только libc/kernel32.


а это в какой среде? Просто подключаемые заголовочные файлы (serial.h, а затем и другие заголовочные файлы которые подключаются в serial.h .. что то нет таких в Visual Studio 2008) их как бы надо отдельно скачивать и подключать каждую отдельно чтоли?

как быть?! ... :(
“Но мы же еще ​живы, чувак, это же круто…”
Аватара пользователя
almazkazan
 
Сообщения: 97
Зарегистрирован: 04 окт 2008, 17:47
Откуда: казань, респ. Татарстан, россия
прог. языки: c++, c#, asm

Re: COM-порт. Программирование на стороне ПК. Алгоритмы связи.

Сообщение Vooon » 24 окт 2009, 01:09

А если посмотреть каталог? http://hg.vehq.ru/liborfa/file/tip/lib/
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: COM-порт. Программирование на стороне ПК. Алгоритмы связи.

Сообщение almazkazan » 24 окт 2009, 19:25

Оу) Пардон. :pardon:
....
Что то нумерация строк в кодах ..ээ.. мешает сделать копипаст))
...
зашита от копипастеров?
“Но мы же еще ​живы, чувак, это же круто…”
Аватара пользователя
almazkazan
 
Сообщения: 97
Зарегистрирован: 04 окт 2008, 17:47
Откуда: казань, респ. Татарстан, россия
прог. языки: c++, c#, asm

Re: COM-порт. Программирование на стороне ПК. Алгоритмы связи.

Сообщение Vooon » 24 окт 2009, 21:02

Разуй глаза! Там есть и ссылочки на архивы(tar.gz/zip/tar.bz2) и на скачивание файла(raw)!
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: COM-порт. Программирование на стороне ПК. Алгоритмы связи.

Сообщение almazkazan » 26 окт 2009, 23:55

Vooon :pardon: блин все равно не прет :( На заголовочные файлы stdint.h , stdbool.h, inttypes.h и т.п ругается - no such file or derictory. Visual studio 2008 стоит...
Но даже если б нормально откомпилировалось, я б не понял как этот код использовать.

Хотя весь синтаксис С++ я знаю и с ООП знаком. Но разобраться все равно не могу. Может парни не поленитесь и опишите весь процесс на уровне

1. скачиваем VISUAL STUDIO 2008.
2. скачиваем Архив с кодом.
3. Добавляем в проект такие то заголовочные файлы (.h) и такие то (.с) файлы
4. В 111.h описан класс, у него есть такие то такие то методы.
5. Сначала надо сконфигурировать СОМ порт выборать скорости стопбиты и т.п, для этого надо сделать то-то то-то.

А потом в вики эту статью, чтоб больше вопрос не возникал. спасибо
“Но мы же еще ​живы, чувак, это же круто…”
Аватара пользователя
almazkazan
 
Сообщения: 97
Зарегистрирован: 04 окт 2008, 17:47
Откуда: казань, респ. Татарстан, россия
прог. языки: c++, c#, asm

Re: COM-порт. Программирование на стороне ПК. Алгоритмы связи.

Сообщение Vooon » 27 окт 2009, 00:49

Какие нафиг классы!? Там чистый Си.
Я понятия не имею насколько MSVC совместим с C99, т.к. заголовочники из стандартной библиотеки.
Почему он их не находит понятия не имею.
В serial.h определено 4-е функции. В serial_{posix,win}.c реализация для разных платформ.

Код: Выделить всё
HANDLE open_and_configure(char *port, int baudrate)
posix_close(HANDLE)
posix_read(HANDLE, char *buf, int count)
posix_write(HANDLE, char *buf, int count)
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: COM-порт. Программирование на стороне ПК. Алгоритмы связи.

Сообщение Snable » 27 окт 2009, 02:02

MSVC по умолчанию не совместим с С99, поэтому и требуются эти заголовочники...

Двумя из трех могу поделиться... А вот stdbool.h - у мя нет...

И собственно, в догонку...
Весь файл stdbool.h представляет из себя:
Код: Выделить всё
/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.

This file is part of GCC.

GCC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.

GCC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING.  If not, write to
the Free Software Foundation, 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.  */

/* As a special exception, if you include this header file into source
   files compiled by GCC, this header file does not by itself cause
   the resulting executable to be covered by the GNU General Public
   License.  This exception does not however invalidate any other
   reasons why the executable file might be covered by the GNU General
   Public License.  */

/*
* ISO C Standard:  7.16  Boolean type and values  <stdbool.h>
*/

#ifndef _STDBOOL_H
#define _STDBOOL_H

#ifndef __cplusplus

#define bool    _Bool
#define true    1
#define false   0

#else /* __cplusplus */

/* Supporting <stdbool.h> in C++ is a GCC extension.  */
#define _Bool   bool
#define bool    bool
#define false   false
#define true    true

#endif /* __cplusplus */

/* Signal that all the definitions are present.  */
#define __bool_true_false_are_defined   1

#endif  /* stdbool.h */


То есть, вместо инклуда, можешь просто написать
Код: Выделить всё
#define _Bool   bool

И под MSVC оно у тебя должно пойти.
Вложения
stdint.h
(7.35 КиБ) Скачиваний: 605
inttypes.h
(8.11 КиБ) Скачиваний: 575
Аватара пользователя
Snable
 
Сообщения: 395
Зарегистрирован: 21 мар 2009, 20:06
Откуда: Город на Неве
прог. языки: GNU C++ with Qt / C# via .NET
ФИО: Александр

Re: COM-порт. Программирование на стороне ПК. Алгоритмы связи.

Сообщение Angel71 » 27 окт 2009, 05:52

almazkazan, а msdn`ом пользоваться религия не позволяет?
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18

Re: COM-порт. Программирование на стороне ПК. Алгоритмы связи.

Сообщение ALHIMIK » 03 ноя 2009, 01:30

Вопрос по терминалам
как отправлять числа ?
не символы АСКИИ а именно числа
при попытки тупо набрать число 180 + ентер отправляет 3 байта в место одного :o
Аватара пользователя
ALHIMIK
 
Сообщения: 997
Зарегистрирован: 05 окт 2008, 14:41
Откуда: СПб
прог. языки: C,Python

Re: COM-порт. Программирование на стороне ПК. Алгоритмы связи.

Сообщение Duhas » 03 ноя 2009, 09:56

искать символ соответствующий числу 180 )) или юзать\писать софтинку которая умеет конвертить ...
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Пред.След.

Вернуться в Алгоритмы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10