libiec61850探究【1】-第一个MMS通讯实例

libIEC61850交流QQ群:610793899

近期用北京微自恒通提供的61850 SDK构建本地Server端,由于没有任何61850方面的基础,恶补了一下。说实话,提供的方案可用,但是说明文档实在太过粗略,对新手未免不太友好。

在使用微自恒通公司的SDK构建了基本的Server端模型、流程代码骨架之后,我就考虑用libIEC也做下类似的事情,顺便加深对于61850的理解,此处作为手账记录吧。

按照惯例,先交代一下背景:

libIEC官网:libIEC61850 / lib60870 | open source libraries for IEC 61850 and IEC 60870-5-101/104
我们后续使用的代码也在此处下载。

libIEC版本:1.5.0

OS:Ubuntu 16.04 x64(虚拟机)

首先,下载libIEC61850 1.5.0的代码,并解压到~/code/目录下。

进入code/libiec61850-1.5.0目录,看到完整的目录结构,处于“短平快”的策略,我在examples目录下找到了两个例子作为熟悉的跳板:

/server_example_simple

/server_example_dynamic

前者包含CID模型定义、CID模型到.C/.H文件的生成,个人感觉这个demo的对初学者来说意义比较大,一定要好好利用这个。因为我们后期一定会采用这样的流程来作为整体结构:1)CID模型文件定义;2)将CID模型文件编译成static_model.h/static_model.c;3)在其他文件中引用static_model.c/static_model.h中自动生成的LD/LN/DO/DA(设备/节点/数据对象/数据属性)。

> cd server_example_simple

> make model

该步骤过后,当前目录中应该已经生成了static_model.h/static_model.c文件。

> make

> sudo ./server_example_simple

和微自恒通SDK不同的是,libIEC的Server端不需要配置本机IP地址以及端口号,IP应该是全部放开,端口默认102.

在本地可以使用IEDScout连接Server端IP地址,可以看到Server的模型目录结构。

当然,此处的数据更新还没有,而server_example_dynamic给我们提供了一个简单的例子。

但是server_example_dynamic不好的地方是所有的LD/LN/DO/DA都是在主程序.C文件中动态定义的,而不是通过CID模型文件定义。server_example_dynamic.文件中模型定义部分略去不谈(其实和CID文件定义,然后编译CID文件生成.C文件是一样的意思),动态赋值的只和主函数中如下代码相关:

	float val = 0.f;

	while (running) {
	    IedServer_lockDataModel(iedServer);

	    IedServer_updateUTCTimeAttributeValue(iedServer, temperatureTimestamp, Hal_getTimeInMs());
	    IedServer_updateFloatAttributeValue(iedServer, temperatureValue, val);

	    IedServer_unlockDataModel(iedServer);

	    val += 0.1f;

		Thread_sleep(100);
	}

IedServer_updateUTCTimeAttributeValue是更新时间的函数,

IedServer_updateFloatAttributeValue是更新MX(测量值FLOAT32)的函数,

只需要把对应static_model.c文件中的DA地址传进去就可以了,这样的话,基本的流程代码结构就比较完整了,后续我们把模拟量、回调函数什么的加上,提高程序的异步处理能力。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值