软件实现

2024-09-13

软件实现(精选12篇)

软件实现 篇1

摘要:根据软件水印原理,软件水印可以应用于验?证软件版权所有。其方法是将软件版权信息作为水印内容,以可执行文件作为嵌入载体。在分析可执行文件各节结构存在一定程度的空余存储空间之后,可以利用这些空余空间或者构造空余空间,将水印信息经过加密并设计通用的策略嵌入其中。同时修改可执行文件的相关特征数据,以实现嵌入水印的隐蔽性。嵌入的水印密文可以被提取并解密,从而声明软件版权。

关键词:软件水印,版权声明,PE文件格式,加密

目前主要的软件保护技术有:序列号保护,警告(NAG)窗口,时间限制,Key File保护,限制功能保护等等。基于硬件的方法有加密狗、加密锁保护,光盘保护等等。然而,随着互联网应用的普及,软件破解技术不断发展并广泛传播。与此同时,各种软件调试破解工具不断升级。传统的保护手段对于破解者来说是相当脆弱的。以致软件盗版、软件非法拷贝等问题日益严峻,也因此软件产品知识产权的保护变得尤为重要。一般来说,如果软件产品能够被专利、版权等方式合法的保护,然而发现攻击软件知识产权的行为难以界定。因此通过技术手段来保护软件开发商的知识产权成为必要的选择。从技术层面来说,我们需要足够的证据来证明软件的开发者对软件的所有权。如果软件版权受到侵害,则可以抽取信息来证明作者对其作品的所有权。软件水印技术[1]就是在这一背景下提出来的,并成为一种很有前景的软件保护技术,有待进一步的研究。

美国在软件水印研究方面的成果最为显著,有多篇介绍动态水印算法[2,3,4]。微软申请了一项专利[5],描述了一种水印技术,以此来防止盗版。1998年,美国版权保护技术组织成立了数据隐藏小组[6],着手制定版权保护水印的技术标准。尽管至今还没有形成数字水印的最终技术标准,但已经明确了用于版权保护的数字水印必须满足的一些基本条件。我国在软件水印的算法研究领域我国已经有不少论文发表[7,8],同时在软件水印应用方面也有探索。

软件水印是密码学、软件工程、算法设计、程序设计等学科的交叉研究领域。软件水印是近年来出现的一种新型的软件版权保护方法。它在软件产品中嵌入版权保护信息和身份认证信息,并通过检测出版权保护信息和身份认证信息来确认对产品的版权拥有,防止软件盗版和非法拷贝。本文根据PE(Portable Executable)文件格式的特点,提出了一种较好的嵌入版权信息的策略,并且对版权信息进行加密处理,增强了信息的安全性。

1 软件水印保护版权原理

水印是信息隐藏的有效手段。软件水印也继承了水印的这一特点,具有信息隐藏的功能,只是信息隐藏的场所不是媒体而是软件。软件水印保护软件版权的问题就是利用了水印的信息隐藏功能,其过程可以描述为:水印信息设计加密、嵌入、检测。作为版权保护的水印应该包含软件的作者,公司等版权信息。当然可以将其他的一些重点信息也合并到水印中。在设计水印信息时对其加密,可以防止水印信息遭到破坏或者修改。

根据软件水印的分类,对软件版权进行保护,可以采用动态软件水印,也可以采用静态软件水印的方法。如果选择前者,那么程序开发过程中,选择一种动态水印算法,和正常的软件模块一起编写、编译。完成后的软件程序执行过程中,就可以验证水印的存在。

对于静态软件水印一般软件版权信息都是保存在源代码中,而版权信息一般是在软件设计好后确定下来的,如果采用源代码方式把版权信息嵌入不便推广为一般方法。因此那种在源代码中保存水印信息的方式需要改进。这里改进水印的嵌入载体为PE文件,即在编译成功后的可执行文件中。水印的检测过程与水印的嵌入是可逆的,如果嵌入中采用了加密处理,则在检测时还要有解密过程。通过检测水印有无及水印内容可知该软件的版权归属。具体步骤如下:

1)生成软件水印信息W。

2)将软件水印信息W加密处理生成W′。

3)确定软件水印信息的嵌入位置,按照一定的策略写入PE文件的空余存储位置。

4)提取PE文件中的水印密文W′。

5)解密W′,验证PE文件的版权信息。

在软件水印保护版权的过程中最关键部分应该是两个方面:一方面是是水印信息在PE文件中的嵌入位置;另一方面水印信息的设计与嵌入策略的设计。下面将对这两方面作详细讨论。

2 PE格式及水印嵌入位置分析

PE文件是目前微软Windows操作系统的可执行文件。代码编写、编译、链接后的可执行文件都以PE文件格式存储。与PE文件相关的变量和数据结构定义在WINNT.h中[9]。水印信息嵌入PE文件中有一个基本要求,就是不能影响软件的执行。基于这一原则,水印信息只能嵌入PE文件中非程序数据区,这里有两种方案:一是利用现有的PE文件中的空余区域,二是在PE文件末尾添加新节。

2.1 PE文件现有的空余位置

PE文件在磁盘当中是根据File Alignmet对齐之后存储的。File Alignment值为0x200,因此PE文件节间的空余空间(R)范围是:0≤R<0x200。实际情况是PE文件.text,.data,.rsrc等节都存在大小不等的空间空余。需要指出的是在IMAGE_SECTION_HEADER结构中,有三个域:Virtual Size,Size Of Raw Data,Pointer To Raw Data[10]。

1)其中Virtual Size:标识该节的实际大小,没有经过Section Alignment或者File Alignment对齐的大小。

2)Size Of Raw Data:标识该节在文件中占据的大小。通常情况下Size Of Raw Data大于Virtual Size。

3)Pointer To Raw Data:标识该节在文件中的偏移位置。

综上分析:对于每一节,从Pointer To Raw Data位置到Pointer To Raw Data+Size Of Raw Data–Virtual Size就是该节在磁盘存储中空余的部分。

为了增强隐蔽性,防止探测程序清除隐藏在PE文件中的信息,软件水印信息在被嵌入PE文件之后可以把Virtual Size的值修改为Virtual Size与水印的长度之和。

2.2 构造空余位置

在PE文件末尾添加一个新节构造空余空间:包括节的PE文件头信息,节内容。最后修改PE头部信息。

2.2.1 构造IMAGE_SECTION_HEADER信息

1)Name:任意少于8个字节的字符串。可以为空。

2)Virtual Size:即节内容的实际大小,节的内容是根据具体应用而来

3)Virtual Address:原PE文件最后一节的Virtual Address加上最后一节(Virtual Size%Section Alignment+1)*Section Alignment。

4)Size Of Raw Data:新节的(Virtual Size%File Alignment+1)*File Alignment。

5)Pointer To Raw Data:原PE文件最后一节Pointer To Raw Data+Size Of Raw Data。

6)根据需要设置新节的Characteristics。

2.2.2 修改PE文件IMAGE_FILE_HEADER结构

1)Number Of Sections加1。

2)Size Of Image加上新节的大小。

3 版权保护水印设计与实现

3.1 软件水印信息的生成

由于PE文件的空余存储空间并非连续分布,所以软件水印信息可能大于每一个空余存储空间,而又小于它们的总和。所以软件水印信息需要被切分。当软件水印信息大于空余存储空间之和时,嵌入软件水印的办法只有在PE文件末尾添加一个新节了。

综上分析,软件水印信息可能被切分,可以设计软件水印信息由两个部分组成:软件水印信息主体(body)与软件水印信息尾部(rear)。信息的rear部分不会被切分,并且会被嵌入到每个空余存储区,备份rear部分便于水印信息的提取。

3.1.1 软件水印信息主体

本文是通过软件水印技术来实现软件版权保护,所以按设想水印信息主要应当包括软件的作者、版权所有、版本号、日期等等。水印的body部分根据需求,也可以设计为其他内容,大小任意。本文将水印body部分定义为结构体:

3.1.2 软件水印信息尾部

由于PE文件的空余存储空间分布于每个节的尾部,所以在提取水印信息时,先读取水印尾部比较方便。水印尾部大小固定,这样如果某个空余存储空间小于尾部大小,那么该空余空间不嵌入软件水印信息。

水印尾部具体内容包括:水印信息固定标识为“SW�”。SW为Software Watermarking的缩写。水印信息分割后存放的位置信息,即存放的水印数据片段的文件偏移地址及其大小。结构体定义为:

3.2 水印嵌入及其提取

3.2.1 水印的嵌入过程

嵌入水印的过程如图一所示,需要说明的是:

1)水印body部分进行加密处理,加密算法可以选择任意一种,本文以DES对称加密算法为例。加密生成的密钥写入文件保存。

2)无论水印的body部分是否被切分,水印的rear部分都应当写入每个具有足够大空余的节。这样起到备份水印嵌入位置信息的作用。

3)水印body部分的切分是根据各节的空余存储空间来定。所以大小不固定,各部分嵌入的位置被记录在水印的rear部分。

3.2.2 水印提取过程

首先从各个节的末尾读取水印rear大小的数据块。验证数据是否为水印的rear部分。水印rear部分由标识为“SW�”。

然后读取rear部分记录的每个节被嵌入的水印片段的位置及其大小。继而读取加密后的水印。将body部分拼接起来。

对body部分的数据进行解密,验证版权所有。

3.3 实验结果

