8bitの2進数でタイムリーに0を検知するプログラムについて

試してみたこと

いつもお世話になっております。
現在、C#にて8bit(8入力)のデジタル入力を検知するプログラムを作成しています。

TOP16というI/Oボードを使用しており、提供されたDLLからI/Oの入力状態を監視し(該当の入力があったらアクションを)させようとしています。

入力される値は以下のように10進数で取得することができます。(悩んで悩んで・・やっと分かりました)
例として一部を記載します。

無入力であれば 255 (11111111)
Input1が入れば 254(11111110)
Input2のみが入れば 253(11111101)
Input4のみが入れば 247(11110111)
Input1と3が入っていれば 250(11111010)

8入力なので2進数の1桁目がInput1で8桁目がInput8となります。

同時に複数のInputが入っていることも想定し、若いInput入力でbreak;をせず全Inputの状態を取得したいです。
実際に複数の入力があった場合、Input1が入っていることを条件にInput3はアクション可能というような使い方も想定しています。

そこでここ3日ほど、乏しい経験と無い頭をフル稼働し自分でプログラムを作ってみて一段落したと思ったのですが、

ふと。もっと良い書き方、例えば配列を使ったりする方法もあるのではないか?と思った次第です・・・

ここで別の手法を使って同じ結果を出せるようになれば一皮むける気がしているのですが、
苦渋の決断で経験豊富な先輩方の知恵をお借りできればと思い、こちらで相談させて頂くことにしました。

稚拙なプログラムで公開するのは恥ずかしいのですが私の考えたを記載したいと思います。
どうか皆様のお知恵、アイデア、アドバイスを頂けませんでしょうか?
どうぞ宜しくお願い致します。

作成したソースコード

C#

1 //タイマーを使って入力を監視します。2 private void timer1_Tick(object sender, EventArgs e)3 {4 //デジタルインプット(8bit)を取得5 int xInput = Top16.GetInputs(handle);6 7 //10進数を2進数に変換する8 string binaryStr = Convert.ToString(xInput, 2);9 10 //カウンターを初期化11 int count = 0;12 13 //binaryStrの文字列でカウントダウンをさせる14 for (int i = binaryStr.Length - 1; i >= 0; i--)15 {16 char inputBinaryNum = binaryStr[i]; //binaryStrの[i]番目の文字列の切り出し17 count++;18 19 if (inputBinaryNum == '0') //inputBinaryNumが'0'だった時20 {21 if (count == 1)22 {23 //Input1が入ったときのアクション内容を書く24 }25 else if (count == 2)26 {27 //Input2が入ったときのアクション内容を書く28 }29 else if (count == 3)30 {31 //Input3が入ったときのアクション内容を書く32 }33 else if(count == 4)34 {35 //Input4が入ったときのアクション内容を書く36 }37 else if(count == 5)38 {39 //Input5が入ったときのアクション内容を書く40 }41 else if(count == 6)42 {43 //Input6が入ったときのアクション内容を書く44 }45 else if(count == 7)46 {47 //Input7が入ったときのアクション内容を書く48 }49 else if (count == 8)50 {51 //Input8が入ったときのアクション内容を書く52 }53 }54 }55 }

コメントを投稿

0 コメント