a parte che metà delle formule che citi senza usare le paretesi cambiano se scegli la convenzione di partire da sinistra o da destra per svolgere le operazioni.
comunqe X * a == Z/(1/a), poi mi pare errata del secondo blocco:
I = I + (P * durata loop) / kI;
se i è l'errore precedente ok, è "simile" a fare [valore errore * ?t (durata loop) ]
e del primo blocco
valore errore - valore errore loop precedente / ?t (durata loop)
quì non compare il termine D, ma se lo aggiungi moltiplicando il tutto vedrai che basandoti sul fatto che in realtà la PID del primo blocco è 1/PID del secondo e tutto torna