算法实现平台:Microsoft Windows Xp Sp2,512MRAM.Microsoft Visual C++7.0。而此处水印body内容设计为COPYRIGHT_OWNERSHIP结构体。autor Name为:“XXX”;company Name为:“版权所有:Powered By XXX company”;date为:“2009-2015”;Version为:“Version 1.0”。COPYRIGHT_OWNERSHIP结构体大小为0x0055。通过DES加密后大小为:0x0058。

实验1以Windows任务管理器为例进行分析和水印的嵌入,taskmgr.exe版本号为5.1.2600.2180。

taskmgr.exe共3个节,其中.rsrc节Pointer To Raw Data是0x00014a00,Size Of Raw Data是0x00009600,Virtual Size是0x00009454,其空余存储空间最大为:0x01ac。.text节的空余存储空间为0x0112。水印body嵌入的位置是.rsrc节Pointer To Raw Data+Virtual Size=0x0001de54。水印的rear部分同时也备份到.text节中。提取解密后验证有效。

实验2是以金山词霸2007为例,进行分析并嵌入水印。本机的金山词霸2007被加UPX壳,节头信息被修改,Size Of Raw Data显示比Virtual Size小。所以根据算法流程,只有添加一个新节实现水印的嵌入。

通过分析,本机的金山词霸2007经加壳之后有三个节:UPX0,UPX1,与.rsrc三个节。.rsrc节Size Of Raw Data:0x00013600,PointerTo Raw Data:0x000ac800,所以我们添加的新节的文件偏移位置Pointer To Raw Data是:0x000bfe00。水印嵌入信息与提取验证一致。

4 总结

实验表明,将水印信息嵌入节的空余存储空间之后,再修改节头的Virtual Size以及Size Of Raw Data等信息。水印能够实现很好的隐蔽性。如果水印信息是嵌入到一个新建节当中,最好把所有的节的节名修改。或者修改掉节头信息,实现较好的隐蔽性。

本文利用PE文件自身固有的空余存储空间或者构造空余空间实现对水印信息的嵌入,同时水印信息得到加密保护,不容易被攻击者发现。需要说明的是本文提供的方法只能确认软件版本的拥有权,不能防止个人用户非法使用。

参考文献

[1]张立和,杨义先,钮心忻.软件水印综述[J].软件学报,2003,14(2):268-277.

[2]Palsberg J,Krishnaswamy S,Kwon M,et al.Experience with software Watermarking[C]//Proc.Of ACSAC'00.New York:ACM Press,2000:308-316.

[3]Cousot P,Cousot R.An Abstract interpretation-based Framework for Software Watermarking[C]//Proc.Of POPL'98.New York:ACM press,2004:173-185.

[4]Nagra J,Thomborson C.Threading Software Watermarks[C]//Proc.Of IH'04.Toronto,Canada.2004:208-233.

[5]Burns.Method for watermarking computer programs[P].American Pat7231524.2007.

[6]王贤德,王伟超.软件版权保护技术研究[J].软件导刊,2008,7(7)30-31.

[7]殷柯,杨旭光.基于Shamir门限和分支结构的动态水印方案[J].吉林大学学报(增刊),2008:221-225.

[8]罗养霞,马君,等.基于门限方案的动态图软件水印算法[J].计算机工程,2009,35(1):153-155.

[9]吴振强,冯绍东.PE文件的信息隐藏方案实现[J].计算机工程与应用,2005(27):148-163.

[10]徐晓静,徐向阳,等.PE文件资源节的信息隐藏研究与方案实现[J].计算机应用,2007,27(3):621-623.

软件实现 篇2

3结束语

通过本文的探讨分析可以了解到,SVG(可缩放矢量图形)作为一种新的图形设计技术,在清晰度和画面饱和度方面远远高于GIF和JPEG光栅文件。SVG设计的网页设计软件,分为采集器软件系统,数据转换器软件系统以及数据处理器软件系统三部分。通过实验证明所设计的软件设计性能性更高,设计范围更广,抗干扰能力更强,极具稳定性,是未来的必然发展趋势。

参考文献

[1]裴玉.基于SVG的自适应软件界面开发工具设计与实现[J].计算机科学,,35(01):271-273.

[2]王健,陈剑云,张冬波.基于SVG及Batik平台的监控绘图软件的设计与实现[J].河南城建学院学报,,15(05):14-17.

基于VB的串口通讯及其软件实现 篇3

关键词:串口;RS232;API;Pcomm;Mscomm;通信程序

中图分类号:TN911文献标识码:A 文章编号:1000-8136(2009)27-0001-03

现在通讯方式越来越多,速度越来越快,但串行通讯由于自身价格低、协议透明、硬件投资少、软件编程简单等诸多优点在远程数据采集、监视、通信及控制领域里一直占据着极其重要的地位。它不仅没有因为时代的进步而被淘汰,反而在规格上越来越完善、应用越来越广,长久不衰。

1串口通信的通信机理

PC串行通信是指直接对串行端口的UART(PC机的通用异步收发器,也叫异步通信适配器,是PC机用于异步通信的接口)进行编程实现的通信。PC机每个UART中的INS8250中有10个可编程的单字节寄存器,可用于控制、监视操作串行端口,COM1的寄存器地址3F8H-3FEH,COM2的寄存器地址为2F8H-2FEH。10个寄存器由7个地址访问,其中5个寄存器的访问条件是先设置3FBH线路控制寄存器的最高位为“1”,该位也称为DLAB状态位。[1]

一般说来,PC机都有一个或多个串行端口,它们依次为Com1、Com2……。这些串口提供了外部设备与PC进行数据传输和通信的通道,在CPU和外设之间充当了解释器的角色。当字符数据从CPU发送给外设时,这些字符数据将被转换成串行比特流数据;而当接受数据时,从外界进来的比特流数据被转换成字符数据传递给CPU进行处理。在操作系统方面,Windows用通信驱动程序(COMM.DRV)调用API函数发送和接受数据。当用通信控件或声明调用API函数时,它们由COMM.DRV解释并传递给设备驱动程序。

作为一个VB程序员,要编写串口通信程序,只需知道通信控件提供给Windows通信API函数的接口即可,换言之,只需设定和监视通信控件的属性和时间即可。

2串行通讯接口RS-232

前一章节讨论了串口通讯的通信机理,但为了实现具体的数据采集、监视、通信功能,必须了解具体的串口形式。目前使用最广泛的串行接口有两种:RS-232和RS-485。本文着重讨论RS-232,RS- 485不作介绍。

RS-232C标准的全称是EIA-RS-232C标准,其中EIA代表美国电子工业协会,RS代表推荐标准,232是标识号,C代表RS232的最新一次修改(1969年),在这之前,有RS232A、RS232B协议。它规定连接电缆和机械、电气特性、信号功能及传送过程。EIA-RS-232C定义了按位串行传输的数据终端设备(DTE)和数据通讯设备(DCE)之间的接口信息。RS-232C是从DTE或计算机串行接口角度来定义引脚信号的。

目前RS-232是PC机与通信工业中应用最广泛的一种串行接口。RS232被定义为一种在低速率串行通讯中增加通讯距离的单端标准。RS232采取不平衡传输方式,即所谓的单端通讯。[2]

DB9(9针串口)的接线方式如下:1脚,数据载波检测DCD;2脚,接收数据RXD;3脚,发送数据TXD;4脚,数据终端准备DTR;5脚,信号地GND;6脚,数据设备就绪DSR;7脚,请求发送RTS;8脚,清除发送CTS;9脚,振铃指示DELL。

DB25(25阵串口),常用的针脚也有9个,且和DB9可以一一对应,具体接线方式为:8脚,数据载波检测DCD;3脚,接收数据RXD;2脚,发送数据TXD;20脚,数据终端准备DTR;7脚,信号地GND;6脚,数据设备就绪DSR;4脚,请求发送RTS;5脚,清除发送CTS;22脚,振铃指示DELL。

一般来说,对于要求不太高的场合,使用接收数据RXD,发送数据TXD,信号地GND三个脚即可实现数据传输。如果要求有硬件流控制,则必须使用DTR、DSR、RTS和CTS这四个脚。

值得注意的是RS-232C是用正负电压来表示逻辑状态,与TTL以高电平表示逻辑状态的规定不同。因此,为了能够与计算机接口或终端的TTL器件连接,必须在RS-232C与TTL电路之间进行电平和逻辑关系的变换。目前较为广泛地使用集成电路转换器件,如MC1489、SN75150芯片可完成TTL电平到EIA电平的转换,而MC1489、SN75154可实现EIA电平到TTL电平的转换。

3三种读取串口数据的方式

目前通用的串口通讯的软件实现方式有3种,本文都进行详细的介绍,它们各有自身的优缺点,读者在编程时可根据具体的情况选择合适的方式。

3.1利用Mscomm控件

VB提供的这个通信控件“隐藏”了大部分串口通信的底层运行过程,程序员只需编写少量的代码就可以完成软件的开发过程。在通信数据量不大,通信要求不是很高的情况下建议采取此方式。

利用Mscomm控件实现通信最需要掌握的就是它的几个主要属性,下面选取其中重要的进行介绍,其余的可以参考相关资料。[3]

(1)Settings属性:以字符串的形式设置并返回波特率、 奇偶校验位、数据位、停止位。这个属性很重要,针对不同的终端设备需要根据设备的具体情况进行调整(比如日本的设备不同于美国的设备,通常会采用奇校验)。

