• ベストアンサー

シリアル通信の信号監視について

MSCommを使用して通信プログラムを作成しています。 そこで、CTS信号、DSR信号、CD信号のON/OFF状態を検出したいのですが、OnCommイベントとしてはDSRのみが1から0に変化した場合にイベントが発生し、他の二つは変化が発生したときにイベントが発生することになっています。 この仕様ですとCTSおよびCDのON/OFF状態を取得する方法がわかりません。どなたかご教授願えれば幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

CTSHolding、DSRHolding、CDHoldingのプロパティで判ります。

shima56
質問者

お礼

早速の回答大変ありがとうございました。 VBの素人なもので全てのプロパティを熟知しておりませんでした。大変助かりました。

関連するQ&A

  • 232C通信の受信について

    232C通信にてVisualBasicの場合、MSCommのOnCommイベントというのがありますが、Cで使えるDLL等で同じようなもの(受信したときに発生する)ってあるのでしょうか?もしくはAPIとかでサンプルソースがあれば教えてください。 宜しくお願いします。

  • シリアル通信

    例えば、スイッチが幾つかあるとします(10個くらい)。 そのスイッチのオン、オフの状態をRS232C等のシリアル通信でパソコンに取り込むにはどうすればいいですか? スイッチの信号はデジタル信号で1か0の状態だという事くらいしか分かりません。

  • シリアル通信エラー

    VBのMSCommにてシリアル通信アプリを作成しました。 デスクトップPC(Win2000)では正常に動作するにも関わらず、 ノートPC(WinMe)ではデータ受信時にとりこぼしが発生する様です。 とりあえず、MSCommのOnCommイベントプロシージャ内でCommEventプロパティにて エラーコードを引っ掛けると、1006(ポート オーバーランです。ハードウェアから 1 文字が読み取られる前に、次の文字が受信されたため、先の文字は失われました。)というエラーが返却されます。 デスクトップPCでは何日か継続して通信させておいても、全くこのエラーが出ないのに ノートPCでは数秒~数分で頻繁に発生します。 このエラーの意味について調査したのですが、様々なHPを見ると、FIFOバッファ(通常16バイト)のエリアが一杯になり、前にかかれていたデータが上書き されたという事ではないかという所に辿り着きました。そこで、デバイスのポート設定の詳細 にて受信バッファを低レベル(1バイト受信毎にCPU割り込みを発生)にする事により、なるべく FIFOバッファの余裕を持たせる設定にすれば、問題は解決あるいは頻度の減少を期待出きる と思い、設定したのですが、結果は全く変わりませんでした。そこで質問です。 1)このエラーの意味は本当にFIFOバッファのオーバーランなのでしょうか。 2)もし、そうであるならば、解決策はあるのでしょうか?  フロー制御で回避出きる問題ではありませんよね? 3)このFIFOバッファあたりの調査が可能なツールはありますでしょうか?出きれば、本当にFIFOバッファが一杯になる現象がデータとして取得出きればうれしいのですが。 現在、MSCommの設定としては以下の通りです。 Settings=115200,N,8,1 InBufferSize=3000 Handshaking=2 以上、1)~3)すべてでなくても構いません、よろしくお願いします。

  • MScommのOncommイベントが発生しない

    ACCESSでMScommオブジェクトを使用し、ある機器からデータの読み取りを行いたいのですが、肝心のOncommイベントが発生いたしません。 なにか、ライブラリの参照設定が必要なのですか? それとも、自分の設定間違い(不足)なのでしょうか? 前にVBでMScommを使用したことがありますが、なにも特別なことはしなかったような・・・(MSCOMM32.OCXを使用しています) 補足が必要であれば、追記いたします。

  • VB6でのシリアル通信について質問です。

    VB6でのシリアル通信について質問です。 現在、VB6で開発したラベル印刷のシステムを引き受けたのですが、以下のような状況に陥り困っております。 ・プリンタからPCへの接続はシリアル通信のみ。 ・現在使用しようとしているPCにはシリアル通信のポートがなく、USB接続のみしかできない。 ・RS232CからUSBへの変換コネクタを使ってPCとプリンタを接続しようとしているが、印刷実行時に実行時エラー 8015が発生する。 ・VBからプリンタへの通信はMSCommを使用している。 ・プログラム自体は客先にソースのみが残っていたもので、仕様書等はまったくない。 ネットで調べたところ、MicrosoftのサイトではUSBポートからMSCommを使って通信をする事はできないというような事が記載されておりました。 ただ、他のサイトを色々と調べたところ、普通に通信できるとの意見も記載されておりました。 実際のところ、VB6でRS232C-USB変換コネクタを使用してプリンタへのシリアル通信は可能なのでしょうか。 可能な場合、今回発生したエラーの原因になりそうなものとはなんなのでしょうか。 また、通信が不可能な場合、代替策としてどのような方法を取るのが一番ベストなのでしょうか。 どなたか何卒ご教授よろしくお願い致します。

  • PICのPIN変化割り込みについて

    何気なく使っていましたがPIC(16F)のPIN変化割り込みの使い方についてです。このPIN変化割り込みは1→0でも0→1でも検出ができるようですが使い方として一度PORTBをWに読み出す(MOVF PORTB,W)必要があるのでしょうか。 読み出すことで変化前の設定値とするということのようですが。 本題(?)ですがスイッチでON,OFFする場合にON時とOFF時を検出したい場合(割り込み発生)スタート前(初期状態:OFF:1)にPORTBをWに読み込み初期値を設定しスイッチがON(0)になり割り込み発生。 今度OFFを検出する場合にはこのONの状態でPORTBをWに読み込み復帰することでスイッチのON→OFF,OFF→ONを検出が可能という事で処理は良いのでしょうか? 本にはあまりPIN変化について載っていませんので詳しく使い方がわかりませんです。よろしくお願いします。

  • VB2005でシリアル通信(RS-232C)

    全くの初心者です。 オリジナルの計測装置とそれ用のソフトを作成することになりました。 ソフト作成の前にハードとの通信仕様を考えているのですが、 下記の点がよくわからず、どなたかご教示いただけないでしょうか。 ・RTSをフロー制御でなく、通信の一部(ハードへの命令信号)して使用したい。(データ送受信と全く独立してRTSをオン・オフしたい) ・調べたところ、EscapeCommFunctionが関連ありそう ・VB2005 express editionでEscapeCommFunctionのAPI(?)が使えるでしょうか。また、他に方法があるでしょうか ・また、Excel(2000)のVBAで同様のことが可能でしょうか。 よろしくお願いいたします。

  • VB RS-232C 通信プログラム

    何度もお世話になっております。(VB6.0 MSCommを使用した通信プログラムを作成中です。)私は新卒で食品会社に入社したのですが,プログラムの分かる上司が身近では誰1人といない状況で困っています。 今作成しているのは,重量計に荷物が乗った段階で作業者がデータ転送ボタン(重量計についている)を押すと,重量計のデータ(500kgというデータ)をシリアルでCOM1に取り込み,フォームにエクセルのセルを作成し(OLEを用いて)保存できるようにしたいと考えています。 (重量計から送られてくるデータのフォーマット) 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 S T , N T , + 0 0 1 2 . 3 4 k g CR LF ST ; ヘッダ1 NT ; ヘッダ2  CRLF ; ターミネータ                   の18バイトのデータです。 ここで質問なのですが (1) 以下のプログラムで重量はバイト配列に受信できていますでしょうか?(実際に重量計とPCを接続できれば良いのですが工場の稼動状況が関わっておりすぐにはできません。) (2) 18バイトのデータを受信するからと言って RThreshold = 18 として良いのでしょうか? 普通,データは1バイトずつ送られてくると思うので RThreshold = 1としてイベントを発生させる必要があるのかとも思うんですが。 'MSComm1,2(COM1,2)コントロールの初期設定 Private Sub Form_Load() MSComm1.CommPort = 1 '通信ポートを設定 MSComm1.Settings = "9600,n,8,1" '通信条件の設定 MSComm1.RThreshold = 18 '固定長のデータ End Sub Private Sub Port1_Click() 'Port1_Clickのクリックイベントプロシージャ If MSComm1.PortOpen = False Then 'シリアルポートのオープン MSComm1.PortOpen = True End If LPort1.Text = "" 'テキストボックスのクリア受信 End Sub Private Sub MSComm1_OnComm() '受信のOnCommイベント Dim Buffer1(0 To 17) As Byte '受信バッファの変数宣言(18バイト) Select Case MSComm1.CommEvent 'CommEventプロパティに対する処理 Case comEvReceive '受信データ有り    Buffer1 = MSComm1.Input '受信データをバッファに格納 'これより下は受信した18バイトから必要なデータ8バイト目から4バイト分切り出し,dという配列(4バイト)に格納できないかと考えました。 Dim i As Integer Dim d(0 To 3) As Byte d = MidB(Buffer1, 8, 4) LPort1.Text = d 'LPort1.Text = Buffer1 '受信データをテキストボックスに表示 End Sub

  • シリアル通信 VB 受信したデータ

    初めまして。 今現在,RS-232Cのシリアル通信で,重量計で測定したデータ(990kg)をCOM1に取り込めるようにするプログラムを作成中です。 出力データのフォーマットは以下のようになっています。 ST   , GS   , +0012345  kg  CRLR  ヘッダ1  ヘッダ2   データ  単位  ターミネータ 18バイトのデータを受信していることになります。 ここで質問なのですが,プログラムでは1バイトずつイベントを発生させて1バイトずつ受信させているのですが,1バイト×18回 のデータをどのようにつなぎ合わせれば18バイトのデータとして扱えるようになるのですか? うまく説明できていないかも知れませんが,お分かりの方がいらっしゃいましたら宜しく御願いします。 VBではOnCommを使用しています。

  • RS232Cについて

    プログラミング初心者です。 Visual Basic6.0のMScommコントロールで0と1の文字を判別して、mscomm1.outputでon/offの出力信号を送信する方法ってありますか。どなたか御教授願います。