Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

C#で学ぶインターネット時代のシリアル通信(前編)

シリアル通信の概要とC#を使ったシリアル通信の実装

  • LINEで送る
  • このエントリーをはてなブックマークに追加

 ネットワーク通信は広く普及していますが、あまりにも複雑になったため、中身は分からないけど使っている、いじってみたいけどなかなか手が出せない、という人が多いのではないでしょうか。シリアル通信を使うと2台のパソコンを会話させて何か作りたいという願望を比較的簡単に実現できます。今回はシリアル通信の概要からC#を使ったシリアル通信の実装についてまでを解説します。

目次

はじめに

 ネットワーク全盛時代に、「いまさら」のシリアル通信の説明です。

 あまりにも複雑になって、中身はどうして動いているのか分からないけれど、動くから使っているという人たちが増えています。ネットワークは便利になった反面、パソコンをいじるのには興味があるが、なかなか手を出せないでいる人たちが多いのではないでしょうか?

 パソコン1台だけでなく、2台のパソコン同士で会話をさせて何か作ってみたい、という願望を比較的簡単に実現させることができるものが、このシリアル通信です。現在のプログラム開発環境でもサポートされています。計測機器にもまだまだ使われています。

 今回はサンプルソースをVisual Studio 2008(以降、VS2008と表記)、言語はC#で作成しました。Visual Studio 2003以前の.NETでシリアル通信関数は標準から外されていましたが、Visual Studio 2005からは標準に戻されたようです。

対象読者

 「パソコンでプログラムを組んで見たい。」と勉強をはじめたばかりの方で、パソコン間の通信に興味を持たれている方。できればC#のプログラムを作成できる方を対象に考えています。

必要な環境

 サンプルソースはVS2008で動作確認しています。

シリアル通信の概要

 シリアル通信の規格は、RS232C、RS422、RS485と複数あります(有名でない規格はまだまだあります)。1本の線でデータが送れるのには変わりがありませんが、ケーブルの形も送り方もまったく違います。

 シリアル通信のイメージをつかんでもらうため、このなかで比較的取り組みやすいRS232Cについての説明と、実際のプログラムの書き方を説明したいと思います。

シリアル通信のイメージ

 シリアル通信のイメージは、糸電話にたとえることができます。一方は喋る人、もう一方は聴く人です。お互いに話したいときは2本の糸電話が必要です。ただし、同時に使用することはできません。

図1 シリアル通信とは
図1 シリアル通信とは

 一方から「お元気ですか」と送ると、返事として「元気ですよ」と帰ってきます。一本の糸電話で「お元気ですか」の文字列が送られます。この通信方法をシリアル通信と言います。パソコンの場合、文字は1文字ずつ送ります。

 相手のほうで受け取り準備をしてもらうため、「送りますよ」「1文字目」「終わりました」「送りますよ」「2文字目」「終わりました」…と1文字ごと、送り初めと終わりを知らせます。

 通信文字の内容は、通信の仕様内では感知しないことになっています。送る文字の内容は送る側と受け取る側で独自に決めることができます。

 こちらから送りたい相手への線は1本、相手からこちらへの線1本、それにアースの線の3本で通信できるということになります。アース線は、糸電話の時はお互いに立っている同じ土壌に相当します。

 この3本線が一つのケーブルに入ってシリアルケーブルができあがっています。

シリアル通信の仕組み

 1文字とは、ASCII文字(8ビット、半角英数文字)のことです。1文字送るために、「送りますよ」というビットが1ビット、終わりましたというビットが1か2ビット(開始時に指定します)必要になります。お互いのパソコンではこのビットを送る速さは同じでないといけません。

 送るタイミングはプログラムに任せられているため、ハード的にはお互いに送る時タイミングを取り合うことはありません。そのため、この通信は非同期通信と呼ばれています。

 もちろんプログラムではお互いタイミングを合わせた処理を作成する必要があります。

 プログラムを作成するときは、まずはじめにお互いの通信命令を決めます。

 例えば、Aパソコンから「HELLO」と送り、Bパソコンが受け取ったということを「HELLO」で返し、お互いに通信開始が確認できたので、Aパソコンの画面のボタンを人が押すと、Aパソコンから「GET」命令を送り、Bパソコンは現在の温度を測定して、温度を送り返すなど、のシステムを考えることができます。

 通信命令を決めると、それぞれのパソコンは何をすべきかが決まってきます。その通信指令の手順に従ってプログラムを組んでいきます。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

修正履歴

  • 2009/04/27 14:59 まとめの部分に説明を補足

著者プロフィール

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

  • WINGSプロジェクト 横塚 利津子(ヨコツカ リツコ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

バックナンバー

連載:C#で学ぶインターネット時代のシリアル通信
All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5