(2)InputMode属性:设置接收数据的类型,0为文本格式,1为二进制格式。

(3)Input属性:读取并删除接收缓冲区中的数据流。

(4)Output属性:向发送缓冲区传送一数据流。

(5)Rthreshold属性:该属性为一阀值,它确定当接收缓冲区内的字节个数达到或超过该值后就产生代码为ComEvReceive的OnComm事件。

(6)Handshaking属性:设置和返回握手协议,即计算机内部CPU与串口之间的通讯协议,保证在缓冲区过载时数据不会丢失。这个属性在保证数据传输的正确性方面有很大的作用,共有四个选项,分别表示:①无流控制;②软件流控制;③硬件流控制;④软硬件流控制。采用硬件流控时,要求串口之间和电缆支持硬件握手,在自己制作串口通信线时,有关硬件握手的线RTS、CTS、DSR、DTR要连接正确。

在正确设置这些属性的基础上,剩下的就是打开串口,通过串口发送及接受数据了。本文后续章节利用一个实例详细讲解了这些属性的设置及具体代码。

3.2直接调用Win32 API通信函数

直接调用Windows API函数,可以清楚地理解串口通信的机制,根据需要灵活地配置串口的各种参数和属性,而且直接调用低层API函数,通信效率比较高,但付出的代价就是程序较复杂,编程周期长,适合于大型通信程序及通讯质量要求较高的场合。

在32位的Windows系统中,串口通信是作为文件处理的,串口操作一般为打开、关闭、读取、写入等操作,相应的Windows API函数如下:[4]

(1)CreateFile()函数:实现串口的初始化并打开串口,返回串口句柄资源以供后续进程调用。

(2)CloseFile()函数:关闭串口,串口是非共享资源,应用程序以独占方式使用,通信结束应立即关闭。

(3)ReadFile()函数:从串口输入缓冲区读取数据流。

(4)WriteFile()函数:向串口输出缓冲区发送数据。

(5)GetCommState()函数:获取串口的当前配置。

(6)SetCommState()函数:重新分配串口资源的各个参数。

由于Windows API函数大部分是用C或C++编写,所以在Visual Basic 6.0 中调用Windows API函数之前必须先在模块级代码上用Declare语句对所调用的函数和用到的数据结构进行声明,具体的函数声明及数据结构请参考朱友芹编《新编Windows API参考大全》。

3.3调用第三方函数库(如Pcomm函数库)

DLL(Dynamic Link Library)动态链接库是一种可以被VB语言调用的程序模块。DLL中包含的可执行代码不能单独执行,而应由Windows应用程序调用执行。一般数据采集卡的供应商都会提供该采集卡的DLL库函数,使用这些DLL库函数,可以做到程序代码共享,减少程序的编写工作量。用户不需要知道这些代码的实现细节,只需要了解调用函数的参数和函数处理后的返回值。

Pcomm函数库是由台湾Moxa公司为开发串口通信程序提供的一套函数库。通过对Windows API函数的进一步封装,提供50多个串口操作函数。覆盖了Windows操作系统下几乎所有异步通信的问题,可以简洁的开发多线程通讯程序。采用该库,通信的可靠性与使用MSComm32控件比较有了明显提高, 而相对直接使用Win32API函数编程则降低了程序开发难度, 缩短了程序开发周期。

这种方式上述直接调用Windows API函数有相似之处,但也有明显的差异。API函数常采取的方法是在串口监视线程中设置串口通信事件掩码及重叠机制,允许程序在后台等待串口通信事件。通过WaitCommEvent检测特定的串行通信事件。而在Pcomm中,可以采用中断处理的方式,为各种事件指定相应的中断处理函数,如接收到一定数目的字符,接收到结束字符,接收到中止信号以及发送缓冲区为空等;同时还可以采用线程控制的方式,直接采用库中的sio_read()和sio_write()函数读写串口。

Pcomm..DLL中的函数按功能分为6项:端口设置、数据发送与接收、串口状态检测、事件服务、文件传输、杂项。Pcomm..DLL中主要的函数介绍如下。[5]

sio_open:打开端口;sio_close: 关闭端口。

sio_ioctl:设置端口参数,如波特率等。

sio_read:从端口接收数据;sio_write向端口发送数据。

sio_iqueue:得到接收缓冲区中的数据长度。

sio_oqueue:得到发送缓冲区中的数据长度。

Pcomm在串口通信中的功能十分强大,但基于篇幅的考虑,在此不便赘述,读者可参考相关书籍或Pcomm自带的帮助文档。

4串口通讯的错误及处理

由于外界干扰或电压波动等原因,串口通讯可能会出现错误,如接受缓冲区溢出,奇偶校验错误等。为了处理这些错误,在Mscomm控件中就提供了一个OnComm事件,它可以捕获通信时发生的串口事件和错误信息,自动转入事件处理程序。在OnComm事件中,CommEvent属性是OnComm事件的指示,下面简单介绍几个重要的CommEvent属性值。

ComEventBreak:表示收到一个中断信号;

ComEventFrame:表示硬件检测到一个数据帧错误;

ComEvenRxover:表示接收缓冲区溢出;

ComEventTxFull:表示输出缓冲区已满;

ComEvReceive:表示接手到了Rthreshold个字符;

ComEvEOF:表示接受到了EOF字符(ASCII字符26)。

编程时用SelectCase语句,根据不同的CommEvent属性值,去执行不同的处理程序。

除了以上所述的通讯错误外,在串口通信时,如果数据传输突然中断,对串口的读写操作可能会进入无限期的等待状态, 为避免这种情况发生, 必须设置串口读写操作的等待时间, 等待超时后,串口的读写操作将被主动放弃,这样即使数据传输突然中断程序也不会被挂起或阻塞。可以根据具体要求规定串口读写操作的最长时间值,即串口读写必须在这段时间内完成,否则提示串口操作失败。

5串口通讯实例

本实例是一个采集设备电流及功率的通讯程序,采集仪为横河WT230数字功率计,因为要采集的数据量不大,且工程结构简单,故采用Mscomm控件的形式进行串口读写操作。

具体实现步骤如下:

(1)在窗体Form上添加两个重要的控件:Timer1和Mscomm1;

(2)在程序的Form_Load事件过程中添加如下代码:

MSComm1.CommPort=1 ‘使用COM1端口

MSComm1.Setting=“9600,o,8,1” ‘设置通信口参数,注意是奇校验,具体的校验方式要视具体的仪器而定

MSComm1.InputMode=comInputModeBinary ‘设置接收模式为二进制形式,注意一般对于数据采集这类设备通信,都应该设置为二进制形式

MSComm1.PortOpen=True ‘参数设置好后打开端口

MSComm1.HandShaking=2-comRTS ‘设置为硬件流控制,可以有效避免数据丢失的情况发生

(3)程序开始后在一定情况设置Timer1.Enabled属性值为True 激活Timer1_Time事件,可以在固定的时间间隔下执行Timer1_Timer过程中的代码程序,完成数据采集。在Timer1_Timer过程中添加如下代码:

MSComm1.Output = "COMMUNICATE:WAIT 1" + Chr(13) + Chr(10)

MSComm1.Output = "MEASURE:NORMAL:VALUE?" + Chr(13) + Chr(10)

上述语句是将读取指令发送到串口输出缓冲区(注意每个命令字符串后都要加上回车和换行符Chr(13) + Chr(10)),再由系统将其自动发送给通过RS232通信线与计算机端口连接的WT230数字功率计,功率计在接收到命令字符串后,经过自身的单片机处理,就自动地把它测到的电压、电流、功率数据以固定的格式和字符形式通过RS232通信线传回至计算机,计算机程序从输入缓冲区读取这些字符数据并利用VB字符处理函数(如Val,InStr)进行处理就得到了所要的数据,下面是具体的程序代码。

Dim bytinput() as byte ‘注意要将bytinput定义为不定长数组

Dim strtem As String

Dim i as Integer

bytinput =MSComm1.Input ‘将输入缓冲区数据读入给字节型数组bytinput

For i = 0 To UBound(bytinput)

strtem = strtem + Chr(bytinput(i)) ‘字节数组中的ASCII码值转换成相应 Next 的字符

得到的strtem字符就形象的展示了电流、电压和功率值。对于WT230而言,它的数据结构是这样的,每个数据之间由逗号字符“,”隔开,每个数据以用科学计数法表示,且每个数据以字符“E”分为前半部分和后半部分,前半部分为具体的数据(整数形式),后半部分为此数据的指数,指数的底为10。

例如得到strtem的值为“23423E-2,00241E-3,05645E-2”这就表示电压值为234.23 V,电流值为0.241 A,功率为56.45 W。

6结论

串口通讯的硬件投资少,软件编程简单,在低速少量数据传输方面的应用极其广泛的应用。本文详细介绍了串口通讯的基本内容及其具体实现方式,读者可以根据具体情况进行选择。以上代码是实现串口通信的核心部分,经过笔者在多个数据采集系统开发中的应用,具有较强的实用价值。

参考文献

1 李朝青.PC机及单片机数据通信技术[M].北京:国防工业出版社,2002

2 李长林.Visual Basic串口通信技术与典型实例[M].北京:清华大学出版社,2006

3 [美] Microsoft公司著、北京希望电脑公司译.Microsoft Visual Basic 6.0 控件参考手册[M],1999

