环境:
  单片机,485接口接了一个485转网络的模块,模块有IP地址和端口号。
  普通计算机
 
  两者使用网线相连。  现在,能够直接使用winsock连接到模块,而且工作正常,但是,发送数据很麻烦
  使用如下方式:  winsock1.senddata &H55
  winsock1.senddata &HAA  
  winsock1.senddata &H1
  .
  .
  .  一位一位的送数据,系统能正常工作,可是很麻烦。  请教达人:
  
  如何把“55AA010101010101”这样的字符串,把55,AA,01,01转换为一位一位的发送出去?

解决方案 »

  1.   

    为什么要一位一位的送?
    我是这样写的
    Private Sub txtsend_Change()
    winsock1.SendData txtsend.Text
    End Sub或者这样,举个例子
    BytesToSend(1) =  Mid(send, 4, 2)
    BytesToSend(2) = Mid(send, 7, 2)
    BytesToSend(3) =  Mid(send, 10, 2)
    BytesToSend(4) =Mid(send, 13, 2)
    BytesToSend(5) = Mid(send, 16, 2)
    BytesToSend(6) = Mid(send, 19, 2)
    BytesToSend(7) = Mid(send, 22, 2)
    然后发送这个数组
      

  2.   

    单片机接收,如果我们直接发送文本过去,那边收到的是乱七八糟的东西,
    通讯的协议是&H的 55AA0101  ....另外,如果是比较低的档次的片子,呵呵,用数组会丢失数据的,因为在55AA处有一个判断
    很麻烦,很讨厌...
      

  3.   

    还有,我直接
    winsock1.senddata hex(85)
    那边怎么也收不到我要的&H55阿
      

  4.   

    用Byte数组发,不可以吗
    通讯的协议双方确认没有问题
    应该是没有问题的最好检查一下你的通讯协议是否正确
      

  5.   

    可是不行啊
    这样就可以
      winsock1.senddata &H55
      winsock1.senddata &HAA  
      winsock1.senddata &H1
      .
      .
      .
    KissApple(夜凉如水) 兄弟的方法,发出去,单片接不到阿
      

  6.   

    VB上用MSCOMM控件进行RS-232通讯
          3__2
          |  |
    。 。 。 。 。
     。 。 。 。
    代码如下:
    Private Sub cmdExit_Click()
        Comm1.PortOpen = False
        End
    End SubPrivate Sub cmdReceive_Click()
        Dim buf$
        buf = Trim(Comm1.Input)
        If Len(buf) = 0 Then
        txtReceive.Text = "Empty"
        Else
        txtReceive.Text = buf
        End If
    End SubPrivate Sub cmdSend_Click()
        Comm1.Output = Trim(txtSend.Text)
    End SubPrivate Sub Comm1_OnComm()End SubPrivate Sub Form_Load()
        Comm1.PortOpen = True
    End Sub
      

  7.   

    两种方法:
    1 使用 Byte 数组,在另一贴中给了代码。
    2 使用一个 Byte 变量,循环将字符串转换赋值给它,并每次一字节发送。Dim strData As String, bytChr As Byte, i As IntegerstrData = "55AA010101010101"
    For i = 0 To Len(strData)\2 - 1
        bytChr = Val("&H" & Mid(strData, i * 2 + 1, 2))
        winsock.senddata bytChr
    Next i
      

  8.   

    利用winsock1.senddata + 字符串数据。把你的55,hh等转换成字符串型。
    dim send as string 
    send =55AA010101010101
    winsock1.senddata "&H" & Mid(send, 1, 2)
    winsock1.senddata "&H" & Mid(send, 3, 2)
    winsock1.senddata "&H" & Mid(send, 5, 2)
      

  9.   

    上位机发送Byte数组是没有问题的,楼主的问题关键要看单片机那边。
    485转网口无非是将TCP或UDP转成串口数据,所以数据的接收完全要看单片机串口接收缓存是否够大,第二个就要看单片机串口中断程序的处理方法是否合理。
    很久没有玩单片机了,我只能给你这些参考消息。----------------------------------
    还有,我直接
    winsock1.senddata hex(85)
    那边怎么也收不到我要的&H55阿
    ------------------------------------
    兄弟,Hex函数返回的是一个字符串啊,
    Hex(85)=55,'实际上“55”对应的内存数据为2字节数组,即{&H35,&H35}做和硬件直接相关的程序,必须要对数据在内存中的组成很清楚。
      

  10.   

    问题可能出在转换模块上,也就是说它的速度跟不上你连续发送。试试:
    Public Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
    Dim strData As String, bytChr As Byte, i As IntegerstrData = "55AA010101010101"
    For i = 0 To Len(strData)\2 - 1
        bytChr = Val("&H" & Mid(strData, i * 2 + 1, 2))
        winsock.senddata bytChr
        Sleep 10
    Next i