打印

未入门,有段代码请大家帮我看看

[复制链接]
1664|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
andyding|  楼主 | 2009-2-11 14:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
vb.net 2005
    Public Function send_data_1(ByVal tempture As Int16) As Int16
        Dim y0, y1 As Byte
        Dim i As Integer
        y1 = (tempture * 10) Mod 256
        y0 = ((tempture * 10) / 256)
        Dim f(0) As Byte
        Dim g(0) As Byte
        f(0) = y1
        g(0) = y0
        Dim a, b As String
        a = ""
        b = ""
        If Not CType(f(0), Byte).ToString = 0 Then
            a &= System.Text.Encoding.Default.GetString(f, 0, 1)
        End If
        If Not CType(g(0), Byte).ToString = 0 Then
            b &= System.Text.Encoding.Default.GetString(g, 0, 1)
        End If
        SerialPort1.Write("Y")   标志位
        For i = 1 To 6 Step 1
            SerialPort1.Write(a)
            SerialPort1.Write(b)
        Next
    End Function
这是一段通过串口向下位机发送温度的程序,问题是有的温度发不对,仔细查看发现y1 = (tempture * 10) Mod 256 大于127后就发不下去,请大家帮帮我,百度了好几天都没结果

相关帖子

沙发
xwj| | 2009-2-11 14:56 | 只看该作者

不能以字符串方式输出,而应该以字节方式输出。这样写:

SerialPort1.Write (a,1,1)
SerialPort1.Write (b,1,1)



补充说明下:
你这样写
        For i = 1 To 6 Step 1
            SerialPort1.Write(a)
            SerialPort1.Write(b)
        Next
由于只有一个参数,所以是以字符串方式发送,而字符串方式发送是有很多字符发不出去的(VB就是这样的),因为有的数值是格式字符,有的又是ASCII范围外的字符。


所以应该带3个参数,以字节方式发送。
字节方式发送的话就会不做任何数值判断老老实实原样发出去啦

使用特权

评论回复
板凳
xwj| | 2009-2-11 15:01 | 只看该作者

VB2005串口通讯 vb6的MSCOMM串口通讯[转]

VB2005串口通讯 vb6的MSCOMM串口通讯

VB2005串口通讯
VB2005自带了一个串口通讯的控件SerialPort,该控件类似于VB6.0的串口Mscomm,但又有一定区别。
下面是对它们的一个比较:
1.串口的打开/关闭
VB6.0串口打开是MSComm1.PortOpen =True,VB2005则直接调用SerialPort1.Open
VB6.0串口关闭是MSComm1.PortOpen= False,VB2005则直接调用SerialPort1.Close
2.参数的设置对比
VB串口设置可以单独设置,也可以通过其Setting属性设置如:MSComm1.Settings = "9600,n,8,2"
而VB2005的串口属性只能分别设置,如:
端口:SerialPort1.PortName
波特率:SerialPort1.BaudRate
数据位长度:SerialPort1.DataBit 
奇偶校验:SerialPort1.Parity
停止位:SerialPort1.StopBits
3.向串行端口输出缓冲区写数据
VB6.0向串口写数据是MSComm1.Output方法,其传递的是字符串或数据的起始地址
VB2005向串口写数据是通过SerialPort1.Write方法,该方法有三种方式:
(1).直接输出字符串,该方式只有一个参数,string,如:SerialPort1.Write SendString    
这里面SendString是一个字符串
(2).以字节方式输出,这种方式有三个参数:
第一个参数是要输出的字节数据的起始地址
第二个参数是从字节数据的第几个开始
第三个参数是要发送的字节个数
例如:SerialPort1.Write (SendByte,1,10)就是指把字节数组的SendByte的第1到第10个字节发送到输出缓冲区

(3).以字符方式输出,这种方式也有三个参数:
第一个参数是要输出的字符数据的起始地址
第二个参数是从字符数据的第几个开始
第三个参数是要发送的字符个数
例如:SerialPort1.Write (SendChar,1,10)就是指把字符数组的SendByte的第1到第10个字符发送到输出缓冲区
4.从串行端口输入缓冲区读数据
VB6.0从串口读数据是MSComm1.Input方法,其返回的是字符串或一个一维数据
VB2005从串口读数据是通过SerialPort1.Read方法,该方法有二种方式:
(1).以字节方式读出,这种方式有三个参数:
第一个参数buffer,是将输入写入到其中的字节数组
第二个参数offset,缓冲区数组中开始读出的偏移量,对于从头读的数据,应将其设为1
第三个参数count,要读取的字节数,如果读当前缓冲区所有数据,则可用其属性SerialPort1.BytesToRead作为参数传递
这里面SerialPort1.BytesToRead就是所接收的个数
例如:SerialPort1.Read (ReadByte,1,10)就是指把缓冲区的第1到第10个字节读到ReadByte字节数组中
(2).以字节方式读出,这种方式有三个参数:
第一个参数buffer,是将输入写入到其中的字符数组
第二个参数offset,缓冲区数组中开始读出的偏移量,对于从头读的数据,应将其设为1
第三个参数count,要读取的字节数,如果读当前缓冲区所有数据,则可用其属性SerialPort1.BytesToRead作为参数传递
这里面SerialPort1.BytesToRead就是所接收的个数
例如:SerialPort1.Read (ReadChar,1,10)就是指把缓冲区的第1到第10个字节读到ReadChar字符数组中
5.相关属性
(1).SerialPort1.DtrEnable 该值在串行通信过程中启用数据终端就绪 (DTR) 信号
在通讯时,请把该值置为1,否则读入的数据会丢失(原因尚未搞明白,可能跟硬件有关系吧)
(2).SerialPort1.RtsEnable 该值指示在串行通信中是否启用请求发送 (RTS) 信号
当然,还有其它属性,这里只对常用几个参数作了对比,其它参数请自行参考相关说明.
 

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

76

主题

789

帖子

2

粉丝