4 朱友芹.新编Windows API参考大全[M].电子工业出版社,2000

5 MOXA Crop.Pcomm Library Programming Guide,1998

6 范逸之.Visual Basic 与RS232串行通信控制.北京:中国青年出版社,2000

Serial communication and the program based on Visual Basic

Wen Cai, Zhang Xiaosong

Abstract:Serial communication has broad application in many fields because of its simple communication circuitry and flexibility. Based on deep comprehension of the technology of the serial communications, this article expounds important technology detail integrated with practice experience. An example of communication program is presented and analyzed, which gives other researchers valuable reference information.

软件实现 篇4

工信部自2002年开始每年举办该活动, 入围门槛逐年提高。由于收入增长及企业重组等原因, 本届百强企业较2011年相比, 更新率达22%, 11家企业首次入选。本届入选的中国软件百强企业发展呈现出四大特点:企业实力继续提升, 但增长趋向稳定;企业竞争日趋激烈, 服务型企业增加较多;企业研发投入增加, 创新能力提高;企业转型与融合步伐加快, 结构调整不断深化。会上, 有专家指出:“2011年以来, 在国家4号文等产业扶持政策的推动下, 我国软件产业步入新的快速发展阶段, 产业规模超过1.88万亿元, 增长38.7%。2011年, 软件业利润增速比‘十一五’期间平均增速下调20多个百分点, 伴随着软件业竞争日趋激烈, 企业市场开拓费用明显增加, 影响企业利润增加, 咨询和运营服务收入增势突出, 软件产品和系统集成等传统业务增速放缓。”

此次以年销售额6.4亿元登上软件业务收入百强的远光软件, 是电力行业企业管理软件及服务的主流供应商, 在电力行业企业管理软件领域占有80%以上的市场份额, 稳居企业管理软件第一品牌阵营。公司一直以技术创新作为发展战略, 营业规模持续高速增长。近年来, 远光软件针对大型集团企业集约化、精细化管理要求及电力行业的变革特点, 研发推出远光GRIS集团资源集约化管理系统, 在电力行业大型集团企业得到深入应用, 成为国家电网公司“SG186优秀合作伙伴”;2012年, 远光协助国电集团在国资委基建内控体系试点项目中, 建设成为中国基建财务内控典范工程。远光软件承担的“电力企业集团集约化管理信息系统”项目, 已获批入选“十二五”国家科技支撑计划, 彰显了企业持续的科技创新能力和深度融合业务的特性。

地震波形数据实时监控软件的实现 篇5

地震波形数据实时监控软件的实现

介绍了地震数据采集器监控软件的设计思路,特别是在实时波形显示上,采用“环形”的显示缓存和“滑动显示窗口”技术,大数据量时也能以左移的方式连续显示实时曲线的.动态变化;实时波形的纵坐标范围也是动态变化的,在任何时刻都恰好能在显示区域内完整显示.文章还介绍了如何在显示中消除明显的屏幕闪烁现象,以及对数据从传输到存储、显示的分层设计思想和多线程技术的应用.

作 者:胡星星 滕云田 王喜珍 王晓美 张D 王晨 Hu Xingxing Teng Yuntian Wang Xizhen Wang Xiaomei Zhang Yang Wang Chen  作者单位:中国北京,100081,中国地震局地球物理研究所 刊 名:地震地磁观测与研究  ISTIC英文刊名:SEISMOLOGICAL AND GEOMAGNETIC OBSERVATION AND RESEARCH 年,卷(期):2008 29(1) 分类号:P315.69 关键词:地震   数据采集器   监控软件   实时波形   滑动显示窗口   屏幕闪烁   分层   分屏显示   多线程  

软件实现 篇6

关键词:软件加密 硬件信息 算法 注册码

中图分类号:TP309 文献标识码:A 文章编号:1674-098X(2012)12(a)-00-01

1 软件加密的背景和现状

软件加密方法是20世纪80年代初期在Commodore64,Amiga这样的单机游戏上首先开始试验运行的。随着PC机和DOS系统的兴起,软件产业得到了极速的突破,大量的游戏软件、各种各样的商业软件、办公软件相继问世,而软件加密的理念也随之继承。这一时期的加密办法主要是软盘加密,主要因为在那个时代,软盘是软件流通的唯一载体。

Windows 95的出现终结了DOS一统天下的时代。光盘驱动逐渐成为了计算机的标准配置。光盘加密是软盘加密技术的一种延续,虽然加密技术有所不同,但原理同软盘加密是一致的。常见的光盘加密的方法有SecuROM电子指纹技术、Sony的Key2Audio技术等。

随着Windows XP的普及,计算机开始进入我们现在的互联网时代。当国家和地区的差异不再受到限制以后,一种新的经营模式也应运而生,那就是共享软件。共享软件是一种先使用后购买的销售模式,软件从网站上下载以后直接就可以使用,当用户在使用这个软件一段时间并觉得该软件不错以后,再决定是否购买。这个新的模式直接导致了软件加密模式的改变,软件注册机制就成为了共享软件的主要加密手段。其流程就是用户决定购买软件后通过汇款或者网上支付方式进行购买此软件,而软件开发商会通过网络发给该用户一个注册码,在用户使用了注册码后,才能使用这个软件所有功能。

还有一种办法就是硬件加密,因为硬件是很不容易被盗版的,由于它本身的生产成本很高并且复制有很大的技术难度。所以这个加密办法的目的只有一个,那就是利用硬件的不可复制性,来保证软件的不可盗版。方法是在并口、串口等接口上安装硬件电路,同时有一套使用于各种语言的接口软件和工具软件。这种办法,今天被称为“加密狗”。

2 软件加密后的使用效果

(1)无法运行:在密码没有被通过的情况下,直接退出运行状态。(2)次数或时间限制:一般共享软件会有15 d或30 d的试用期,过了这个期限不能再使用了。(3)功能限制:如果没有注册,在使用时软件只可以使用一小部分功能。(4)水印:使用时,处理完成的文件一般会带有软件开发商的标志,如影片或图片上都有商标一类的水印。

3 加密方案整体设计

3.1 基于硬件信息对软件加密法的研究

用户从网上下载一个软件后,安装时会从用户的机器上取得该机器的一些硬件信息(如硬盘序列号、BOIS序列号等),然后把这些信息和用户的序列号、用户名等进行计算,从而将软件和硬件绑定。用户需要把这一序列号用Email、电话等方法提供给软件提供商,软件开发商利用注册机产生该软件的注册号发送给用户即可以使用。

用户在使用这种方法时,如果想在另一机器上安装并且运行,必须再付一份费用并把软件在这一机器上运行时的序列号,寄给软件出版商购买注册密码。

这种方法的优点是:(1)不同机器注册码不同。用户获得一个密码只能在一台机器上注册使用软件。优于目前大部分软件所采用的注册方式,即只要知道注册码,可在任何机器上安装注册。(2)不需要任何光盘或软盘。(3)可以根据软件供应商的想法自主选择控制软件运行在什么机器、运行次数等。(4)让软件在未注册前运行的功能为演示软件,只能运行一段时间或部分功能。注册后才会成为正式软件。(5)解密者很难探寻到生成注册码的规律。(6)方便使用,价格低廉。

3.2 设计框架

基于硬件信息对软件进行加密,就是要在注册过程中收集相关的硬件物理信息,比如网卡的硬盘信息、MAC地址等。由于网络的普及性,所有的计算机主板上都装有网卡,网卡上的MAC地址是全球唯一性的。根据这些信息计算出来的注册码只能在一台计算机上使用,从而有效地防止了非法注册。

实现这一技术需要四个模块:(1)硬件信息侦测模块:此模块用于读取计算机硬件物理信息。(2)注册状态监视模块:此模块用于判断该用户是否是已注册的合法用户。(3)注册接口模块:此模块用于向用户提供注册接口。(4)远程注册模块:此模块的主要功能是根据用户的硬件信息通过加密算法生成用户注册密码。

具体加密流程如下:(1)运行应用软件,硬件信息侦测模块启动并读取用户硬件信息。(2)硬件信息侦测模块把读取的硬件信息传送给注册状态监视模块,注册状态监视模块根据获得的硬件信息与注册表中的注册标志进行比较,判断该用户是否是已经注册的用户。如果是则软件正常运行,否则激活注册接口模块提醒用户必须注册。(3)用户把硬件信息作为软件授权号通过邮箱或其他方式提交给开发者。开发者接收到用户发送来的授权号,用远程注册模块得出用户注册密码,并发送给用户。该用户接收到开发者发送来的注册码,通过应用软件的注册接口模块注册软件。

4 结语

信息传输的安全是保证计算机网络正常发展的关键问题。实践证明,数据加密技术是解决网络上信息安全传输的重要手段。如今软件加密技术已经衍生出各种各样的结构和理论,基于硬件信息对软件加密只是电子注册方法中的一种,现在已经被广泛的运用于共享软件的注册中。硬加密开始风行,并且成为广泛采用的加密手段。软件狗、加密卡等也成为了解密技术飞速发展的产物。但是加密与解密的斗争将伴随的软件的飞速发展一直继续持续下去。软件加密技术必然在这场没有硝烟的博弈中不断得到发展。

参考文献

[1]陈爱民.计算机的安全与保密[M].北京:电子工业出版社,1992:223-241.

