基于接触式IC卡技术的康复锻炼系统软件设计

2013-07-24 05:09潘小东王福明
电子测试 2013年1期
关键词:举例控件串口

潘小东 王福明

(中北大学 太原 030051)

0 引 言

以往的上、下位机之间的通信方式大都采用串口通讯[1]方式,串口通信是“点对点”连接,如果是“一机多设备”共同工作,那么还需要多线程的通信协议编程;而且串口通信的数据传输速率会受到距离的客观因素影响,传输效率不高。随着IC 卡技术的日益成熟,IC 卡技术[2]在当今社会的各个领域发挥着举足轻重的作用;以其携带方便、保密性好、存储量大的特性深受广大消费者青睐。因此,为了提高工作的科学化和规范化,运用IC 卡技术开发此系统是非常有必要的。

1 系统的主要功能

该系统专门为澳瑞特健康产业股份有限公司所生产的康复器械所设计。主要的功能如下图1 所示。

图1 康复器械主要的功能

2 接口函数及应用举例

该系统所用的接口函数皆封装在32 位DLL(Mwic_32.dll)中,IC 卡为德国西门子生产的SLE4442 卡[3],支持Windows xp/Vista/7 系统。可在VB、VC、DELPHI 等32 位开发环境中使用。

2.1 常用函数说明

(1)int chk_4442(int icdev)

icdev:通用设备标示符,若返回值<0,错误;返回值=0,正确(下同);

功能:检测卡片是否存在;

举例:st=chk_4442(icdev);

(2)int csc_4442(int icdev ,int len ,unsigned char *databuff)

功能:核对卡片密码;

举例:unsigned char databuff[3]={0xFF,0xFF,0xFF}//假定密码为出厂密码:FFFFFF;

st=csc_4442(icdev,3,databuff);

(3)int asc_hex(unsigned char * asc ,unsigned char *hex ,unsigned long length)

功能:ASCII 码转换成十六进制数据;

举例:unsigned char databuff[6];

st=asc_hex(“a1a2a3a4a5”,databuff,5);

(4)int asc_hex(unsigned char * hex ,unsigned char *asc ,unsigned long length)

功能:十六进制转换成ASCII 码;

举例:unsigned char databuff1[5]={0xa1,0xa2,0xa3,0xa4,0xa5};

unsigned char databuff2[10];

st=hex_asc(databuff1,databuff2,5);

* 注:转换后的字符长度为2* length。

(5)int swr_4442(int icdev ,int offset ,int len ,unsigned cahr * databuff);

功能:向卡内制定地址写入数据;

举例:unsigned char databuff[5]={‘s’,’o’,’n’,’n’,’y’};

st=swr_4442(icdev,32,5,databuff);

(6)int srd_4442(int icdev ,int offset ,int len ,unsigned char * databuff);

功能:读取卡内制定地址的数据;

举例:unsigned char databuff[5];

st=srd_4442(icdev,32,5,databuff);

2.2 函数应用举例

2.2.1 函数声明[4]

Declare Function srd_4442 Lib "mwic_32.dll" (ByVal icdev As Long,ByVal offset As Integer,ByVal le As Integer,ByVal data_buffer)As Integer

Declare Function srd_4442_hex Lib "mwic_32.dll" Alias"srd_4442" (ByVal icdev As Long,ByVal offset As Integer,ByVal le As Integer,ByRef data_buff As Byte)As Integer

Declare Function swr_4442 Lib "mwic_32.dll"(ByVal icdev As Long,ByVal offset As Integer,ByVal le As Integer,ByVal data_buffer)As Integer

Declare Function swr_4442_hex Lib"mwic_32.dll" Alias"swr_4442" (ByVal icdev As Long,ByVal offset As Integer,ByVal le As Integer,ByRef data_buffer As Byte)As Integer

Declare Function chk_4442 Lib "mwic_32.dll" (ByVal icdev As Long)As Integer

Declare Function csc_4442 Lib "mwic_32.dll" (ByVal icdev As Long,ByVal le As Integer,ByRef data_buffer As Byte)As Integer

