基于套接字和组态王的远程数据采集系统
2014-06-26盛荣郝继飞王念郝宇浩
盛荣,郝继飞,王念,郝宇浩
(中国矿业大学信息与电气工程学院,江苏徐州221008)
1 引言
随着嵌入式技术和网络技术的发展,智能化终端借助Internet 实现远程数据采集越来越受到人们的关注。而网络编程正是其中的关键技术,能否利用网络API 函数编写出稳定、功能强大的上位机系统,将关系到整个系统的成败。文章介绍了一种基于组态王的远程数据采集系统,系统以组态王为中心,以Visual C++6.0 为中介,通过Visual C++6.0 进行网络编程实现远程数据采集,然后把采集到的数据通过动态数据交换技术(DDE)传递给组态王,最后通过组态王对整个系统监控。组态王连接SQL_Server 2008数据库,不仅实现了监控功能,还可以利用数据库系统对数据信息进行高效的管理。
2 系统总体概述
系统由上位机和下位机组成,上位机以组态王软件和Visual C++6.0 为中心,Visual C++6.0 主要是实现套接字(SOCKET)和动态数据交换技术(DDE)的编程。套接字实现对远程WIZ110SR模块的数据采集,VC 把采集到的数据通过DDE 传输到组态王,最后在组态王中实时监控远程的数据采集系统。系统下位机部分以Atmel 公司的Mega128单块的数据采集,最后VC把采集到的数据通过DDE技术传输到组态王,在组态王中实时监控远程的数据采集系统。单片机为核心,具有模拟量采集、开关量输入/输出、看门狗等功能。系统示意图如图1所示。
图1 系统示意图Fig.1 Schematic diagram of the system
3 下位机设计
下位机主要包括Mega128 单片机外围电路、WIZ110SR模块和单片机软件程序设计。
3.1 Mega128单片机外围电路的设计
单片机外围电路图如图2 所示,2 路模拟量输入信号可以是0~5 V 电压和4~20 mA 电流,模拟量输入经过压频变换电路LM331N 后变成频率信号分别接到单片机的定时/计数器T1 和T3引脚。单片机的PB0~PB7 接8 路继电器输出。16 路开关量输入分别接到单片机的PA0~PA7 和PC0~PC7。单片机把采集到的数字量和处理后的模拟量通过RS232 接口传输到WIZ110SR 模块,然后再传输到远程上位机。远程上位机发送的继电器开关的命令通过WIZ110SR 模块传输到RS232 接口,然后传递给单片机,单片机分析处理命令之后控制继电器的输出。之所以用到2 个RS232 接口是因为一个连接WIZ110SR模块,把单片机发送的数据传递到互联网或把远程监控系统的数据通过互联网传递到单片机。另一个预留给单片机连接别的串口设备,监控别的串口设备的状态,扩展模块的功能。
图2 单片机外围电路设计Fig.2 The peripheral circuits of MCU
3.2 WIZ110SR模块简介
WIZ110SR是一个将RS232协议转换成TCP/IP 协议的网关模块,它可以通过以太网连接到RS232 接口实现与远程模块的通信。可以设置模块的IP 地址、端口号、工作模式(客户端模式、服务器模式和混合模式)。图3 为在实验室局域网中对模块的配置:WIZ110SR 工作在客户端模式下,IP 地址为192.168.1.42,端口号为55572。服务器的IP 地址为192.168.1.104,端口号为5050。
图3 模块配置画面Fig.3 The configuration screen of module
3.3 单片机软件程序设计
Atmega128 中的数据采集程序采用C 语言编写,所用开发环境为avrstudio,编译环境为GCC,完成3部分的工作:数据采集、数据接收和数据传输。
程序初始化部分要完成对IO 口,USART0,USART1,Timer0,Timer1 和Timer3 的 初 始 化。数据接收部分通过中断实现,在Avrstudio 开发环境中串口0 接收中断服务程序入口为INTERRUPT(SIG_UART0_RECV)。程序中的协议部分参考Modbus协议中的RTU传输模式。协议如表1所示。根据协议编出下位机程序,程序流程图如图4所示。
表1 Modus RTU通信协议Tab.1 The communication protocols of modbus RTU
图4 单片机软件流程图Fig.4 MCU software flow chart
由于实际中只用到了Modbus 协议中的写线圈和读寄存器功能,所以只需要对功能码中的03和05编程即可。
4 上位机设计
上位机主要以组态王软件和Visual C++6.0为中心,VC实现远程数据采集,然后把采集到的数据传递给组态王。
4.1 上位机总体设计方案
上位机总体设计方案如图5所示,图5a是上位机服务器设计,用来监视远程系统的状态,把远程单片机数据采集系统的开关量状态和模拟量的值显示在组态王界面中。图5b 是客户端设计,主要是组态王控制远程单片机的继电器输出状态。程序中的网络服务需要Socket 编程,组态王和VC 之间的数据交换使用的是DDE 技术,所以程序的关键技术包括套接字(SOCKET)编程和动态数据交换技术(DDE)编程。
图5 上位机总体设计方案Fig.5 The overall design of the upper computer
4.2 套接字编程
Sockets 是一种网络编程接口,Socket 提供了很多灵活的函数,帮助程序员写出高效的网络应用。文章应用了Windows平台上的Sockets,即WinSocket。Socket 通信分为面向连接的通信(TCP)和面向无连接的通信(UDP),为了保证通信的实时性、准确性,我们使用了面向连接的通信(TCP)。Visual C++中的Socket 核心函数简介:
①创建Socket:m_pMySocket=new CMySocket;//动态内存分配m_pMySocket->Create();//创建Socket。
②连接Socket:m_bLinked= m_pMySocket->Connect(m_strEditIPAddr,m_unEditPortNO);m_strEditIPAddr 为服务器IP 地址,m_unEditPortNO服务器的端口号。返回值表示连接是否成功。成功返回TRUE,否则返回FALSE。
③接受连接:void CListenSocket::OnAccept(int nErrorCode),监听套接字监听远程模块的连接。
④接收数据:void CMySocket::OnReceive(int nErrorCode),接收远程WIZ110SR 模块传送的数据。
⑤发送数据:void CSclientDlg::OnButton-Send(),发送数据给远程的WIZ110SR 模块。主要调用Send()函数,通过建立连接的套接字发送数据。
4.3 组态王与VC动态数据交换
DDE(dynamic data exchange)是一种动态数据交换机制。使用DDE通讯需要2个Windows应用程序,其中一个作为服务器处理信息,另外一个作为客户机从服务器获得信息。主要应用了如下函数。
4.3.1 初始化DDE会话
使用函数DdeInitialize idInst=DDEhInitial(LPCTSTR("VIEW"),LPCTSTR("Tagname"));第1 个参数为应用程序名,组态王的应用程序名为VIEW,第2 个参数为话题名,即组态王中变量的名字。格式为项目名称,寄存器地址。返回值为创建的DDE句柄。
4.3.2 DDE请求数据函数
CString DDEhRequest(DWORD idInst,LPCSTR szItem),请求与组态王所关联的寄存器中的数值,返回值为所获得话题名中的数据,类型为Cstrig类型。
4.3.3 DDE写入函数
BOOL DDEhPoke(DWORD idInst,LPCSTR szItem,LPCSTR szData),往组态王寄存器中写入数据,写成功返回TRUE,否则返回FALSE。
4.3.4 结束DDE会话
BOOL DDEhTerminate(idInst);结 束 本 次DDE 对话,断开DDE 连接,参数为初始化时创建的DDE 句柄。断开成功返回TRUE,否则返回FALSE。
4.4 VC界面
在组态王中建立设备仿真PLC stc8。stc8.STATIC0 代表8 路继电器输出,范围为0~255,stc8.STRING1和stc8.STRING2代表PA口和PB口传递给组态王的16 路开关量状态。stc8.STRING3 代表了2 路模拟量的输入值,stc8.STRING4扩展串口接收的数据。图6的上半部分是基于Socket的网络编程,下半部分是DDE与组态王动态数据交换,由于是在局域网中测试,所以服务器IP地址为内网IP地址。
图6 VC运行界面Fig.6 The VC operation interface
4.5 组态王界面
组态王界面如图7所示,继电器1~8为8个按钮,可以控制下位机8路继电器的输出,黑色表示继电器闭合,灰色表示继电器开启。开关量1~16为16 个指示灯,用于指示下位机16 路开关量的状态,灰色代表高电平输入,黑色代表低电平输入。模拟量1、模拟量2 分别代表第1 路和第2路模拟通道的值。扩展串口表示别的设备的串口发送给单片机的数据。
图7 组态王监控画面Fig.7 The monitor screen of kingview
5 结论
本系统上位机使用组态王和Visual C++6.0,下位机使用远程模块WIZ110SR 和Atmega128 单片机,实现了组态王对远程系统的监控。组态王和VC 之间使用DDE 技术实现数据交换,扩展了组态王的应用。解决了组态王不能上回的问题,经过测试,表明该系统具有实是性强,强靠性高,稳定性强的特点,具有很好的应用价值,该系统通用性好,只需稍加改动就可以应用到其他远程监控系统中。
[1]田海,任清娟.基于Modbus 和GRPS 的高炉渣粒化配电监控系统[J].电气传动,2012,42(10):72-77.
[2]陈嫣然,张会新,郑燕露.基于以太网的高精度测试系统设计[J].自动化与仪表,2012,27(2):12-15.
[3]白瑞林,史鹏飞,吉峰,等.基于Modbus/TC的智能相机通信接口实现[J].控制工程,2011,18(4):618-622.
[4]刘红霞,屠袁飞.基于DDE 与Winsock 的WinCC 数据通信[J].通信技术,2010,43(7):201-209.
[5]张方昌,刘晓丹,侯维岩,等.一种基于Wi—Fi 的计量抄表系统的设计和实现[J].自动化与仪表,2010,25(6):18-21.
[6]张利利,李晓京,胡文东,等.基于C++Build 的PC 与单片机串口通信的实现[J].微型电脑应用,2012,28(9):53-55.
[7]Zhang Yu,Yu Tong.Mining Trust Relationships from Online Social Networks[J].Journal of Computer Science and Technology,2012,27(3):493-505.