Нужна программа работы с СОМ портом
Суть вопроса в следующем, некая плата с контроллером MC68302 на ней хранятся данные, эти данные передаю по UART на ПК, нужна программа для ПК, которая бы принимала данные с СОМ порта и сохраняла их в файл в бинарном формате, также необходимо эти данные из файла отправлять обратно с компа на плату. Подскажите кто знает такую прогу с такими функциями.
- Реклама
- Сообщения: 1817
- Зарегистрирован: Пн ноя 29, 2010 15:58:43
есть программа putty.exe если комп на виндосе и minicom если комп с Линуксом.
это терминальные программки которые с СОМ портом могут работать. и им все равно какой контроллер у вас на связи.
данные попроинимать и передавать можно на них попробовать.
это терминальные программки которые с СОМ портом могут работать. и им все равно какой контроллер у вас на связи.
данные попроинимать и передавать можно на них попробовать.
Да, по большому счёту, какая разница какой контроллер. Главное что по UART и всё, а таких программ валом. ГУГЛ в помощь!!!
Порой мне кажется, что я делаю какое-то дерьмо, но когда я вижу, что делают другие, то я чувствую себя гением...
Это можно организовать даже в DOS-е, командой "COPY COM1 file.txt" и для передачи назад - "COPY file.txt COM1". Перед этим параметры порта надо настроить командой "MODE". И правда, для DOS-а существует ограничение в первые 4 порта - COM1, COM2, COM3, COM4. Так сложилось исторически... если нужны другие порты, надо указывать "путь" к этим портам как файлу по UNC.
Для решения задачи автора в линуксе вообще никаких программ не надо. Можно одной командой: cat /dev/ttyXXX > file.binи minicom если комп с Линуксом.
- Реклама
- Сообщения: 1817
- Зарегистрирован: Пн ноя 29, 2010 15:58:43
это если устройство тупо передает данные при включении. если же оно требует какойто иницилизации , то можно попробовать с терминалками поработать.Можно одной командой: cat /dev/ttyXXX > file.bin
а так то - похоже придется автору ваять программулину для приема-передачи блоков данных(как он это пытался обьяснить в первом сообщении)
Да, кстати, так и есть, устройство при включении инициализирует все что нужно для передачи данных, тестирует оперативку, все это сопровождается индикацией (3 светодиода), затем тупо передает по UARTу 256 kB данных, которые нужно принять на компе, прошивку для MC68302 писал сам.igor-x писал(а):это если устройство тупо передает данные при включении. если же оно требует какойто иницилизации , то можно попробовать с терминалками поработать.
- Сообщения: 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А условие окончания цикла? Хотябы, по нажатию кнопки чтобы закончить можно было. И счетчик принятых байт - подсчитывать и отобразить.
Не знаю на какой основе реализована задержка delay, но может чтобы не грузить систему выгодней использовать sleep(100)?
Не знаю на какой основе реализована задержка delay, но может чтобы не грузить систему выгодней использовать sleep(100)?
- Сообщения: 3385
- Зарегистрирован: Пн окт 11, 2010 19:00:08
К сожалению оно не было оговорено. Единственое что указанноAlexeyslav писал(а):А условие окончания цикла?
Можно к этому привязаться и прерывать цикл после приема 256 кило.zero648 писал(а):тупо передает по UARTу 256 kB данных, которые нужно принять на компе
В винде, функция Delay(), при компиляции, заменяется на WinAPI Sleep(). В Linux и MacOS X, хз на что заменяется. Не знаком с их API.Alexeyslav писал(а):Не знаю на какой основе реализована задержка delay, но может чтобы не грузить систему выгодней использовать sleep(100)?
Вообще, этот код содержит необходимый минимум функционала, требуемый для приема данных из COM порта и записи в файл. Что собственно и просил ТС.
А если на один байт не рассчитаешь? Сохранить-то надо все, а если прервать прогу насильно последний кусок данных может не сохранится в файл. Поэтому надо как минимум предусмотреть ручное прерывание процесса, чтобы иметь возможность его корректно завершить.
Ну нафига? В винде ведь тоже можно всё это проделать парой команд в консоли, без всяких программ. Вот только не помню я их, вероятно, будет что-то наподобие того, что описал Alexeyslav для ДОСа.Вообще, этот код содержит необходимый минимум функционала, требуемый для приема данных из COM порта и записи в файл. Что собственно и просил ТС.
Ставил прогу Advanced Serial Port Monitor, она работает вроде нормально, принимает все что поступает на СОМ порт и сохраняет все в указанный лог файл, но, во-первых передача идет блоками по 256 байт и естественно она подписывает принимаемые блоки сигнатурами, но это пол беды, во вторых все служебные символы она сохраняет как имена - вот это вообще фарш получается, в настройках не нашел в каком формате сохранять данные.
Только что узнал о такой полезной в этом деле проге - Realterm, очень функциональная программа для работы с COM-портом, много режимов вывода данных на экран, сохранение лога в файл, подсвечивание принятых/переданных байт разными цветами и многое другое. Правда, простой её не назовешь.


