The machine we are producing has some options. The software should be the same for all options. We want to configure the software with bits (option x ordered/present or not).
These configuration bits come from an interface to an PC. If the customer changes this bits (unintended or not) it can cause machine damage.
So I want to compare the previous machine configuration from commissioning with the actual bits from the interface. If there are differences the best way in my opinion is to stop the controller to prevent the machine from damage.
Putting the PLC into stop is usually pretty drastic step, because you can't recover from it without intervention. Once the PLC is stopped, the program stops executing, so it can't start back up again. Depending on the platform, once stopped, the PLC might need the switch flipped again, a power cycle, or a programmer to go in with the software to restart it.
Typically, I see the method
tspisak mentioned, where you just don't execute the code you don't want run. This allows the PLC to decide that the error condition is gone, and it can resume operation. However, if your intention is to essentially force a service call because the machine is in a state where it could damage itself, forcing a Stop might really make sense.
If you haven't already done this, it might make sense (if you can) to give some kind of encryption/password protection to the part of the code that checks to see if the machine commissioning is valid. If the users are going in and fiddling, they could just as easily go in and delete the code that disables the machine, unless it is protected.
To the best of my knowledge the Logix platform does not have a command to programmatically put the plc into stop mode. However, using the SSV instruction you can inhibit selected tasks.
Hmm, I didn't realize Logix didn't have a Stop instruction. Thanks, it's good to know.