当前位置:文档之家› 基于Visual Basic串口通信与分布式监测系统网络组建

基于Visual Basic串口通信与分布式监测系统网络组建

目录

1引言 (1)

2RS-232/485串行通信与MSCOMM控件 (1)

2.1 RS-232串行通信 (1)

2.2 RS-485串行通信 (2)

2.3 MSC OMM控件 (3)

3分布式系统的设计思想与网络组建 (4)

3.1 分布式监测系统的设计思想 (4)

3.2 传感器与分布式模块的匹配 (4)

3.3 分布式监测系统的网络组建 (5)

4基于分布式系统的VB串口通信程序设计 (6)

4.1 硬件选型与网络组建 (6)

4.2 通讯协议分析与测试 (7)

4.2.1I-7017通讯协议分析与测试 (7)

4.2.2JWSL-3W1通讯协议分析与测试 (8)

4.3 分布式监测系统功能的程序实现 (8)

4.3.1查询命令发送的程序实现 (8)

4.3.2数据接收与解析的程序实现 (10)

4.3.3查询命令集成与监测功能实现 (12)

5结束语 (13)

参考文献 (13)

基于Visual Basic的串行通信与

分布式监测网络设计

印金国138********

(云南大学信息学院学号:1200701581)

摘要:组建分布式监测网络,关键在于根据监测参数选择不同型号传感器,并参考传感器信号输出选择与之匹配的数据采集模块,在组建分布式监测网络的基础上,利用计算机串口

RS-232、RS-485实现串行通信,最终达到多点、实时监测的目的。本文论述了如何基于

Visual Basic语言实现串行通信,探讨了基于泓格I-7000模块组建分布式监测网络的方法及

思想,并介绍了利用温湿度传感器和分布式模块组建一个小型监测网络以及串口通信程序

实现。

关键词:Visual Basic,分布式模块,串行通信,分布式监测,485网络

1引言

在自动化领域中,人们总是希望用机器来代替人类做某些工作,如简单重复性操作或者对人体有害的工作。虽然现在智能化的机器能够替代人类完成很多事情,不过还是需要有相关的设备来监测这些机器的工作是否正常,并据此做出相应的控制操作,这就是所谓的监控。计算机要完成监控,首先必须进行监测,通过布设的传感器传回的信号对监测的参数进行判断。在监测的范围较大或监测点数较多时,就需要把监测工作分散进行,同时把监测结果集中管理,这就是所谓的分布式监测。

组建分布式监测网络,关键在于根据监测参数选择不同型号传感器,并参考传感器信号输出选择与之匹配的数据采集模块,在组建分布式监测网络的基础上,利用计算机串口RS-232、RS-485实现串行通信,最终达到多点、实时监测的目的。本文论述了如何基于Visual Basic语言实现串行通信,探讨了基于泓格I-7000模块组建分布式监测网络的方法及思想,并介绍了利用温湿度传感器和分布式模块组建一个小型监测网络的硬件组建以及程序实现。

2RS-232/485串行通信与MSComm控件

介绍常用的RS-232以及RS-485串口,并阐述Visual Basic6.0(下文简称VB)环境提供的MSComm控件在实现与RS-232进行串行通信中的常用属性及使用方法。

2.1RS-232串行通信

分布式监测系统主要用到RS-232以及RS-485串行通信端口。串行通信端口(Serial Communication Port)在系统控制的范畴一直占据着极其重要的地位,用途以连接调制解调器来传输

数据最为常见。RS-232串行通信端口已经成为计算机上的标准配置,现在新一代的计算机以9引脚的接头接出所有的RS-232通信端口。RS-232外观以及引脚标号如图1所示。

图1 RS-232外观以及引脚标号

RS-232的引脚编号及定义如表1所示:

表1 RS-232引脚标号及意义

要将数据从一端发送到另一端,只需要用到第2引脚、第3引脚以及第5引脚就可以形成一个简单的通信线路。在以单台计算机进行串行通信实验时,可将引脚2、引脚3短路,即可形成一个完整的回路,实现“自发自收”功能。

串口通信简单易用,因此在工业领域得到大量的应用。但由于工业环境中通常会有噪声干扰传输线路,在用RS-232进行串行通信时经常会受到外界的电气干扰而使信号发生错误,有效传输距离仅为15米。因此RS-485串行通信方式应运而生。

