libiec61850探究【2】- MMS客户端编译及Qt工程配置

9 篇文章 0 订阅
6 篇文章 12 订阅

libIEC61850交流QQ群:610793899

操作系统:Ubuntu 16.04 x64

我们将要做两件事情:

1)选择并使用合适的Client端代码,编译、运行通过;

2)修改Client端,与Server端通信正常;

3)在Qt工程中测试上述Client端代码,调试通过。(使用Qt工程进行编译的目的在于,Server重在后台建模、数据采集、转发、与本地数据存储打交道等工作,简单来说,没有界面的情况下,对Server端影响是不大的;而Client端重在数据采集、展示、检查,数据展示通常是借助UI界面的方式来做,而这也正是Qt给人印象最深刻的地方)

首先,我们选择iec61850_client_example_no_thread文件夹中的代码入手,由于该文件夹中存在CMakelists.txt文件,因此理论上修改该文件内容后生成的Makefile可以编译,但是我对比了该文件生辰的Makefile文件和当前目录下的Makefile文件,差异较大,且无法编译通过。我没有深究这个问题,将该目录复制到一个新的目录:

> cp -rf ./iec61850_client_example_no_thread ./client_mms_sddgbyq

> cd client_mms_sddgbyq

> mv client_example_no_thread.c client_mms_sddgbyq.c

并修改Makefile中的文件名称,如下所示:

LIBIEC_HOME=../..

PROJECT_BINARY_NAME = client_mms_sddgbyq
PROJECT_SOURCES = client_mms_sddgbyq.c

include $(LIBIEC_HOME)/make/target_system.mk
include $(LIBIEC_HOME)/make/stack_includes.mk

all:    $(PROJECT_BINARY_NAME)

include $(LIBIEC_HOME)/make/common_targets.mk

$(PROJECT_BINARY_NAME): $(PROJECT_SOURCES) $(LIB_NAME)
        $(CC) $(CFLAGS) $(LDFLAGS) -o $(PROJECT_BINARY_NAME) $(PROJECT_SOURCES) $(INCLUDES) $(LIB_NAME) $(LDLIBS)

clean:
        rm -f $(PROJECT_BINARY_NAME)

> make 

一切正常的话,编译后的可执行就已经在本目录下生成了。

接下来,我们在client_mms_sddgbyq.c文件中增加获取Server端固定节点数据的代码,在main函数中增加如下代码:

IedConnection_readObjectAsync(con, &error, "SDDGBYQMonMONT/MMXN1.Amp.mag.f", IEC61850_FC_MX, readObjectHandler, "SDDGBYQMonMON    T/MMXN1.Amp.mag.f");

if (error != IED_ERROR_OK) {
    printf("read object error %i\n", error);
}

waitWithTick(con, 1000);

其中SDDGBYQMonMONT是IED与LD的组合:SDDGBYQMon是<IED>的名字,<MONT>是LD的Inst名称。

不出意外的话,编译、运行一切正常。

启动Server端进程,然后启动Client端进程,将会看到Client端打印出的Amp的数据值。

以上编译都是基于源代码进行编译的,而我们新建Qt工程的话,使用源代码编译是不现实的,必须基于libIEC的库,libIEC提供的静态库在该路径下:

> ./build/libiec61850.a

新建Qt工程(我新建的是Qt Form工程),并在.pro文件中增加头文件目录,以及Lib文件的依赖关系:

INCLUDEPATH += $$PWD/. \
               $$PWD/include/ \
               $$PWD/include/iec61850/config \
               $$PWD/include/iec61850/hal/inc \
               $$PWD/include/iec61850/src/common/inc \
               $$PWD/include/iec61850/src/mms/inc \
               $$PWD/include/iec61850/src/mms/inc_private \
               $$PWD/include/iec61850/src/mms/asn1 \
               $$PWD/include/iec61850/src/iec61850/inc \
               $$PWD/include/iec61850/src/iec61850/inc_private \
               $$PWD/include/iec61850/src/goose \
               $$PWD/include/iec61850/src/sampled_values \
               $$PWD/include/iec61850/src/logging
DEPENDPATH += $$PWD/. \
              $$PWD/include/ \
              $$PWD/include/iec61850/config \
              $$PWD/include/iec61850/hal/inc \
              $$PWD/include/iec61850/src/common/inc \
              $$PWD/include/iec61850/src/mms/inc \
              $$PWD/include/iec61850/src/mms/inc_private \
              $$PWD/include/iec61850/src/mms/asn1 \
              $$PWD/include/iec61850/src/iec61850/inc \
              $$PWD/include/iec61850/src/iec61850/inc_private \
              $$PWD/include/iec61850/src/goose \
              $$PWD/include/iec61850/src/sampled_values \
              $$PWD/include/iec61850/src/logging

unix:!macx: LIBS += -L$$PWD/lib/ -liec61850
unix:!macx: PRE_TARGETDEPS += $$PWD/lib/libiec61850.a

为了快速测试,可以将iec61850_example_client_no_thread.c文件中的内容复制过来放到main.cpp文件中(后续再对main函数进行修改)。

然后执行rebuild命令,编译、链接通过。

与Server端联合测试,数据通信正常。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值