Нужна программа работы с СОМ портом

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить
Вымогатель припоя
Аватара пользователя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Сообщение zero648 »

Суть вопроса в следующем, некая плата с контроллером MC68302 на ней хранятся данные, эти данные передаю по UART на ПК, нужна программа для ПК, которая бы принимала данные с СОМ порта и сохраняла их в файл в бинарном формате, также необходимо эти данные из файла отправлять обратно с компа на плату. Подскажите кто знает такую прогу с такими функциями.
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1817
Зарегистрирован: Пн ноя 29, 2010 15:58:43

Сообщение igor-x »

есть программа putty.exe если комп на виндосе и minicom если комп с Линуксом.
это терминальные программки которые с СОМ портом могут работать. и им все равно какой контроллер у вас на связи.
данные попроинимать и передавать можно на них попробовать.
Реклама
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1438
Зарегистрирован: Вт окт 28, 2008 09:00:18
Откуда: Украина, Харьков

Сообщение Dr. Alex »

Да, по большому счёту, какая разница какой контроллер. Главное что по UART и всё, а таких программ валом. ГУГЛ в помощь!!!
Порой мне кажется, что я делаю какое-то дерьмо, но когда я вижу, что делают другие, то я чувствую себя гением...
Контактная информация:
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

Это можно организовать даже в DOS-е, командой "COPY COM1 file.txt" и для передачи назад - "COPY file.txt COM1". Перед этим параметры порта надо настроить командой "MODE". И правда, для DOS-а существует ограничение в первые 4 порта - COM1, COM2, COM3, COM4. Так сложилось исторически... если нужны другие порты, надо указывать "путь" к этим портам как файлу по UNC.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

и minicom если комп с Линуксом.
Для решения задачи автора в линуксе вообще никаких программ не надо. Можно одной командой: cat /dev/ttyXXX > file.bin
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1817
Зарегистрирован: Пн ноя 29, 2010 15:58:43

Сообщение igor-x »

Можно одной командой: cat /dev/ttyXXX > file.bin
это если устройство тупо передает данные при включении. если же оно требует какойто иницилизации , то можно попробовать с терминалками поработать.

а так то - похоже придется автору ваять программулину для приема-передачи блоков данных(как он это пытался обьяснить в первом сообщении)
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Сообщение zero648 »

igor-x писал(а):это если устройство тупо передает данные при включении. если же оно требует какойто иницилизации , то можно попробовать с терминалками поработать.
Да, кстати, так и есть, устройство при включении инициализирует все что нужно для передачи данных, тестирует оперативку, все это сопровождается индикацией (3 светодиода), затем тупо передает по UARTу 256 kB данных, которые нужно принять на компе, прошивку для MC68302 писал сам.
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

zero648 писал(а):нужна программа для ПК, которая бы принимала данные с СОМ порта и сохраняла их в файл в бинарном формате.
Простейшую программу, выполняющую эти действия можно написать примерно за десять минут.

Код: Выделить всё

Port.s="COM1" ; Имя порта.
Bauds = 9600  ; Скорость приема через COM порт.
FileName.s="MyFile.bin" ; Имя файла куда записывать данные.
BufferSize = 1024 ; Размер буфера приема.

*Buffer = AllocateMemory(BufferSize) ; Память под принимаемые данные из COM порта.
If *Buffer ; Буфер валидный.
  
  ; Открыли порт.
  If OpenSerialPort(0, Port, Bauds, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
    
    ; Создали пустой файл.
    If CreateFile(0, FileName)
      
      ; Цикл копирования данных из порта в файл.
      Repeat
        InBytes = AvailableSerialPortInput(0)
        If InBytes>0 ; Принят хоть один байт.
          
          If InBytes>BufferSize ; Не превышен ли размер буфера?
            InBytes=BufferSize
          EndIf
          
          ReadSerialPortData(0, *Buffer, InBytes) ; Прочитали данные из порта,
          WriteData(0, *Buffer, InBytes)          ; и сохранили их в файле.
          FlushFileBuffers(0)
            
        Else
          Delay(100) ; Если в порт данные не поступили, то ждем 100 миллисекунд.
        EndIf
      ForEver
      
      CloseFile(0) ; Закрыли файл.
      
    Else
      MessageRequester("", "Не удалось создать файл "+FileName, #MB_OK|#MB_ICONERROR)
    EndIf
    
    CloseSerialPort(0) ; Закрыли порт.
  Else
    MessageRequester("", "Не удалось открыть порт "+Port, #MB_OK|#MB_ICONERROR)
  EndIf
  
  FreeMemory(*Buffer) ; Освободили память.
  
Else
  MessageRequester("", "Не удалось выделить память под буфер ", #MB_OK|#MB_ICONERROR)
EndIf
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

А условие окончания цикла? Хотябы, по нажатию кнопки чтобы закончить можно было. И счетчик принятых байт - подсчитывать и отобразить.

Не знаю на какой основе реализована задержка delay, но может чтобы не грузить систему выгодней использовать sleep(100)?
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

Alexeyslav писал(а):А условие окончания цикла?
К сожалению оно не было оговорено. Единственое что указанно
zero648 писал(а):тупо передает по UARTу 256 kB данных, которые нужно принять на компе
Можно к этому привязаться и прерывать цикл после приема 256 кило.
Alexeyslav писал(а):Не знаю на какой основе реализована задержка delay, но может чтобы не грузить систему выгодней использовать sleep(100)?
В винде, функция Delay(), при компиляции, заменяется на WinAPI Sleep(). В Linux и MacOS X, хз на что заменяется. Не знаком с их API.

Вообще, этот код содержит необходимый минимум функционала, требуемый для приема данных из COM порта и записи в файл. Что собственно и просил ТС.
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

А если на один байт не рассчитаешь? Сохранить-то надо все, а если прервать прогу насильно последний кусок данных может не сохранится в файл. Поэтому надо как минимум предусмотреть ручное прерывание процесса, чтобы иметь возможность его корректно завершить.
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Вообще, этот код содержит необходимый минимум функционала, требуемый для приема данных из COM порта и записи в файл. Что собственно и просил ТС.
Ну нафига? В винде ведь тоже можно всё это проделать парой команд в консоли, без всяких программ. Вот только не помню я их, вероятно, будет что-то наподобие того, что описал Alexeyslav для ДОСа.
Вымогатель припоя
Аватара пользователя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Сообщение zero648 »

Ставил прогу Advanced Serial Port Monitor, она работает вроде нормально, принимает все что поступает на СОМ порт и сохраняет все в указанный лог файл, но, во-первых передача идет блоками по 256 байт и естественно она подписывает принимаемые блоки сигнатурами, но это пол беды, во вторых все служебные символы она сохраняет как имена - вот это вообще фарш получается, в настройках не нашел в каком формате сохранять данные.
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

Только что узнал о такой полезной в этом деле проге - Realterm, очень функциональная программа для работы с COM-портом, много режимов вывода данных на экран, сохранение лога в файл, подсвечивание принятых/переданных байт разными цветами и многое другое. Правда, простой её не назовешь.
Контактная информация:
Ответить

Вернуться в «Интеграция с ПК»