2.2RS-485串行通信

与RS-232不同,RS-485数据信号采取差分传输,一般采用半双工方式,仅需要2根传输线。RS-485信号在发送出去之前会分解成正、负两条线路,当到达接收端后,再将信号相减还原成原来的信号。若将原始信号标注为()

DT,分解后的信号分别标注为()

D-,则()

D+和()

DT与发送端发送出去时的运算关系如式(1)所示:

=+--(1)DT D D

()()()

同样,接收端接到信号后,也按照式(1)的关系将信号还原成原来的样子。当线路受到干扰时,假设此时两条传输线上的信号分别成为()

-+。如果接收端接收到此信号,

D Noise

++和()

D Noise

它将按照类似的方法将其合成,方程式如式(2)所示:

DT D Noise D Noise D D

=++--+=+--(2)()[()][()]()()

显然,式(2)得到的结果与式(1)完全一致,所以使用RS-485进行串行通信可以有效地防止噪声的干扰,实现长距离传输,其最长距离可达1200米。正因为这种特性,工业上比较适合使用RS-485这种传输方式。

在I-7520模块(实现232与485通讯转换功能,见3.2节相关介绍)实现RS-232转485信号输出方式的485端,不需要中继模块的情况下,485网络最多可挂256个分布式模块。这就意味着分

布式监测网络可实现多达256点甚至更多点的实时监测。

2.3MSComm控件

Visual Basic提供了MSComm控件,旨在实现RS-232的串口通信。MSComm控件实现串口通信的工作方式以及主要属性、事件如表2所示。

对于MSComm控件OnComm事件的子函数形式源代码如下:

Private Sub MSComm1_OnComm()

Select Case https://www.doczj.com/doc/d74389913.html,mEvent

Case comEvCD ' CD 线状态变化引发事件

Case comEvCTS ' CTS 线状态变化引发事件

Case comEvDSR ' DSR 线状态变化引发事件

Case comEvRing ' Ring Indicator 变化引发事件

Case comEvReceive ' 收到RThreshold个字节引发事件

(在此处添加从缓冲区读取数据的程序)

Case comEvSend ' 传输缓冲区有SThreshold 个字符引发事件

Case comEvEOF ' 输入数据流中发现EOF 字符引发事件

End Select

End Sub

对于RS-232的串口通信而言,当计算机缓冲区接收到RThreshold个字节时,MSComm控件将触发OnComm事件。在“Case comEvReceive”后添加从缓冲区中读取数据功能的源代码,即可实现串口通信的接收数据功能。

3分布式系统的设计思想与网络组建

分析分布式监测网络的设计思想,并基于传感器和所匹配的分布式模块,阐述分布式监测网络组建的方法。

3.1分布式监测系统的设计思想

在需要进行大范围、多点监测的情况下,分布式概念的优势则可凸现出。首先分散在大范围内的监测点都有对应的数据采集模块(也称分布式模块,下同)来对传感器给出的信号进行采集、转换和传输,这些模块负责自己的一块区域,采集到的信号会实时输送到各个模块。这些模块可能含有数字输入、模拟输入或脉冲输入等功能,而每一个模块再以RS-485网络连接起来,一起送到主控计算机。主控计算机通过串口通信把采集到的数据显示为直观的图形或者参数,从而达到分布式监测的目的。分布式监测系统如图2所示。

图2 分布式监测示意图

分布式监测功能是通过计算机RS-232/485进行串口通信来实现的,图2为四个模块组成的分布式监测系统示意图,其工作流程为:

步骤一:监测部位的传感器感应出周边环境参数,并将数据送至不同地址的分布式模块处;

步骤二:计算机对处于RS-485网络中的不同地址的分布式模块发送不同的查询指令,实现轮回查询;

步骤三:处于RS-485网络中的不同模块只响应和自身地址相符的指令,其响应数据经RS-485网络转换为RS-232接口形式送至计算机;

步骤四:计算机对RS-232传来的数据进行判断、处理和实时显示,判断当前设备所处环境参数的状态。

3.2传感器与分布式模块的匹配

根据传感器信号输出方式的不同,可以将传感器分类为模拟量输出(电压、电流)型、高低电平输出型、脉冲信号输出型。在选择相应的分布式模块时,应当遵循“匹配”原则,即传感器的信号输出方式应当与分布式模块所能够处理的信号相一致。

