高分求救!如何对串行口进行读写操作?

xuefan 2002-10-02 03:27:31
在vb中应调用什么控件和函数实现对com口操作?
在线等待中
...全文
34 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjmking 2002-10-15
  • 打赏
  • 举报
回复
怎么又来这儿了?发我Email我给你程序
qyyayong 2002-10-13
  • 打赏
  • 举报
回复
http://hellovb.myetang.com/
Select Case MSComm1.CommEvent
Case 2
Text1.Text = ""
Dim i
For i = 1 To 30000
DoEvents
Next i
Text1.Text = MSComm1.Input
end select
crystal_heart 2002-10-12
  • 打赏
  • 举报
回复
up
xuefan 2002-10-10
  • 打赏
  • 举报
回复
继续up
急呀
xuefan 2002-10-09
  • 打赏
  • 举报
回复
UP
xuefan 2002-10-09
  • 打赏
  • 举报
回复
我只用2磁道。
读2磁道:主机给读写器:ESC ] (1B 5D)
读写器返回主机:
成功:ESC s 磁道2数据? FS (1B 73 磁道2数据 3F 1C)
失败:ESC r q (1B 72 71)
写2磁道:主机给读写器:ESC t 磁道2数据 GS ESC \ (1B 74 磁道2数据 1D 1B 5C)
读写器返回主机:ESC r p/q(p-成功,q-失败)

必须要先发出一条读或写指令才能对卡读写,ESC--ESC键,FS--某一键值,上面已经把对应的码写出了,但总是调不通。
怀疑是哪里设置不对:
我设置INPUTEMODE=COMINPUTMODEBINARY
HANDSHAKING=COMXONXOFF
INPUTLEN=0
EOFENABLE=TRUE
RTSENABLE=TRUE
STHRESHOLD=1
RTHRESHOLD=1
SETTINGS="9600,N,8,1"
1.我认为应该收发一个字节就触发ONCOMM事件,但是发出读写信号后没有触发,我还得调用ONCOMM。错误在那里?
2.设成二进制后,是不是收发的数据应该每一个字节触发一次ONCOMM呢,还是全收发完才触发一次ONCOMM?
请高手指点。
请回贴或发信给我,可以另开贴子给分,人在出差中,又没有msdn,又没有写卡器函数,全靠大家帮忙了!
我的信箱:xuefan@etang.com
sail_about 2002-10-03
  • 打赏
  • 举报
回复
余下看短消息
eehinjor 2002-10-03
  • 打赏
  • 举报
回复
MScomm
我有个这个的经历,一定要控制好时间,他的事件和方法参考有关资料都不难

但一定要把握好时间问题,有必要加延时
sail_about 2002-10-03
  • 打赏
  • 举报
回复
EOFEnable 属性


EOFEnable 属性确定在输入过程中 MSComm 控件是否寻找文件结尾 (EOF) 字符。如果找到 EOF 字符,将停止输入并激活 OnComm 事件,此时 CommEvent 属性设置为 comEvEOF,

语法

object.EOFEnable [ = value ]

EOFEnable 属性语法包括下列部分:

部分 描述
object 对象表达式,其值是“应用于”列表中的对象。
value 布尔表达式,确定当找到 EOF 字符时,OnComm 事件是否被激活,如“设置值”中所描述。


设置值

value 的设置值时:

设置值 描述
True 当 EOF 字符找到时 OnComm 事件被激活。
False (缺省)当 EOF 字符找到时 OnComm 事件不被激活。


说明

当 EOFEnable 属性设置为 False,OnComm 控件将不在输入流中寻找 EOF 字符。

Handshaking 属性


设置并返回硬件握手协议。

语法

object.Handshaking [ = value ]

Handshaking 属性的语法包括下列部分:

部分 描述
object 对象表达式,其值是“应用于”列表中的对象。
value 整型表达式,说明握手约定,如“设置值”中所描述。


设置值

value 设置值是:

设置值 值 描述
comNone 0 (缺省)没有握手。
comXOnXOff 1 (XON/XOFF) 握手。
comRTS 2 RTS/CTS (Request To Send/Clear To Send) 握手。
comRTSXOnXOff 3 Request To Send 和 XON/XOFF 握手皆可。


说明

Handshaking 是指内部通讯协议,通过该协议,数据从硬件端口传输到接收缓冲区。当一个数据字符到达串行端口,通讯设备就把它移到接收缓冲区以使程序可以读它。如果没有接受缓冲区,程序需要直接从硬件读取每一个字符,这很可能会造成数据丢失,因为字符到达的速度可以非常快。

握手协议保证在缓冲区过载时数据不会丢失,缓冲区过载为数据到达端口太快而使通讯设备来不及将它移到接收缓冲区。

数据类型

Integer
InBufferCount 属性


返回接收缓冲区中等待的字符数。该属性在设计时无效。

语法

object.InBufferCount[ = value ]

InBufferCount 属性的语法包括下列部分:

部分 描述
object 对象表达式,其值是“应用于”列表中的对象。
value 整型表达式,说明在接收缓冲区中等待的字符数。


说明

InBufferCount 是指调制解调器已接收,并在接收缓冲区等待被取走的字符数。可以把 InBufferCount 属性设置为 0 来清除接收缓冲区。

注意 不要把该属性与 InBufferSize 属性混淆。InBufferSize 属性返回整个接收缓冲区的大小。

数据类型

Integer
InBufferSize 属性


设置并返回接收缓冲区的字节数。

语法

object.InBufferSize[ = value ]

InBufferSize 属性语法包括下列部分:

部分 描述
object 对象表达式,其值是“应用于”列表中的对象。
value 整型表达式,说明接收缓冲区的字节数。


说明

InBufferSize 是指整个接收缓冲区的大小。缺省值是 1024 字节。不要将该属性与 InBufferCount 属性混淆,InBufferCount 属性返回的是当前在接收缓冲区中等待的字符数。

注意 接收缓冲区越大则应用程序可用内存越小。但若接受缓冲区太小,若不使用握手协议, 就可能有溢出的危险。一般的规律是,首先设置一个 1024 字节的缓冲区。如果出现溢出错误,则通过增加缓冲区的大小来控制应用程序的传输速率

数据类型

Integer

Input 属性


返回并删除接收缓冲区中的数据流。该属性在设计时无效,在运行时为只读。

语法

object.Input

Input 属性语法包括下列部分:

部分 描述
object 对象表达式,其值是“应用于”列表中的对象。


说明

InputLen 属性确定被 Input 属性读取的字符数。设置 InputLen 为 0,则 Input 属性读取缓冲区中全部的内容。

InputMode 属性确定用 Input 属性读取的数据类型。如果设置 InputMode 为 comInputModeText,Input 属性通过一个 Variant 返回文本数据。如果设置 InputMode 为 comInputModeBinary,Input 属性通过一个 Variant .返回一二进制数据的数组。

数据类型

Variant



sail_about 2002-10-03
  • 打赏
  • 举报
回复
CommPort 属性


设置并返回通讯端口号。

语法

object.CommPort[ = value ]

CommPort 属性语法包括下列部分:

部分 描述
object 对象表达式,其值是“应用于”列表中的对象。
value 一整型值,说明端口号。


说明

在设计时,value 可以设置成从 1 到 16 的任何数(缺省值为 1)。但是如果用 PortOpen 属性打开一个并不存在的端口时,MSComm 控件会产生错误 68(设备无效)。

警告 必须在打开端口之前设置 CommPort 属性。

数据类型

Integer

CTSHolding 属性


确定是否可通过查询 Clear To Send (CTS) 线的状态发送数据。Clear To Send 是调制解调器发送到相联计算机的信号,指示传输可以进行。该属性在设计时无效,在运行时为只读。

语法

object.CTSHolding

CTSHolding 属性语法包括下列部分:

部分 描述
object 对象表达式,其值是“应用于”列表中的对象。


下表列出 Mscomm 控件的 CTSHolding 属性设置值:

设置 描述
True Clear To Send 线为高电平。
False Clear To Send 线为低电平。


说明

如果 Clear To Send 线为低电平 (CTSHolding = False) 并且超时时,MSComm 控件设置 CommEvent 属性为 comEventCTSTO (Clear To Send Timeout) 并产生 OnComm 事件。

Clear To Send 线用于 RTS/CTS (Request To Send/Clear To Send) 硬件握手。如果需要确定 Clear To Send 线的状态,CTSHolding 属性给出一种手工查询的方法。

详细信息 有关握手协议,请参阅 Handshaking 属性。

数据类型

Boolean



DSRHolding 属性


确定 Data Set Ready (DSR) 线的状态。Data Set Ready 信号由调制解调器发送到相连计算机,指示作好操作准备。该属性在设计时无效,在运行时为只读。

语法

object.DSRHolding

object 所在处表示对象表达式,其值是“应用于”列表中的对象。

DSRHolding 属性返回以下值:

值 描述
True Data Set Ready 线高
False Data Set Ready 线低


说明

当 Data Set Ready 线为高电平 (DSRHolding = True) 且超时时,MSComm 控件设置 CommEvent 属性为 comEventDSRTO(数据准备超时)并产生 OnComm 事件。

当为 Data Terminal Equipment (DTE) 机器写 Data Set Ready/Data Terminal Ready 握手例程时该属性是十分有用的。

数据类型

Boolean

DTREnable 属性


确定在通讯时是否使 Data Terminal Ready (DTR) 线有效。Data Terminal Ready 是计算机发送到调制解调器的信号,指示计算机在等待接受传输。

语法

object.DTREnable[ = value ]

DTREnable 属性的语法由下列部分组成:

部分 描述
object 对象表达式,其值是“应用于”列表中的对象。
value 布尔表达式,说明是否使 Data Terminal Ready (DTR) 线有效,如“设置值”中所描述。


设置值

value 的设置值是:

设置值 描述
True 使 Data Terminal Ready 线有效
False (缺省)使 Data Terminal Ready 线无效


说明

当 DTREnable 设置为 True,当端口被打开时 Data Terminal Ready 线设置为高电平(开),当端口被关闭时 Data Terminal Ready 线设置为低电平(关)。当 DTREnable 设置为 False,Data Terminal Ready 线始终保持为低电平。

注意 在很多情况下,把 Data Terminal Ready 线设置为低用来挂断电话。

数据类型

Boolean

sail_about 2002-10-03
  • 打赏
  • 举报
回复
Break 属性


设置或清除中断信号的状态。该属性在设计时无效。

语法

objec.Break [ = value]

Break 属性语法包括下列部分:

部分 描述
object 对象表达式,其值是“应用于”列表中的对象。
value 布尔表达式,说明中断信号是否设置,如“设置值”中所描述。


设置值

value 的设置值为:

设置值 描述
True 设置中断信号状态
False 清除中断信号状态


说明

当设置为 True,Break 属性发送一个中断信号。该中断信号挂起字符传输,并置传输线为中断状态直到把 Break 属性设置为 False。

一般,仅当使用的通讯设备要求设置一个中断信号时,才设置一个短时的中断状态。

数据类型

Boolean

CDHolding 属性


通过查询 Carrier Detect (CD) 线的状态确定当前是否有传输。Carrier Detect 是从调制解调器发送到相联计算机的一个信号,指示调制解调器正在联机。该属性在设计时无效,在运行时为只读。

语法

object.CDHolding

CDHolding 属性包括下列部分:

部分 描述
object 对象表达式,其值是“应用于”列表中的对象。


设置值

CDHolding 属性的设置值为:

设置 描述
True Carrier Detect 线为高电平
False Carrier Detect 线为低电平


说明

