一种基于EVC 的数据存储管理算法实现

2014-01-21 00:52:32石常兴
电子设计工程 2014年20期
关键词:数据文件配置文件字符

石常兴,周 浩

(北京市三一重机有限公司 研究本院 北京102202)

扩孔钻机是在旋挖钻机的基础上加装扩孔功能,即当桩孔达到一定深度后,利用扩孔钻头,通过油缸来扩大桩孔底部空间进而增加整桩承载力的一种工法。国内使用的工程实例表明,采用扩底桩一般能节约工程总投资的15%~35%不等[1]。在扩孔钻机研发过程中,需要通过显示器对施工过程中桩孔的相关规格参数进行实时监测控制,同时,相关尺寸的变化还要在人机界面图形上动态显示出来。另外,当施工一段时间后,客户可利用U盘或SD卡[2]将显示器内存储的施工数据拷贝出来,以便在上位机软件上显示还原或打印出来。

在桩基础施工行业,对施工的规格参数和施工标准有着较高的要求,它直接影响到整个工程的安全性和可靠性。在整个施工管理过程当中,对参数的有效管理和存储记录就显得尤为重要。本文设计了一套在EVC软件平台上针对该工法特点的施工数据存储管理算法,有效管理了施工过程中的参数和施工数据。

1 平台构架

SYLD显示器是一款基于ARM9平台和EVC开发环境的显示器,SYLD显示与PLC控制器的数据采集存储管理实现的硬件构架如图1所示。显示器通过CAN总线[3]与PLC控制器相连,用于在接收传感器数据的同时发送相关控制命令;利用工业USB插座将显示器的USB信号电源线进行引出,即 D+、D-、5V+和 GND。

图1 系统构架Fig.1 Structure diagram of system

2 算法实现

在嵌入式系统中,我们更加迫切的需要通过文件来存储应用程序配置信息或存储应用程序所需资源数据[4],因此在本系统中对文件的操作也是主要内容。在对整个施工过程中参数及施工数据的管理总流程如图2所示,首先在程序中的最先运行的程序段内创建一个参数配置文件。参数配置文件中的数据为扩孔工法中桩孔的典型规格参数。然后当系统上电时首先读取参数配置文件,然后根据读取的参数绘制桩孔及钻头规格图形并显示相关信息。当施工时,设定当前预扩孔的扩孔数据并保存到施工数据文件夹中。当施工完毕后,将施工实际参数保存到对于的桩孔数据文件中。需要拷贝时,将U盘插入显示器的USB扩展接口中便可将施工数据文件夹拷贝到U盘当中。通过设计上位机解析软件,可将U盘中的施工数据还原出来,并进行管理打印等操作。

图2 算法运行流程图Fig.2 Flow chart of the software design

在软件的实现过程当中,对文件的操作和数据存储算法等是核心。文件通常分为二进制文件和文本文件。二进制文件是包含在ASCII及扩展ASCII字符中编写的数据或程序指令文件。一般是可执行的程序、图形、声音等文件[5]。文本文件(也称为ASCII文件):它的每一个字节存放的是可表示为一个字符的ASCII代码的文件。可用任何文字处理程序阅读的简单文本文件。对文件的操作主要有文件的创建、文件的写入读取和拷贝,主要程序实现代码如下:

workdata_file=CreateFile (_T("\StorageCard\workdata.txt"),GENERIC_READ|GENERIC_WRITE,0,NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL);

/*注释*在显示器的储存器“StorageCard”中创建txt数据文件,若该文件已经存储则更新。*注释*/

假设施工过程中需要存储的施工数据有20项目即20个参数,则预先存储在临时缓存数组中uint workdata_buf,本文在处理时采用了以文本文件的格式进行存储。即把每一位的数字转换成字符,并在每个参数前添加字母和冒号以示区分这一串字符中各个参数。如第一个参数为年份2013第二个参数为月份12,则按上述方法转换为字符格式后为A:2013B:0012……,将转换后的所有字符分别存入数组para_write_buff中。相应程序代码为:

para_temp=para_buffer[0];/★注释★第一个参数赋给缓冲变量 ★注释 ★/

for (uchar para_wei= 0,para_num=0;para_wei<140;para_wei++)

/*注释*para_num=7个数字为一个参数分割*注释*/

{

if((para_wei%7)==2)

para_temp=workdata_buf[(para_num++)%20];

if((para_wei%7)==0)//字母

para_write_buff[para_wei]=para_char_num++;

else if( (para_wei%7)==1)

para_write_buff[para_wei]=58;//":"

else

{

para_write_buff[para_wei]=(uchar)((para_temp%10)+'0');//+'0'变为 ASCII码 para_temp=(para_temp/10);

}

}

WriteFile(workdata_file,para_write_buff,sizeof(para_write_buff),&fact_writebyenum,NULL);

