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

历史博文

标签:, , , ,