Модераторы: xvr

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Com порт, Com порт 
:(
    Опции темы
study
Дата 1.8.2005, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 20.9.2004

Репутация: нет
Всего: нет



Привет всем!!!
Помогите решить такую задачу. К компьютеру под ОС Linux к Com порту подключен датчик. Мне надо написать прораммку, которая бы посылала бы в Com порт значение и считывала результать, а результат записывать в текстовый файл.
Можете помочь...
Заранее спасибо...
PM MAIL   Вверх
chaos
Дата 1.8.2005, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 3
Всего: 44



вот тебе не большой пример:

Код

#include <stdio.h>

int main(int argc, char *argv[])
{
    FILE *com = fopen("/dev/cua0", "rw"); //открываешь порт

    fprintf(com, "%s", "write string in com port"); //записываем строку в ..

    int val; 
    fscanf(com, "%d", &val); //читаем значение

    fclose(com); //закрываем порт

    FILE *f = fopen("~/log.txt", "w"); //открываем для записи прочитанного значения
    fprintf(f, "Значение датчика: %d\n", val); //записываем
    fclose(f); //закрываем

    return 0;
}


Это сообщение отредактировал(а) chaos - 1.8.2005, 12:46
PM WWW   Вверх
study
Дата 1.8.2005, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 20.9.2004

Репутация: нет
Всего: нет



Спасибо chaos, а можешь пояснить, /dev/cua0 - это имя com порта?
PM MAIL   Вверх
chaos
Дата 1.8.2005, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 3
Всего: 44



Цитата(study @ 1.8.2005, 13:09)
Спасибо chaos, а можешь пояснить, /dev/cua0 - это имя com порта?

да, но это у меня, у себя ты должен подставить своё имя
PM WWW   Вверх
study
Дата 1.8.2005, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 20.9.2004

Репутация: нет
Всего: нет



Хорошо, а вот я читал, что в com порт надо устанавливать скорость, биты данных, четность и стоповые биты, где здесь эти параметры задавать?
PM MAIL   Вверх
chaos
Дата 1.8.2005, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 3
Всего: 44



тютю smile
PM WWW   Вверх
study
Дата 1.8.2005, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 20.9.2004

Репутация: нет
Всего: нет



Я сам точно не знаю, просто смотрел какой-то класс для Visual C++, а там эти данные вводились...
Так нужны эти данные или нет? smile
PM MAIL   Вверх
chaos
Дата 1.8.2005, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 3
Всего: 44



нет, так все будет нормально работать, во всяком случае я всегда так делаю!
Добавлено @ 14:19
если не получиться пиши
PM WWW   Вверх
study
Дата 1.8.2005, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 20.9.2004

Репутация: нет
Всего: нет



Хорошо, спасибо большое, попробую, надеюсь получиться? smile
PM MAIL   Вверх
Airanius
Дата 24.12.2005, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 12.11.2005

Репутация: нет
Всего: нет



Цитата(chaos @ 1.8.2005, 14:18)
нет, так все будет нормально работать, во всяком случае я всегда так делаю!
Добавлено @ 14:19
если не получиться пиши

И всё-таки... Как читать/писать в порт я разобрался и сам! Подскажите плиз начинаюшему, как изменить параметры порта (скорость, контроль чётность, таймауты, etc.) заранее спасибо
PM MAIL   Вверх
scapig
Дата 24.12.2005, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 8.11.2005

Репутация: нет
Всего: 2



Да.. мне тоже интересно, как это все проделывать в линухе, т.к. в винде это делается элементарно... smile

Это понятно, что работать будет нормально, но как быть если надо , чтобы данные передавались с определенной скоростью...., а не от балды...
Как конфигурить???

Это сообщение отредактировал(а) scapig - 24.12.2005, 15:34
PM MAIL   Вверх
GrayCardinal
Дата 24.12.2005, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



Цитата
т.к. в винде это делается элементарно

Я сегодня добрый, минусовать не буду. Но просьба больше не упоминать в Линуховском разделе это нехорошее слово да и еще в таком виде smile

$ man tcsetattr


--------------------
PM MAIL WWW   Вверх
Бонифаций
Дата 25.12.2005, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 1
Всего: 40



man stty


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
Airanius
Дата 5.1.2006, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 12.11.2005

Репутация: нет
Всего: нет



Serial Programming Guide for POSIX Operating Systems.pdf - полное и подробное описание работы с Последовательным портом(ищите поисковиками)
PM MAIL   Вверх
Guest
Дата 12.1.2006, 02:58 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











  Вверх
mik19
Дата 20.6.2008, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 30.11.2007

Репутация: нет
Всего: нет



Доброго всем дня, у меня тоже возникла подобная задача, но мне не просто считать данные нужно, а немного посложнее мне нужно его мониторить, и в случае изменений, послать команду в шел (при определенных условиях). Другими словами мне нужен демон, который будет постоянно мониторить СОМ порт, и при поступлении данных, скажем, посылать в шел ансишный код буквы F. 
PM MAIL ICQ   Вверх
chaos
Дата 23.6.2008, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 3
Всего: 44



самый простой вариант настроить таймаут на чтение и в отдельно потоке постоянно пытаться проичтать из порта

PM WWW   Вверх
MAKCim
Дата 23.6.2008, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



select()/poll()/epoll()


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Mal Hack
Дата 29.6.2008, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: нет
Всего: 261



Цитата(study @  1.8.2005,  14:11 Найти цитируемый пост)
Я сам точно не знаю, просто смотрел какой-то класс для Visual C++, а там эти данные вводились...
Так нужны эти данные или нет? smile 

Все эти вещи нужно вводить (DCB, COMMSTATE etc.), но только для Windows, чтобы система разрешила работать с COM портом, как нам надо.
В линуксе этих вещей в принципе нет, т.к. порт по сути - папка/файл. Если попробовать не просто через fopen, а через socket поработать, то может быть, там что-то как-то и придется куда-то указывать.  Правда, не пробовал. У меня в либе fopen висит...

Цитата(chaos @  23.6.2008,  12:54 Найти цитируемый пост)
самый простой вариант настроить таймаут на чтение и в отдельно потоке постоянно пытаться проичтать из порта

Просто тайм-аут может не прокатить. Все зависит какой девайс сидит на порте, и по какому протоколу он работает RS-232, 485, т.к. в этом случае могут быть косяки из-за того, что, дисикнт возникает, короче смещение окна чтения.

PM ICQ   Вверх
Tiffany
Дата 7.7.2008, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 23.12.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Вот тут нашла в своей проге кусочек, вроде то, что ты просил (если я прально поняла). Тока он на QT, но не страшно - переделать недолго =)

