1) При ошибках/таймауте - в буфере может быть что угодно. Соответственно, надо проверять результат операции чтения/записи и, при необходимости, выполнять нужные действия (например, обнулять регистры, выводимые на экран).
2) Можно указывать просто имя массива. В примерах везде используется взятие адреса, чтобы не усложнять документацию и отдельно не пояснять, почему такой код не работает:

Код:
Reads(HMI_LOCAL_MCH, 0, TYPE_PSW, 300, 4, PSW[400]);
а такой - работает:

Код:
Reads(HMI_LOCAL_MCH, 0, TYPE_PSW, 300, 4, &PSW[400]);