1

我在我的系统上使用 SocketCAN。有没有办法以编程方式而不是从命令行设置 CAN 接口比​​特率。一个例子会很有帮助。

谢谢你。

4

2 回答 2

0

Qt (C++) 的一个小例子。比特率是通过 QProcess 设置的。必须停止 CAN 服务,然后才能配置比特率,然后必须启动 CAN 服务:

#include <QProcess>
#include <QString>

CO_set_bitrate(char const *can_device) //can_device for example "can0"
{
  QProcess set_bitrate;
  QStringList bitrate_args;
  QStringList stop_args;
  QStringList start_args;

  char const *can_bitrate = "500000"; //Set Bitrate

  stop_args.clear();
  stop_args<<"stop"<<can_device<<".service";

  start_args.clear();
  start_args<<"start"<<can_device<<".service";

  bitrate_args.clear();
  bitrate_args<<"link"<<"set"<<can_device<<"up"<<"type"<<"can"<<"bitrate"<<can_bitrate;

//Stop the CAN-Service
  set_bitrate.start("systemctl", stop_args, QIODevice::WriteOnly);
  set_bitrate.waitForFinished(-1);

//Set Bitrate
  set_bitrate.start( "ip", bitrate_args, QIODevice::WriteOnly); //Starts execution of command
  set_bitrate.waitForFinished(-1);

//Restart CAN-Service
  set_bitrate.start("systemctl", start_args, QIODevice::WriteOnly);
  set_bitrate.waitForFinished(-1);
  }
于 2020-08-21T13:15:59.947 回答
0

对的,这是可能的。使用 NETLINK 套接字,它是什么ip用。

不幸的是,我不知道任何可用的简单示例,但您可以查看ip.

或者,您可以使用libsocketcan,它是用于 CAN 的 netlink 套接字的一个很好的包装器。

于 2017-10-05T14:46:43.957 回答