Послідовні порти полюбилися розробникам за їх простоту в обслуговуванні і використанні.
І звичайно ж писати в консоль термінальної програми це все добре, але хочеться свій додаток, яке після натиснення клавіші на екрані виконує потрібні вам дії;)
У цій статті опишу як працювати з com портом на мові Сі ++.
Рішення просте, але чомусь робочий приклад знайдений був не відразу. За сім зберігаю його тут.
Створюємо новий консольний Win32 проект.
Інклуд header файли:
Оголошуємо обробник com порту:
Я роблю це глобально, щоб не морочитися з покажчиками при передачі його в функції.
Далі починаємо формувати функцію main:
Терпіти не можу віндовскій стиль програмування. Обізвали все посвоєму і сидять радіють.
Робота з последоавательнимі портами в Windows проходить як з файлом. Відкриваємо перший кому порт для запису / читання:
Тепер потрібно налаштувати параметри з'єднання:
На msdn радять спочатку отримати параметри, а потім міняти їх. Ми ще тільки вчимося, тому робимо як просять.
Тепер оголосимо рядок, яку будемо передавати і змінні необхідні для цього:
Надсилаємо рядок. Нагадаю, що приклад найпростіший, тому ніяких особливо перевірок я не роблю:
Також я вирішив вивести для контролю розмір рядка і кількість відісланих байт:
В кінці програми робимо нескінченний цикл читання даних:
Тепер функція читання:
Ось власне і весь приклад.
Я створив віртуальний com порт. І слав з COM1 в COM2:
З нашої програми було відправлено "Hello from C ++", а з терміналу "hello how2.org.ua".
Здрастуйте, у мене є деякі проблеми: COM порт ніяк не хоче працювати. З самого початку, я все скидався на те, що я чайник. Але не так сталося - то було! Я багато разів намагався писати код. У підсумку, я просто скачав приклад. (У мене раніше не було можливостей) І що ж? Запускаю програму з прикладу (не зраджуючи код) і все одно не працює! Виводяться тільки помилки. Я, вибачте на слові, тупий? Або у мене що - то не так? Заздалегідь величезне спасибі!
Дякуємо. Мабуть єдиний код який завівся з пів стусана.
15 Bytes sended. o)
А чи можна обійтися без нескінченного циклу, а обробляти подія виникнення даних на СОМ порте? Як я вважаю цей цикл витрачає багато ресурсів і що то більш серйозне зробити з цим прикладом не вийде.