B&R 通过 MC_BR_GetHardwareInfo 功能块获取驱动器序列号
B&R get drive serial number via MC_BR_GetHardwareInfo function block
我正在尝试使用 MC_BR_GetHardwareInfo
功能块从驱动器中检索序列号。由于文档缺少有关此主题的任何示例代码,所以我一无所获。
为了获得所需的序列号,我应该向功能块提供哪些信息?
以下示例会在 PLC 中崩溃,可能是因为功能块需要对某些指针进行寻址:
MC_HARDWARE_INFO_REF hwinfo;
MC_BR_GetHardwareInfo(&hwinfo);
您可能遇到页面错误,因为您提供的 MC_BR_GetHardwareInfo 功能块 (FUB) 类型错误,这会导致随机行为。
功能块基本上是一个需要引用特定类型作为参数的功能。这种类型包含实际使用的输入和输出、内部状态变量等。我们需要它,因为代码是同步执行的。这意味着与函数不同,您需要调用 FUB 直到它完成。
我们来看看FUB的帮助:
Guid: 056444ea-2a15-4af6-a5ae-0675894b17d3
因此 FUB 需要引用您想要了解其硬件信息和执行命令的 Axis 对象。它将为您提供一些状态位、错误代码以及您希望在 MC_HARDWARE_INFO_REF.
类型的结构 HardwareInfo 中拥有的实际数据
首先,我们需要通过创建其类型的变量来实例化 FUB。我们在任务的本地 *.var 文件中这样做:
VAR
fbGetHwInfo : MC_BR_GetHardwareInfo := (0);
END_VAR
然后我们调用设置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 检查这个。只是为了测试,在重启后等待几秒钟并在监控模式下设置执行标志应该就足够了。
我正在尝试使用 MC_BR_GetHardwareInfo
功能块从驱动器中检索序列号。由于文档缺少有关此主题的任何示例代码,所以我一无所获。
为了获得所需的序列号,我应该向功能块提供哪些信息?
以下示例会在 PLC 中崩溃,可能是因为功能块需要对某些指针进行寻址:
MC_HARDWARE_INFO_REF hwinfo;
MC_BR_GetHardwareInfo(&hwinfo);
您可能遇到页面错误,因为您提供的 MC_BR_GetHardwareInfo 功能块 (FUB) 类型错误,这会导致随机行为。
功能块基本上是一个需要引用特定类型作为参数的功能。这种类型包含实际使用的输入和输出、内部状态变量等。我们需要它,因为代码是同步执行的。这意味着与函数不同,您需要调用 FUB 直到它完成。
我们来看看FUB的帮助: Guid: 056444ea-2a15-4af6-a5ae-0675894b17d3
因此 FUB 需要引用您想要了解其硬件信息和执行命令的 Axis 对象。它将为您提供一些状态位、错误代码以及您希望在 MC_HARDWARE_INFO_REF.
类型的结构 HardwareInfo 中拥有的实际数据首先,我们需要通过创建其类型的变量来实例化 FUB。我们在任务的本地 *.var 文件中这样做:
VAR
fbGetHwInfo : MC_BR_GetHardwareInfo := (0);
END_VAR
然后我们调用设置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 检查这个。只是为了测试,在重启后等待几秒钟并在监控模式下设置执行标志应该就足够了。