[2]王晓华.共享软件加密的一些误区[J].电脑编程技巧与维护,2005.

公路超高及其软件实现 篇7

关键词:超高设计,纬地软件,超高缓和段

1 超高设计理论分析

曲线路段的超高设计是公路路线安全设计的关键问题, 车辆在曲线路段行驶时, 由于惯性所产生的离心力主要由道路超高横坡和横向力系数共同承担, 此时的横向受力平衡关系可表示为:

其中, V为设计行车速度;f为路面与轮胎的横向力系数;i为曲线路段超高值;R为曲线路段半径。由式 (1) 可以得出超高值和横向力系数之间的关系。由式 (1) 可以看出, 横向力系数对车辆的平稳行驶有不良影响。为保证车辆行驶平稳, 在设计曲线路段超高时应尽可能减小横向力系数, 则曲线超高必然需要加大。

2 超高渐变率的选用

汽车在曲线上行驶过程中, 存在一条曲率连续变化的轨迹线, 产生的离心力大小也是与曲率成正比的, 突变的曲率会使乘客感觉不舒服;道路由直线上的双向横坡变为圆曲线上的单向横坡需要一定长度的过渡段, 缓和曲线的设置合理解决了上述两个问题。双车道公路超高缓和段长度计算公式为:

其中, L为超高缓和段长度;B为旋转轴至行车道 (设路缘带时为路缘带) 外侧边缘的宽度;Δi为超高坡度与卢工坡度代数差;p为超高渐变率。超高渐变率为旋转轴与旋转路幅外侧边缘之间的相对坡度。超高渐变率越小, 行车就越舒适安全。

1) 最大超高渐变率。我国的路线规范规定了不同设计速度的最大超高渐变率, 见表1。2) 最小超高渐变率。最小超高渐变率是根据排水要求确定的, 一般在正常路拱横坡情况下, 要求道路纵坡不小于0.3%, 合成坡度不小于0.5%。超高过渡段中存在道路横坡接近0%的路段, 这样p就不能太小。要求道路纵坡p≥0.3%≈1/333, 因此取整后规范规定p≥1/330。

3 超高缓和段的设置

在我国公路规范中规定, 在一般情况下, 超高缓和段在缓和曲线全场内进行。在实际平面线形中, 并不是所有情况下缓和曲线的取值都能与缓和段长度相等。进行超高设计时, 应先按照规范给定的p及β, Δi, 通过公式计算出LC, 取整数, 计算出LC与LS的关系, 分情况讨论, LS为缓和曲线的长度。1) LC<LS, 先取LC=LS, 计算出p值。当p<1/330时, LC的取值和超高设计应考虑排水、行车等综合因素。一般情况下是在p值的情况下, 超高过渡段设置在回旋线某一段范围内, 且全超高断面应该设在缓圆点或者圆缓点。2) LC=LS, 超高过渡段取缓和曲线全长。3) LC>LS, 这种情况一般不会出现, 笔者暂不考虑。

4 利用纬地软件计算超高实例

众所周知, 纬地软件应用灵活, 计算操作简单, 因此也得到了公路行业的青睐。纬地软件依托了强大的研发力量进行创新, 在近年来为公路设计提供了全系列方案, 在公路行业成为了设计软件中的首选。下面笔者通过列举出纬地道路辅助设计系统对于高等级公路 (一级和高速公路) 的简单算例进行简要说明, 以帮助读者对于纬地软件的应用进一步了解。

实例:某拟建高速公路, 交点坐标与曲线要素如表2所示。断面组成为:中分带2 m;两侧行车道宽度B1=8.0 m, 横坡值i1=2%;两侧硬路肩宽度B2=2.5 m, 横坡值i2=2%;两侧土路肩宽度B3=0.75 m, 横坡值i3=3% (见表3) 。

设计信息:无加宽;超高渐变率:1/200;最小超高渐变率p=1/330;超高渐变方式为线性;旋转方式围绕中央分隔带边缘旋转。

如图1所示为由纬地道路系统自动生成的未经修改的超高文件 (*.sup) 截图。

[超高文件计算示例说明1]

HINTCAD5.83_SUP_SHUJU

上行为版本说明, 以下数据格式为:

本行为路线起点数据, 桩号为K0+000。

因为JD1处的R=500 m, 对应的最大超高值为5%, 在进入超高缓和段前1 m的地方开始进行土路肩变化, 即抬肩, 在1 m的范围内将曲线内侧土路肩由3%过渡到2%, 9 999.00表示。忽略此数据, 超高的过渡从前一桩号直接过渡到下一桩号的对应超高值。

JD1的直缓点 (ZH) , 因缓和曲线起点桩号为K0+028.203, 缓和曲线长度Ls=80 m, 由LC=pBΔi可以求出p (B×Δi) /LS=[8.0× (-5%-2%) ]/80.0=1/142.857 14>1/330, 故在全缓和曲线上进行超高过渡, 取超高缓和段LS=LC。

超高缓和段从K0+028.203开始, 由-2%~2%需要的过渡段长度为L= (B×Δi) /p={8.0×[2%- (-2%) ]}/ (1/142.857 14) =45.715, 28.203+45.715=73.918, 故加入断面K0+073.918。当然, 在纬地系统里面, 采用了上面的数据形式进行反映, 忽略其右侧的数据, 让其进行线性过渡, 采用内插的办法也是可以得到这个桩号的。

K0+108.203为圆曲线起点, 即全超高断面起点。

为保证曲线内侧土路肩超高正常过渡, 在行车道达到3%时, 让土路肩也过渡到3%, 保证其过渡满足规范要求。K0+314.422通过线性内插得到。

由L= (B×Δi) /p=[8.0× (-2%-5%) ]/ (1/200) =112>80 m, 即大于JD1的后缓和曲线长, 由L (B×Δi) /p=[8.0× (-2%-6%) ]/ (1/200) 128>120 m, 即大于JD2的前缓和曲线长, 故在公切点K0+374.422处设置一零坡断面, 使其超高渐变率p (B×Δi) /LS=[8.0× (0%-5%) ]/100=[8.0× (0%-6%) ]/120=1/250<1/200, 满足规范要求。

为保证曲线内侧土路肩超高正常过渡, 在行车道达到3%时, 让土路肩也过渡到3%, 保证其过渡满足规范要求。K0+434.422可通过线性内插得到。

为满足新规范对于硬路肩不能大于5%的要求, 加入该断面, 确保行车道和硬路肩能同时达到5%。K0+474.422可通过线性内插得到。

K0+494.422为圆曲线起点, 即全超高断面起点。注意其硬路肩的绝对值恒为5%。

K0+605.174为圆曲线终点, 即全超高断面终点。注意其硬路肩的绝对值恒为5%。

为满足新规范对于硬路肩不能大于5%的要求而加入的断面, K0+621.424可通过线性内插得到。

理由同K0+073.918。

JD2的后缓和曲线长度LS=150 m, 由可以求出L= (B×Δi) /p=[8.0× (-2%-6%) ]/ (1/200) =128.0 m, 取为5的倍数, 即130 m, 此时p=1/203.125<1/200, 故在部分缓和曲线上进行超高过渡, 取超高缓和段LC=130 m。由此可推出超高缓和段终点应该是605.174+130 735.174。

JD3的缓和曲线长度LS=120 m, 由可以求出L= (B×Δi) /p=[8.0× (-2%-2%) ]/ (1/200) =64.0 m, 取为5的倍数, 即65 m, 此时p=1/203.125<1/200, 故在部分缓和曲线上进行超高过渡, 取超高缓和段LC=65 m。

由此可推出超高缓和段终点应该是975.021-65.0=910.021。

注意, 因圆曲线半径R=1 500 m, 对应的超高值为2%, 所以没有对土路肩进行抬肩处理。

K1+076.189为圆曲线起点, 即全超高断面起点。

理由同K0+910.021。

路线设计终点, 因为在直线段上, 为正常路拱。

5 结语

规范提出:“超高的横坡度应根据设计车速、曲线半径、路面类型、自然条件和车辆组成等情况确定。”公路路线超高的合理性设计应本着从实际出发的原则, 严格遵守规范, 以安全、舒适、经济为目的, 综合考虑实际工程中的区域特性、自然条件等因素。纬地软件是超高公路设计中最常用的软件, 笔者列举简单的计算案例, 希望能够抛砖引玉, 与更多的设计人员进行交流促进。

参考文献

[1]JTG D20-2006, 公路路线设计规范[S].

[2]赵林.公路超高设计合理性的研究与实践[J].公路交通技术, 2006 (3) :16-18.

[3]杨献波, 骆剑跃.公路超高的灵活性设计分析[J].交通科技, 2009 (2) :39-42.

软件实现会计查错 篇8

会计差错是一种客观存在的会计现象。会计记账稍有不慎就会出现错账, 而且查起来很费劲, 所以有人说“记账容易查账难”。这是因为有时为查一笔错账, 花上很大精力, 一查就是半天, 费时费力。

笔者所在公司在元旦前一次对账中, 出现了未达账项。全部财务人员加班加点至深夜, 才将差错找到。事后追查原因, 固然有会计人员的疏忽、未及时对账核算等原因。但笔者所处岗位职责, 更重要的是发现问题, 解决问题, 即如何快速的查找会计错误。

