lib60870-IEC 60870-5-101 / 104 C源代码库用户指南-版本2.3.0--第一部分

4 篇文章 17 订阅
4 篇文章 0 订阅

lib60870-IEC 60870-5-101 / 104 C源代码库用户指南-版本2.3.0--第一部分

 

https://github.com/mz-automation/lib60870

介绍

lib60870是针对客户端(主站)和服务器(从站或受控站)的IEC 60870-5-101 / 104协议的功能丰富且经过实践验证的实现。该库实现了IEC 60870-5-101 / 104规范的所有数据类型。lib60870在标准C中实现,并且与C99标准兼容。它被设计为易于使用。

客户端/服务器API严格是异步的。您使用非阻塞函数发送请求,并且必须处理回调函数中的响应和其他事件。

以下是受支持的功能列表:

  • CS 101(IEC 60870-5-101)平衡和不平衡串行模式

  • CS 104(IEC 60870-5-104)客户端和服务器TCP / IP通信

  • CS 104支持加密和认证的TLS通信

  • CS 104使用CS 101应用层

  • CS 104从站:支持冗余组

  • 主站/客户端支持反向发送系统命令,过程命令,参数命令和数据消息。

  • 从站/服务器支持以监视方向发送数据消息,并以相反方向发送命令

  • 支持的ASDU类型列表可以在附件中找到

  • 该库支持用户定义的私有ASDU类型

  • 库扩展的插件界面

注意: CS代表“配套标准”,并指定IEC 60870-5标准系列中定义的通信协议和服务的变体。

该库使用“面向对象”编程风格。它基于抽象数据类型(ADT)和对这些数据类型进行操作的功能。通常,对于API用户而言,数据类型(保存数据的数据结构)的实际实现是隐藏的。在几乎所有情况下,都不需要(也不建议)API用户直接访问这些数据结构。

 

应用层消息

将通过作为库API核心部分的CS101_ASDU ADT的示例来说明这种编程风格。此数据类型表示CS101 / CS104协议的应用层消息。缩写ASDU代表“应用程序服务数据单元”。要创建新的ASDU对象,必须将CS101_ASDU_create函数用作该对象的构造函数。

CS101_ASDU newAsdu = CS101_ASDU_create(alParams, false, CS101_COT_INTERROGATED_BY_STATION,
      0, 1, false, false);

此功能具有各种参数,以反映ASDU的不同属性。这是CS101_ASDU_create函数的签名:

CS101_ASDU
CS101_ASDU_create(CS101_AppLayerParameters parameters, bool isSequence, CS101_CauseOfTransmission cot,
                  int oa, int ca, bool isTest, bool isNegative);

第一个参数,如果是CS101_AppLayerParameters类型的另一个对象,它表示主协议和从协议之间共享的应用程序层参数。如果双方没有相同的参数,则他们将无法从另一方了解ASDU。

第二个参数isSequence,指示ASDU包含一系列连续的信息对象(如果为true)或一个或多个独立的信息对象(如果为false)。一系列连续的信息对象意味着ASDU仅包含一个信息对象地址(IOA)。连续的信息对象的地址为IOA,IOA + 1,IOA + 2 ......

第三个参数指示传输原因(COT)。告诉对方发送消息的原因。可能的值可能是CS101_COT_PERIODIC周期性的消息,CS101_COT_SPONTANEOUS自发消息。

其他参数是oa,代表发起方地址,ca代表ASDU的公共地址,isTest指示消息是测试消息,isNegative指示消息是对另一个消息的否定确认。

使用新的ASDU对象的句柄(在我们的示例中为newAsdu),我们可以调用各种函数之一来获取或设置ASDU的数据。例如,您可以使用CS101_ASDU_isTestCS101_ASDU_setTest函数获取或设置测试标志值。这些函数的第一个参数始终是ASDU对象的句柄。

bool isTest = CS101_ASDU_isTest(newAsdu);

创建可用的ASDU对象的重要功能是CS101_ASDU_addInformationObject函数。使用此功能,您可以将信息对象实例添加到ASDU。

InformationObject io =(InformationObject)MeasuredValueScaled_create(NULL,100,-1,IEC60870_QUALITY_GOOD); 
CS101_ASDU_addInformationObject(newAsdu,io);

可以多次调用此函数,以将更多信息对象添加到ASDU对象。它具有一个布尔值返回值,该值指示是否已成功添加信息对象(返回值true)。ASDU有效负载已满时,添加信息对象可能会失败。在这种情况下,该函数将返回false

最后,当应用程序创建ASDU对象并且不再需要它时,必须使用CS101_ASDU_destroy函数将其释放。

CS101_ASDU_destroy(newAsdu);
  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值