动环监控系统简述

1.术语介绍

1.1 省集中监控中心-Province Supervision Center(PSC)

面向多FSU管理的高级监控层次,即省集中监控中心,通过开放的数据协议,连接监控范围内的FSU。

1.2 现场监控单元-Field supervision unit(FSU)

监控系统的最小管理子系统,由若干监控模块和其它辅助设备组成,面向直接的设备数据采集、处理的监控层次,可以包含采样、数据处理、数据中继等功能,

监控范围一般为一个独立的通信局(站)或大型局(站)内相对独立的电源、空调设备及环境。

1.3 监控对象 Supervision Object(SO)

被监控的各种电源、空调设备及机房环境。

1.4 B接口

为省集中监控中心(PSC)与现场监控单元(FSU)之间的接口。(即FSU的北向接口)

2. 接口网络结构

FSU与PSC之间通过WebService和FTP方式互联,二者同时形成完整的B接口协议标准。


B接口在嵌入式arm监控主机上的实现

环境

宿主机平台:Ubuntu 16.04.6

目标机平台:iMX6UL

交叉编译:gcc-linaro-4.9-2014.11     arm-linux-gnueabihf-gcc        https://www.linaro.org/downloads/

SOAP/XML 关于C/C++ 语言的实现    gsoap_2.8.83      https://sourceforge.net/projects/gsoap2/files/

XML数据的生成和解析       tinyxml2

XML数据的生成和解析   libxml2   ftp://xmlsoft.org/libxml2/

结合主要开发为C环境且尽量占用较少资源,推荐使用minixml

XML数据的生成和解析      minixml   https://www.msweet.org/mxml/


1. gsaop 生成 B接口报文协议 C代码框架

gSOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多。

绝大多数的C++web服务工具包提供一组API函数类库来处理特定的SOAP数据结构,这样就使得用户必须改变程序结构来适应相关的类库。

与之相反,gSOAP利用编译器技术提供了一组透明化的SOAP API,并将与开发无关的SOAP实现细节相关的内容对用户隐藏起来。

1.1 gsaop在linux下的安装

gsoap安装编译依赖

sudo apt-get install build-essential libgtk2.0-dev libglib2.0-dev checkinstall m4 flex bison automake autoconf openssl libssl-dev

为了成功编译gSOAP,您需要安装GTK+的开发文件和GLib库(libraries)。

安装Checkinstall以便管理您系统中直接由源代码编译安装的软件。

安装YACC,YACC是Unix/Linux上一个用来生成编译器的编译器(编译器代码生成器),sudo apt-get install flex bison

安装OpenSSL,web通信的加密(https)及鉴权  sudo apt-get install openssl libssl-dev

安装编译步骤: 

解压

unzip gsoap_2.8.83.zip
mkdir gsoap_install
cd gsoap-2.8/

配置安装路径、编译、安装

./configure --prefix=/home/wangh/workspace/wh_tools/gsoap_install
sudo make
sudo make install

使用gsoap生成 fsu 代码框架

新建gsoap_fsu文件夹,从gsoap_install文件夹中拷贝以下文件

bin/soapcpp2        bin/wsdl2h

gsoap2.8/gsoap/typemap.dat

custom和import文件夹

1.使用wsdl2h工具,根据WSDL产生头文件,执行以下命令

./wsdl2h -P -x -c -s -t ./typemap.dat -o fsu.h FSUService.wsdl

其中-c为产生纯c代码,默认生成 c++代码;

-x    不产生xml文件(可用可不用,xml有一定帮助,但是太多);

-s为不使用STL库,-t为typemap.dat的标识。

详情可通过wsdl2h.exe -help查看帮助。

这里的WSDL文件,可以在wsdl2h命令中在线下载,也可以先下载到本地,然后引用本地WSDL文件,我这里是采用本地文件方式。

2. 使用soapcpp2工具,根据头文件 fsu.h 产生框架代码,执行以下命令

./soapcpp2 -2 -L -c -x -I import:custom fsu.h

-2    生成 SOAP 1.2

-L    不生成客户端、服务器库文件

-c    为产生纯c代码,默认生成 c++代码

-I path  引用文件路径

3. 提取有效核心代码用于应用编程,应用工程使用文件如下:

2. B接口报文协议分析与实现


2.1 SOAP函数接口分析

根据 FSUService.wsdl 生成 soap API 如下,在 soapStub.h 的最后定义

我们不用去关心 SOAP 接口的实现细节,直接调用对应 API 即可实现客户端与服务器的 xml 数据收发。

客户端接口过程:

