I have only done this one time at the customer's insistence, but I advise against it. The technique I used was with a serial IO block that used a custom protocol. Basically it would send the outputs, then the IO would respond with the values from the inputs. This would then trigger the next request cycle. I created a custom class that had an InputsChanged Event and properties for the outputs.