以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  串口数据传递问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=70937)

--  作者:jxc55
--  发布时间:2015/7/1 19:26:00
--  串口数据传递问题
串口数据传递,我在普通的串口调试工具上可以准确发送及接收数据(HEX)。
但是在FOXTABLE上,依据pdf帮助设置无效。
首先配置串口属性(波特率,校验。。。),设置后OPEN串口,串口打开正常。
第2 步,如何把HEX数据帧发送过去,以字符串还是字节?字节发送报错“编译错误,未声明名称E9”。
第3步,如果以字符串方式发送后,收不到反馈数据


请求专家能指导下,谢谢
[此贴子已经被作者于2015/7/1 19:27:16编辑过]

--  作者:大红袍
--  发布时间:2015/7/1 19:27:00
--  
 贴出你字节发送的代码。
--  作者:jxc55
--  发布时间:2015/7/1 20:27:00
--  
Dim Val() As Byte = New Byte() {68,00,21,13,00,80,13,68,01,02,44,E9,C7,16} 
Ports("COM1").Write(Val, 0, Val.Length)
s = Ports("COM1").ReadExisting()

--  作者:大红袍
--  发布时间:2015/7/1 20:31:00
--  
Dim Val() As Byte = New Byte() {&H68,&H00,&H21,&H13,&H00,&H80,&H13,&H68,&H01,&H02,&H44,&HE9,&HC7,&H16}
Ports("COM1").Write(Val, 0, Val.Length)

--  作者:jxc55
--  发布时间:2015/7/1 20:57:00
--  
Dim Val() As Byte = New Byte(){&H68,&H00,&H21,&H13,&H00,&H80,&H13,&H68,&H01,&H02,&H44,&HE9,&HC7,&H16}
Ports("COM1").Write(Val, 0, Val.Length)
Dim cnt As Integer = Ports("COM1").BytesToRead 
If cnt > 0 Then \'缓冲区是否有数据 
Dim Val(cnt - 1) As Byte 
Ports("COM1").Read(val,0,cnt) 
End If

用版主的语句,不报错,但在foxtable命令窗口中,没有返回数据
加了下面的语句又报错。
有没有办法,求指导

--  作者:大红袍
--  发布时间:2015/7/1 20:59:00
--  

 write之后不一定马上就能得到数据啊

 

接收字节

将DataReceived事件代码设置为:

 

Dim cnt As Integer = e.Port.BytesToRead
If
cnt > 0 Then \'缓冲区是否有数据
   
Dim Val(cnt - 1) As Byte
    e.Port.Read(val,
0,cnt)
End
If


--  作者:大红袍
--  发布时间:2015/7/1 21:01:00
--  

Dim Val() As Byte = New Byte(){&H68,&H00,&H21,&H13,&H00,&H80,&H13,&H68,&H01,&H02,&H44,&HE9,&HC7,&H16}
Ports("COM1").Write(Val, 0, Val.Length)

 

\'-----------------------------------------------------------


Dim cnt As Integer = Ports("COM1").BytesToRead
If cnt > 0 Then \'缓冲区是否有数据
    Dim rval(cnt - 1) As Byte
    Ports("COM1").Read(rval,0,cnt)
End If


--  作者:jxc55
--  发布时间:2015/7/1 21:10:00
--  
Ports.Add("COM1") 
With Ports("COM1") 
.Close() 
.Parity = Parity.Even 
.Handshake = Handshake.None
.Encoding = Encoding.Default
.StopBits = StopBits.One 
.BaudRate = 1200 
.DataBits = 8 
.ReadBufferSize() = 4096 
.WriteBufferSize() = 2048 
.Open 
End With

Dim Val() As Byte = New Byte(){&H68,&H00,&H21,&H13,&H00,&H80,&H13,&H68,&H01,&H02,&H44,&HE9,&HC7,&H16}
Ports("COM1").Write(Val, 0, Val.Length)
Dim cnt As Integer = e.Port.BytesToRead
If cnt > 0 Then \'缓冲区是否有数据
    Dim Val(cnt - 1) As Byte
    e.Port.Read(val,0,cnt)
End If


在命令窗口显示:编译错误,e是private。因此它在此上下文中不可访问。错误代码:Dim cnt As Integer = e.Port.BytesToRead

--  作者:大红袍
--  发布时间:2015/7/1 21:12:00
--  

Ports.Add("COM1")
With Ports("COM1")
.Close()
.Parity = Parity.Even
.Handshake = Handshake.None
.Encoding = Encoding.Default
.StopBits = StopBits.One
.BaudRate = 1200
.DataBits = 8
.ReadBufferSize() = 4096
.WriteBufferSize() = 2048
.Open
End With


Dim Val() As Byte = New Byte(){&H68,&H00,&H21,&H13,&H00,&H80,&H13,&H68,&H01,&H02,&H44,&HE9,&HC7,&H16}
Ports("COM1").Write(Val, 0, Val.Length)
Dim cnt As Integer = Ports("COM1").BytesToRead
If cnt > 0 Then \'缓冲区是否有数据
    Dim rval(cnt - 1) As Byte
    Ports("COM1").Read(rval,0,cnt)
End If


--  作者:jxc55
--  发布时间:2015/7/1 22:03:00
--  
通过etheral抓包可以抓到正确的回应报文了,命令窗口没有收到回应数据。估计回应的:
Dim cnt As Integer = Ports("COM1").BytesToRead
If cnt > 0 Then \'缓冲区是否有数据
    Dim rval(cnt - 1) As Byte
    Ports("COM1").Read(rval,0,cnt)
End If
还是有问题。