IO Status Monitor Module
MODULE_NAME='IOStatusModule'(DEV dvIO, DEV tp_IO[])
/*
pass in an EXB device, or the IO/Relay port from a master
and an array of touchpanels (ports)
*/
DEFINE_CONSTANT
INTEGER STATUS[] = {11,12,13,14,15,16,17,18} //shows I/O status. feedback only.
INTEGER CHANNELS[] = {1,2,3,4,5,6,7,8} //the I/O channels
INTEGER BTNS_ON[] = {21,22,23,24,25,26,27,28} // turn on a channel
INTEGER BTNS_OFF[] = {31,32,33,34,35,36,37,38} //turn off a channel
DEFINE_EVENT
BUTTON_EVENT[tp_IO, BTNS_ON]
{
PUSH:{
ON[dvIO, CHANNELS[GET_LAST(BTNS_ON)]]
}
}
BUTTON_EVENT[tp_IO, BTNS_OFF]
{
PUSH:{
OFF[dvIO, CHANNELS[GET_LAST(BTNS_OFF)]]
}
}
CHANNEL_EVENT[dvIO, CHANNELS]
{
ON:{
ON[tp_IO, STATUS[GET_LAST(CHANNELS)]]
}
OFF:{
OFF[tp_IO, STATUS[GET_LAST(CHANNELS)]]
}
}
gist of main
DEFINE_DEVICE//IO
dvREL8_1 = 12001:1:0 //exb-rel8
dvIOMaster_1 = 5001:4:0 //ni-700
dvTP1REL8_1 = 11001:61:0 ; dvTP2REL8_1 = 11002:61:0 ; dvTP3REL8_1 = 11003:61:0
dvTP1IOMaster_1 = 11001:66:0 ; dvTP2IOMaster_1 = 11002:66:0 ; dvTP3IOMaster_1 = 11003:66:0
DEFINE_CONSTANT
DEV dv_TPs_REL8_1[] = {dvTP1REL8_1,dvTP2REL8_1,dvTP3REL8_1}
DEV dv_TPs_IOMaster_1[] = {dvTP1IOMaster_1,dvTP2IOMaster_1,dvTP3IOMaster_1}
DEFINE_MODULE'IOStatusModule' mdldvREL8_1(dvREL8_1, dv_TPs_REL8_1)
DEFINE_MODULE'IOStatusModule' mdldvIOMaster_1(dvIOMaster_1, dv_TPs_IOMaster_1)
Might throw in some diagnostics window messages. Mostly this is just a way to have a panel page for ringing stuff out and seeing what's going on with your IO, without having to muck with your main program logic.
Comments
This is something I'd probably just do in diagnostics/notifications and not even bother with code myself. But thanks.