贝加莱通过MC_BR_GetHardwareInfo功能块获取驱动器序列号



我正在尝试使用MC_BR_GetHardwareInfo功能块从驱动器中检索序列号。由于文档缺少有关此主题的任何类型的示例代码,因此我一无所获。

我应该向功能块提供哪些信息才能获得所需的序列号?

下面的示例将在 PLC 中崩溃,可能是因为功能块需要解决某些指针:

MC_HARDWARE_INFO_REF hwinfo;
MC_BR_GetHardwareInfo(&hwinfo);

您可能遇到页面错误,因为您为MC_BR_GetHardwareInfo功能块 (FUB( 提供了错误的类型,这会导致随机行为。

功能块基本上是一个需要引用特定类型作为参数的功能。此类型包含使用的实际输入和输出、内部状态变量等。我们需要这个,因为代码的同步执行。这意味着与函数不同,您需要调用 FUB,直到它完成。

让我们来看看 FOB 的帮助: 指导: 056444ea-2a15-4af6-a5ae-0675894b17d3

因此,FUB 需要对 Axis 对象的引用,您想知道其硬件信息和执行命令。它将为您提供一些状态位,错误代码以及您希望在类型MC_HARDWARE_INFO_REF的HardwareInfo结构中拥有的实际数据。

首先,我们需要通过创建其类型的变量来实例化 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进行检查。仅用于测试,重新启动后等待几秒钟并在监视模式下设置执行标志就足够了。

相关内容

  • 没有找到相关文章

最新更新