libiec61850-1.4 库的使用和修改(goose)

目的:使用libiec61850-1.4 库接收和发送goose数据,环境Ubuntu 18.04.4 LTS。

问题:使用libiec61850-1.4\examples\goose_publisher例程发送goose数据正常,使用libiec61850-1.4\examples\goose_subscriber例程接收不到数据。

调试分析源代码后问题已解决,记录如下:

1.注释掉bind代码:libiec61850-1.4new\hal\ethernet\linux\ethernet_linux.c

/* non-blocking receive */
int
Ethernet_receivePacket(EthernetSocket self, uint8_t* buffer, int bufferSize)
{
#if 0
    if (self->isBind == false) {
        if (bind(self->rawSocket, (struct sockaddr*) &self->socketAddress, sizeof(self->socketAddress)) == 0)
            self->isBind = true;
        else
        {
            perror("bind error:Ethernet_receivePacket");
            return 0;
        }
    }
#endif
    return recvfrom(self->rawSocket, buffer, bufferSize, MSG_DONTWAIT, 0, 0);
}

2.由于goose_subscriber接收端例程没有发送接口,所以需要封装一个发送接口。

//libiec61850-1.4new\src\goose\goose_receiver.c

int GooseReceiver_sendPacket(GooseReceiver self, unsigned char buf[], uint32_t dwLen)
{
    uint8_t srcAddr[6];

    if (self->interfaceId != NULL)
    {
        Ethernet_getInterfaceMACAddress(self->interfaceId, srcAddr);
        memcpy(&buf[0], srcAddr, sizeof(srcAddr));
    }

    Ethernet_sendPacket(self->ethSocket, buf, dwLen);
    return 0;
}

3.接收多个goose订阅,以下是根据例程重写函数,不难。

4.编译与运行

/libiec61850-1.4# make
libiec61850-1.4/examples/goose_publisher# make
libiec61850-1.4/examples/goose_subscriber# make

libiec61850-1.4/examples/goose_publisher# sudo ./goose_publisher_example ens33
libiec61850-1.4/examples/goose_subscriber# sudo ./goose_subscriber_example ens33

拿到数据后就可以为所欲为了!

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
libiec61850-0.9.2.1是一种通信协议,用于实现IEC 61850标准中所定义的通信功能。而数据对象引用是该协议中用于识别和访问特定数据对象的一种标识方法。 数据对象引用在IEC 61850中由四部分组成:充电桩UUID、逻辑设备名称、逻辑节点名称和数据对象名称。 充电桩UUID是一个唯一的标识符,用于区分不同的充电桩设备。逻辑设备名称用于标识充电桩设备所在的逻辑设备,通常用于区分不同设备之间的功能和数据。逻辑节点名称用于标识逻辑设备中的不同逻辑节点,每个逻辑节点对应不同的功能和数据。数据对象名称则用于标识逻辑节点中的不同数据对象,即具体存储和传输数据的实体。 通过组合这四部分的标识符,可以唯一确定某个充电桩设备中的特定数据对象。数据对象引用可以用于查询、读取和写入充电桩设备中的数据对象。通过有效的数据对象引用,可以实现对充电桩设备的远程监控、配置和控制等功能。 libiec61850-0.9.2.1提供了相应的功能接口和方法,用于创建和解析数据对象引用。开发人员可以使用提供的函数,根据需要构建和解析有效的数据对象引用,以实现对充电桩设备的操作和管理。 总之,libiec61850-0.9.2.1数据对象引用是一种标识和访问充电桩设备中特定数据对象的方法,通过组合充电桩UUID、逻辑设备名称、逻辑节点名称和数据对象名称等标识符,可以实现对充电桩设备的远程控制和管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值