音速のエンジニア

やったことを音速で忘れてしまう?とあるエンジニアの備忘録

シリアル通信でCOM10以上のポートを使用する

最近はあまり使う機会ないのですが、シリアル通信で指定するCOMポート、以前これで嵌ったことがありまして。

COMポートとは?

シリアル通信でデータ伝送を行うインターフェースのことですね。検索すればすぐに出てくると思います。

参考: COMポートとは | IT用語辞典 e-Words

ポートのオープンでエラーになる

シリアル通信をする際は、まずCOMポートのオープンを行うのですが、いきなりエラーになってしまう。

Win32APIのCreateFile()がINVALID_HANDLE_VALUEで返ってくる。

んー、ボードのマニュアルではCOM10を指定しろと書いてあるのだが、、、

HANDLE h = CreateFile("COM10", ... ); // h = INVALID_HANDLE_VALUE.

いろいろ調べていると、以下のような情報が出てきた!

COM10以上を指定する場合、書式が違う

はい、書き方が違うんですって。
MSDNにも書いてありました。

参考: COM10 以上のシリアル ポートを指定する方法 | MSDN

COM1〜COM9までは、"COM1"という書き方で問題ないのだが
COM10以上は、"\\.\COM10"という書き方になるそうです。

プログラムで書くときは、ちゃんとエスケープしてくださいね。

HANDLE h = CreateFile("\\\\.\\COM10", ... );

これで無事オープン出来ました!

尚、この書き方はCOM1~COM9でも有効ということだそうです。

まとめ

COM1〜COM9までは、"COM1"という書き方でOK。
COM10以上は、"\\.\COM10"という書き方になる。

最後に、、、

リファレンスはちゃんと読まないとですね、、、(汗