APP下载

VB程序实现LED电子显示屏节目的自动录入、发送

2018-03-23张玉虎

电子技术与软件工程 2018年4期
关键词:自动

张玉虎

摘 要针对LED电子显示屏的普遍使用,结合气象部门的特点,通过VB程序实现预报节目自动录入电子屏,完成节目自动发送。

【关键词】LED电子屏 VB 自动

1 引言

为了宣传单位形象、展示信息,单位大门安装单色LED电子显示屏,这类LED显示屏均无网络功能,节目要通过管理软件人工录入,对于像气象部门这类每天定时录入天气预报节目的单位及用户,节目的录入需安排专人完成,本文讨论VB程序完成天气预报节目的自动录入、发送的过程。

2 LED电子屏介绍

通讯方式:RS232(直线条),支持5个节目,每个节目划分5个区域,节目编辑、发送工具菜单如圖1。

用户可通过“新建”菜单编辑节目,通过“发送”菜单将节目发送到电子屏显示。

电子屏软件安装目录下有一个名为:节目.led的文件,该文件包含所有节目信息,也可以通过编辑该文件实现对节目的编辑,本文通过VB程序处理该文件实现对节目的编辑,并通过程序操作鼠标点击“发送”菜单实现预报节目的自动发送。

3 预报制作情况

预报员将每天的天气预报信息以文本文件格式存放在局域网服务器的共享目录下,每天固定两次(上午06时和下午16时),文件名为:yb121-月月日日06.txt和yb121-月月日日16.txt。

4 实现过程

将LED电子屏管理的机器接入局域网服务器,在该机器硬盘建立一个存放预报信息的文件夹(D:\yb),VB程序安装在该机器上,程序将预报节目自动拷贝到该目录,完成处理后,发送到LED电子屏。程序设计监测、处理、发送三个模块实现,流程图如图2。

4.1 监测模块的设计

通过VB时钟控件实现,监测模块一旦监测到服务器共享目录里有预报文件形成并当天未被拷贝,即拷贝文件到LED电子屏管理机器(D:\YB),调用处理模块对文件进行处理。以下是对06时文件处理的主要代码,16时略:

Dim jmonth As String `定义变量

Dim jday As String

Dim Filename06 as string `06时预报文件名

Timer1.Interval = 100 `时钟初始化

If Month(Date) > 9 Then `对预报文件名“月”的处理

jmonth = Month(Date)

Else

jmonth = "0" & Month(Date)

End If

If Day(Date) > 9 Then `对预报文件名“日”的处理

jday = Day(Date)

Else

jday = "0" & Day(Date)

End If

Filename06 = "\\172.23.116.254\data\气象服务\电视天气预报\yb12121-" & jmonth & jday & "06.txt" `形成06时预报文件名如yb121-120106.txt。

If Dir(filename06) <> "" And Notcopy Thtn `拷贝06时文件

Copy (filename06,“D:\YB”) ` Notcopy为布尔变量,00时赋值为True,完成拷贝操作就赋值为False。

End if

4.2 处理模块的实现

该模块主要完成对预报文件内容提取并写入电子屏管理软件安装目录下的节目.led文件,对预报文件内容处理用VB字符处理Mid、InStr 、LTrim等函数完成。

4.3 发送模块的实现

该模块是整个程序的关键,当处理模块将节目文件处理完成好,调用该模块完成节目的发送工作。首先在程序窗体的“通用部分”申明鼠标操作的如下API函数:

Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long) ;`按鼠标

Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long '移动鼠标

程序调用SetCursorPos函数将鼠标移动到电子屏管理软件“发送”菜单上:

Call SetCursorPos(379, 54);调用mouse_event函数实现点击“发送”菜单,完成节目自动发送:

Call mouse_event(&H2;, 379, 54, 0, 0) '鼠标在“发送”菜单上按下。

Call mouse_event(&H4;, 379, 54, 0, 0) '鼠标在“发送”菜单上抬起。

5 几点说明

5.1 关闭led编辑软件

为了让程序对鼠标完成准确操作,要及时关闭打开的led编辑软件,发送前先关闭led编辑软件后再打开该软件。

打开用Shell "C:\Program Files\HG\HG.exe", 3)函数完成。

关闭led管理软件定义Killled(Ledss As String)过程完成,该过程用到如下5.3所列的几个API函数,在程序窗体“通用”处申明,本文略。

5.2 Killled(Ledss As String)过程

代码如下:

Private Sub Killled(Ledss As String)

Dim Ledshot As Long

Dim Lednext As Long

Dim Ledtp As PROCESSENTRY32

Ledshot = CreateToolhelp32Snapshot(&H2;&, 0&)

If Ledshot <> -1 Then

Ledtp.dwSize = Len(Ledtp)

Lednext = Process32First(Ledshot, Ledtp)

Do While Lednext

If LCase$(Ledss) = LCase$(Left(Ledtp.szExeFile, InStr(1, Ledtp.szExeFile, Chr(0)) - 1)) Then

Dim Led1p As Long

Dim Ledcode As Long

Led1p = OpenProcess(1, False, Ledtp.th32ProcessID)

TerminateProcess Led1p, Ledcode

CloseHandle Led1p

End If

Lednext = Process32Next(Ledshot, Ledtp)

Loop

CloseHandle (Ledshot)

End If

End Sub。

5.3 Killled(Ledss As String)過程

用到的API函数:

CreateToolhelp32Snapshot,Process32First,Process32Next,OpenProcess,TerminateProcess,CloseHandle。

参考文献

[1]刘彬彬,孙秀梅,巩建.Visual Basic编程宝典[M].人民电子出版社,2012.

作者单位

宁夏固原市气象局 宁夏回族自治区固原市 756000

猜你喜欢

自动
自动捕盗机
基于STM32的自动喂养机控制系统
自动吸食机
Stefan Greiner:我们为什么需要自动驾驶?
自动派送快递成可能