PLCのラダー図を使用して入力の方向をどのように決定しますか?つまり、以前の状態をどのように保存しますか?
入力の以前の状態。フォトビームがアクティブ化された方向を特定する必要があります。順方向または逆方向。それらが逆にアクティブ化されている場合は、1つのアクションを実行します。それらが前方にアクティブ化されている場合は、別のアクションを実行します。1から6のラベルが付いた入力。法線方向は1から6です。
ラダーロジックでのラッチの簡単な実装は次のとおりです。
|-----[ ]-----+-----------------( )--------|
| input | output |
| | |
|-----[ ]-----' |
output
出力をリセットできるのは次のとおりです。
|-----[ ]-------------+---------( )--------|
| input | output |
| | |
|-----[ ]-----[/]-----' |
output reset
これらは、ラダーロジックのメモリの基本的な構成要素を形成します。よくわかりませんが、これはあなたが探しているものですか?
通常、ラダーロジックを実装する言語には、DおよびTフリップフロップなどのメモリを実装する高レベルの要素があります。ラダーロジック実装のドキュメントを読んで、それらが利用可能かどうかを確認してください。
OK、あなたのコメントから、あなたが望むものは次のように見えます:
// Pseudocode:
// a = sensor 1
// b = sensor 2
if (a) {
a_triggered = true;
}
if (b) {
if (!a_triggered) {
REVERSE_DETECTED();
}
else {
a_triggered = false;
}
}
これは、遷移が10-> 11-> 01であり、アイテムが両方のセンサーをトリガーしている間は進行方向を検出できないように、センサーが互いに接近していることを前提としています。これを宣言的に書く:
a_triggered = (a || a_triggered) && !(b_triggered && !b);
b_triggered = (b || b_triggered) && a_triggered;
reverse_detected = b && !a_triggered;
これは次のように解釈されます。
|-----[ ]---------+-----[/]--------( )--------|
| a | c a_triggered |
| | |
|-----[ ]---------' |
| a_triggered |
| |
|-----[ ]---------+-----[ ]--------( )--------|
| b | a_triggered b_triggered |
| | |
|-----[ ]---------' |
| b_triggered |
| |
|-----[ ]----------[/]-------------( )--------|
| b_triggered b c |
| |
|-----[ ]----------[/]-------------( )--------|
| b a_triggered reverse_detected |
これで、逆検出された信号を使用して、必要な処理を実行できます。ラダー言語にラッチがある場合は、次のようにすっきりさせることができます。
| _________ |
|-----[ ]--------------------|set latch|------|
| a | | |
|-----[ ]--------------------|clear | |
| c |_________| |
| a_triggered |
| _________ |
|-----[ ]--------------------|set latch|------|
| b | | |
|-----[/]--------------------|clear | |
| a_triggered |_________| |
| b_triggered |
| |
|-----[ ]----------[/]-------------( )--------|
| b_triggered b c |
| |
|-----[ ]----------[/]-------------( )--------|
| b a_triggered reverse_detected |
DirectLogicプログラマブルコントローラを使用すると、これを非常に簡単にする差動入力があります。ほとんどのPLCにも同様の指示があることは間違いありません。
ただし、DirectLogic PLCを使用している場合、それらのRLL-Plusステージプログラミングは、ラダーロジック領域内の「ステートフル」プログラミングのはるかに明確な実装になります。
正の差動は、入力がローからハイになるときに出力ロジックを実行するために使用されます。これは1サイクルにのみ当てはまるため、ラッチを掛けるか、「セット」を利用する必要がある可能性があります。これは、オーバーラップしているフォトセルによって異なります。
|
|----] _| [------] [----------------------( set )---|
| 1 2 | reverse detected
| |
|----] _| [------] [--------|
| 2 3 |
| |
|----] _| [------] [--------|
| 3 4 |
| |
|----] _| [------] [--------|
| 4 5 |
| |
|----] _| [------] [--------|
| 5 6
|
|
この場合、2がオンで、1がハイになると、逆方向検出ビットをセットまたはラッチします。または、可能な反転ごとに入力ロジックを実行すると(3がオンのときに2がハイになります)、そのようなことを気にする場合は、これを1つのラングに抑えることができます。
フォトセルに重なりがあるかどうかはわかりませんでした。重複していない場合、私はこれをslebetmanの答えのように行うかもしれません:
|
|----]|_ [-------------------------------( set )---|
| 2 2 exited
|
|----]|_ [-------------------------------( set )---|
| 3 | 3 exited
| |
| |---( rst )---|
| 2 exited
|
|
|----]|_ [-------------------------------( set )---|
| 4 | 4 exited
| |
| |---( rst )---|
| 3 exited
|
|
|----]|_ [-------------------------------( set )---|
| 5 | 5 exited
| |
| |---( rst )---|
| 4 exited
|
|
|----]|_ [-------------------------------( set )---|
| 6 | 6 exited
| |
| |---( rst )---|
| 5 exited
|
|
|----] _| [------] [----------------------( set )---|
| 1 2 exited | reverse detected
| |
|----] _| [------] [--------|
| 2 3 exited |
| |
|----] _| [------] [--------|
| 3 4 exited |
| |
|----] _| [------] [--------|
| 4 5 exited |
| |
|----] _| [------] [--------|
| 5 6 exited
|
マニュアルから:
And Positive Differential命令は、通常開いている接点をラング内の別の接点と直列に論理的にANDします。連絡先のステータスは、関連する画像レジスタポイントがオフからオンに移行するまで開いており、1回のCPUスキャンで閉じます。その後、別のオフからオンへの移行まで開いたままになります。