编写软件来查找会计差错, 利用计算机强大的计算功能来替代人工查找错账, 使财会人员减少查错账的时间, 从而有更多的时间和精力, 用在加强企业管理和经济核算上。同时也能提高查找效率, 节省大量时间和人力资源。

二、人工采用的会计查错方法

在实际的记账过程中, 会产生重复记账、漏记、数字颠倒、数字错位、数字错误、科目记错、借贷方向反记等问题, 从而影响了会计信息的准确性。针对这些错误, 一般会计查错方法如下。

(一) 除二法

记账时稍有不慎, 很容易发生借贷方记反或红蓝字记反, 简称为“反向”。它有一个特定的规律就是错账差数一定是偶数, 只要将差数用二除得的商就是错账数。所以称这种查账方法为除二法, 这是一种最常见而简便的查错账方法。

(二) 除九法

在日常记账中常会发生前后两个数字颠倒、三个数字前后颠倒和数字移位的现象。它们共同特点是错账差数一定是九的倍数和差数, 每个数字之和也是九的倍数, 因此, 这类情况均可应用“除九法”来查找。

(三) 差数法

根据错账差数直接查找的方法叫做差数法。漏记或重记, 因记账疏忽而漏记或重记一笔账, 只要直接查找到差数的账就查到了, 这类错账最容易发生在本期内同样数字的账发生了若干笔, 这就容易发生漏记或重记。

(四) 象形法

在核对账目表时较多的遇到仅相差几分钱的错账, 这类错账最头疼。这类错账一般来说是数字形状相像而发生差错。根据其数字形状象形的规律去查找错账的方法命名为“象形法”。

三、软件查错方法

根据实际需求, 将第二章所述4种查错方法合并归类为以下三种情况, 分别为差数法、除2法、间接差数法。相对应的会计错误, 分别以“漏、反、错”来表示。具体如表1所示。

其中

差数法是指按照错账的差数来查找错账的方法。

除2法是指差数除以2来查找错账的方法。当记账时借方金额错计入贷方 (或者相反) 时, 出现错账的差数就表现为错误的2倍, 因此将此差数用2去除, 得出的商就应该是反向的正确的金额。

间接差数法是指采用穷举法将可能发生这个差额错误的情况列出来。

四、会计查错软件的基本思路

(一) 前提

始终认为会计错误都是简单的, 难度大主要因为数据量太大。假定最大错误数为2个, 采用数学的简化思想, 提供两种化简模式, 提供三类共9种错误的查找模式。

(二) 查错思路

可看成两个本是和相等的数组, 中间有一到两个成员数, 发生错误, 可能是错反漏中的某一个, 引起了最后求和不等的情况。为了找到这些错误, 按照一个从易到难的顺序, 将其分为三类:

1. 第一类错误。

一个单一错误, 简记为:一漏、一反、一错;2.第二类错误。两个同样的错误, 简记为:二漏、二反、二错;3.第三类错误。两个不同的错误, 简记为:漏错、反漏、错反。

(三) 加速算法

将借贷两组数的化简。在一组数中减去一个相同的数, 同时减去对应另一组中和相同的n个数 (n可取1、2、3, 根据个数分别记为1对1, 1对2, 1对3) 。

1.依次去掉分别在两组数中间所有一对一、一对二 (二对一) 、一对三 (三对一) 的数;2.先去掉一对一, 然后依次去掉两组数中最大数, 及所对应的另一组2-3数。

(四) 查漏补缺

当出现2个及以上的错误时, 将采用化简预处理之后, 剩下的两组数进行人工比对查错。

五、软件输入输出及软件流程

(一) 软件输入

本软件的输入文件格式为xls文件, 该文件默认第一张sheet中有两列, 第一列为借方, 第二列为贷方。从输入文件中读取数据之后显示在下面图表框中。见图1。

(二) 运算过程

1. 根据原始数组直接求第一类错误;2.通过预处理化简之后求得第二类错误 (即去掉借贷两个数组中一一对应的成员数) ;3.通过预处理深度化简之后求得第三类错误 (即去掉两数组中一对二、一对三的成员数, 这里有两种算法选择, 详见加速算法) 。

(三) 运算结果输出

1. 结果输出格式

输出内容分别对应于不同的9种错误以及发生该种错误的具体情形, 输出格式如表2所示。

1>x=Δ:表示一个错误, 简记一漏;

2>x=Δ/2:表示一个错误, 简记一反;

3>x=y+Δ:表示一个错误, 简记一错;

4>x1+x2=Δ:表示两个相同错误, 简记二漏;

5>x1+x2=Δ/2:表示两个相同错误, 简记二反;

6> (x1-y1) + (x2-y2) =Δ:表示两个相同错误, 简记二错;

7>2x1+x2=Δ:表示两个不同错误, 简记漏反;

8>x1+ (x2-y2) =Δ:表示两个不同错误, 简记错漏;

9>2x1+ (x2-y2) =Δ:表示两个不同错误, 简记错反。

2. 文件输出格式

输出文件格式为txt文本格式, 名称为out.txt, 默认路径为原输入文件的路径, 即”D:out.txt”。详见图2。

(四) 软件流程图

编程语言:Visual Studio 2010 C#

软件环境:Microsoft.net Framework4.0

六、结语

该软件能够用于直接查找最多两个会计差错, 也可用于间接化简借贷双方, 通过化简所剩下的数来人工查找更多的会计差错。

作为个人使用的办公小软件, 节省了笔者大量的时间, 在实际运用中取得了不错的效果。

因为时间仓促及个人水平有限, 难免有错漏的地方。欢迎大家批评指正。

参考文献

软件实现 篇9

1 嵌入式软件

随着社会不断朝着信息化的方向发展,计算机在人们日常生活中的重要性越来越突出。在计算机软件设计中,由于嵌入式软件具有较强的稳定性,并且操作简单,深受计算机行业人士的喜爱。嵌入式软件在计算机软件设计中也有着重要的地位,不仅能够大大地提高软件产品的质量,还能够避免软件产品中的问题及不足。在计算机软件设计的时候,可以以嵌入式软件的执行预测、缓存机制及动态分配为基础,优化计算机软件实时处理功能。嵌入式软件在计算机软件设计中主要是硬件处理及软件处理两方面的应用,在计算机软件设计中,要以系统为支撑,然后通过程序员编写程序。在此过程中对多个任务进行同时处理的系统就是嵌入式处理器。嵌入式处理器能够在极短的时间内处理多个任务,并且还能够实时保存信息资源。嵌入式软件有两个优点,其一,由于嵌入式软件的模块化,它可以检测软件并且对其进行修复;其二,嵌入式软件可扩展软件处理器,在计算机进行软件设计和操作的时候,可以使用最低的功率进行,使嵌入式软件的优势可以最大程度地得到发挥,嵌入式软件在计算机软件设计中有着主导作用[1]。

2 在计算机软件设计中的应用

在计算机软件设计中使用嵌入式软件涉及了多个领域,可以大大缩短软件设计中的时间并提高软件设计的效率。

2.1 原理

嵌入式软件和计算机软件存在着一定程度的区别,所以也就导致了嵌入式软件在计算机软件设计运行原理中存在差异的原因。嵌入式软件在计算机软件设计中的预测指令、缓存机制及动态分配等功能中有着重要的作用,它可以在保证计算机软件设计的操作基础上提高软件设计的安全性。虽然嵌入式软件和计算机系统有所差异,但是两者还有一定的相同点:在设计中都要考虑软件设计及硬件设计。软件包括操作系统及程序编写系统,硬件包括输入/输出设备、存储器、外设、处理器等。计算机软件设计中,是由应用程序对系统的操作进行控制,操作系统对程序的编程及硬件进行控制。另外,嵌入式微处理器是嵌入式软件的核心,如今在计算机软件设计中普遍应用的是ATg IRM9200处理器。在软件设计中,模块的设计是核心内容,它的设计质量决定了计算机软件设计是否可操作,也决定了计算机软件设计是否安全[2]。

2.2 开发步骤及设计

2.2.1 嵌入式软件的开发依据

在计算机软件设计中应用嵌入式软件的原理主要是计算机在处理紧急的软件时,嵌入式软件可以利用实时处理功能构建CORBA模型【3】。另外,嵌入式软件还能运用远程调控功能为计算机软件设计提供多种设计任务,降低计算机软件设计的时间,提高计算机软件设计效率及质量。以CORBA模型为例子,研究嵌入式软件在计算机软件设计中的应用,探索嵌入式软件是否可以对计算机软件设计进行创新及完善。

2.2.2 开发步骤

在计算机软件设计中使用嵌入式软件,可以有效提高计算机软件的设计水平,优化计算机软件的开发流程,进一步提高软件系统的可靠性。在计算机软件设计中使用嵌入式软件的时候,首先就要确定软件的开发流程,全面了解计算机中的软件及硬件结构,使两者能够分离,使软件不再依靠硬件,从而提高计算机软件的安全性及可靠性。应用嵌入式软件还能初始化计算机软件中的数据,并格式化计算机软件中的数据结构,为了能够使计算机软件中的设计能够更加完善,可以直接对软件及硬件进行操作。嵌入式软件的开发流程如图1所示。

嵌入式软件的开发流程的步骤分为:(1)全面掌握计算机软件系统的需求,并且对其进行分析了解;(2)根据计算机软件的需求,程序员就可以编写程序代码;(3)对软件性能进行测试,并且对测试结果进行分析,从而能够优化计算机软件设计。由此可见嵌入式软件的开发流程是比较简单的,这也为计算机软件提供了可靠性的保障。在软件设计中,应该着重注意软件数据的初始化工作和格式化工作[4]。