注意当 Carrier Detect 线为高电平 (CDHolding = True) 且超时时,MSComm 控件设置CommEvent 属性为 comEventCDTO(Carrier Detect 超时错误),并产生 OnComm 事件。

注意 在主机应用程序中捕获一个丢失的传输是特别重要的,例如一个公告板,因为呼叫者可以随时挂起(放弃传输)。

Carrier Detect 也被称为 Receive Line Signal Detect (RLSD)。

数据类型

Boolean


CommEvent 属性


返回最近的通讯事件或错误。该属性在设计时无效,在运行时为只读。

语法

object.CommEvent

CommEvent 属性语法包括下列部分:

部分 描述
object 对象表达式,其值是“应用于”列表中的对象。


说明

只要有通讯错误或事件发生时都会产生 OnComm 事件,CommEvent 属性存有该错误或事件的数值代码。要确定引发 OnComm 事件的确切的错误或事件,请参阅 CommEvent 属性。

CommEvent 属性返回下列值之一来表示不同的通讯错误或事件。这些常数可以在该控件的对象库中找到。通讯错误包括下列设置值:

常数 值 描述
comEventBreak 1001 接收到一个中断信号。
comEventCTSTO 1002 Clear To Send 超时。在系统规定时间内传输一个字符时,Clear To Send 线为低电平。
comEventDSRTO 1003 Data Set Ready 超时。在系统规定时间内传输一个字符时,Data Set Ready 线为低电平。
comEventFrame 1004 帧错误。硬件检测到一帧错误。
comEventOverrun 1006 端口超速。没有在下一个字符到达之前从硬件读取字符,该字符丢失。
comEventCDTO 1007 载波检测超时。在系统规定时间内传输一个字符时,Carrier Detect 线为低电平。Carrier Detect 也称为 Receive Line Signal Detect (RLSD)。
comEventRxOver 1008 接受缓冲区溢出。接收缓冲区没有空间。
comEventRxParity 1009 奇偶校验。硬件检测到奇偶校验错误
comEventTxFull 1010 传输缓冲区已满。传输字符时传输缓冲区已满
comEventDCB 1011 检索端口的设备控制块 (DCB) 时的意外错误


通讯事件包括下列设置值:

常数 值 描述
comEvSend 1 在传输缓冲区中有比 Sthreshold 数少的字符。
comEvReceive 2 收到 Rthreshold 个字符。该事件将持续产生直到用 Input 属性从接收缓冲区中删除数据。
comEvCTS 3 Clear To Send 线的状态发生变化。
comEvDSR 4 Data Set Ready 线的状态发生变化。该事件只在 DST 从 1 变到 0 时才发生。
comEvCD 5 Carrier Detect 线的状态发生变化。
comEvRing 6 检测到振铃信号。一些 UART(通用异步接收— 传输)可能不支持该事件。
comEvEOF 7 收到文件结束(ASCII 字符为 26)字符。


数据类型

Integer

CommID 属性


返回一个说明通讯设备的句柄。该属性在设计时无效,在运行时为只读。

语法

object.CommID

CommID 属性语法包括下列部分:

部分 描述
object 对象表达式,其值是“应用于”列表中的对象。


说明

该值与 Windows API CreateFile 函数返回的值一致。在 Windows API 中调用任何通讯例程时使用该值。

数据类型

Long

xuefan 2002-10-02
  • 打赏
  • 举报
回复
up
xuefan 2002-10-02
  • 打赏
  • 举报
回复
我是要对写卡器进行读写,可以提供详细点的帮助吗?
拜一拜先!
sail_about 2002-10-02
  • 打赏
  • 举报
回复
详细参阅MSDN
MSComm 控件


MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。


说明

MSComm 控件提供下列两种处理通讯的方式:

事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如,在 Carrier Detect (CD) 或 Request To Send (RTS) 线上一个字符到达或一个变化发生时。在这些情况下,可以利用 MSComm 控件的 OnComm 事件捕获并处理这些通讯事件。OnComm 事件还可以检查和处理通讯错误。所有通讯事件和通讯错误的列表,参阅 CommEvent 属性。


