Do you have any "Computer Programming" experience? Do you have a "C", "C++", "VB" or "VB++" Compiler?
If YES to both questions, then you can build your own PLC.
To get the REAL effect, in fact, to produce REAL PLC-type control, you would need to get an "Input" card and an "Output" card.
(If you are a real bit-wienie, you could use your parallel port. Search the NET for Jan Axelson & Parallel Ports)
The key to the design is to mimic the operation of a PLC. That is, Read the inputs, Eval the ladder, then Write the outputs. Then repeat the whole process (on a periodic basis). The fast your processor, the shorter your "scan-time". Although, you have to be aware of the speeds associated with your Input card.
I don't know of any typical PLC that has a 1-Gig processor. That is a typical speed for todays PC's. Timing Critical Applications??? Is a PLC REALLY the right answer???
Your program won't operate exactly like a PLC. That is, the nature of a PLC program is that its primary mission is to automatically loop in the manner described above -- more or less like a GO-TO.
GENERALLY, the shorter the code, the sooner the PLC can GO-TO and restart the process. There is a certain minimum amount of time dedicated to house-cleaning. So you can't really approach Zero-Scan-Time.
On the PC, the PLC Program is DEFINED as a SYSTEM INTERRUPT ROUTINE. That Routine is "CALLED" by a particular SYSTEM INTERRUPT (This is definable). The System Interrupt is specified to occur on a time-basis (just like other normal, PC-type, timed Processor Interrupts).
When the Interrupt occurs, the Interrupt is handled by the processor on a right-now basis. After a small amount of house-cleaning, in preparation for handling the "Interrupt Routine", the Interrupt "CALLS" the particular Interrupt Routine.
That Interrupt Routine IS the PLC Program!
The PLC Program runs to completion and then goes back into hibernation until the next time it is "Called".
And, so it goes...
It's really not such a spooky thing, if you have the tools and the in-sight!