Вот здесь

Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 300, 0, TYPE_DWORD, &ArrValueDW);

Уверены, что нужен "&" ?
Ведь ArrValueDW это массив, и его имя уже является указателем (если проводить аналогию с С)