soap_call_ns1__invoke() 在客户端调用,实现发送和接收(它调用send和recv);

服务器接口过程:

soap_serve() 服务器调用,部署 SOAP 服务器,它会调用soap_serve_request(),当收到 ns1:invoke 的请求时,

服务器调用 soap_serve_ns1__invoke(),在调用应用层用户接口 ns1__invoke(),来获取接收数据和填充应答数据。

2.2 SOAP通信简单示例

我的工程目录如下图所示:

客户端程序:

/**
**********************************************************************************
* @file        main.c
* @brief       soap客户端测试程序
* @details  基于东环监控 B 接口的soap客户端程序
* @author      wanghuan  any question please send mail to 371463817@qq.com
* @date        2019-06-17
* @version     V1.0
* @copyright    Copyright (c) 2019-2022  江苏亨通光网科技有限公司
**********************************************************************************
*/
#include "soapH.h"
#include "stdsoap2.h"
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "FSUServiceSoapBinding.nsmap"int main(int argc, char **argv)
{
//    struct soap fsuSoap;
//    soap_init(&fsuSoap);struct soap *fsuSoap = soap_new();fsuSoap->send_timeout = fsuSoap->recv_timeout = 5;    //soap发送、接收超时fsuSoap->transfer_timeout = 30;        //soap消息传输超时
    soap_set_namespaces(fsuSoap, namespaces);
//    soap_set_mode(fsuSoap, SOAP_C_NOIOB);struct ns1__invokeResponse soap_tmp_ns1__invokeResponse;char * soap_tmp_SOAP_ENC__string;soap_default_ns1__invokeResponse(fsuSoap, &soap_tmp_ns1__invokeResponse);soap_tmp_SOAP_ENC__string = NULL;soap_tmp_ns1__invokeResponse._invokeReturn = &soap_tmp_SOAP_ENC__string;// 手动组成LOGIN的xml数据字符串char xmlData[500];memset(xmlData, 0x00, sizeof(xmlData));strcat(xmlData, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");strcat(xmlData, "<Request>\n");strcat(xmlData, "<PK_Type>\n");strcat(xmlData, "<Name>LOGIN</Name>\n");strcat(xmlData, "</PK_Type>\n");strcat(xmlData, "<Info>\n");strcat(xmlData, "<UserName>123</UserName>\n");strcat(xmlData, "<PassWord>123</PassWord>\n");strcat(xmlData, "<FsuId>10004</FsuId>\n");strcat(xmlData, "<FsuIP>192.168.1.124</FsuIP>\n");strcat(xmlData, "<FsuPort>10000</FsuPort>\n");strcat(xmlData, "</Info>\n");strcat(xmlData, "</Request>\n");printf("soap_tmp_ns1__invoke._xmlData:\n");printf("%s", xmlData);// saop 客户端程序
//    char * server_addr = "http://10.10.62.83:8080/HT_SC/services/SCService";char * server_addr = "http://192.168.1.123:8080";int iRet = soap_call_ns1__invoke(fsuSoap, server_addr, NULL, xmlData, soap_tmp_ns1__invokeResponse._invokeReturn);if ( iRet == SOAP_ERR){printf("Error while calling the soap_call_ns1__invoke");}else{printf("Calling the soap_call_ns1__invoke success。\n");printf("%s\n", *soap_tmp_ns1__invokeResponse._invokeReturn);}return 0;
}

服务端程序:

