环境:
单片机,485接口接了一个485转网络的模块,模块有IP地址和端口号。
普通计算机
两者使用网线相连。 现在,能够直接使用winsock连接到模块,而且工作正常,但是,发送数据很麻烦
使用如下方式: winsock1.senddata &H55
winsock1.senddata &HAA
winsock1.senddata &H1
.
.
. 一位一位的送数据,系统能正常工作,可是很麻烦。 请教达人:
如何把“55AA010101010101”这样的字符串,把55,AA,01,01转换为一位一位的发送出去?
单片机,485接口接了一个485转网络的模块,模块有IP地址和端口号。
普通计算机
两者使用网线相连。 现在,能够直接使用winsock连接到模块,而且工作正常,但是,发送数据很麻烦
使用如下方式: winsock1.senddata &H55
winsock1.senddata &HAA
winsock1.senddata &H1
.
.
. 一位一位的送数据,系统能正常工作,可是很麻烦。 请教达人:
如何把“55AA010101010101”这样的字符串,把55,AA,01,01转换为一位一位的发送出去?
我是这样写的
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)
然后发送这个数组
通讯的协议是&H的 55AA0101 ....另外,如果是比较低的档次的片子,呵呵,用数组会丢失数据的,因为在55AA处有一个判断
很麻烦,很讨厌...
winsock1.senddata hex(85)
那边怎么也收不到我要的&H55阿
通讯的协议双方确认没有问题
应该是没有问题的最好检查一下你的通讯协议是否正确
这样就可以
winsock1.senddata &H55
winsock1.senddata &HAA
winsock1.senddata &H1
.
.
.
KissApple(夜凉如水) 兄弟的方法,发出去,单片接不到阿
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
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
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)
485转网口无非是将TCP或UDP转成串口数据,所以数据的接收完全要看单片机串口接收缓存是否够大,第二个就要看单片机串口中断程序的处理方法是否合理。
很久没有玩单片机了,我只能给你这些参考消息。----------------------------------
还有,我直接
winsock1.senddata hex(85)
那边怎么也收不到我要的&H55阿
------------------------------------
兄弟,Hex函数返回的是一个字符串啊,
Hex(85)=55,'实际上“55”对应的内存数据为2字节数组,即{&H35,&H35}做和硬件直接相关的程序,必须要对数据在内存中的组成很清楚。
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