引言
在LED 显示屏工程应用中,显示屏一般在出厂前要做好参数配置、调试、点亮,并做节目测试,否则由于现场条件限制,这些工作很难开展。在做调试和节目测试时,可通过串口和网口进行通信,而随着网络普及和速度的提升,网络通信方式被更多的用户采用,即用户通过集线器或网络直连的方式与显示屏通信。其中通过集线器,PC 机和显示屏IP 可不在同一个网段;而网络直连时,PC 机和显示屏的IP 地址必须在同一个网段。不管采用哪一种方法,都必须知道两者的IP 地址才能进行通信。但在调试过程中,由于LED 控制卡太多、放置时间太长或由不同的人进行配置,有时用户可能不知道显示屏的IP 地址,这样就很难开展工作了。另外,出厂配置的IP 地址和现场安装的IP 地址可能不一样,并且现场安装的显示屏IP 地址由于用户千差万别,其IP 地址段也不一样。这样一来,在调试过程中,需要反复修改显示屏或PC 机的IP 地址,带来很大的工作量。因此,基于应用中的这些问题,有用户提出能否采用网络直连的方式,无需知道LED 显示屏的IP 地址,也不用修改PC 机的IP 就可实现PC 机与LED 显示屏网络通信,让用户更方便地调试LED 显示屏。通过市场调研,有些软件声称实现了LED 显示屏网络直连的方式,但在具体实现上并不能令人满意,例如稳定性、可靠性和时效性等方面并不如意。经过研究,本文提出一种新的网络直连的方法,可以很好地解决这些问题,让用户方便、可靠、高效地调试显示屏。
1 主要功能需求分析和模型构建
对于网络直连,硬件如图1 所示,用网络直连线将PC 机和显示屏连接起来,然后手动设置它们的IP 地址在同一个网段,即可进行通信了。
但采用这种方式,如果事先不知道显示屏的IP地址,将很难进行通信。为了达到不知道显示屏IP地址也能实现PC 机与显示屏直连通信的目的,可借助DHCP 服务原理来解决:即设置LED 显示屏为某固定IP 地址的DHCP 服务器,设置PC 机网卡为自动获取IP 地址的方式,通过DHCP 服务功能,自动配置PC 机的网卡IP 地址,这样网络连接通道就建立了。有些开发商就采用这种方式实现了网络直连,但这种方法存在一些问题:其一,由于UDP 通信为不连接通信,其通信可靠性要差一些,容易失败;其二,只能通过操作系统自带的系统完成,没有干预,用户不能设置超时,有时等待时间太长,最长为60 秒;其三,DHCP 为固定IP 方式,在实际应用中显然不太好;其四,退出系统时,不能恢复PC 机原有的网卡配置信息。
基于此,经过研究,本文提出一种新的网络直连方法,可以实现网络直连、自动获取IP 地址以及实现PC 机网卡配置信息保存和恢复等功能,克服当前实现方法的不足,提高可靠性、稳定性和时效性等各方面性能,其系统模型如图2 所示,主要功能和工作流程如下:
(1)启动系统时,检索、访问PC 机的所有网卡,并保存其网卡配置信息,供退出系统时恢复;(2)启动网络直连进程;(3)广播IP 地址请求数据包;(4)返回IP 地址数据包;(5)解包,获取PC 机和LED 显示屏的IP 地址,设置PC 机的IP 地址;(6)返回LED 显示屏的IP 地址,关闭网络直连,完成通信通道的建立;(7)建立PC 机和LED 显示屏的通信通道后,即可对显示屏进行读/ 写参数、发送节目、开关屏等通信控制操作;(8)退出系统时,根据(1)保存的网卡配置信息,恢复PC 机网卡的原始状态。
在以上流程中,(2)~(6) 是核心过程,它模拟DHCP 服务,实现PC 机广播请求IP 地址,获取PC机IP 地址并设置,上传LED 显示屏IP 地址,完成网络直连通道的建立,是进行网络直连操作时必做的步骤;(1)和(8)是启动和退出系统时所做的保存PC机网卡配置信息和恢复网卡配置信息操作;(7)是在完成网络直连通道后进行的显示屏控制的一般操作。本文重点介绍前两者。
2 关键功能的设计和实现
2.1 保存PC 机网卡配置信息
用来调试显示屏的PC 机,一般是一机多用,在调试显示屏的同时,还用来办公、上网,其网卡IP 地址可能是固定的或自动获取的。在做网络直连时,可能会改变其IP 地址,为了不影响用户的工作,退出时需要自动恢复其IP 地址。而要做到这一点,可在启动LED 控制软件时,读取当前网卡配置信息,如IP 地址、网卡名、MAC 地址、网卡类型、是否是自动配置IP 地址等等,将这些信息放入一个链表中保存,同时设置一个标识,记录用户在调试显示屏的过程中,是否使用过网络直连操作,待退出系统时使用。
在Windows 操作系统中,可使用IP Helper 接口来读取网卡信息,它是一套用于管理本地网络设置的API,通过它使用IP_ADAPTER_INFO 结构,可以方便地提取上述网卡配置信息,保存到链表中。
2.2 借鉴DHCP 服务原理,构建网络直连通道
要实现PC 机和LED 显示屏网络直连通信,必须解决两个关键问题:其一,让PC 机和LED 显示屏在同一个网段;其二,知道LED 显示屏的IP 地址。
除此之外,还要解决多网卡、无线网卡对网络直连的干扰等现象。借鉴DHCP 原理,主要解决思路如下:
(1)在PC 机端设计一个网络直连控制进程;(2) 需要网络直连时, 启动该进程, 通过Windows 相关网络API 函数和注册表信息,确定与LED 显示屏连接的非无线网卡,将其MAC 地址放入构建请求IP 地址的UDP 数据包中,然后广播出去,同时启动内部UDP 包捕获子进程;(3)LED 显示屏收到请求IP 地址的UDP 包后,根据本身IP 地址,构造一个PC 机的IP 地址,将其广播出去,为了不引起混乱,这里构建的是伪DHCP 包,正常的Windows 客户端收到该UDP 包时,并不会自动改变其IP 地址;(4)网络直连控制进程的UDP 包捕获子进程接收到分配的IP 地址的UDP 包后,解包得到PC机的IP 地址和LED 显示屏的IP 地址;(5)设置PC 机网卡IP 地址,上传LED 显示屏的IP 地址给控制软件,成功后,关闭网络直连控制进程,完成网络直连通道的建立。
这个网络直连的过程涉及三个系统:(1)网络直连控制进程,它构建请求IP 地址UDP 数据包并广播出去,同时监控目标网卡的68 端口,捕获返回的UDP 数据包,解析出PC 机的IP 地址和LED 显示屏的IP 地址,然后设置PC 机的IP 地址,将LED显示屏的IP 地址提交给主进程,完成网络直连的任务;(2)LED 显示屏DHCP 服务子进程,它接收PC机的IP 地址请求,构建并设置自身IP 地址,并返回PC 机的IP 地址的伪DHCP 包;(3)LED 控制软件,当用户选择网络直连方式时,启动网络直连控制子进程,实现网络直接通道的建立,完成后,关闭该进程。
2.3 恢复PC 机网卡的配置信息
退出系统时,根据2.1 保存的是否使用过网络直连的标识进行判断,如果没有使用过网络直连方式,则无需执行网络IP 恢复功能;否则将执行恢复功能,还原2.1 保存的网卡配置,恢复网卡IP 地址可使用netsh interface ip set 命令。同时,为了加快处理速度并提高成功率,可按禁用网卡、设置网卡IP地址、再启用网卡的步骤实施:
(1)使用Windows 的SetupAPI 相关接口API函数禁用目标网卡;(2)恢复目标网卡IP 设置,根据静态IP 地址和动态IP 地址,分别用不同的命令:
a. 恢复静态IP 地址命令。
a. 恢复静态IP 地址命令
netsh interface ip set address name=“本地连接”
source=STatic addr=192.168.1.19 mask=255.
255.255.0 gateway=nONe
b. 恢复动态IP 地址命令。
netsh interface ip set address“本地连接”dhcp
(3)使用SetupAPI 相关接口API 函数启用目标网卡,这样就完成了网卡配置信息的恢复。
3 结论
本文针对LED 显示屏调试过程中对网络直连的需求,提出一种网络直连的方法,系统在启动时自动保存网卡配置信息,使用网络直连进程构建网络直连通道,退出系统时自动恢复网卡配置信息,使用户无需知道LED 显示屏的IP 地址,也不用修改PC机的IP 地址,便可实现PC 机与LED 显示屏的网络通信。该方法在LED 导航者软件中使用,其可靠性、稳定性和时效性得到了用户的认可,取得了良好的效果。实践证明,该方法可为类似的应用提供一种可供借鉴的解决方案。