Код

    fd_set rfds;
    struct timeval tv;
    int retval;
    int res;
                char buf[255];
                QMutex mut;

                bzero(&buf, sizeof(buf));
    FD_ZERO(&rfds);                    
    FD_SET(ControlThread->COMDevice, &rfds);    
while(1)                  {
    retval = select(ControlThread->COMDevice+1, &rfds, NULL, NULL, NULL); //ждем появления новых данных на порту
    if (retval)        {
mut.lock();    
       res=read(ControlThread->COMDevice, buf, sizeof(buf)); // если что-то появилось - читаем
mut.unlock();    
}


После этих манипуляций в "buf" будут данные с порта, делай с ними что хошь. А ваще читай man select и man termios (настройки порта) 
PM MAIL   Вверх
nworm
Дата 27.9.2008, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: нет
Всего: 8



Тут возникла задача.

При возникновении прерыванию от lpt порта передавать данные на com-порт прям из драйвера lpt-шного прерывания.
Копаюсь в разных примерах драйверов. smile 

Можно в этом случае безнаказанно stdio.h подключить к драйверу прерывания от lpt?
PM MAIL WWW   Вверх
MAKCim
Дата 27.9.2008, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(nworm @  27.9.2008,  00:39 Найти цитируемый пост)
Можно в этом случае безнаказанно stdio.h подключить к драйверу прерывания от lpt? 

нет


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
nworm
Дата 27.9.2008, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: нет
Всего: 8



А может что-нибудь ещё посоветуете?
PM MAIL WWW   Вверх
nworm
Дата 3.10.2008, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: нет
Всего: 8



Что-то я нашёл.

Код

static int skeleton_kernel_initport() {
    struct tty_struct* tty;

    // Get the current options for the port...
    
    f = filp_open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY, 0600);
    fs=get_fs();
    set_fs(KERNEL_DS);

    tty=(struct tty_struct*)f->private_data; 
    unsigned int ccflag = *(tty->termios->c_cflag);

...


В ответ на последнюю строку (unsigned int ccflag = *(tty->termios->c_cflag);) мне выдаётся сообщение:

/home/man/model2_my/lpt_interrupt/skeleton.c: In function ‘skeleton_kernel_initport’:
/home/man/model2_my/lpt_interrupt/skeleton.c:63: error: dereferencing pointer to incomplete type

Никто не знает, что с этим делать?
PM MAIL WWW   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.1406 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.