SerialPort控件真烂,基本收不到数据!

51Crack 2008-12-03 04:31:17
VB6中用的PDQComm串口控件,完全正常!
现在是NEC的交换机,其它的交换机也做过,正常!
现在用2005新程序,SerialPort控件,程序启动后第1次偶尔能收到,以后基本收不到数据!
VB中参数如下:

With Frm_PMS
On Error Resume Next
.Comm2.CommPort = 1
.Comm2.Emulation = 0
.Comm2.Settings = "1200, E, 7, 1"
.Comm2.PortOpen = True
.Comm2.ForeColor = 11
.Comm2.BackColor = 1
.Comm2.AutoProcess = 1
.Comm2.RTSEnable = True
End With


.net中参数如下:

Port1.PortName = "COM1"
Port1.BaudRate = 1200
Port1.DataBits = 7
Port1.StopBits = 1
Port1.Parity = System.IO.Ports.Parity.Even
Port1.Handshake = Handshake.RequestToSendXOnXOff
Port1.RtsEnable = True
Port1.ReadTimeout = 1000
Port1.ReadBufferSize = 4096
Port1.WriteBufferSize = 4096
Port1.WriteTimeout = 1000
'Handshake和RtsEnable用不用都不行!


谁有经验,分析一下?
...全文
1262 30 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
aerocarrier 2009-06-20
  • 打赏
  • 举报
回复
发现SERIALPORT不能接收数据问题是因为串口命名不对造成的。
fengyinhong 2009-04-24
  • 打赏
  • 举报
回复
一直都没有找到好的例子,哎
katrina1234 2009-01-07
  • 打赏
  • 举报
回复
能不能提供一个有关发送和接收的程序啊?
kok09 2008-12-22
  • 打赏
  • 举报
回复
持续学习中
slimfeng 2008-12-04
  • 打赏
  • 举报
回复
改改超时时间试试
tootto 2008-12-04
  • 打赏
  • 举报
回复
还有几点可以确认一下:

如果是先写命令到串口设备,写完命令把serial port关掉,然后重新初始化再打开接收。

或者换个串口试试。
tootto 2008-12-04
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 51Crack 的回复:]
引用 13 楼 tootto 的回复:
Have a look on my above code that how to receive data in byte format.

你是直接port.ReadByte,没有数据时会不会出错?是不是也要先判断BytesToRead>0 ?
[/Quote]

不会出错。有时Serial port的配置参数不正确也能收到数据,不会抛出异常。不过对照设备数据协议的话,会发现数据都是错的。比如是一串0或255。

串口通信的话基本单位都是byte,只能设备发送一个字节,程序接收一个。至于接收数据是否正确则根据数据协议在程序中判断。

不要加字符处理的内容如string, read line之类的。等数据接收完毕后再根据需要转换,如ascii或unicode。如需实时转换可根据数据协议保证一个完整的包接收完毕后再开一个线程来做转换。


现在你的程序是什么情况了?


bbbbbb888888 2008-12-04
  • 打赏
  • 举报
回复
mark学习.
51Crack 2008-12-04
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 535cheng110 的回复:]
SerialPort控件很好用,
估计你没有设置下面的参数,

serialPort1.NewLine = "\r";
[/Quote]
这个参数是什么意思?
我的通讯数据中没有用到换行!
535cheng110 2008-12-04
  • 打赏
  • 举报
回复
SerialPort控件很好用,
估计你没有设置下面的参数,

serialPort1.NewLine = "\r";
sxmonsy 2008-12-04
  • 打赏
  • 举报
回复
没用过,友情UP
51Crack 2008-12-04
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 tootto 的回复:]
Have a look on my above code that how to receive data in byte format.
[/Quote]
你是直接port.ReadByte,没有数据时会不会出错?是不是也要先判断BytesToRead>0 ?
tootto 2008-12-04
  • 打赏
  • 举报
回复
Have a look on my above code that how to receive data in byte format.
tootto 2008-12-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 null1 的回复:]
我前段时间也做了个通信的软件,发现使用Write或writeLine也不能正常,后采用byte[]的数据类型进行发送就好,我考虑可能是在Vs2005下string的编码问题Uncode,而不是ASCII的原因吧,建议你试试!
[/Quote]

Yes. Data sent to, or received from serial port suppose to be type of bytes

Try 'byte[]' instead of 'string', and cast type after data is received.
null1 2008-12-04
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 51Crack 的回复:]
引用 19 楼 tootto 的回复:
引用 14 楼 51Crack 的回复:
引用 13 楼 tootto 的回复:
Have a look on my above code that how to receive data in byte format.

你是直接port.ReadByte,没有数据时会不会出错?是不是也要先判断BytesToRead>0 ?


不会出错。有时Serial port的配置参数不正确也能收到数据,不会抛出异常。不过对照设备数据协议的话,会发现数据都是错的。比如是一串0或255。

串口通信的话基本单…
[/Quote]

看这里我感觉你的发送命令和接受数据是在一起的,中间只是延时了一秒.如果是这样就不对了,接收应该单独处理,最好是一个单独的线程.
串口在发送命令到接收数据之间的时间是有延时,而且还无法确定,与系统的环境有关.
null1 2008-12-04
  • 打赏
  • 举报
回复
我前段时间也做了个通信的软件,发现使用Write或writeLine也不能正常,后采用byte[]的数据类型进行发送就好,我考虑可能是在Vs2005下string的编码问题Uncode,而不是ASCII的原因吧,建议你试试!
lljfl 2008-12-04
  • 打赏
  • 举报
回复
SerialPort 真的有问题,1:存在效率太低的问题,如果你设置成57600,然后每20ms发一包数据,会占用很多资源.
还有一个问题就是与串口通讯时有时收不到数据,(笔记本存在的机率最大,台式机要好些)经分析是serialport在设置参数时有些问题
51Crack 2008-12-04
  • 打赏
  • 举报
回复
现在失败的几率是1%,还不够完美!
51Crack 2008-12-04
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 tootto 的回复:]
引用 14 楼 51Crack 的回复:
引用 13 楼 tootto 的回复:
Have a look on my above code that how to receive data in byte format.

你是直接port.ReadByte,没有数据时会不会出错?是不是也要先判断BytesToRead>0 ?


不会出错。有时Serial port的配置参数不正确也能收到数据,不会抛出异常。不过对照设备数据协议的话,会发现数据都是错的。比如是一串0或255。

串口通信的话基本单位都是byte,只能设备发送一个…
[/Quote]
现在的情况和昨天刚好相反!
发送(以字符发送,用字节效果一样)之后,延时一秒,有时程序启动后前两次失败,以后都成功;有时都成功!
接收用ReadChar,ReadByte都不行,现在用ReadExisting
加载更多回复(10)

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