В дополнение к предыдущему моему мосту.
1. В кабинетных условиях накидали кучу проводов rs-485 и как, нам показалось, смогли создать условия как на объекте, прибор начал глючить по связи и помогала только перезагрузка. Заземляли все подряд, подключали сопротивления. Потом даже сократили длину линии метров до 2-3. Спустя много времени, отключили от прибора ноутбук и чудесным образом все заработало. Дальнейшими опытами было выяснено, что режим отладки влияет на корректную работу прибора. Если онлайн отладка отключена, то в кабинетных условиях, даже при двух бухтах витой пары до slave устройств, все работает нормально.
2. В ФБ СТ не всегда все работает корректно. В симуляции норм, на работающем приборе нет. Был вот такой простенький код:
PHP код:
function_block check_mb_status_ind//имя функционального блока.
var_input //объявление входных переменных
READY_PUMP1_MB, READY_PUMP2_MB, READY_PUMP3_MB, READY_PUMP4_MB: BOOL;
ALARM_PUMP1_MB, ALARM_PUMP2_MB, ALARM_PUMP3_MB, ALARM_PUMP4_MB: BOOL;
AUTO_PUMP1_MB, AUTO_PUMP2_MB, AUTO_PUMP3_MB, AUTO_PUMP4_MB: BOOL;
MB_Status1, MB_Status2, MB_Status3, MB_Status4: BOOL;
MB_Enable1, MB_Enable2, MB_Enable3, MB_Enable4: BOOL;
end_var
var_output //объявление выходных переменных
READY_PUMP1, READY_PUMP2, READY_PUMP3, READY_PUMP4: BOOL;
ALARM_PUMP1, ALARM_PUMP2, ALARM_PUMP3, ALARM_PUMP4: BOOL;
AUTO_PUMP1, AUTO_PUMP2, AUTO_PUMP3, AUTO_PUMP4: BOOL;
MB_Status1_ind, MB_Status2_ind, MB_Status3_ind,MB_Status4_ind : BOOL;
end_var
MB_Status1_ind := MB_Status1 AND MB_Enable1;
MB_Status2_ind := MB_Status2 AND MB_Enable2;
MB_Status3_ind := MB_Status3 AND MB_Enable3;
MB_Status4_ind := MB_Status4 AND MB_Enable4;
READY_PUMP1 := MB_Status1_ind AND READY_PUMP1_MB;
READY_PUMP2 := MB_Status2_ind AND READY_PUMP2_MB;
READY_PUMP3 := MB_Status3_ind AND READY_PUMP3_MB;
READY_PUMP4 := MB_Status4_ind AND READY_PUMP4_MB;
ALARM_PUMP1 := MB_Status1_ind AND ALARM_PUMP1_MB;
ALARM_PUMP2 := MB_Status2_ind AND ALARM_PUMP2_MB;
ALARM_PUMP3 := MB_Status3_ind AND ALARM_PUMP3_MB;
ALARM_PUMP4 := MB_Status4_ind AND ALARM_PUMP4_MB;
AUTO_PUMP1 := MB_Status1_ind AND AUTO_PUMP1_MB;
AUTO_PUMP2 := MB_Status2_ind AND AUTO_PUMP2_MB;
AUTO_PUMP3 := MB_Status3_ind AND AUTO_PUMP3_MB;
AUTO_PUMP4 := MB_Status4_ind AND AUTO_PUMP4_MB;
end_function_block
На MB_Status1 и MB_Enable1, MB_Status2 AND MB_Enable2 приходят единицы. В режиме симуляции MB_Status1_ind и MB_Status2_ind так же принимают значение 1. Но, при работе прибора MB_Status1_ind = 1, а MB_Status2_ind = 0, что и было видно на экране. При этом, выходные переменные зависящие от MB_Status2_ind работали корректно. В итоге переделали все на FBD и заработало. Меняли адреса слэйвов на 3 и 4, и такая же беда происходила с переменными MB_Status3_ind и MB_Status4_ind. Как то в общем все странно.