本站网址: YippeeSoft开心软件
0714 VS2005 VB.NET SerialPort
一个朋友:
我在你的blog中看到你所说的如何操作serialport的文章的.
我现在想用serialport来操作串口的短信modem的,但是我就没法取得里面的值的.
我的做法是这样的:
我在窗口中加入一个serialport的控件(不是在代码中定义的),然后在commandbutton的click事件中加入代码:
SerialPort1.PortName = "COM4" SerialPort1.BaudRate = 9600 SerialPort1.DataBits = 8 SerialPort1.Parity = IO.Ports.Parity.None SerialPort1.StopBits = IO.Ports.StopBits.One
If (SerialPort1.IsOpen() = True) Then SerialPort1.Close() End If
SerialPort1.Open()
SerialPort1.Write("AT+CMGR = 1")
Dim buffer As Char() Dim offset As Integer Dim count As Integer Dim returnvalue As Integer
offset = 1 count = 100 buffer = ""
returnvalue = SerialPort1.Read(buffer, offset, count)
这样的话, 系统都是提示在读取serialport1.read的时候出现"Offset and length were out of bounds for the array or count is greater than the number of elements from index to the end of the source collection."的提示的.
按照你的文章的做法是这样的:
Dim sp As New System.IO.Ports.SerialPort
sp.PortName = "com4" sp.Open() sp.Write("AT+CMGR=1") Dim STR_INPUT As String STR_INPUT = sp.ReadLine() Label2.Text = STR_INPUT
sp.Close()
不过就在readline的时候,界面就不动了, 就死掉了.
请问我应该如何操作serialport的啊?我需要的的是把at指令发出去,读取返回值就可以了.
我也曾经用mscomm控件来做的, 但是就是没法读出值来的啊.下面是代码的:
If (AxMSComm1.PortOpen) Then AxMSComm1.PortOpen = False End If
AxMSComm1.PortOpen = True
AxMSComm1.InBufferCount = 0 AxMSComm1.OutBufferCount = 0
AxMSComm1.Output = "AT+CMGR = 1" & vbCr
\’AxMSComm1.InputMode = MSCommLib.InputModeConstants.comInputModeText \’AxMSComm1.InputLen = 0
\’Dim buf As VariantType Dim buf As String Dim i As Integer i = 0
Dim testbuf As VariantType
testbuf = AxMSComm1.Input
Do Thread.Sleep(100)
buf = buf & AxMSComm1.Input i = i + 1 Loop Until InStr(buf, "OK" & vbCrLf)
AxMSComm1.PortOpen = False
buf总是为空的, 变量i的值是可以慢慢增大的?请问该如何解决的?
从你的描述来看
我不知道你波特率什么的有没有设置正确?
你不要用AT+CMGR=1
直接用AT试一试
另外你好像没有加回车换行符号
该setting都是对的啊. "9600,n,8,1"的.
现在问题是否是我的思路的问题的?
我的思路是这样的:
1.对于mscomm控件的, 先open端口,再设置axmscomm.output= "at"&vbcr,接下来就可以用string的变量来读取axmscomm.input中的数据了.
但是我这样读的话, axmscomm.input中是没有数据的啊?
2.对应serialport控件的, 先open端口的,再SerialPort1.Write("AT" + vbCr),接下来是用哪个method来读取命令的返回值的?
SerialPort1.PortName = "COM3"
SerialPort1.BaudRate = 9600
SerialPort1.DataBits = 8
SerialPort1.Parity = IO.Ports.Parity.None
SerialPort1.StopBits = IO.Ports.StopBits.One
If (SerialPort1.IsOpen() = True) Then
SerialPort1.Close()
End If
SerialPort1.Open()
SerialPort1.Write("AT" + vbCr)
\’returnvalue = SerialPort1.Read(buffer, offset, count)
Dim ss As String
ss = SerialPort1.ReadLine()
SerialPort1.Close()
可以返回 AT
原创文章,转载请注明: 转载自YippeeSoft开心软件
本文链接地址: 0714 VS2005 VB.NET SerialPort
历史博文
- c# socket - 2009
- 20080403 XPlanner orm - 2008
- 20070726 datareader dataset sql2005 sql2000 - 2007
- 1221 SIP Phones - 2005
评论