2.3 嵌入式软件在计算机软件设计中的应用

2.3.1 对计算机软件多任务进行划分

嵌入式系统中的应用软件可以保障系统功能的完善,并且还肩负着资源管理及任务间的通信责任。对软件的资源管理及任务通信进行实现的是计算机系统中的微内核,其也是计算机软件的基础程序。应用嵌入式软件,就要对软件不断地进行优化设计及协调,并且优化嵌入式RTOS模型,使软件系统中的任务可以独立工作。

对计算机软件中的任务进行划分,需要将数据进行转换,之后再进行分析应用程序。影响任务划分主要是由于应用系统数据通信之间的异步关系,其可以从两方面进行考虑:(1)系统中的输入/输出系统。输入/输出系统中的驱动要以软件系统中的应用程序及中断为基础才能够实现,其中应用程序就占了CPU大部分的空间,所以就要通过中断以此来提高计算机软件中的实时性及实用性;(2)软件系统内部功能。计算机软件系统中的并行任务有周期任务、应用控制任务及用户接口任务等等,为了将这些任务合为一个任务,就要对任务的激活进行全面考虑。为了能够使计算机软件设计流程更加简单,可以使用同一种事件驱动,来提高软件的资源共享[5]。

2.3.2 存储映像布局及任务组织

在对系统应用功能划分为多个独立任务之后,就要对其进行组织,组织任务的方式主要是以各个任务之间的关系为基础进行的,这些任务的组织及管理功能与嵌入式操作系统有着一定的联系。另外,由于嵌入式操作系统并不完善,所以就要应用程序保存在Flash或者ROM中。为了之后操作系统可以正常运行,就要在组织任务的时候对其进行科学的安排,并且对计算机软件中的系统布局进行优化及完善。软件系统布局主要重点考虑存储映像布局和物理零地址存储器,系统在加电之后,可以在物理零地址上设置代码。嵌入式软件中的应用系统是由ROM启动,物理零地址可以存储计算机系统中的向量。此方式最大的优点就是简单快捷,能够提高处理器在调取向量的速度。

2.3.3 任务调度及实时性应用

在计算机软件设计中应用嵌入式软件,要重点考虑嵌入式系统的实时性,主要分为两方面:(1)软实时性。主要是使系统能够在规定的时间内完成任务,如果没有完成可以延迟;(2)硬实时性。主要是使系统能够在规定的时间内完成任务,如果没有完成,则会有严重后果。所以计算机软件系统的调度应该采用优先的方式,这种方式主要是指微内核可以根据系统中的紧急任务来对软件系统进行优先顺序的安排,并且可以根据不同的优先等级对系统进行划分,以使响应时间可以有效降低[6]。

2.3.4 初始化系统

在计算机软件设计中使用嵌入式软件,还要重点考虑对系统的初始化及执行。编写初始化系统代码是在嵌入式系统的微内核及硬件抽象层中的,主要是对系统进行初始化及引导。与计算机软件系统不一样的是其并没有BIOS系统,所以,开发软件的工作人员就要设计方案来引导系统和编写初始化代码,对这些代码进行执行之后,再进行工作,比如存储系统的初始化、RAM变量的初始化及设置异常中断向量等等。最后再通过设置相应的指令来缓冲嵌入式软件系统,随后进入系统进行调度。

2.3.5 时钟通信及任务

计算机软件设计的时候要注重考虑时钟服务,在嵌入式软件中也有时钟,通常是以“lick”形式出现。所以在计算机软件设计中使用嵌入式软件的时候,还要设计计算机软件的时间,使其中的每项任务都有时钟,并且通过时钟来对其进行控制动作。在嵌入式软件中,大多都有信号、信号量、邮箱等,这可以使软件资源及任务通信和同步得到有效实现。

3 结语

随着社会的不断进步与计算机技术的飞速发展,嵌入式软件在计算机中的应用也有较好的前景。通过以上描述,在计算机软件中应用嵌入式软件,使用分层结构进行设计,可以提高计算机软件的灵活性,还可以简化系统软件的设计过程。首先阐述了嵌入式软件的含义及特点,对嵌入式软件设计的方式进行了分析,研究了在计算机软件设计中使用嵌入式软件的作用。

摘要:随着我国社会的不断发展,计算机行业的技术水平也在不断地提高。在此背景下,嵌入式软件也得到了人们的重视,被人们广泛运用到计算机软件设计中。嵌入式软件具有专业性及实时处理的优点,将嵌入式软件运用到计算机软件设计中,可以使软件设计的流程更加简单明了,预防并及时解决计算机中出现的问题,有效地提高计算机系统的整体应用效率。

关键词:嵌入式软件设计,计算机软件设计,应用

参考文献

[1]朱勇.计算机软件设计中嵌入式实时软件的应用探析[J].信息技术与信息化,2015,(8):66-67.

[2]马宇驰.计算机软件设计中嵌入式实时软件的应用探析[J].信息通信,2014,(4):104-104.

[3]张爱兵.计算机软件设计中嵌入式实时软件的应用探究[J].电子技术与软件工程,2014,(6):113-113.

[4]李禹松.嵌入式实时软件在计算机软件设计中的应用[J].硅谷,2013,(18):37-37.

[5]章慧云.嵌入式实时软件在计算机软件设计中的应用[J].信息技术与信息化,2014,(12):184-185.

C#实现即时通信软件 篇10

1 即时通信系统

在生活中经常使用即时通信的软件, 经常接触到的有:QQ、阿里旺旺、MSN等。这些都是属于即时通信 (Instant Messenger, IM) 软件, IM是指所有能够即时发送和接收互联网消息的软件。

在前面专题P2P编程中介绍过P2P系统分两种类型——单纯型P2P和混合型P2P (QQ就是属于混合型的应用) , 混合型P2P系统中的服务器 (也叫索引服务器) 起到协调的作用。在文件共享类应用中, 如果采用混合型P2P技术的话, 索引服务器就保存着文件信息, 这样就可能会造成版权的问题, 然而在即时通信类的软件中, 因为客户端传递的都是简单的聊天文本而不是网络媒体资源, 这样就不存在版权问题了, 在这种情况下, 就可以采用混合型P2P技术来实现即时通信软件。前面已经讲了, 腾讯的QQ就是属于混合型P2P的软件。

因此本专题要实现一个类似QQ的聊天程序, 其中用到的P2P技术是属于混合型P2P, 而不是前一专题中的采用的单纯型P2P技术, 同时本程序的实现也会用到TCP、UDP编程技术。具体的相关内容大家可以搜索相关的资料。

2 系统设计

本程序采用P2P方式, 各个客户端之间直接发消息进行聊天, 服务器在其中只是起到协调的作用, 下面先理清程序的流程:

2.1 程序流程设计

当一个新用户通过客户端登录系统后, 从服务器获取在线的用户信息列表, 列表信息包括系统中每个用户的地址, 然后用户就可以单独向其发消息。如果有用户加入或者在线用户退出时, 服务器就会及时发消息通知系统中的所有其他客户端, 达到它们即时地更新用户信息列表。

根据上面大致的描述, 可以把系统的流程分为下面几步来理解 (大家可以参考QQ程序将会更好地理解本程序的流程) :

(1) 用户通过客户端进入系统, 向服务器发出消息, 请求登录。

(2) 服务器收到请求后, 向客户端返回回应消息, 表示同意接受该用户加入, 并把自己 (指的是服务器) 所在监听的端口发送给客户端。

(3) 客户端根据服务器发送过来的端口号和服务器建立连接。

(4) 服务器通过该连接把在线用户的列表信息发送给新加入的客户端。

(5) 客户端获得了在线用户列表后就可以自己选择在线用户聊天。 (程序中另外设计一个类似QQ的聊天窗口来进行聊天)

(6) 当用户退出系统时也要及时通知服务器, 服务器再把这个消息转发给每个在线的用户, 使客户端及时更新本地的用户信息列表。

2.2 通信协议

所谓协议就是约定, 即服务器和客户端之间会话信息的内容格式进行约定, 使双方都可以识别, 达到更好的通信。

2.2.1 客户端和服务器之间的对话 (1) 登录过程

(1) 客户端用匿名UDP的方式向服务器发出下面的信息:

login, username, local IPEnd Point

消息内容包括3个字段, 每个字段用“, ”分割, login表示的是请求登录;username表示用户名;local IPEnd Pint表示客户端本地地址。

(2) 服务器收到后以匿名UDP返回下面的回应:

Accept, port

其中Accept表示服务器接受请求, port表示服务器所在的端口号, 服务器监听着这个端口的客户端连接。

(3) 连接服务器, 获取用户列表

客户端从上一步获得了端口号, 然后向该端口发起TCP连接, 向服务器索取在线用户列表, 服务器接受连接后将用户列表传输到客户端。用户列表信息格式如下:

username1, IPEnd Point1;username2, IPEnd Point2;...;end

username1、username2表示用户名, IPEnd Point1, IPEnd Point2表示对应的端点, 每个用户信息都是由"用户名+端点"组成, 用户信息以“;”隔开, 整个用户列表以“end”结尾。

(2) 注销过程

用户退出时, 向服务器发送如下消息:

logout, username, local IPEnd Point

