资源描述
苏州大学成人教育毕业论文(设计) 题 目 基于VB控制的绝缘耐压测试系统院 系 电子信息学院专 业 电子信息工程班 级 08级电子信息工程考生姓名 同组人姓名 学号 YB0828054057指导老师 2010年 11月22日苏州大学电子信息学院毕业设计(论文)任 务 书专业电子信息工程班级08电子信息工程学号YB0828054057姓名 题目基于VB控制的绝缘耐压测试系统进行日期2010.10.18 2010.11.23毕业设计的要求:1、 1、内容完整2、 2、主题突出3、 3、实事求是4、 4、科学严谨内容:1、系统的硬件设计2、系统的软件设计3、系统功能验证主要参考资料:1、National Instruments Corporation NI-VISA User Manual 来源于网络2、尹乾 中文Visual Basic实用教程 指导老师(签字)系主任(签字)发出日期 年 月 日毕业设计(论文)进度计划起讫日期工 作 内 容备 注2010.10.1810.23设备选型,硬件设计2010.10.2310.31软件设计2010.10.3111.13设备验证2010.11.1311.18撰写毕业论文初稿2010.11.1811.20毕业论文修订2010.11.2011.23毕业答辩准备基于VB控制的绝缘耐压测试系统摘要随着中国经济的发展,中国市场需求已经由量的增长向质的增长转变。由于劳动合同法实施等许多因素的影响,人工费用的增加,为许多企业带来了负担。生产线及设备的自动化可以减少人员数量。通过降低人力的运营费用,提高对自动化的投资,最终实现生产产品品质的稳定性。本论文首先介绍了自动测试系统的定义和发展史。其次介绍了绝缘耐压测试的基本原理,并介绍了本次选用的绝缘耐压测试仪的主要功能,特点。论文重点介绍测试系统的硬件设计和软件设计及其验证。 目 录第1章 自动测试系统简介11.1 自动测试系统的概念11.2自动测试系统的发展11.2.1 第一代自动测试系统11.2.2 第二代自动测试系统11.2.3 第三代自动测试系统1第2章 设计综述22.1 绝缘耐压测试简介22.2 绝缘耐压测试仪简介22.3 设计内容与目标2第3章 硬件设计33.1 测试单元33.2 控制单元43.3 状态显示44.1程序设计流程图64.2 主要代码74.2.1 测试准备74.2.2 测试164.3 设定文件264.3.1 型号设定文件264.3.2 测试参数设定文件27第5章 性能确认275.1 硬件275.2 软件28总 结29主要参考文献30致 谢3131第1章 自动测试系统简介1.1 自动测试系统的概念通常将在计算机控制下,能自动进行各种信号测量、数据处理、传输,并以适当方式显示或输出测试结果的系统称为自动测试系统,简称ATS(Automated Test System),这种技术我们称之为自动测试技术。在自动测试系统中,整个工作都是在预先编制好的测试程序统一指挥下完成的,系统中的各种仪器和设备是智能化的,都可进行程序控制。 1.2 自动测试系统的发展1.2.1 第一代自动测试系统第一代自动测试系统多为专用系统,往往是针对某项具体测试任务而设计的,主要用计算机技术来进行逻辑定时控制,主要功能是进行数据自动采集和自动分析,完成大量重复数据的测试工作,承担繁重的数据运算和分析任务。系统中的仪器采用专用接口,因此系统较为复杂,通用性差,不利于自动测试系统的推广应用。 1.2.2 第二代自动测试系统第二代自动测试系统是尽可能利用现成的仪器设备,再利用计算机来共同组建成所需要的自动测试系统。为了系统组建方便,第二代自动测试系统中的仪器采用了标准化的通用接口,这样就可以把任何一个厂家生产的任何型号的可程控仪器连接起来形成一个自动测试系统。1.2.3 第三代自动测试系统设计目标:充分发挥计算机的能力,使整个自动测试系统简化到仅由计算机、虚拟仪器软件和硬件接口模块三部分组成,1987年推出了一种名为VXI的新型计算机仪器系统总线标准后,出现了基于VXI总线的模块化自动测试系统以及虚拟仪器。 第2章 设计综述2.1 绝缘耐压测试简介 耐电压试验就是对被试物品施加一个高于工作或运行中可能遇到的过电压数值的交流或直流电压,并经历一段时间,以检查其绝缘水平。直流耐压试验的试验电压较高时,也能从一定程度上反映被试品的绝缘性能,但对保证被试品的安全运行是不够的。因为在直流电压作用下,分层介质中的电压分布与电阻成正比,这与在交流电压作用下分层介质中的电压分布与电容量成反比不同。所以,为了进一步暴露被试品的缺陷,检查被试品的绝缘水平,确定能否安全使用,还应进行交流耐压试验。交流耐压试验能更好地模拟被试品在实际使用中承受过电压的情况,比起直流耐压来,往往能更有效地发现被试品的局部缺陷,如绝缘损伤等。直流耐压试验可用于交流耐压试验之前初步检验绝缘状况,也用于有极性的被试品,因为这样的被试品在施加交流过电压后会在电压极性变换时呈现很小的阻抗,无法判断绝缘性,甚至损坏被试品,如电解电容器、二级管等。有些被试品在交流电压下呈现低阻抗或实际总是运行在直流状态下时,也用直流进行耐压试验,如电解电容器等。 由于交流耐压试验的试验电压一般比工作电压高许多,对绝缘性能不良的被试品来说,是一种破坏性试验。对于造价高,结构复杂的被试品,进行此项试验前,应先进行绝缘电阻测量、直流泄漏甚至直流耐压试验,若发现绝缘性能有缺陷,应进行综合分析和判断,才能决定该被试品是否能承受交流耐压试验的电压,然后再进行试验,以免对被试品造成破坏和损伤。2.2 绝缘耐压测试仪简介 本设计中的测试仪器选用菊水工业的TOS9200系列中的绝缘耐压测试TOS9201以及高压切换器TOS9221。TOS9201是一款搭载有AC 耐压、DC 耐压、绝缘电阻试验这3 大功能的机型。构成其中心部分的电源采用高效率的开关电源和PWM 方式的开关放大器。由此,实现大输出和高稳定特性,而且质量轻巧,结构紧凑。通过组合高电压切换器TOS9221(配备接触检查功能),该测试仪还可以自动检查最多16 个通道的测试点,从而发展成为更加安全可靠的自动检查系统。2.3 设计内容与目标 本设计以VB编写控制软件,控制测试仪器来实现自动测试,通过对绝缘耐压测试仪和外围设备的控制,通过键盘及鼠标的设置可以实现人机对话,并可以向计算机输入各种命令。第3章 硬件设计 3.1 测试单元高压切换器TOS9221具有将TOS9201提供的试验电压分配给多个试验点的功能。可通过1台高压切换器将输出扩展到4个通道,每个通道可设定为任意的电位,如HIGH、LOW、OPEN,可对4个试验点的任意点进行ACDC耐压试验或绝缘电阻试验。1台主机还可将高压切换器最多扩展到4台上,使其具备最多16个通道。因为测试仪器的高压接线端子都在仪器的背面,为了便于操作,把接线端子通过绝缘耐压检查用端子台转接到前面。TOS9201绝缘耐压测试仪LOW OUTHIGH OUTSCANNER OUTCH4 BSCANNER OUTTOS9221高压切换器CH1 ACH1 BCH2 ACH2 BCH3 ACH3 BCH4 ASCANNER INHIGH INLOW INHIGH OUTLOW OUTCH8 BSCANNER OUTTOS9221高压切换器CH5 ACH5 BCH6 ACH6 BCH7 ACH7 BCH8 ASCANNER INHIGH INLOW INHIGH OUTLOW OUTCH12 BSCANNER OUTTOS9221高压切换器CH9 ACH9 BCH10 ACH10 BCH11 ACH11 BCH12 ASCANNER INHIGH INLOW INHIGH OUTLOW OUTCH16 BSCANNER OUTTOS9221高压切换器CH13 ACH13 BCH14 ACH14 BCH15 ACH15 BCH16 ASCANNER INHIGH INLOW INHIGH OUTLOW OUT绝缘耐压检查用端子台CH4 BCH1 ACH1 BCH2 ACH2 BCH3 ACH3 BCH4 ACH8 BCH5 ACH5 BCH6 ACH6 BCH7 ACH7 BCH8 ACH12 BCH9 ACH9 BCH10 ACH10 BCH11 ACH11 BCH12 ACH16 BCH13 ACH13 BCH14 ACH14 BCH15 ACH15 BCH16 A3.2 控制单元 绝缘耐压测试仪与PC之间采用GPIB通讯,GPIB卡使用NI公司生产的PCI-GPIB卡。TOS9201绝缘耐压测试仪LOW OUTHIGH OUTSCANNER OUTGPIBMONITOR显示器KEYBOARD键盘MOUSE鼠标Optiplex GX280控制用PCMONITORUSBPCI-GPIBUSB 3.3 状态显示 外部通过三色信号灯显示不同的状态,同时有高压输出时通过高压警告灯提醒。MONITOR显示器KEYBOARD键盘MOUSE鼠标TOS9201绝缘耐压测试仪LOW OUTHIGH OUTSCANNER OUTGPIBSTATUS OUTPL2-TOS警告灯PHE-3FB信号灯USBOptiplex GX280控制用PCMONITORUSBPCI-GPIBUSB 3.4 设计完成图 最终硬件设计图如下:MONITOR显示器KEYBOARD键盘MOUSE鼠标TOS9201绝缘耐压测试仪LOW OUTHIGH OUTSCANNER OUTCH4 BSCANNER OUTTOS9221高压切换器CH1 ACH1 BCH2 ACH2 BCH3 ACH3 BCH4 ASCANNER INHIGH INLOW INHIGH OUTLOW OUTCH8 BSCANNER OUTTOS9221高压切换器CH5 ACH5 BCH6 ACH6 BCH7 ACH7 BCH8 ASCANNER INHIGH INLOW INHIGH OUTLOW OUTCH12 BSCANNER OUTTOS9221高压切换器CH9 ACH9 BCH10 ACH10 BCH11 ACH11 BCH12 ASCANNER INHIGH INLOW INHIGH OUTLOW OUTCH16 BSCANNER OUTTOS9221高压切换器CH13 ACH13 BCH14 ACH14 BCH15 ACH15 BCH16 ASCANNER INHIGH INLOW INHIGH OUTLOW OUT绝缘耐压检查用端子台CH4 BCH1 ACH1 BCH2 ACH2 BCH3 ACH3 BCH4 ACH8 BCH5 ACH5 BCH6 ACH6 BCH7 ACH7 BCH8 ACH12 BCH9 ACH9 BCH10 ACH10 BCH11 ACH11 BCH12 ACH16 BCH13 ACH13 BCH14 ACH14 BCH15 ACH15 BCH16 AGPIBSTATUS OUTPL2-TOS警告灯PHE-3FB信号灯USBOptiplex GX280控制用PCMONITORUSBPCi-GPIBUSB第4章 软件设计 vb是Visual Basic的简称,是由美国微软公司于1991年开发的一种可视化的、面向对象和采用事件驱动方式的结构化高级程序设计语言,可用于开发 Windows 环境下的各类应用程序。它简单易学、效率高,且功能强大可以与 Windows 专业开发工具SDK相媲美。在Visual Basic环境下,利用事件驱动的编程机制、新颖易用的可视化设计工具,使用Windows内部的广泛应用程序接口(API)函数,动态链接库(DLL)、对象的链接与嵌入(OLE)、开放式数据连接(ODBC)等技术,可以高效、快速地开发Windows环境下功能强大、图形界面丰富的应用软件系统。4.1 程序设计流程图 程序设计主要分为两部分,一部分是测试前的准备,程序输入界面及各个硬件的通讯确认等。第二部分是测试执行,通过GPIB对绝缘耐压测试仪控制,实现按照设定参数的测试。测试:测试准备:程序起动开始测试TOS9201通讯GPIB确认测试执行型号设定文件LoadTOS9201设定,测试型号选择界面Load测试结果输出型号选择主界面Load测试项目显示TOS9201 GPIB通讯 4.2 主要代码4.2.1 测试准备1).程序起动 Public Sub Main() Dim intI As Integer Dim intAddress As Integer If App.PrevInstance Then MsgBox Program is already Running!, vbCritical, Program Instance End End If blnFirstLoad = True gblnTestStart = False Call InitGPIB LoadSysSelectionInfo frmSelection.Show vbModal Load frmMain frmMain.Show Call TOS9201_Init If gblnSignalPole = True Then For intI = 0 To UBound(gudtInstrument) If gudtInstrument(intI).InstrumentName = SignalPole Then intAddress = Val(gudtInstrument(intI).Address) End If Next End If Call SignalPole_Init(intAddress) Call SignalpoleSetAll(sigOff) Call SignalPoleSet(sigBuzzer1, sigOn) Wait 1000 Call SignalPoleSet(sigYellow1, sigOn) frmMain.cmdStart.Enabled = True Do DoEvents Call TestStartCheck Loop End Sub2).GPIB确认Public Function InitGPIB() As Boolean If InitialiseVisa Then InitGPIB = True Else InitGPIB = False End If Call ShutdownVisa End FunctionPublic Function InitialiseVisa() As Boolean nStatus = viOpenDefaultRM(hSession) Select Case nStatus Case VI_SUCCESS: InitialiseVisa = True Case VI_ERROR_SYSTEM_ERROR: InitialiseVisa = False Case VI_ERROR_ALLOC: InitialiseVisa = False Case VI_ERROR_INV_SETUP: InitialiseVisa = False Case Else InitialiseVisa = False End Select End FunctionPublic Sub ShutdownVisa() nStatus = viClose(hSession) Select Case nStatus Case VI_SUCCESS: Case VI_ERROR_INV_SESSION: Case VI_ERROR_INV_OBJECT: Case VI_ERROR_CLOSING_FAILED: End SelectEnd Sub3).型号设定文件LoadPrivate Sub LoadSysSelectionInfo() Dim intI As Integer Dim strLine As String Dim strBuffer() As String If Dir(App.Path + Station.cfg) = Then MsgBox Station Information File is Misssing!, vbCritical End End If intI = 0 Open App.Path + Station.cfg For Input As #1 Do While Not EOF(1) Line Input #1, strLine If Left(strLine, 2) = ! Then strBuffer = Split(strLine, ;) ReDim Preserve gudtSystemInfo(intI) With gudtSystemInfo(intI) .SystemName = strBuffer(1) .PartNo = strBuffer(2) .SpecFile = strBuffer(3) .SpecVersion = strBuffer(4) .FixtureImage = strBuffer(5) .Designer = strBuffer(6) End With intI = intI + 1 End If Loop Close #1 gintSelectionIndex = 0 End Sub4).型号选择界面LoadPrivate Sub Form_Load() Dim intI As Integer comPartNo.Clear For intI = 0 To UBound(gudtSystemInfo) comPartNo.AddItem gudtSystemInfo(intI).SystemName, intI Next comPartNo.ListIndex = 0 comPartNo.SelLength = Len(comPartNo.Text) comPartNo.SelStart = 0 End Sub Private Sub comPartNo_Click() Dim intI As Integer intI = comPartNo.ListIndex lblPartNo.Caption = gudtSystemInfo(intI).PartNo lblSpec.Caption=gudtSystemInfo(intI).SpecFile+/Ver:+ gudtSystemInfo(intI).SpecVersion End SubPrivate Sub comPartNo_Click() Dim intI As Integer intI = comPartNo.ListIndex lblPartNo.Caption = gudtSystemInfo(intI).PartNo lblSpec.Caption=gudtSystemInfo(intI).SpecFile+/Ver:+gudtSystemInfo(intI).SpecVersion End Sub5).型号选择Private Sub cmdOK_Click() Dim intI As Integer gintSelectionIndex = comPartNo.ListIndex Call LoadSelectedSystemInfo(gintSelectionIndex) Me.Hide If blnFirstLoad = True Then Exit Sub End IfWith frmMain.lblSystemName.Caption=Space(3)+gudtSystemInfo(gintSelectionIndex).SystemName+ Space(3) .lblSystemName.Visible = True .lblSpec.Caption = gudtSystemInfo(gintSelectionIndex).SpecFile+/+ gudtSystemInfo(gintSelectionIndex).SpecVersion .lblPartNo.Caption = gudtSystemInfo(gintSelectionIndex).PartNo End With Call ShowTestItem End Sub6).测试参数设定文件LoadPublic Sub LoadSelectedSystemInfo(intI As Integer) Dim intJ As Integer Dim intH As Integer Dim intQ As Integer Dim strLine As String Dim strBuffer() As String Dim strSpecVersion As String On Error GoTo ApplicationErr If Dir(App.Path + Spec + gudtSystemInfo(gintSelectionIndex).SpecFile) = Then MsgBox This Systems Specification file doesnt exist!, vbCritical frmSelection.Show vbModal End End If ReDim gudtInstrument(0) ReDim gudtTestItems(0) intJ = 0 intQ = 0 Open App.Path + Spec + gudtSystemInfo(gintSelectionIndex).SpecFile For Input As #1 Do While Not EOF(1) Line Input #1, strLine If Left(strLine, 2) = $: Then strSpecVersion = Mid(strLine, 11, 5) If strSpecVersion gudtSystemInfo(intI).SpecVersion Then MsgBox Specification File Verion is not consistent with station congfiuration file, vbCritical Close #1 End End If End If If Left(strLine, 2) = : Then ReDim Preserve gudtInstrument(intQ) strBuffer = Split(Mid(strLine, 3, Len(strLine) - 2), ,) With gudtInstrument(intQ) .InstrumentName = strBuffer(0) .Address = strBuffer(1) End With If gudtInstrument(intQ).InstrumentName = SignalPole Then gblnSignalPole = True End If intQ = intQ + 1 End If If Left(strLine, 2) = ! Then ReDim Preserve gudtTestItems(intJ) strBuffer = Split(strLine, ;) With gudtTestItems(intJ) .TestType = strBuffer(1) .TestVoltage = strBuffer(2) .Frequency = strBuffer(3) .UpperLimit = strBuffer(4) .LowerLimit = strBuffer(5) .ExecuteTime = strBuffer(6) .FallTime = strBuffer(7) .RiseTime = strBuffer(8) .OpenChannel = strBuffer(9) .HighChannel = strBuffer(10) .LowChannel = strBuffer(11) .ContactCheckOn = IIf(strBuffer(12) = A, True, False) .Comment = strBuffer(13) End With intJ = intJ + 1 End If Loop Close #1 Exit SubApplicationErr: MsgBox Load Test Specification File Error! + vbCr _ + Err.Description + + CStr(Err.Number) + , vbCritical, System Error End End Sub7).主界面LoadPrivate Sub Form_Load() Dim intI As Integer Dim strTosAddress As String Dim strTitle As String On Error GoTo ApplicationErr blnFirstLoad = False strTitle = No. + |Item + |Voltage + _|Comment + |Upper/Lower _ + |Data + |Unit + |P/F msFlexDisplay.FormatString = strTitle Me.WindowState = 2 Me.Caption = Multiple purpose Insulation High Voltage Test Program + Space(70) _ + Version: + CStr(App.Major) + . + CStr(App.Minor) + . + CStr(App.Revision) cmdStart.Enabled = False Me.BackColor = &HFFFF80 lblSystemName.Caption = Space(3) + gudtSystemInfo(gintSelectionIndex).SystemName + Space(3) lblSpec.Caption=gudtSystemInfo(gintSelectionIndex).SpecFile+/+gudtSystemInfo(gintSelectionIndex).SpecVersion lblPartNo.Caption = gudtSystemInfo(gintSelectionIndex).PartNo Call ShowTestItem For intI = 0 To UBound(gudtInstrument) If gudtInstrument(intI).InstrumentName = TOS9201 Then strTosAddress = gudtInstrument(intI).Address Exit For End If Next Call HandGPIBS Exit SubApplicationErr: MsgBox Err.Description + / + Err.Source + + CStr(Err.Number) + , vbCritical, Please Call Duty Engineer! EndEnd Sub8).测试项目显示Public Sub ShowTestItem() Dim intI As Integer If blnFirstLoad = False Then For intI = 0 To frmMain.chkTestItem.count - 1 If intI 0 Then Unload frmMain.chkTestItem(intI) End If Next End If For intI = 0 To UBound(gudtTestItems) If intI 0 Then Load frmMain.chkTestItem(intI) frmMain.chkTestItem(intI).Top = frmMain.chkTestItem(intI - 1).Top + 300 chkTestItem(intI).Visible = True End If frmMain.chkTestItem(intI).Caption = gudtTestItems(intI).TestType + , _ + gudtTestItems(intI).TestVoltage + , _ + gudtTestItems(intI).Frequency + , _ + gudtTestItems(intI).UpperLimit + , _ + gudtTestItems(intI).LowerLimit + , _ + gudtTestItems(intI).ExecuteTime + , _ + gudtTestItems(intI).FallTime + , _ + gudtTestItems(intI).RiseTime + , _ + IIf(gudtTestItems(intI).ContactCheckOn = True, A, N) + , _ + gudtTestItems(intI).OpenChannel + , _ + gudtTestItems(intI).HighChannel + , _ + gudtTestItems(intI).LowChannel + , _ + gudtTestItems(intI).Comment frmMain.chkTestItem(intI).Visible = Not frmMain.lblSystemName.Visible Next End Sub9).TOS9201 GPIB通讯Public Sub HandGPIBS() Dim intI As Integer Dim strAddress As String For intI = 0 To UBound(gudtInstrument) Call chGPIBAdress(gudtInstrument(intI).InstrumentName) strAddress = GetAddress(gudtInstrument(intI).InstrumentName) If gudtInstrument(intI).InstrumentName SignalPole Then sInstrumentAddress = GPIB: + RTrim$(strAddress) + :INSTR Call InitialiseVisa Call OpenChannel End If if gudtInstrument(intI).InstrumentName= TOS9201 then mlongHand_TOS9201 = hChannel End if Next End SubPublic Sub chGPIBAdress(strMeasName As String) Dim nGPIBAdress As Integer Select Case strMeasName Case SignalPole No Operation Case TOS9201 nGPIPDEL = Chr$(&HA) + Chr$(&HD) hChannel = mlongHand_TOS9201 Case Else MsgBox This Software does not support instrument + strMeasName + Stop End SelectEnd SubPublic Function GetAddress(strInstrument As String) As String Dim intI As Integer For intI = 0 To UBound(gudtInstrument) If gudtInstrument(intI).InstrumentName = strInstrument Then GetAddress = gudtInstrument(intI).Address Exit For End If Next End FunctionPublic Function OpenChannel() As Boolean nStatus = viOpen(hSession, sInstrumentAddress, VI_NULL, VI_NULL, hChannel) Select Case nStatus Case VI_SUCCESS: OpenChannel = True Connected = True Case VI_ERROR_INV_SESSION: OpenChannel = False Case VI_ERROR_INV_OBJECT: OpenChannel = False Case VI_ERROR_NSUP_OPER: OpenChannel = False Case VI_ERROR_INV_RSRC_NAME: OpenChannel = False Case VI_ERROR_INV_ACC_MODE: OpenChannel = False Case VI_ERROR_RSRC_NFOUND: OpenChannel = False Case VI_ERROR_ALLOC: OpenChannel = False Case Else: OpenChannel = False End SelectEnd Function4.2.2 测试1).测试开始Private Sub cmdStart_Click() Dim intI As Integer On Error GoTo ApplicationErr If cmdStart.Caption = Test Start Then cmdStart.Caption = Test Stop Call DisplayClear lvwDisplay.ListItems.Clear gblnTestStart = True
展开阅读全文