1

In some Omron plc logic I have a move statement that looks like this

----------
|@Mov(021)
|        |
|        |
|&110    |
|        |
|        |
|D5000   |  
|        |
|(value) |
|        |
----------

Confused as to what the @ sign means and the & sign?

The reason i ask is, the value is always 0 , 110 , 120 (numbers) but the only moves i find is 0 and &110 , thanks

Glen Morse
  • 2,437
  • 8
  • 51
  • 102

2 Answers2

1

The @ sign (in this case!!! *) indicates a differential instruction. This means the instruction is only executed when the input makes an OFF to ON transition.

Example:

  12.34

---| | -------------------| MOV  |
                          | &110 |
                          | D5000|

For the above, any time 12.34 is ON the decimal value (indicated by &) 110 will be moved to D5000. It will be stored as [x006E]. If you instead used #110 it would be moved as a HEX or BCD value (ie : D5000 would contain [x0110] - a BCD value of 110 or a decimal value of 272, depending on how it is interpreted)

Consider now

  12.34

---| | -------------------| @MOV |
                          | &110 |
                          | D5000|

This will only move the value &110 to D5000 on a single PLC scan when 12.34 turns from OFF to ON. If another instruction later writes to D5000 while 12.32 remain ON then the above instruction will not overwrite it except if 12.34 turns OFF again, then back ON. The @, then, makes the instruction a one-shot instruction - it doesn't work continuously but only once each time the input conditions are fully satisfied.

While different in meaning and implementation, the above rung would work the same as, for example :

  12.34

---|↑| -------------------|  MOV |
                          | &110 |
                          | D5000|

In the above, the 12.34 contact is differential and only turns on for one scan when 12.34 makes an OFF->ON transition. Often, however, you may have more complex input logic such that a differential @MOV instruction, in place of differential contacts, is more convenient or sensible or even required for the desired behaviour.

If you are finding mystery values in your memory locations you can track down where they come from using the Address Reference Tool in CX-Programmer (View -> Windows -> Address Reference Tool -- or ALT+4). Clicking on the D-Memory location in Ladder will list all rungs where that address is used. This should help you find where it is being written to in your program :

Address Reference Tool

* Be careful with other uses of @ in Omron PLCs - See Here

Community
  • 1
  • 1
J...
  • 30,968
  • 6
  • 66
  • 143
  • Also i tried using the find address for D5000 and it only shows 4 spots and they are only moving values #0 and &110 guess ill have to do more diggin.. – Glen Morse Mar 08 '13 at 12:24
  • @GlenMorse Other instructions, like `BSET` or table instructions can move entire blocks - it could be something like that. `DIST` can be a move to an address plus offset. Pointer moves (see the 'be careful' link at the end above) can also move things indirectly (ie: `MOV @D300` could be a move to `D5000` if `D300` contained 5000). Could be tricky to track down... – J... Mar 08 '13 at 12:32
0

The & signs means that the value is a decimal.

  • ok , so that explain the values 0 and 110. But nowhere did i find &120.. Thus it must be something with the @Move(021) ? Any idea what the @ sign means? – Glen Morse Mar 07 '13 at 12:04
  • As far as I know (I'm not an Omron expert) the @Mov(021) is how the notation for the instruction is. Your instruction says: move the decimal value 110 into memory location D5000 If my memory is correct. If you are seeing 0 and 120 in D5000 there must be other instructions working on that addres. – Bart Schouwenaars-Harms Mar 07 '13 at 12:11