/**
**********************************************************************************
* @file        main.c
* @brief       soap服务端测试程序
* @details  基于东环监控 B 接口的soap服务器程序
* @author      wanghuan  any question please send mail to 371463817@qq.com
* @date        2019-06-17
* @version     V1.0
* @copyright    Copyright (c) 2019-2022  江苏亨通光网科技有限公司
**********************************************************************************
*/
#include "soapH.h"
#include "stdsoap2.h"
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "FSUServiceSoapBinding.nsmap"/**
* 启动soap服务器
*/
int main(int argc, char **argv)
{SOAP_SOCKET iSocket_master, iSocket_slave;struct soap *fsuSoap = soap_new();    //新建soap
fsuSoap->send_timeout = fsuSoap->recv_timeout = 5;    //soap发送、接收超时fsuSoap->transfer_timeout = 30;        //soap消息传输超时
//    soap_set_mode(fsuSoap, SOAP_C_NOIOB);// saop 服务器程序 8080为端口号,最后一个参数不重要。iSocket_master = soap_bind(fsuSoap, NULL, 8080, 100);     //绑定到相应的IP地址和端口()NULL指本机,然后监听if (iSocket_master< 0)                                   //绑定出错
    {soap_print_fault(fsuSoap, stderr);exit(-1);}printf("SoapBind success,the master socket number is:%d\n",iSocket_master); //绑定成功返回监听套接字while(1){iSocket_slave = soap_accept(fsuSoap);    //收到套接字连接if(iSocket_slave < 0){soap_print_fault(fsuSoap, stderr);exit(-1);}//客户端的IP地址fprintf(stderr,"Accepted connection fromIP= %d.%d.%d.%d socket = %d \n",    \((fsuSoap->ip)>>24)&&0xFF,((fsuSoap->ip)>>16)&0xFF,((fsuSoap->ip)>>8)&0xFF,(fsuSoap->ip)&0xFF,(fsuSoap->socket));printf("Socket connect success,the slave socket number is:%d\n",iSocket_slave);soap_serve(fsuSoap);printf("soap_serve end...");soap_end(fsuSoap);    //服务器出错才到这一步
    }soap_done(fsuSoap);free(fsuSoap);return 0;
}/**
* soap服务器用户数据处理函数
* @param[in] *_xmlData            接收客户端的xml格式字符串
* @param[out] **_invokeReturn    服务器要回复大数据
* @return     SOAP_OK or error code
*/
SOAP_FMAC5 int SOAP_FMAC6 ns1__invoke(struct soap* soap, char *_xmlData, char **_invokeReturn)
{printf("ns1__invoke _xmlData\n");printf("%s\n", _xmlData);char xmlData[500];memset(xmlData, 0, sizeof(xmlData));strcat(xmlData, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");strcat(xmlData, "<Response>\n");strcat(xmlData, "<PK_Type>\n");strcat(xmlData, "<Name>LOGIN_ACK</Name>\n");strcat(xmlData, "</PK_Type>\n");strcat(xmlData, "<Info>\n");strcat(xmlData, "<RightLevel/>\n");strcat(xmlData, "</Info>\n");strcat(xmlData, "</Response>");*_invokeReturn = xmlData;
//    *_invokeReturn = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Response>\n<PK_Type>\n<Name>LOGIN_ACK</Name>\n</PK_Type>\n<Info>\n<RightLevel/>\n</Info>\n</Response>";
printf("_invokeReturn _xmlData\n");printf("%s\n", *_invokeReturn);return SOAP_OK;
}

编译之后 先执行服务端程序,在执行客户端程序

服务端收到request

客户端发送request,并收到response

接下来开始尝试使用 libxml2 库生成和解析 xml

2.3 libxml2安装移植(改用minixml)

新建安装文件夹,这样方便我们提取库文件使用

mkdir /home/wangh/workspace/wh_tools/libxml-install

编写安装及配置脚本 wh_configure.sh 如下:

#!/bin/sh#sh文件需设置可执行权限 chmod +x wh_configure.sh
#--prefix=PATH,指定make install时目标文件存放路径
PREFIX=/home/wangh/workspace/wh_tools/libxml-install
#--host=target-platform  指定目标平台
HOST=arm-linux
#交叉编译绝对路径
CC_DIR=/home/wangh/Tools/gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
#编译配置
#sudo ./configure --prefix=$PREFIX --host=$HOST CC=$CC_DIR --with-python=/home/wangh/workspace/wh_tools/libxml2-2.9.9/python
#编译时由于提示没有python相关的头文件出错,又因为项目中不使用python相关的内容,所以没有讲python进库中,读者应该按照自己的需要要配置该选项。对于zlib同样的道理,--without-zlib不添加会编译出错
sudo ./configure --prefix=$PREFIX --host=$HOST --target=arm CC=$CC_DIR --without-zlib --without-python
sudo make
sudo make install

执行安装脚本

2.4 minixml安装移植

是一个小型的开源的XML解析器,采用 C 语言开发。该解析器最大的特点就是小型、无须依赖其他类库,在嵌入式系统中,minixml解析器很小巧(200k多点),很常用。

待续。。。。。

转载于:https://www.cnblogs.com/silencehuan/p/11018966.html

动环监控系统中B接口的实现相关推荐

  1. 动环监控系统中B接口的实现-c语言版

    B接口是使用http+xml+ftp形成的一套通讯框架,一般使用gsoap库来开发 首先是准备gsoap库,编译方法这里就不细说了,这里稍微说下用法 开发环境是ubuntu 64位,测试环境是也是ub ...

  2. 动环监控系统厂家排名,数据中心动环监控系统厂商

    对于动环监控品牌排名,目前没有权威机构或单位组织提供相关数据支持,现场调查排名情况,机房监控行业做的不错的有:云呐动环监控系统 动环监控系统厂家排名2022 防止空调直接的对准方向,并依据气体传感器对 ...

  3. 动环监控系统的组成都有什么呢?

    随着计算机技术的发展和普及,计算机系统数量与日俱增,其配套的环境设备也日益增多,计算机房已成为各大单位的重要组成部分.机房的环境设备(供配电.UPS.空调.消防.保安等)必须时时刻刻为计算机系统提供正 ...

  4. 机房动环监控系统应用意义

    在信息化建设中,机房运行处于信息交换管理的位置,需要确保机房内所有设备,时时刻刻正常运转,否则一旦某台设备出现故障,都会影响到数据的传输,甚至可能会损坏硬件设备,造成不可估量的经济损失. 应用机房动环 ...

  5. 动环监控系统的服务器部署在,动环监控系统【斯必得智慧机房】

    原标题:动环监控系统[斯必得智慧机房] 动环监控系统是一套应用在机房.IDC.数据机房.银行.证券.金融.政务.企业等机房环境得监控.在传统得机房运维中特别是以通信基站为例,通信基站分布广.机房小.地 ...

  6. 动环监控系统方案应用

    机房运维工作,属于既费人又费时间的工作,为了保证机房的稳定运行,企业通常需要安装三班倒,人力成本支出高.而动环监控系统方案,针对位于多个城市.楼层的机房集中管理而设计,能实现成百上千个机房统一监控运维 ...

  7. 动环监控系统的IO服务器,机房动环监控系统配套多路开关量IO

    ' 机房动环监控系统配套多路开关量IO:本产品广泛应用在环境动力监控系统中,集成四串口服务器(同时兼容RS-485/422和RS-232)功能,8路DI,8路AI,6路DO等.4个串口之间完全隔离,互 ...

  8. 云呐|什么是动环监控?动环监控系统的监控对象有哪些?

    智能机房又称机房动力环境监控系统,由动力装置.环境系统.安全系统.消防设施和技术组成,最终形成机房监测终端.环境监测主机及环境监测平台.根据这三项监督,为了确保数据机房的平稳和正常运行,可以取代机房2 ...

  9. 动环监控系统的服务器配置,机房动环监控系统设计与实现.docx

    机房动环监控系统设计与实现 谢健 南京医科大学信息与网络中心 摘要: 随着网络信息化建设的设备日趋增加,其职能运行与维护管理负担也日趋繁重. 该文从建设背景及目标.拓扑结构及建设内容.系统选型及方案设 ...

最新文章

  1. 「SAP技术」SAP MM 委外加工采购流程里副产品的收货
  2. 文件包含中过滤了php,文件包含漏洞---php协议
  3. (2) 假设字符串类似这样的aba和aab就相等,现在随便给你二组字符串,请编程比较他们看是否相等...
  4. 2021暑假每日一题 【week2 完结】
  5. 推荐系统炼丹笔记:EdgeRec阿里边缘计算推荐系统
  6. Mysqldump备份和恢复
  7. CentOS 6.9 搭建 Presto
  8. rk3188开机失败(ump_file_open() 251)
  9. python找字符串中特殊字符_python – 在字符串中查找特殊符号
  10. [转载] javascript入门_WebAssembly入门-仅使用14行JavaScript
  11. C++编程语言中调用函数时分号数量的影响分析
  12. WebForms简介
  13. 归并排序法计算逆序对数
  14. kubernetes视频教程笔记 (12)-容器探针
  15. java jre 配置_JRE的安装及环境变量配置
  16. Prescan(六):prescan设置不停绕圈的障碍车
  17. 后缀.phobos勒索病毒解密成功恢复sql文件 数据恢复
  18. 实时编译、动态执行C/C++源码函数
  19. VIJOS-P1153 猫狗大战 dp 贪心
  20. 每日一道leetcode(python)46. 全排列

热门文章

  1. 请简述SSM框架整合思路。
  2. 助力奈雪,发掘茶饮品牌元宇宙新玩法
  3. THREE将左键改为平移右键改为旋转
  4. 一种自动化生产测试流水线
  5. 首次用jwt做token
  6. 2022-03-07 Influxdb创建用户接口与raft日志交互封装
  7. Android自定义View 实现窗帘控件
  8. 微信小程序实现车牌号录入
  9. IT硬件运维的一些建议
  10. 用函数统计各分数段人数c语言,excel统计各分数段人数的函数