本文所讲述的数据采集模块,均采用的是泓格科技出品的分布式模块ICP-CON的I-7000系列。几种典型的分布式模块介绍如下:

I-7017模块——7017模块可以用来实现对传感器输出的模拟信号的检测。对于传感器输出的电压信号,通过设置模块的量程后可直接接入其中一个通道,对模拟电流信号的检测方法类似,只不过需要外加一个精密电阻将电流转换为电压信号。I-7017提供了8个模拟输入端口,可以实现多个模拟信号的同时采集。

I-7060模块——I-7060模块用来实现对传感器高低电平信号的采集,该模块设计时采取隔离型方式,故该模块具有抵抗外界干扰能力。I-7060提供了四个数字输入通道,与高低电平输出方式的传感器相连接后,可同时实现四个通道的传感器高低电平数据的采集和传输。

I-7080模块——I-7080模块用来实现传感器输出形式为脉冲的计数,该模块提供了两个信道的脉冲输入,另有两个通道的数字输出。一般和输出形式为脉冲的传感器相连,可以实现脉冲信号的计数。

I-7520模块——I-7520旨在实现RS-485与RS-232通讯方式的转换。

传感器与分布式模块的匹配原则如表3所示。

表3 传感器与分布式模块的匹配原则

现了一体化设计,故硬件选型时可优先选择该类传感器,不需要再另选分布式模块。

3.3 分布式监测系统的网络组建

选择了合适的传感器以及与之匹配的分布式模块之后,通过合理的连线即可组建成分布式监测系统网络,图3所示的分别为传感器为模拟输出、数字输出、脉冲输出以及相匹配的I-7017、I-7060、I-7080分布式模块所组建的分布式网络。

图3 分布式监测网络组建示意图

与图3相对应,基于该类型的硬件选型的电路连线如图4所示。

图4 分布式监测网络电路连线图

由图3、图4可以看出,由于传感器的输出形式有模拟、数字、脉冲等类型,所以网络中采集的数据在连接入RS-485网络之前分别采用了I-7017、I-7060和I-7080模块,连接入RS-485网络后汇总至I-7520转换为RS-232接入主控计算机。主控计算机发送出带不同地址的查询指令,查询指令经过I-7520转换为RS-485信号在485网络中传输。(注:图4中Rt为终端匹配电阻)对于输出为485网络形式的传感器,将其485信号线直接接入485网络之中即可。

4基于分布式系统的VB串口通信程序设计

选用传感器和分布式模块来组建一个典型的硬件平台,分析I-7017分布式模块以及485网络输出形式的传感器通讯协议,并基于VB语言和MSComm控件实现单机功能测试和组建网络实现分布式监测的程序设计方法。

4.1 硬件选型与网络组建

为使所组建的硬件平台具备一定的典型性,选择如下硬件:

——输出为模拟电压的温湿度传感器

选择北京昆仑海岸传感技术中心生产的JWSL-3VB温湿度变送器,该型号传感器为温湿度变送一体化设计,输出为三线制,温度、湿度信号各占一路,故可等效于两点监测,一点为温度监测,另一点为湿度监测。JWSL-3VB电压输出如图5的a图所示,其中A路为对应湿度输出,B路对应温度输出。

——分布式模块I-7017

I-7017与JWSL-3VB温湿度变送器相匹配,可实现八个通道的模拟信号采集。在该实验平台中仅采用二个通道,其中通道0用于采集温度的模拟信号,通道1用于采集湿度的模拟信号。I-7017外形如图5的b图。

——485网络型输出的温湿度传感器

选择北京昆仑海岸传感技术中心生产的JWSL-3W1温湿度变送器,该型号传感器同样为温湿度变送一体化设计,其输出为485网络型。由上文分析可知,485网络输出型的传感器直接接入485网络之中,不需要再外接数据采集模块。其输出信号线四个端口分别为:端口4,24伏电源正极;端口3,差分电平正(485+);端口2,差分电平负(485-);端口1,24伏电源负极。

——24伏直流电源

JWSL-3VB、JWSL-3W1以及模块I-7017均采用24伏直流供电。

图5 JWSL-3VB温湿度电压输出与I-7017外观图

