Whidbey では標準でサポートされますが、現状の .NET Framework 1.0、1.1 にはシリアル通信(シリアルポート(Serial Port)の RS-232C とかでモデムを繋いだりするやつのことね)のサポートがないんですよね。
といっても、Win32 ではシリアルポートってあまり特別な存在じゃなく、CreateFile して SetCommState でごにょごにょして、あとは WriteFile とか ReadFile とかして...って感じなので DllImport すれば .NET でだって使えるわけです。
と言っても、すでにそれらをラップして便利に使えるようにしてくれたソースがいろいろと公開されています。なので、それの覚え書き。
なお、以下はちょこっとソースを見ただけで、詳しく調べたわけじゃないのでコメントは間違ってるかもしれません。
MSDN Magazine 「Use P/Invoke to Develop a .NET Base Class Library for Serial Device Communications」
http://msdn.microsoft.com/msdnmag/issues/02/10/netserialcomm/
The Code Project 「Serial Communications : The .NET Way」
http://www.codeproject.com/dotnet/DotNetComPorts.asp
GotDotNet User Sample 「SerialPort component and CSTerm terminal application」
http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=b06e30f9-1301-4cc6-ac14-dfe325097c69
GotDotNet User Sample 「SerialStream - use the serial port as a Stream」
http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=FCBA7FC5-666E-4EB0-863F-0045B0C79EC7
はじめまして!きゅっぽんです。
返信削除最近C#はじめたばかりなのですが、RS232C使うことになってこちらを見つけました。
いまごろなんですが、一番下(4番目)試してみています。
パラメータ等を変えてサンプルそのままでとりあえず通信はできるのですが、なぜか1回目のREADLINEが
変です。2回伝文を受信しないと初回READLINEを抜けません。あとは関係なくREADLINEしてくれるの
ですが、そこで、1回目の受信伝文をREADで読み出してみると、ちゃんと読み出しているのですよ。
質問になってしまうのですが、READLINEは初回時は何か抜ける条件があるのでしょうか?
解決しました。終わりがLFまたはCRLFでないとReadLineを抜けられないのですね。
返信削除相手はCRのみ送っていました。なので、Readにて読み込むことにしました。
ご迷惑をおかけしました。
はじめまして.畳返しです.
返信削除シリアル通信のプログラムについて調べてみたらここにたどり着きました.
研究の関係からC++を使ってプログラムを作るのですがシリアル通信のことがよくわらないため上手く組むことが出来ません.
だから
[引用]CreateFile して SetCommState でごにょごにょして、あとは WriteFile とか ReadFile とかして...って感じなので DllImport すれば [引用]
の意味がわかりません.宜しければ教えて下さい.
.NET 2.0 で正式に System.IO.Ports.SerialPort として 実装されたみたいです。
返信削除