Q:
Using Opto's and building own hardware.

A:

You should have 5v at the input pins when no inputs are turned on. For an input to be on, it has to be connected to ground, but you have to use a reverse module or suitable relay.

We use OPTO 22 G4IDC5 for inputs, G4 ODC5 for DC outputs and G4 OAC5 for AC outputs, however you might be able to buy a similar brand.

G4 IDC5 for DC inputs. Applications for DC input modules include limit switches, photoelectric switches (PE cells), selector switches, push buttons, sensing the presence or absence of voltage, and sensing contact closure from sources such as proximity switches, and TTL-compatible devices.
 

G4 ODC5 for DC outputs. Applications for DC output modules include switching loads such as DC relays, solenoids, lights, and indicators.

G4 OAC5 for AC outputs. Applications for AC output modules include switching loads such as AC relays, solenoids, lights, and indicators.

More information can be found at the OPTO 22 website.

Why use OPTO's. This is so that there is isolation from spikes or static. You will need 5v for these to work, but you still need 5v for the output modules anyway.

Fo inputs if a voltage is applied to the field side of these modules, it will output 0v which will be connected to the input pin (normally kept at a 5v level).

Pin 14 is another output pin that has 0v when the program is loaded or 5v when the program is not loaded. You can use this to drive an SSR or OPTO to switch the 5v supply. This is so that if there is a computer failure or the computer does not reboot to the timer program, then the 5v is disconnected from the input & output OPTOS.

You will need an external 5v supply to operate the outputs and inputs. You have to sink 5v through the Opto's. There is not 5v at the parallel port and it is better to use an external source so that you can not do damage to you computer power supply.