//写入文件,将para_write_buff数组中缓存的施工数据记录数值字符存入所创建的数据文件workdata_file中,在首次启动显示系统时,配置文件的写入与此相同。之后,无特殊情况不需要每次启动时再写入配置参数,只需要读取即可,算法与写入过程互为逆过程。读取参数的相关程序代码如下:

configfile =CreateFile (_T ("\StorageCard\para_config.txt"),GENERIC_READ |GENERIC_WRITE,0, NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);SetFilePointer(configfile,0,NULL,FILE_BEGIN);

do

{

ReadFile(configfile,para_write_buff,sizeof(para_write_buff),&fact_readbyenum,NULL);

//指向要读取的文件句柄//接受数据的缓冲区//从文件中读取的字节数//实际从文件中读取的字节数//空

}

while(fact_readbyenum==sizeof(para_write_buff));

//已完全存入para_write_buff

for(uchar read_num=0,tem_num=0,para_num=0;read_num

{

uint para_temp=0;//缓存读出数值

uchar char_temp=0;//缓存读出字符

if((read_num%7)==0)

{

for(tem_num=6;tem_num>1;tem_num--)

{

char_temp=(para_write_buff[read_num+tem_num]-'0');//-'0'还原成数值

para_temp=(para_temp*10+char_temp);

}

para_num_buffer[para_num]=para_temp;

para_num=(++para_num);

if(para_num==20)

para_num=0;

}

}

CloseHandle(configfile);

//配置文件中的字符信息已经还原为参数数值并存储在para_num_buffer数组当中,可供程序使用。

CreateDirectory (L"\StorageCard \syworkdata ",NULL)//在StorageCard中创建名为syworkdata的文件夹

CopyFile(strSrcFile,strDstFile,FALSE);//将路径为strSrcFile的源文件拷贝到路径为strDstFile的目标文件中。

上述程序算法是实现了一个数据文件的读写拷贝等操作,在进行施工数据文件的存储时,由于数据量大需要对所有文件定义一个命名规则,因此设计一个在保存时能够自动按顺序命名的算法程序有一定的实用价值。本文采用的是一种数字命名的方法,经过验证也可以达到自动顺序命名的目的。当按下要保存的数据文件时,文件名称的数字形式自动加一合成文件名称(例如文件名称以“31001”开头),接着将施工数据存入经过合成的文件名称对应的文件中。程序主要代码如下:

haves_pilecnt++;//施工数据文件个数再按下保存后自加for(unsigned int k=0;k

//SAVE_SUM_NUM为预设能存入的数据文件最大数

{

m_name[k]=31000+k;//形成数据文件名称,并存入数组中

}

str.Format(_T ("\Storage Card\syworkdata\%d.txt"),m_name[haves_pilecnt]);//合成当前施工数据文件的路径及名称

……

jobdatafile=CreateFile(str,GENERIC_READ|GENERIC_WRITE,0,

NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

//创建当前施工数据文件(str所指)

……

WriteFile (jobdatafile,para_write_buff,sizeof(para_write_buff),&fact_writebyenum,NULL);//将施工数据缓存数组para_write_buff存入当前施工数据文件jobdatafile句柄

利用VB[6]进行上位机软件开发,由上位机软件对施工数据进行解析显示等操作,上位机界面如图3所示。

图3 上位机测试界面图Fig.3 Interface chart of the test system

3 结论

经过程序反复调试测试,最后应用于产品显示控制系统中并且运行稳定。实践证明该算法能够实现施工数据的存储和管理。因此该方法具有一定典型性,可以在相关平台上推广应用。

[1]王磊,高春华,卢英明.扩底灌注桩的旋挖钻机成孔工法[J].建筑机械,2011(8):49-51.WANG Lei,GAO Chun-hua,LU Yin-ming.Dilled working method of enlarging base and casting stake by rotary drilling rig[J].Construction Machinery,2011(8):49-51.

[2]李宁.基于MDK的STM32处理器开发应用[M].北京:北京航空航天大学出版社,2008.

[3]周立功等.项目驱动—CAN-BUS现场总线基础教程[M].北京:北京航空航天大学出版社,2012.

[4]汪兵,李存斌,陈鹏,等.EVC高级编程及其应用开发[M].北京:水利水电出版社,2005.

[5]孙鑫.VC++深入详解(修订版)[M].北京:电子工业出版社,2006.

[6]邹丽明.Visual Basic 6.0程序设计与实训[M].北京:电子工业出版社,2008.

猜你喜欢
数据文件配置文件字符
提示用户配置文件错误 这样解决
寻找更强的字符映射管理器
搭建简单的Kubernetes集群
互不干涉混用Chromium Edge
字符代表几
一种USB接口字符液晶控制器设计
电子制作(2019年19期)2019-11-23 08:41:50
消失的殖民村庄和神秘字符
忘记ESXi主机root密码怎么办
数据文件恢复专题问答
数据文件安全管控技术的研究与实现