Возможно, вы получаете ошибку страницы, поскольку вы предоставляете функциональному блоку MC_BR_GetHardwareInfo (FUB) неправильный тип, что приводит к случайному поведению.
Функциональный блок - это, в основном, функция, которая требует ссылки на определенный тип в качестве параметра.Этот тип содержит фактические входные и выходные данные, которые используются, внутренние переменные состояния и т. Д. Это необходимо нам из-за синхронного выполнения кода.Это означает, что в отличие от функции, вам нужно вызывать FUB до тех пор, пока это не будет сделано.
Давайте взглянем на помощь FUB: Guid: 056444ea-2a15-4af6-a5ae-0675894b17d3
Таким образом, FUB нужна ссылка на объект Axis, о котором вы хотите знать информацию HW, и команду Execute.Это даст вам несколько битов состояния, код ошибки и фактические данные, которые вы хотите иметь в структуре HardwareInfo типа MC_HARDWARE_INFO_REF.
Сначала нам нужно создать экземпляр FUB, создав переменную его типа.Мы делаем это в локальном файле * .var задачи:
VAR
fbGetHwInfo : MC_BR_GetHardwareInfo := (0);
END_VAR
Затем мы вызываем set параметры FUB и вызываем его, который может выглядеть следующим образом:
void _CYCLIC ProgramCyclic(void)
{
//should be set by the application or in watch/monitor; now it only
//executes once
fbGetHwInfo.Execute = 1;
//reference to your axis object; when using a wizard the first axis
//will be gAxis01 on default
fbGetHwInfo.Axis = (UDINT)&gAxis01;
//call the FUB
MC_BR_GetHardwareInfo(&fbGetHwInfo);
if(fbGetHwInfo.Error == 1)
{
//TODO: errorhandling
}
else if(fbGetHwInfo.Done == 1)
{
//TODO use output
//fbGetHwInfo.HardwareInfo
}
}
Обычно вы делаете это в какой-то машине состоянийТакже вам, вероятно, придется подождать, пока сеть к диску будет инициализирована.Вы можете проверить это с помощью MC_BR_ReadDriveStatus FUB.Для тестирования достаточно подождать несколько секунд после перезагрузки и установить флаг «Выполнить» в режиме мониторинга.