参照3.3节分布式监测网络的组建方法,结合各类传感器与分布式模块,通过一定的电路连线即可组建成一个分布式监测的485网络,485网络通过I-7520转换成RS-232通讯方式后可直接与计算机RS-232串口相连,如图6 所示。

图6 基于所选硬件组建的分布式监测网络电路连线图

可将硬件平台看作是实现三点监测的分布式监测网络。其中,JWSL-3VB传感器负责两点的监测,其信号输出1、3(B路,对应温度输出)由模块I-7017的通道0负责采集;其信号输出1、2(A路,对应湿度输出)由模块I-7017的通道1负责采集;JWSL-3W1传感器负责另一点的监测,该点传感器的485输出3、2将温度、湿度参数一体化变送后直接送入485网络。

4.2通讯协议分析与测试

4.2.1I-7017通讯协议分析与测试

I-7017模块的命令格式可以分成送出与响应两个部分:送出的部分就是计算机给分布式模块下达命令,该部分的命令包含几个片断的组合:(前导字符)+(地址)+(命令)+(CR);模块对发送命令的响应部分由以下几个部分组成:(前导字符)+(地址)+(数据资料)+(CR),含义除“数据资料”格式解释因模块而异之外,其余与发送指令相一致。

命令举例如下:

——设置模块配置

设置模块配置其语法为:%AANNTTCCFF(CR)

解释如下:

%:前导字符,“%”用于设置模块格式;

AA:标识发送命令至模块的地址;

NN:设置模块新地址,范围为00~FF;

TT:设置模块的模拟电压输入的范围,如-5伏~5伏对应为“09”;

CC:设置模块的新波特率,波特率9600bps对应为“06”;

FF:设置模块的新格式,一般选择为“00”。

CR:即键盘上的Enter键,VB中的语法为vbCR。

完成必要的硬件连线并进行相关的参数设置后,主控计算机通过测试程序(该程序由商家提供)发送命令“%010*******”,模块返回“!02”,命令的意思是:将地址为01的模块地址重新设置为02,电压范围设置为-5伏~5伏,波特率设置为9600bps。返回“!02”则表明设置成功。

——从通道中读取模拟量输入

读取模拟量值的语法为:#AAN(CR)

解释如下:

#:前导字符,“#”用于读取模块数据

AA:待读取模块的地址,范围为00~FF;

N:该地址模块的通道,范围为0~7。

主控计算机发送命令“#020”,模块返回“>+02.231”,意思是读取地址为02的模块的0通道的模拟电压输入,而此时输入通道0电压值为+2.231伏。

4.2.2JWSL-3W1通讯协议分析与测试

JWSL-3W1通讯协议符合MODBUS(16进制方式),采取的是主机查询,变送器应答的主从方式。

对于查询温湿度数据的命令以及变送器的应答格式如表4所示(注:CRCH为CRC校验高字节,CRCL为CRC校验低字节)。

表4 JWSL-3W1通讯指令发送与应答格式

应答数据中,数据H(高位字节)和数据L(低位字节)为各自对应的当前温湿度值,且上传数据需除十。如湿度上传16进制0311,对应十进制0785,表示78.5%。

485网络输出的传感器JWSL-3W1地址设置为01,波特率设置为9600bps。对于JWSL-3W1型号的参数设置方法,如:地址、波特率,详见该产品说明书。

通过串口调试助手对地址为01的温湿度传感器进行测试,在完成必要的硬件连线并串口调试程序中进行相关参数设置,然后输入:010*********C40B。串口调试程序返回应答数据为01030400C7028C4B0B,则温度对应值为00C7,等于十进制数值199,表示温度为19.9℃;湿度对应值为028C,等于十进制数值652,表示湿度为65.2%。

4.3 分布式监测系统功能的程序实现

实现对485网络中的分布式模块(或传感器)数据的查询,关键查询命令的发送、应答数据的接收和解析,以及查询命令的集成。

4.3.1查询命令发送的程序实现

分析I-7017和JWSL-3W1的通讯协议可知:分布式模块I-7017的查询命令是字符串类型,而JWSL-3W1的查询指令是字节方式。字符串方式查询和字节方式查询在VB语法上略有不同,程序采取统一以字节形式发送查询指令,对于指令格式为字符串的I-7017采取了将字符串转换为字节格

式的语句,实现了一个Timer控件来控制统一格式的命令发送。