Declare Function asc_hex Lib "mwic_32.dll" (ByVal asc,ByRef hex As Byte,ByVal le&)As Integer

Declare Function hex_asc Lib "mwic_32.dll" (ByRef hex As Byte,ByVal asc,ByVal le&)As Integer

2.2.2 代码节选

<1>数据存入数据库[5](采用ADO 技术连接数据库)

Dim DT As String

DT=CStr(Month(Date))+"/"+CStr(Day(Date))+ "/"+CStr(Year(Date))+" "+CStr(time())

ExeCutesql " insert into 客户资料 values(CSTR(DATE())+ ' '+CSTR(TIME()),'" & Label2.Caption & "','" & Text1(1).Text & "','" & Text1(2).Text & "','" _

& Text1(3).Text & "','" & Text1(4).Text & "','" & Text1(5).Text & "','" & Text1(6).Text & "','" _

& Text1(7).Text & "','" & Text1(8).Text & "','" & Label3.Caption & "')",Str_text

<2>十六进制写卡操作(包括对数据的处理)

就此系统而言,为了让软件往卡里写入的数据能够方便的由下位机成功读取,我们必须对写入的数据进行一些转化,这里就要求数据转换为十六进制。我们规定一个数据占卡中的5 个地址,同时还要为小数与整数的不同写入形式(这里主要是输入数据的指长度)做周全考虑!该系统主要用到的数据处理函数是Mid(string,start,leng),它的作用就是在字符串string 中从start 开始截取leng 长度的字符;具体用法参看如下代码:

‘写数据前必须核对卡密码,否则不能写入数据到卡中

st=asc_hex("ffffff",databuff(6),3)

st=csc_4442(icdev,3,databuff(6))

date1(1)=Trim(Text1(1).Text)

x(1)=Len(Trim(Text1(1).Text))

If InStr(1,date1(1),".")<>0 Then

Select Case x(1)

Case 4

date11(1)="00000"+Mid(date1(1),1,1)+ "0"+ Mid(date1(1),2,1)+ "0"+Mid(date1(1),4,1)’将数据组合为长度为10 的字符串形式以便于后面转换

st=asc_hex(date11(1),datebuff1(1),5)

st=swr_4442_hex(icdev,100,5,datebuff1(1))

Case 3

date11(1)="0000000"+Mid(date1(1),1,1)+ "0"+Mid(date1(1),3,1)

st=asc_hex(date11(1),datebuff1(1),5)

st=swr_4442_hex(icdev,100,5,datebuff1(1))

End Select

Else

Select Case x(1)

Case 1

date11(1)="0000000"+Mid(date1(1),1,1)+ "0"+"0"

st=asc_hex(date11(1),datebuff1(1),5)

st=swr_4442_hex(icdev,100,5,datebuff1(1))

Case 2

date11(1)="00000"+Mid(date1(1),1,1)+ "0"+ Mid(date1(1),2,1)+ "00"

st=asc_hex(date11(1),datebuff1(1),5)

st=swr_4442_hex(icdev,100,5,datebuff1(1))

End Select

End If

………

<3>十六进制读卡操作

每次锻炼结束后,需要将本次的锻炼数据在该软件上显示出来以便于对客户的身体状况做出一个客观的评价,读卡操作理所当然的就成为该系统的一个重要环节。而下位机写数据到卡中都是以十六进制形式写入,因此,此软件系统读取卡中数据后也要进行数制转换截取等处理再在窗体上显示出来,此处用到一个Val(string)函数,它返回一个包含于字符串string 内的数字,更直白一点的解释就是过滤字符,输出数字,具体的应用参看代码如下:

st=srd_4442_hex(icdev,55,5,databuff(2))

st=hex_asc(databuff(2),data61,5)

data611=Val(data61)

If data611=0 Then

Label2(3).Caption="0"

End If

x4=Len(data411)

If x4=9Then

data6111=Mid(data611,1,1)+Mid(data611,3,1)+ Mid(data611,5,1)+Mid(data611,7,1)+Mid(data611,9,1)

Else

If x4=7 Then

data6111=Mid(data611,1,1)+Mid(data611,3,1)+ Mid(data611,5,1)+ Mid(data611,7,1)