这条消息看字面意思大家都知道就是告诉服务器username+local IPEnd Point这个用户要退出了。

2.2.2 服务器管理用户

(1) 新用户加入通知

因为系统中在线的每个用户都有一份当前在线用户表, 因此当有新用户登录时, 服务器不需要重复地给系统中的每个用户再发送所有用户信息, 只需要将新加入用户的信息通知其他用户, 其他用户再更新自己的用户列表。

服务器向系统中每个用户广播如下信息:

login, username, remote IPEnd Point

在这个过程中服务器只是负责将收到的"login"信息转发出去。

(2) 用户退出

与新用户加入一样, 服务器将用户退出的消息进行广播转发:

logout, username, remote IPEnd Point

2.2.3 客户端之间聊天

用户进行聊天时, 各自的客户端之间是以P2P方式进行工作的, 不与服务器有直接联系, 这也是P2P技术的特点。

聊天发送的消息格式如下:

talk, longtime, self User Name, message

其中, talk表明这是聊天内容的消息;longtime是长时间格式的当前系统时间;self User Name为发送发的用户名;message表示消息的内容。

协议设计介绍完后, 下面就进入本程序的具体实现的介绍。

注:协议是本程序的核心, 也是所有软件的核心, 每个软件产品的协议都是不一样的, QQ有自己的一套协议, MSN又有另一套协议, 所以使用的QQ的用户无法和用MSN的朋友进行聊天。

3 程序实现

服务器端核心代码:

客户端核心代码:

程序运行结果:

首先运行服务器窗口, 在服务器窗口点击“启动”按钮来启动服务器, 然后客户端首先指定服务器的端口号, 修改用户名 (这里也可以不修改, 使用默认的也可以) , 然后点击“登录”按钮来登录服务器 (也就是告诉服务器本地的客户端地址) , 然后从服务器端获得在线用户列表, 界面演示如图1、图2所示。

然后用户可以双击在线用户进行聊天 (此程序支持与多人进行聊天) , 功能演示如图3所示。

双方进行聊天时, 这里没有实现像QQ一样, 有人发信息来在对应的客户端就有消息提醒的功能, 所以双方进行聊天的过程中, 每个客户端都需要在在线用户列表中点击聊天的对象来激活聊天对话框 (意思就是从图片中可以看出“天涯”客户端想和剑痴聊天的话, 就在“在线用户”列表双击剑痴来激活聊天窗口, 同时“剑痴”客户端也必须双击“天涯”来激活聊天窗口, 这样双方就看到对方发来的信息了, (不激活窗口, 即使发送了信息, 只是没有一个窗口来进行显示) ) , 而且从图片中也可以看出——此程序支持与多人聊天, 即天涯同时与“剑痴”和“大地”同时聊天。

4 结语

软件实现 篇11

IT技术融入安防首先要从IT企业谈起。虽然说隔行如隔山,但是IT企业进军安防市场仿佛十分轻松,IBM、英特尔、思科等国际知名企业纷纷抢滩中国安防市场,孤军奋战固然会失手,几大企业与国内知名企业,如:海康威视、大华等携手打造智能化安防监控平台,成为IT企业进军安防的第一步。安防智能化是未来行业发展的趋势之一,以英特尔为例,其凌动架构未来重点发展的方向是采用DSS技术的IP摄像头,将视频分析前移。通俗来说就是,把需要后台服务器处理的部分,移到前端IP摄像头上,让前端IP摄像头根据实地情况进行分析并进行及时预警。研发出智能分析前移的系统必须有成熟的软件开发基础,英特尔公司也将优势发挥到最大化,将智能化监控落实到实际应用中。

需求决定监控操作系统,软件融合是关键。在图像记录系统中,操作系统决定了产品的稳定性。在一般民用监控系统中,如果采用电脑做主机,那么就采用Windows操作系统,如果是高级别的监控则采用嵌入式操作系统,其系统由各个厂家自己研发。针对不同的需求制定出不同的操作软件,兼容性就出现了严重的漏洞。行业化趋势加速使得不同的产品要针对配置不同的软件系统,有了中间件就能够轻松地帮助用户解决不同的需求,重复利用并高效地开发和集成复杂的应用软件。

IT人才缺乏,提升产品使用寿命。在监控项目完工之后,总会有1~2名技术人员进行设备维护,但企业级的用户应培养专业人才,进行通信设备、监控设备等维护。时常保养和更换零部件可延长产品使用寿命,遇到问题也可以进行及时维修,以达到正常的工作状态。

安防IT化已成为不可否认的事实,IT技术带动核心软件实现新突破,同时培养专业人才也是提供更多就业机会。我们有理由相信,在IT大跨步前进的今日,安防借力IT成长将再次掀起高潮。

语音文件的读取及软件实现 篇12

WAVE文件是语音文件中的一种,它被广泛地使用在语音技术研究中,当用其进行语音技术研究时,必须正确提取语音文件中的实际数据,在MATLAB中有一个自带函数可以返回实际语音数据,如使用其它语言进行程序开发时,就必须清楚WAVE语音文件的格式及其在计算机中的存储结构,才能正确地读取实际数据,本文先分析讨论了WAVE文件的存储结构,然后说明如何使用Visual c++6.0实现WAVE文件读取及滤波等操作。

1 WAV文件

1.1 WAVE文件的存储结构[1]

WAVE文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的。RIFF是英文Resource Interchange File Forma的缩写,WAVE文件由文件头和数据体两大部分组成。其中文件头又分为RIFF/WAV文件标识段和声音数据格式说明段两部分。

常见的声音文件主要有两种,分别对应于单声道(11.025KHz采样率、8Bit的采样值)和双声道(44.1KHz采样率、16Bit的采样值)。采样率是指:声音信号在“模→数”转换过程中单位时间内采样的次数。采样值是指每一次采样周期内声音模拟信号的积分值。对于单声道声音文件,采样数据为8位的短整数(short int 00H-FFH);而对于双声道立体声声音文件,每次采样数据为一个16位的整数(int),高8位和低8位分别代表左右两个声道。WAVE文件数据块包含以脉冲编码调制(PCM)格式表示的样本。WAVE文件是由样本组织而成的。在单声道WAVE文件中,声道0代表左声道,声道1代表右声道。在多声道WAVE文件中,样本是交替出现的。表1为其中一种WAVE文件格式。

1.2 WAVE文件读取程序实现

2 WAVE文件滤波

2.1 滤波算法[2]

语音滤波的最终效果度量是人耳的主观感觉,所以在语音滤波中可以利用人耳感觉特性来减少运算的代价,利用自适应滤波器可以获得令人满意的解。

自适应横向滤波器具有以下功能:

1)按照某种自适应算法自动调节滤波系数的横向滤波器:分别以W1(n)…Wn(n)表示各个滤波器所在时刻的权系数。

2)调节这些系数的过程:首先自动调节滤波器系数的自适应训练步骤,然后利用滤波系数加权延迟线抽头上的信号来产生输出信号,将输出信号与期望信号进行对比,所得误差值通过一定的自适应控制算法再来调整权值,以保证滤波器处在最佳状态,达到实现滤波目的。

其中d(n)为期望信号。显然,自适应滤波器控制机理是用误差序列e(n)按照某种准则和自适应算法对其系数{Wi(n)},=1,2,3,…m进行调节,最终使自适应滤波器的目标函数最小化达到最佳滤波状态。按照均方误差(MSE)准则定义:

将e(n)=d(n)-y(n)带入上式,均方误差函数重写为:

当滤波器系数固定时,均方误差函数又可写成:

其中:R=E[X(n)XT(n)]是输入信号的自相关矩阵;P=E[d(n)X(n)]是期望信号与输入信号的互相关矢量;将上式对W求导,并令其等于零,同时假设R是非奇异的,由此可得最佳滤波系数W0为:

由式可见,均方误差ξ(n)是权矢量{Wj(n)},i=1,2,…,M的二次函数它代表以{w,(n)},i=1,2,…,M为自变量的一个“超抛物面”,均方误差ξ(n)达到最小值ξmin。几何上这相当于超抛物面的最小点。在一般情况下,滤波器在迭代过程中或当输入过程统计特性发生变化时,权矢量W并不正好等于W。,而是处于某一最佳值W(n)上。为了减小误差,一个显然的方法是找出该工作点处使均方误差ξ(n)减小速率最大的方向,亦即梯度的负方向,然后令权矢量w(n)沿着梯度的负方向修正。令▽(n)代表n时刻的M×I维梯度矢量,则权矢量W(n+1)可用下列简单递归关系计算:

式中,u是一个正实数,通常称它为自适应收敛系数或步长因子。

根据梯度矢量定义,▽(n)可写成:

可计算出滤波系数更新值:

上式是最陡下降法的数学公式,由此公式信号流程图图2。

2.2 最陡下降算法计算步骤

算法计算步骤如下:

1)根据所处理信号的特征,选取滤波器的阶数M及收敛因子u。

2)令W(0)=0,W(0)表示一维数为M,各分量为0的向量。

3 结束语

本文分析讨论WAVE文件的存储结构以及其样本数据的存储结构,用C语言实现PCM编码的WAVE文件的读取,滤波以及存储,得到了正确的结果。

参考文献

[1]WAV波形文件的结构及其应用实践[J].微计算机信息,2005,21(8):114-119.

上一篇:时代转变因素下一篇:用电监察