考虑到数据接收时需要判断所接收数据的来源,故在发送程序中加入了对查询命令的标识符:全局变量flagReceive以及flagDisplay,以此来标识模块I-7017以及通道号和485网络输出传感器JWSL-3W1。查询命令的发送程序流程图如图7所示。

图7 查询命令的发送流程图

其源代码如函数senddata1以及senddata所示。其中,Senddata1为计算机向JWSL-3W1发送查询指令,直接以字节形式发送;senddata2为计算机向I-7017发送查询指令,其字符串格式需要转换为ASCII码,以字节形式发送。

Function senddata1(comm As MSComm, sendcmd As String, Flag As Integer) As String

'发送查询命令至JWSL-3W1,查询485网络输出的传感器信号输出

Dim sendcount As Integer

Dim sendtext As String

Dim sendbyte() As Byte

sendtext = sendcmd

flagReceive = False '标识为485网络输出传感器查询命令

flagDisplay = Flag '标识为传感器编号

'判断要发送的命令最后两位是否小于2,如果小于则在倒数第二位加“0”

If Len(Trim(Right(sendtext, 2))) < 2 Then

sendtext = Left(sendtext, Len(sendtext) - 1) & "0" & Right(sendtext, 1)

End If

ReDim sendbyte(0 To (Len(sendtext) / 2 - 1)) '重新定义发送字节的长度

For sendcount = 0 To Len(sendtext) / 2 - 1 '以每个字节两位16进制数的方式发送查询命令sendbyte(sendcount) = Val("&H" & Mid(sendtext, sendcount * 2 + 1, 2))

Next sendcount

comm.InBufferCount = 0

comm.Output = sendbyte

End Function

Function senddata2(comm As MSComm, senddata As String, Flag As Integer) As String

'发送查询命令至I-7017,查询模拟输出的传感器电压输出

Dim sendcount As Integer

Dim sendtext As String

Dim sendbyte() As Byte

sendtext = senddata

flagReceive = True '标识为模拟电压输出传感器查询

flagDisplay = Flag '标识为传感器编号,为senddata2参数之一sendbyte = StrConv(sendtext & Chr(13), vbFromUnicode) '字符串转换为ASCII码,字节方式发送comm.Output = sendbyte

End Function

4.3.2数据接收与解析的程序实现

由于数据接收缓冲区的数据来源来自I-7017的0通道、1通道以及JWSL-3W1,所以根据查询命令的标识(全局变量flagReceive以及flagDisplay)对缓冲区的数据进行判断,针对数据的来源分别进行处理、解析与显示,其数据接收与解析流程图如图8所示。

图8 数据接收与解析流程图

参照2.3节的OnComm事件的函数形式,数据接收与解析的源代码如函数MSComm1_OnComm 所示。

Private Sub MSComm1_OnComm()

Dim getlen As Integer

Dim getbyte() As Byte

Dim receive As String

Dim i As Integer

Dim buf As String

Dim myColor1, myColor2

Select Case https://www.doczj.com/doc/d74389913.html,mEvent

Case comEvReceive '触发接收事件

If flagReceive = True And flagDisplay = 2 Then

'判断来自模拟电压传感器的I-7017通道0

getbyte = MSComm1.Input '接收输入缓冲区数据

For i = LBound(getbyte) To UBound(getbyte)

receive = receive + Chr(V al("&H" & (Hex(getbyte(i)))))

'把接收到的数据处理为字符串

Next i

Label19.Caption = Format(CStr(Val(Mid(receive, 3, 6)) * 10), "0.0000")

'解析数据并格式化显示

List2.AddItem (receive)

List2.Selected(List2.ListCount - 1) = True

ElseIf flagReceive = True And flagDisplay = 3 Then

'数据来自模拟电压传感器的I-7017通道0

getbyte = MSComm1.Input

For i = LBound(getbyte) To UBound(getbyte)

receive = receive + Chr(V al("&H" & (Hex(getbyte(i)))))

'把接收到的数据处理为字符串

Next i

List3.AddItem (receive)

List3.Selected(List3.ListCount - 1) = True

Label20.Caption = Format(CStr(Val(Mid(receive, 3, 6)) * 20), "0.0000")

'解析数据并格式化显示

ElseIf flagReceive = False And flagDisplay = 1 Then

'数据来自485网络输出传感器JWSL-3W1

