C++ builder中关于RS485转Socket通信传输的问题! ( 积分: 100 )

  • 主题发起人 主题发起人 icehackit
  • 开始时间 开始时间
I

icehackit

Unregistered / Unconfirmed
GUEST, unregistred user!
偶写一电梯监控程序,使用MOXA的硬件转接口将电梯的485接口转成标准socket接口,以便与计算机通信,但通信时发现使用SendText("DO11153")请求命令不能接受(电梯响应会发送运行状态数据,格式为十六进制字符),而发送SendText("?S")则可以,返回的是类似的字符(可能是unicode编码,我对如何转换这个不太清楚).而使用vb:
Dim SendStr(0 To 4) As Byte
Dim i As Integer

SendStr(0) = &HD0
SendStr(1) = &H1
SendStr(2) = &H1
SendStr(3) = &H1
SendStr(4) = &H53

If socketsend.State = 7 Then
socketsend.SendData SendStr
Dim c As Integer
For c = 0 To 4
MsgBox (SendStr(c))
Next c
Else
MsgBox ("通讯链路不正常")
End If
则可以返回正常的相应数据(十六进制),不知SendText()与SendData发送的数据具体什么差异,可能是编码问题,请教高手.
我做了如下测试:
vb写的客户端与C++ Builder写的服务端通信:
vb客户端发送以上请求命令时服务端接受到的为:?S
服务段发给vb客户端的正常字符在客户端均以ASCII值形式显示,而发送?S给vb客户端则显示:DO11153
请教在才C++ BUILDER如何解决以上问题!!!! 
 
偶写一电梯监控程序,使用MOXA的硬件转接口将电梯的485接口转成标准socket接口,以便与计算机通信,但通信时发现使用SendText("DO11153")请求命令不能接受(电梯响应会发送运行状态数据,格式为十六进制字符),而发送SendText("?S")则可以,返回的是类似的字符(可能是unicode编码,我对如何转换这个不太清楚).而使用vb:
Dim SendStr(0 To 4) As Byte
Dim i As Integer

SendStr(0) = &HD0
SendStr(1) = &H1
SendStr(2) = &H1
SendStr(3) = &H1
SendStr(4) = &H53

If socketsend.State = 7 Then
socketsend.SendData SendStr
Dim c As Integer
For c = 0 To 4
MsgBox (SendStr(c))
Next c
Else
MsgBox ("通讯链路不正常")
End If
则可以返回正常的相应数据(十六进制),不知SendText()与SendData发送的数据具体什么差异,可能是编码问题,请教高手.
我做了如下测试:
vb写的客户端与C++ Builder写的服务端通信:
vb客户端发送以上请求命令时服务端接受到的为:?S
服务段发给vb客户端的正常字符在客户端均以ASCII值形式显示,而发送?S给vb客户端则显示:DO11153
请教在才C++ BUILDER如何解决以上问题!!!! 
 
1. 这是个很简单的问题: 学习编程要多了解一些计算机的数据表达方式;
2. 看你做事很认真: 问题和详细资料都列出来了, 这也是要解决问题的一个重要因素,
有很多朋友提问题本身就有问题, 让人无法回答;
3. 你的设备要求的接收到的命令数据是(0xD0,0x01,0x01,0x01,0x53)一共5个字节的数据,
但如果你用SendText('D011153') 则发送了7个字节(字符)的数据, 而且不正确;
4. 多了解一些字节、二进制、十六进制、ASCII码等方面的知识, 也要多做一些练习,例如:
SendText('D011153'), 实际发送了(0x48,0x30,0x31,0x31,0x31,0x35,0x33), 而并不是
应该正确发送的(0xD0,0x01,0x01,0x01,0x53);
5. c++ builder解决这个问题很简单, 不用再说了;
 
天河流星兄弟说的不错,进制方面的知识很重要,我也了解。只是我刚转到BCB下写程序,只了解一些基本的进制函数转换,对于我所提的问题,我分析了解决的办法也只在于一两个函数,这就是所谓的难者不会,会者不难啊,就是因为不了解通过那个函数来转换,才产生了以上问题,所以过来请教有经验的朋友..................................
 
问题已解决
还是自己多思考好啊!!!!
使用SendBuf()即可解决!
 
多人接受答案了。
 
后退
顶部