...потому что включен контроль множественной записи выходов.
А код, значит, в переменную modbusAOBuf пишет из разных мест. А это неправильно.
Вид для печати
...потому что включен контроль множественной записи выходов.
А код, значит, в переменную modbusAOBuf пишет из разных мест. А это неправильно.
А почему в первом контроллере нет предупреждений? Где проверить включение контроля записи?
Массив modbusAOBuf подвязан к регистрам временного хранения Modbus TCP Slave Device. В программе в него записываю данные. На первом контроллере все работает.
Скорее всего выключены. Они включаются в Установках проекта. У меня сейчас под рукой нет CodeSys, поэтмоу точно не скажу.
Ну вот в этом случае надо выключить это предупреждение.
Вот тогда не знаю. Я их везде включаю и стараюсь делать так, чтобы под них не попадаться.
Здравствуйте
Можно ли написать универсальный функциональный блок?
Попытаюсь объяснить, что я имею ввиду
Есть несколько структур расширенные друг другом:
PHP код:TYPE BlankDevice :
STRUCT
Name: WSTRING(30); // Название
byStatus: Status; // Статус узла
END_STRUCT
END_TYPE
PHP код:TYPE SimpleDevice EXTENDS BlankDevice :
STRUCT
xOutRun: REFERENCE TO BOOL REF= xOutRun; // Ссылка на значение Пуск
END_STRUCT
END_TYPE
PHP код:TYPE MediumDevice EXTENDS SimpleDevice :
STRUCT
xInRun: REFERENCE TO BOOL REF= xInRun; // Ссылка на значение В работе
END_STRUCT
END_TYPE
PHP код:TYPE ComplexDevice EXTENDS MediumDevice:
STRUCT
xInAlarm: REFERENCE TO BOOL REF= xInAlarm; // Ссылка на значение Авария
END_STRUCT
END_TYPE
Если я пишу функциональный блок для обработки структуры FrequencyDivicePHP код:TYPE FrequencyDivice EXTENDS ComplexDevice :
STRUCT
xOutResetAlarm: REFERENCE TO BOOL REF= xOutResetAlarm; // Ссылка на значение Сброс аварии
uiOutSpeed: REFERENCE TO UINT REF= uiOutSpeed; // Ссылка на значение Скорость
rInCurrent: REFERENCE TO REAL REF= rInCurrent; // Ссылка на значение Ток
END_STRUCT
END_TYPE
В этот функциональный блок я не могу отправить структуру ну например MediumDevice, компилятор выдаст ошибку.PHP код:FUNCTION_BLOCK FB_ FrequencyDivice
VAR_INPUT
stIn: REFERENCE TO FrequencyDivice;
END_VAR
Подскажите можно ли как-то это реализовать с возможностью знать из функционального блока с какой структурой к нему обратились.
Что-то не очень хочется для каждой структуры писать свой функциональный блок.
Подскажите люди добрые. Известная проблема с трендами когда отключаешь питание на СПК и звезды встали не так потом вылетает ошибка "Some kind of disk I/O error occurred. Check disk space".
Поменять все тренды на ОВеновские пока не могу. А вот если при выключении питания вручную или по событию дать предварительно команду "poweroff" через системную библиотеку, то все файлы корректно закроются и ошибка уйдет? Или?
По крайней мере, это серьезно уменьшит вероятность её проявления.Цитата:
А вот если при выключении питания вручную или по событию дать предварительно команду "poweroff" через системную библиотеку, то все файлы корректно закроются и ошибка уйдет? Или?
Цитата:
Подскажите можно ли как-то это реализовать с возможностью знать из функционального блока с какой структурой к нему обратились.
Код:FUNCTION_BLOCK FB_FrequencyDevice
VAR_INPUT
pstIn: POINTER TO BYTE; // указатель на любую структуру
eDeviceType: DEVICE_TYPE; // Тип структуры: DEVICE_TYPE.BLANK, DEVICE_TYPE.MEDIUM, DEVICE_TYPE.COMPLEX и т. д.
END_VAR
Спасибо
Изучаю Data Type: ANY, ANY_<type>
Данный тип вроде также с указателями работает