getlen = MSComm1.InBufferCount '得到输入数据长度

getbyte = MSComm1.Input '接收缓冲区数据

For i = 0 To getlen - 1 '把数据处理转换为字符串

receive = Trim(receive) & IIf(Len(Hex$(getbyte(i))) > 1, Hex$(getbyte(i)), "0" & Hex$(getbyte(i)))

Next i

CountSum = CountSum + 1

If CountSum >= 1000000 Then CountSum = 1

'解析数据并格式化显示

Label13.Caption = Format(CStr(Val("&H" & Mid(receive, 7, 4)) / 10), "0.0000")

Label14.Caption = Format(CStr(Val("&H" & Mid(receive, 11, 4)) / 10), "0.0000")

List1.AddItem (receive)

List1.Selected(List1.ListCount - 1) = True

'趋势图绘制

Picture1.DrawStyle = 1

Picture1.DrawWidth = 2

If X1 <= 1000 Then

Picture1.PSet (X1, Val("&H" & Mid(receive, 7, 4)) / 10), IIf(Val("&H" & Mid(receive, 7, 4)) / 10 > 40, vbRed, &H8000&)

Picture1.PSet (X1, Val("&H" & Mid(receive, 11, 4)) / 10), IIf(Val("&H" & Mid(receive, 11, 4)) / 10 > 70, vbRed, vbBlue)

X1 = X1 + 2

Else: X1 = 0

Picture1.Refresh

End If

End If

End Select

End Sub

4.3.3查询命令集成与监测功能实现

实现对多点参数的实时监测,可通过不断对I-7017的通道0、通道1以及JWSL-3W1发送查询命令来实现。MSComm控件的参数应预先进行设置(一般在Form_Load的函数中完成初始化)。关键代码如下:

With MSComm1

.InputMode = comInputModeBinary '以二进制形式传输

.RThreshold = 9 '接收到9个字节则触发接收事件OnComm

.Settings = "9600,n,8,1"

集成前文的指令查询命令,并在某查询命令发送出去后作适当延时,即可实现数据的实时接收与显示。启用Timer控件,并在函数Timer1_Timer()中集成查询命令即可。

源代码如下:

Private Sub Timer1_Timer()

Call senddata1(MSComm1, Text1.Text, 1) '发送查询指令到JWSL-W1

TimeDelay (50) '延时50ms等待数据传送完毕

Call senddata2(MSComm1, Text2.Text, 2) '发送查询指令到I-7017,查询通道0数据

TimeDelay (50)

Call senddata2(MSComm1, Text3.Text, 3) '发送查询指令到I-7017,查询通道1数据

TimeDelay (50)

End Sub

按照上述思想,在Visual Basic中编写相应界面程序,可使之实现基于该分布式监测网络的监测功能。其程序运行界面如图9所示。

图9 分布式监测程序运行界面

5结束语

上述是基于VB语言的分布式监测系统网络组建以及测试程序的实现方法。通过测试,该实验平台能够实现三点实时监测功能,即:通过一个串口通信口轮回发送对分布式模块和485网络输出传感器的查询命令,完成所接收数据的接收、解析与实时显示。

程序编写采用了模块化设计的思想,这使得程序有着较好的扩展性,在实际监测中,如需要增加各类传感器数量和相应的分布式模块,只需要增加相应的发送、接收和解析模块即可实现对更多点的实时监测功能(必要时可将senddata1、senddata2优化集成为发送函数senddata,不同的查询命令由同一个函数发出)。此外,JWSL-3W1通讯协议中提供了CRC校验,分布式模块中也提供了CheckSum校验方式,可针对相关协议编写校验程序,实现系统链路出错自检功能。

参考文献:

[1]范逸之,陈立元.Visual Basic与RS-232串行通信控制.清华大学出版社,2005.94~110,327~338

[2]范逸之.Visual Basic与分布式监控系统——RS-232/485串行通信.清华大学出版社

[3]北京昆仑海岸传感技术中心.JWSL-3系列经济型温湿度变送器说明及通讯协议

[4]泓格科技股份有限公司.I-7012/7012D/7012F/7012FD,I-7014D,I-7017/17F用户手册

[5]明日科技高春艳等.Visual Basic开发技术大全.人民邮电出版社,2007,711~723

相关主题
文本预览
相关文档 最新文档