Else

If x4=5 Then

data6111=Mid(data611,1,1)+Mid(data611,3,1)+ Mid(data611,5,1)

Else

If x4=3 Then

data6111=Mid(data611,1,1)+ Mid(data611,3,1)

Else

If x4=1 Then

data6111=Mid(data611,1,1)

End If

End If

End If

End If

End If

………

<4>三次参数比较[6]

此系统中运用MSChart 控件来作为参数比较的工具,MSChart 控件是以图形方式显示数据的图表,可以按照一定的规范将数据以图表的形式显示出来。可以通过在控件属性页中设置数据来创建图表,或者可以从其他数据源比如Excel 表格、数据库中检索并绘制数据。

‘运用VB 自带的MSChart 控件,非常直观的显示出来

Dim arrValues(1 To 6,1 To 3)

Dim a As Integer

For a=1 To 6

arrValues(a,1)=Label2(a-1).Caption

arrValues(a,2)=Label3(a-1).Caption

arrValues(a,3)=Label4(a-1).Caption

Next a

MSChart1.ChartData=arrValues

<5>打印锻炼参数[7](用于医学分析)

‘通过VB 操作Excel 将锻炼参数以表格形式打印

Dim XlApp As New excel.Application’Excel 对象

Dim xlBook As New excel.Workbook’工作簿

Dim xlSheet As New excel.Worksheet’工作表

XlApp.Visible=True’设置Excel 对象可见

Set xlBook=XlApp.Workbooks.Add’建立新的工作簿

Set xlSheet=xlBook.Worksheets(1)’设置活动工作表

xlSheet.Select

excel

Sub excel()

Dim j As Integer

Cells(1,1)="载荷"

Cells(1,2)="功率"

Cells(1,3)="时间"

Cells(1,4)="次数"

Cells(1,5)="心率"

Cells(1,6)="热量"

For j=2 To i+1

Cells(j,1)=a1(i)

Cells(j,2)=b1(i)

Cells(j,3)=c1(i)

Cells(j,4)=d1(i)

Cells(j,5)=e1(i)

Cells(j,6)=f1(i)

Next j

End Sub

<6>窗体的美化处理

为了让软件系统界面更美观,我们在启动界面以及按钮控件上可以加载.bmp 格式的图片,效果如图2:

图2

以上代码摘自ORIENT 锻炼管理系统,系统投入使用后,运行稳定正常。

3 结 论

该软件系统已被正式运用,它改变了以往软件系统的不足,经过测试,本系统功能较齐全、稳定可靠,并且能运用到该厂的其他类型的各种设备(气动设备、无线设备等等),具有普遍适用性。操作方便,提高了康复锻炼的效率,从而更好的服务于广大客户。

[1]张玉强,白少民.串口通信编程分析及其VB 编程实例[J].延边大学学报:自然科学版,2003,22(3).

[2]江斌.浅谈IC 卡技术与应用[R].第七届全国建设事业IC 卡应用和技术发展研讨会,2008.

[3]冯驰,徐旭东.基于SLE4442 卡的身份认证系统[J].自动化技术与应用,2004,23(4).

[4]黄悦.SLE4442 智能卡VB 接口程序设计[J].电脑编程技巧与维护,2003(7).

[5]廖金辉,向建国,唐日成.VB 中基于自动化功能的Access 数据库应用[J].计算机与现代化,2007(8).

[6]李旭东.VB 环境下MSChart 控件的应用与研究[J].内江科技,2008,29(9).

[7]黄世芹,王珺.VB 编程环境下如何调用和生成EXCEL 报表文档[J].贵州气象,2010,34(2).

猜你喜欢
举例控件串口
浅谈AB PLC串口跟RFID传感器的通讯应用
基于.net的用户定义验证控件的应用分析
三角函数求值题型举例
数学竞赛中数列不等式的常见解法举例
金属活动性应用举例
关于.net控件数组的探讨
抽象函数应用举例
数字电源内部数据传输的串口通信方法实现
USB接口的多串口数据并行接收方法探索
串口技术的实物调试和虚拟仿真联合教学模式