当前位置: 首页 > 党团工作 >

WinCE嵌入式智能高压开关柜与KingSCADA通信中Modbus通信协议应用研究

发布时间:2023-05-30 12:48:02 | 来源:网友投稿

【摘 要】本文详细介绍了WinCE嵌入式智能高压开关柜与KingSCADA组态软件Modbus通信协议程序实现。为了便于读者更好理解Modbus通信协议,文中简要介绍了Modbus通信协议。WinCE与KingSCADA之间Modbus通信实验过程中遇到的不少问题,本文针对这些问题做了较为详细的阐述,并提出了自己的解决方案,这为需要做这方面应用研究工作提供了宝贵的经验。

【关键词】KingSCADA;Modbus;IED;WinCE

0 引言

随着科学技术的进步,智能电网(Smart Power Grids)概念不断深入和推广,高级组态软件及嵌入式系统在智能电网领域得到了广泛应用,KingSCADA组态软件因其首次引入模型化概念,在智能电网领域得到了广泛应用。WinCE嵌入式系统在智能电网领域也得到了较为广泛的应用,本文将详细介绍WinCE嵌入式系统与KingSCADA组态软件通信中用到的Modbus通信协议及其程序实现。

1 Modbus通信协议

标准的Modbus-TCP协议报文格式规定如下:2字节交互标识、2字节协议标识、2字节报文长度、1字节设备标识、1字节功能码,n字节有效数据。Modbus协议报文分Modbus RTU报文格式和Modbus ASCII模式,数据通信采用标准串行通信协议,两者之间不同的是,ASCII方式用“:”标识帧起始,用“CR LF”标识帧结束,校验采用LRC方式,相当于将RTU帧中一个字节的内容换成了两个ASCII字符。Modbus-TCP中的设备标识,功能码等于Modbus RTU相同,可以认为是在Modbus RTU报文前加了一个帧头,去掉了尾部CRC校验。Modbus协议定义了4种基本数据类型:可读写位数据、只读位数据、只读16位数据、可读写16位数据。这些数据都是一个从地址1开始的数组,访问时需要指明从哪个地址开始访问,访问多少个数据。Modbus协议相当复杂,但是常用的命令主要有:01、02、03、04、05、06、15、16号命令,这些功能号详细定义请参见Modbus协议规范。

2 WinCE下Modbus通信协议及程序编写

Modbus-TCP通信协议是一种主(Master)、从(Slave)半双工通信模式的通信协议,通信体系中需要一个做主(Master)程序,一个做从(Slave)程序。在本通信拓扑结构中,KingSCADA充当Maser角色,工作于TCP Server模式,因此只需要在WinCE系统中编写一个工作于Slave角色的TCP Client程序就可以实现通信。

WinCE系统中Modbus-TCP协议编程实际上很大程度上依赖于TCP Client程序,因此在程序实现上首先完成TCP Client模式通信程序,然后在此基础上封装上Modbus协议即可。关于TCP Client程序流程比较简单,这方面的资料比较多,可以参考资料[3]中435页详细介绍WinCE下TCP客户端和服务端程序编写。为了避免不同的程序模块耦合,实现程序模块化的设计,在程序中定义一个专用TCP Client类CTCPCustom_CE,该类提供了五个回调函数,这样方便用户使用CTCPCustom_CE类。这五个回调函数是OnClientConnect、OnClient Read、OnClientClose、OnClientError、OnServerError。这五个函数分别实现的功能是客户端连接成功事件、客户端接收数据事件、客户端断开连接事件、客户端错误处理事件、服务端错误事件。

要实现Modbus通信,最关键的是如何接收上位机发出的命令,然后下位机根据这些不同的指令做出相应的回应。为了便于程序实现,在VS2005智能设备应用程序中需要创建一个基于对话框名叫CSmartStatePowerGridDlg应用程序,为了方便起见,以下都叫该应用程序为上层应用程序。在上层应用程序中OnClientRead回调函数发送的WM_RECV_TCP_DATA消息映射到上层应用程序OnRecvTCPData函数,当上层应用程序收到消息后,系统调用OnRecvTCPData函数, OnRecvTCPData函数会从OnClientRead回调函数指定的缓冲区获取数据,然后将这些数据拷贝到新的缓冲区进行解析处理。

图1 Modbus-TCP协议解析程序流程图

WinCE系统中OnClientRead回调函数程序代码比较简单,当TCP客户端类CTCPCustom_CE接收到上位机KingSCADA下传命令时,WinCE上层应用程序收到该消息后,从指定位置拷贝数据,然后进行解析。WinCE上层应用程序会根据收到的指令不同做出相应的回应。这些指令区别是通过功能码进行区分的,KingSCADA中常用Modbus功能码主要有3个,即3号、6号、16号功能码。3号功能用于轮询下位机状态或读取数据,6号命令用于发送二进制命令数据,如开关控制信息,16号功能用于下传模拟参数,如设定温度,压力等数据。OnClientRead回调函数示例代码如下:

Modbus协议解析程序相对要复杂得多,程序复杂程度取决于解析功能码的个数,为了简单起见,程序用流程图表示。实际上KingSCADA常用是3、6、16号功能码,因此,本程序流程只设计了这三个功能码处理流程,Modbus-TCP协议解析流程图参见图1,从图1来看,程序流程含义如下,当OnClientRead回调函数收到上位机数据时,首先保存数据到临时缓冲区,然后发送WM_RECV_TCP_DATA消息通知WinCE上层应用程序,WinCE上层应用程序收到该消息后,执行OnRecvTCPData函数,初始化缓冲指针,动态分配内存空间,从OnClientRead回调函数指定的缓冲区中拷贝数据,开始检查是否是有效Modbus协议指令数据,如果是合法指令数据,获取设备地址、功能号等信息。如果是3号功能,该功能表示上位机轮询下位机状态和数据,下位机将状态和数据按照Modbus协议要求封包,然后上传给KingSCADA,上传完后释放内存资源,退出程序;如果是6号功能,该功能表示上位机传送的是开关命令,下位机获取开关命令信息,解析开关命令,开始执行开关命令操作,最后释放内存资源,程序退出;如果是16号功能码,该功能码表示上位机下传模拟数据,下位机解析数据,然后向上位机发送应答指令,最后释放内存资源,退出程序;如果是非法或未定义指令,下位机不予处理,直接释放内存资源,退出程序。

3 通信测试

WinCE嵌入式高压开关柜与KingSCADA数据通信测试,在实际通信测试中,需要在KingIOServer中创建一个基于ModbusMaster链路,然后创建一个基于ModbusTCP的通信设备,设置好通信参数,在设备诊断中添加各种变量。在KingSCADA中数据词典创建若干个IO变量,以便于这些变量与KingIOServer设备诊断中变量一致,然后把这些变量关联到对应的开关或状态显示点,启动KingIoServer就可以实现通信。通过实验测试,WinCE智能开关柜中的各种状态信息,能正确上传到KingSCADA中。

需要注意的是,由于在Modbus协议中一般规定寄存器数据按字(Word)存储,即一个寄存器占2个字节空间,而KingSCADA中规定Long型数据或Float型数据使用2个字,即4个字节,浮点数采用IEEE-754标准,存储一个浮点数占用4字节存储空间,这4个字节上传有四种组合方式,具体可以参考KingSCADA驱动帮助文档。因此,WinCE上层应用程序在发送Long型数据或Float数据时,应注意字节顺序。如果在同一组数据变量中,有Word型变量和Long型变量或Float变量混合时,KingSCADA会将不同类型的数据分成几个数据包轮询。否则,通信可能会带来意想不到的问题。

4 结论

由于Modbus协议是一种基于主(Master)、从(Slave)模式半双工通信方式的协议,因此该协议仅仅适用于数据传输量不大、实时性要求不高的工业控制设备中。实验证明WinCE嵌入式高压开关柜与KingSCADA通信采用Modbus通信协议数据传输非常稳定可靠,完全满足高压开关柜的各种状态及控制命令传输,但是对于非周期性数据及实时性极强的数据,如断路器合闸线圈电流、断路器合闸行程参数、断路器分闸线圈电流、断路器分闸行程参数、储能电机电流等突发性极强的数据,仅仅通过Modbus通信协议传输这些数据是非常困难的,要解决这些问题,必须在这个基础上做一些技术改进。由于KingSCADA支持ODBC和OLEDB方式快速访问数据库,用户可以将这些具有突发性的数据先写入数据库中,然后KingSCADA通过ODBC或OLEDB方式访问数据库实现数据传输,通过这种方法能很好地解决这个问题。

【参考文献】

[1]王德文,阎春雨,毕建刚,袁帅.变电站状态监测通信网关中Modbus与IEC 61850的映射方法[J].电力系统自动化,2012(19).

[2]尚秋峰,陈于扬,姚国珍,李灏.基于Wince嵌入式内核的新型电力参数实时测量系统[J].电力系统保护与控制,2010,38(22).

[3]汪兵,编著.Windows CE嵌入式高级编程及其实例详解[M].中国水利水电出版社,2008,7.

[责任编辑:丁艳]

推荐访问:开关柜 信中 嵌入式 高压 通信协议

本文标题:WinCE嵌入式智能高压开关柜与KingSCADA通信中Modbus通信协议应用研究
链接地址:http://www.ylwt22.com/dangtuangongzuo/2023/0530/258712.html

版权声明:
1.十号范文网的资料来自互联网以及用户的投稿,用于非商业性学习目的免费阅览。
2.《WinCE嵌入式智能高压开关柜与KingSCADA通信中Modbus通信协议应用研究》一文的著作权归原作者所有,仅供学习参考,转载或引用时请保留版权信息。
3.如果本网所转载内容不慎侵犯了您的权益,请联系我们,我们将会及时删除。

十号范文网 |
Copyright © 2018-2024 十号范文网 Inc. All Rights Reserved.十号范文网 版权所有
本站部分资源和信息来源于互联网,如有侵犯您的权益,请尽快联系我们进行处理,谢谢!备案号:粤ICP备18086540号