Yes, this does sound like a bit of a problem- having the status bit in the group will cause the trigger to fire each time it gets set to 0 or 1.
Unfortunately I can’t think of any quick way to get it to work with just one group… there might be a way, but all opc items get taken into account for the async change, and you can’t write to an item that’s not in the group.
Probably the easiest thing to do would be to have 2 groups and use the database to communicate between them.
Your first group would be set up as is, only without the status bit. The items are all read only, so it won’t write to the database, therefore just set its settings to “update first row” of a table called “unused” or something.
The next group has just your status bit in it. It’s set to run every 1sec or so (or as quickly as you need to feed back the status), no trigger. Set group mode to “Bi-directional, db wins”. Set it to update “custom”, with a table name of “machine_status” and a where clause of “machine_id=1”. The last part is optional, you can have it update the first row, but I’m just trying to be robust in case there are more machines. FactorySQL will create the column and the row for you anyhow, so it’s pretty easy.
Back in the first group, create an action item, and set it to “SQL Query” mode. As the expression, use:
UPDATE machine_status SET statuscode=1 WHERE machine_id=1
Of course, “statuscode” should be the actual name of the status item column.
And that’s it- by default, the action item will only run when the group is triggered. So, an item changes, the group triggers, and 1 is written to the db field. The other group synchronizes that with the plc, writing it down. The plc sets it back to 0, which gets sync’d back to the db, and it’s ready to go again.
Like I said, there might be another way to do it, but that’s what came to mind. Hope it helps.