画像ファイル
画像ファイル RS-232C RS-232Cの何が変わったのか
RS-232C関係
1RS-232Cの基礎
2RS-232Cの何が変わった..
3SerialPortクラス
4Unicode(ユニコード)の壁
5マルチスレッドの壁
6RS-232C サンプルコード
7RS-232CのHEXモニタ
8RS-232C 送信モジュール
9RS-232Cのループテスト
10RS-232Cのピンチェンジ..

VB.NET C#全般
1羊の皮を着た狼 VB.NET
2Form1、Form2の相互参照
3Form1、Form2の相互参照 2
4VB.NET C# データ型の基本
5VB.NET C# 文字列
6VB.NET タイマー精度
7BackgroundWorkerの魅力1..
8BackgroundWorkerの魅力2..
9VB6のタイマー
10コントロールの配列をインデクサ..
11コントロールの配列はジェネリク..
12インデクサ(C#、VB.NET)
13インデクサでBit操作
14Unicode 入門
15デリゲート入門
16マルチスレッド入門
17イベント入門
18デリゲートとイベント
18インターフェースの基本

RichTextBox関係
1RichTextBoxの不思議
2テキスト色付け高速化計画
3VB.NET RichTextBox1
4VB.NET RichTextBox 2

Socket通信
1C#、VB2005 でSocket通信
2サーバー 複数接続

プロセス間通信
1プロセス間通信(送信側)
2プロセス間通信(受信側)


質問、意見はこちらに
画像ファイル


性能の向上
RS-232Cは古くから有る通信方法である。
始めの頃のRS-232Cの通信はひどい物で、データの取りこぼしやデータ化けは日常茶飯事であり
安心してデータを送受信出来る状態では有りませんでした。
しかしながらその後PCの革命的な性能向上の結果、今ではデータの取りこぼしや、データ化けは
皆無と言って良いと思われます。
其の理由はPCのクロックの高精度化、PCのや周辺モジュールの高スピード化、PCのメモリー
容量の増加などであります。

通信の設定条件の変化に伴う推奨設定
RS-232Cの性能向上に伴って通信設定の中には現在では不要な設定が幾つかあります。
これは従来の機器との互換性を保つ為に残っているものです。
下に推奨設定値を示します。

名称 デフォルト値 推奨設定値 説明
BaudRate 9600 ボーレートに関しては9,600ボー以下で使われることはほぼ無いと考えられます。
ただし送信データ量の少ない場合や、ケーブルが長い場合はボーレートを下げます。
DataBits 8 これは通信速度が遅い時に少しでも送受信のデータ量を下げる為の物で、
8ビット固定で良いと考えられます。(英語圏は7ビットを使うことも有る。)
DiscardNull False Nullバイトも受け取れる様にします。
DtrEnable False True 相手の機器が対応していれば積極的に活用します。
Handshake None RTS 相手の機器が対応していれば積極的に活用します。
Parity None これはクロックの精度が悪くデータの取りこぼしやデータ化けが起こる可能性が有る場合に
使用しましたが、現在は完全に不要です。
ParityReplace 63 Parityは使いませんので何でも構いません、ちなみに63はアスキーコードで"?"です。
PortName COM1 コントロールパネルで確認して設定します。
ReadBufferSize 4096 これより小さくしない方が良いでしょう。
データ量が多い場合は増やします、この場合1024の整数倍に設定することを推奨します。
ReadTimeout -1 タイムアウトは起こらないと仮定します。
ReceivedBytesThreshold 1 1バイトでも入力が有ればイベントが起きるように設定します。
RtsEnable False 自動に任せます。
StopBits One クロックのずれの補正やデータ処理が間に合わない場合に2を設定しましたが、
これに関しても、1ビット固定で全く差し支え無いと思われます。
WriteBufferSize 2048 データ量が多い場合は増やします、この場合1024の整数倍に設定することを推奨します。
WriteTimeout -1 タイムアウトは起こらないと仮定します。

PC対PCの通信 ソケット通信かRS-232Cか
通信データの量もPCと其の周辺機器の進歩に伴って大きく変化しています。
PC対PCのデータ通信はソケット通信が主流となっていますが、大量のデータをRS-232Cでやり取りすることは賢明とはいえません。
殆どのPCの通信の場合RS-232Cを使用しないでソケット通信にする方が良いでしょう。
ただし次の場合はRS-232Cを使用します。
1、他の機器と互換性の有るモードでRS-232C通信を行ないたい、例えばRS-232Cのシュミレーターを作る。
2、絶えず一定の速度(リアルタイム)で通信を行ないたい。
3、ネットワークを使いたくない。
は例えばPC対制御機器で通信を行ないたいので有るが、まだ制御機器が無く他のPCを制御機器の変わりにしたい場合である。
制御機器との通信が上手くいかず、PC対PCで確かめることもよく使われる方法である。
ですが、実はソケット通信はリアルタイムでは無いのです。
これはネットワーク依存であり、ネットワークが忙しかったり、PCが忙しい場合は通信が遅れる場合があります。
例えば、親のPCが1台有ってこれに2台のPCが繋がっており、各PCが他の機器の制御を行なっているような場合で速い制御が
必要な場合は、全てのデータのやり取りを、RS-232Cで行なった方が良いでしょう。


PC対機器の通信 ソケット通信とRS-232Cの両使い
最近の制御機器や測定器はソケット通信機能を持った物が多く、制御はRS-232C通信で、
データはソケット通信で送る方式が増えてきています。

VB6からVS2005で何が変わったのか。
VB6以前から大きく変わったのは次の2点です。
この2点を押さえておけばVB6以前とほぼ同じ考え方でコードの作成が可能となります。

1、イベントがマルチスレッド化された
一番大きい変更は何と言ってもVS2005の場合serialPort(SerialPort)コントロールのイベントが
セカンドスレッドで起こることです。
これは有る意味で待ちに待った仕様ともいえます。
セカンドスレッドにする事により、大きいデータの受信やデータ処理に時間がかかる場合でも
メインスレッドが固まることがなくなりました。
ただし次の問題があります。
イベントの中で例えば受信したデータをメインスレッドのテキストボックスに書き込みたい等と言う場合は
マルチスレッドの知識が必要不可欠となります。
この方法は 「マルチスレッド入門」 を問題解決は 「マルチスレッドの壁」 ご覧下さい。
なおserialPort(SerialPort)コントロールのイベントは、
1、DataReceived
2、ErrorReceived
3、PinChanged
の3つだけです。

2、全てユニコードになった。
次はユニコードの問題です。
VS2005の文字操作は全てユニコードで行なわれます。
PC対PCの通信においては両方とも文字操作はユニコードですので問題はありませんが、
PC対機器の場合は問題になる事があります。
PC対機器のRS-232Cの通信をByteモードで行なう場合は全く関係有りませんが、
文字列で送受信する場合は問題になります。
大抵の機器はSift-Jisで文字列を扱いますが、PC側がユニコードで有る場合は、
正しい通信が行なわれません。
ユニコードについては 「Unicode入門」 を問題点の解決には 「Unicodeの壁」 をご覧下さい。

画像ファイル