А что будет если присвоить нечто некачественной ОРС переменной?
Просто будет попытка выполнить присвоение в эту переменную, а пройдёт она, или нет, зависит от OPC-сервера.
Зачем проверять и качество и нил, она может быть качественной и нил одновременно?
Проверка ""if Variable <> nil then" не имеет отношения к качеству переменной, или к её значению. Эта проверка позволяет убедиться в том, что разработчик проекта не забыл выбрать переменную у данного объекта. Допустим есть два поля Field1 и Field2. Поле Field1 связано с переменной A, а поле Field2 не связано с переменными. На событие OnDataChange у этих полей ставим такой универсальный скрипт:
begin
if not (Sender is TM_Object) then Exit;
TM_Object(Sender).Variable.Value := 10;
end.
Для поля Field1 скрипт будет работать. А для поля Field2 будет давать ошибку, т.к. оно не связано с переменной (Variable = nil), а в скрипте мы пытаемся изменить Variable.Value, т.е. обращается в несуществующей переменной.
Поэтому в скрипте из предыдущего сообщения мы сначала убедились, что у объекта выбрана доп. переменная и только потом начинаем работать с ней, проверяя качество, или изменяя её значение.