2012-02-15 7 views
2

私は、2つのモーターを制御する簡単なプログラムを作成しています。安全上の理由から、ライトカーテンです。このプログラムでは、ユーザーは「Run」をヒットし、(新しいスレッドでは)ライトカーテンに何も入らないとモーターはさまざまな位置に移動します。ライトカーテンに何かが入ると、直ちにすべての動作を停止する(すなわち他のスレッドを停止させる)イベントが発生します。どのスレッドタイプを使用するのが適切な停止/中止ですか?

この状況ではどのスレッドタイプを使用しますか?私は曖昧にはSystem.Threading.Threadに精通しており、小規模の数値計算タスクにはThreadPoolを使用しています。

また、ライトカーテンが破損した場合は、ハードウェア(スレッド)を安全に止める適切な方法はありますか?私はAbort()メソッドが行く方法ではないと聞いてきました。

ありがとうございます!私は、.NET 2.0を使用しています

EDIT

+1

私はそれをハードウェアで行います - モーター制御エンクロージャーにパワーリレーを閉じたライトカーテンコントローラーから専用ケーブルを実行します。また、モーター制御の中断により、作業が安全に、進行中の作業やモーター/ギアボックス/工具などに損傷を与えずに再始動できるようにソフトウェア信号が必要です。 –

+0

@MartinJames実際には、モータはリニアアクチュエータであるため、最高速度で負荷を動かして電力をカットすると、最後までスラミングするまでスライドし続けます。私はその信号を受け取り、速く、制御されたニアストップに持って行き、すべてのパワーをカットしたいと思っています。 – john

+0

リレーが短絡したり低インピーダンスのダミー負荷に接続したりすると、アクチュエータが遠くまで滑り落ちることはありません:)しかし、私はあなたのことを思い出します。ソフトウェア制御の停止が全体的に安全かもしれません。 –

答えて

4

は、コードにとって最も安全なものではなく、エンジンの停止を保証する方法のようにも見えません。スレッドコードがある種のループに入っていない限り、常時デッドマンスイッチを押してください。言い換えれば、

は、安全に、彼らは同じものになるとは思われない(すなわちスレッド)

ハードウェアを停止します。

あなたのモータースレッドは協力して、キャンセルフラグを継続的にポーリングします。これはすべてのソリューション(スレッド、TPL)に適用されます。

+0

これは最高の答えです。キャンセルは複数の理由で協力的でなければならない – usr

関連する問題