Fault Identification in Petri Nets: Theory and Implementation