IO Log Monitor
This example will monitor the IO Log utilizing the IoLog
class. There are many ways to watch IO for changes. You could simply poll the IO and see if it changes. You are likely to set up a polling routing on some interval. If that interval is not fast enough then you have the potential of missing an change. Using the IO Log ensures that you see that a transition occurred. You have the added benefit of getting the exact time of that transition to the millisecond. This helps if you are measuring the time between transitions.
package com.integpg;
import com.integpg.system.IoEvent;
import com.integpg.system.Iolog;
import java.util.Date;
public class IOLogSampleMain implements Runnable {
private final Iolog _iolog = new Iolog();
private Thread _thd;
public static void main(String[] args) throws InterruptedException {
new IOLogSampleMain().start();
Thread.sleep(Integer.MAX_VALUE);
}
public void start() {
if (null == _thd) {
_thd = new Thread((Runnable) this);
_thd.setName("IoLogMonitor");
_thd.start();
}
}
@Override
public void run() {
long lastConsumedTimestamp = System.currentTimeMillis();
while (true) {
try {
// refresh the iolog object so that we only get new events since the last time we queried it
_iolog.refresh(lastConsumedTimestamp);
// get the events for the inputs only
IoEvent[] ioEvents = _iolog.getInputEvents();
// make sure there were returned events
if (ioEvents.length > 0) {
System.out.println("IoLogMonitor returned " + ioEvents.length + " events");
// go through each event and print some meaningful information about it
for (int index = ioEvents.length - 1; index >= 0; index--) {
IoEvent ioEvent = ioEvents[index];
System.out.println("ioEvent[" + index + "]: time: " + ioEvent.timestamp + " changed input mask: " + Long.toHexString(ioEvent.mask) + " input states mask: " + Long.toHexString(ioEvent.states));
// update our lastConsumedTimestamp with the date of the most recent event
if (ioEvent.timestamp > lastConsumedTimestamp) {
lastConsumedTimestamp = ioEvent.timestamp;
System.out.println("lastConsumedTimestamp: " + new Date(lastConsumedTimestamp));
}
}
}
Thread.sleep(100);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
By Kevin Cloutier | Updated On November 3, 2023 2:23 pm | No Comments | Categories: Embedded Programming, Java Code Samples | Tags: digital inputs, iolog