私は大学の化学科のプロジェクトに取り組んでいる学生です。昨年、私は C++ プログラムを書き、ピコモーター ステージを制御し、それを力圧センサーと通信させ、センサーに触れるまでステージを上下に動かしました。このプログラムを作成するために、会社が提供した DLL を使用しました。少し時間がかかりましたが、すべてが機能するようになりました。
今年は、プログラムに第 2 段階を組み込み、プログラム全体を C# を使用して GUI に更新します。2 番目のステージと力センサーは、C# で動作する DLL のみを提供しますが、古いステージは C++ を対象としていました。3 つすべてを新しい C# GUI プログラムで動作させることができました。この問題を除けば、ほとんどすべて完了しています。
古いプログラムでは、次の関数を使用してステージ上のモーターが動いているかどうかを判断できました。
#define MOTOR_MOVING 0x01
byte isMoving = LdcnGetStat(pico_addr) & MOTOR_MOVING;
byte LdcnGetStat(byte address) は、指定されたアドレスにあるモジュールの最後のステータス バイトを返します。私が持っている取扱説明書によると、モーターが動いているときにビット0が設定されると想定されています。したがって、bool 変数を使用して C++ プログラムでテストすると、モーターが動いていないときは isMoving が 0 になり、動いているときは 1 になり、モーターの動きが止まるとすぐに 0 に戻ります。正常に動作します。
しかし、C# では、これを組み込むのに問題があります。
byte isMoving = LdcnGetStat(pico_addr) & MOTOR_MOVING;
動作しません。明示的なキャストを行う必要があります。だから私はこれに変更しました:
bool isMoving = Convert.ToBoolean(LdcnGetStat(pico_addr) &
Convert.ToBoolean(MOTOR_MOVING);
それは私にエラーを与えませんが、LdcnGetStat(pico_addr) は常に「true」を返します。これは、0 になることはないためです。LdcnGetStat() が吐き出す値をテストすると、モーターが動いていないときに 28 が返されます。移動している場合は 98 を返します。移動後にもう一度テストすると、23 が返されます。
C#でこれを処理する適切な方法はありますか? LdcnGetStat が正しい数値を返すかどうかを確認することを考えていますが、特に値が移動後に変化するように見えるため、それを処理する正しい方法とは思えません。
ありがとう