在程序的每个关键功能之后,可以通过检查 CommEvent 属性的值来查询事件和错误。如果应用程序较小,并且是自保持的,这种方法可能是更可取的。例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“确定”响应。
每个使用的 MSComm 控件对应着一个串行端口。如果应用程序需要访问多个串行端口,必须使用多个 MSComm 控件。可以在 Windows“控制面板”中改变端口地址和中断地址。

尽管 MSComm 控件有很多重要的属性,但首先必须熟悉几个属性。

属性 描述
CommPort 设置并返回通讯端口号。
Settings 以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。
PortOpen 设置并返回通讯端口的状态。也可以打开和关闭端口。
Input 从接收缓冲区返回和删除字符。
Output 向传输缓冲区写一个字符串。

OnComm 事件

无论何时当 CommEvent 属性的值变化时,就产生 OnComm 事件,标志发生了一个通讯事件或一个错误。

语法

Private Sub object_OnComm ()

OnComm 事件语法包括下列部分:

部分 描述
object 对象表达式,其值是“应用于”列表中的对象。


说明

CommEvent 属性包含实际错误或产生 OnComm 事件的数码。注意,设置 Rthreshold 或 Sthreshold 属性为 0,分别使捕获 comEvReceive 和 comEvSend 事件无效。

OnComm 事件示例
下例说明如何处理通讯错误和事件。可以在相关的 Case 语句之后插入代码来处理特定的错误或事件。

Private Sub MSComm_OnComm ()
Select Case MSComm1.CommEvent
' Handle each event or error by placing
' code below each case statement

' 错误
Case comEventBreak ' 收到 Break。
Case comEventCDTO ' CD (RLSD) 超时。
Case comEventCTSTO ' CTS Timeout。
Case comEventDSRTO ' DSR Timeout。
Case comEventFrame ' Framing Error
Case comEventOverrun '数据丢失。
Case comEventRxOver'接收缓冲区溢出。
Case comEventRxParity' Parity 错误。
Case comEventTxFull '传输缓冲区已满。
Case comEventDCB '获取 DCB] 时意外错误

' 事件
Case comEvCD ' CD 线状态变化。
Case comEvCTS ' CTS 线状态变化。
Case comEvDSR ' DSR 线状态变化。
Case comEvRing ' Ring Indicator 变化。
Case comEvReceive ' 收到 RThreshold # of
chars.
Case comEvSend ' 传输缓冲区有 Sthreshold 个字符 '
'
Case comEvEof ' 输入数据流中发现 EOF 字符
'
End Select
End Sub

MSComm 控件示例
下面这个简单的例子演示了用调制解调器进行基本的串行通讯:

Private Sub Form_Load ()
' 保存输入子串的缓冲区
Dim Instring As String
' 使用 COM1。
MSComm1.CommPort = 1
' 9600 波特,无奇偶校验,8 位数据,一个停止位。
MSComm1.Settings = "9600,N,8,1"
' 当输入占用时,
' 告诉控件读入整个缓冲区。
MSComm1.InputLen = 0
' 打开端口。
MSComm1.PortOpen = True
' 将 attention 命令送到调制解调器。
MSComm1.Output = "ATV1Q0" & Chr$(13) ' 确保
' 调制解调器以"OK"响应。
' 等待数据返回到串行端口。
Do
DoEvents
Buffer$ = Buffer$ & MSComm1.Input
Loop Until InStr(Buffer$, "OK" & vbCRLF)
' 从串行端口读 "OK" 响应。

' 关闭串行端口。
MSComm1.PortOpen = False
End Sub

注意 MSComm 控件可以采用轮询或事件驱动的方法从端口获取数据。这个简单的例子使用了轮询方法。关于事件驱动方法的例子请参阅 OnComm 事件的帮助。


7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