C# 串口通信相关[请指点]

powerchuangwai 2009-11-24 11:27:30
请高手指点,在此谢过。。

有三个问题:

一,现在RS232串口通常使用9帧连接线,最简化的连接是3根连接线的方式,即地线连接(引脚5到引脚5的连接),TxD到RxD(引脚3到引脚2的连接),RxD到TxD(引脚2到引脚3的连接)。

这样一来,没有RTS,CTS信号,如何实现握手机制,及传输协议,以正确传输数据。

二,RS232的引脚3只能发数据,引脚2只能收数据吗?引脚3能否收数据,同理,引脚2能否发数据。从电气特性上如何解释??

三,C#中使用控件serialPort可以方便地实现串口通信。在串口开启后,
发送端:
serialport.Write(stringTrans)
接收端:
serialport_DataReceived(object sender, serialDataReceivedEventArgs e)
{
//接收数据
}
上述代码就可以实现串口通信,这种方式安全吗?能否增加代码以提高串口通信可靠性???
...全文
306 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
wapit 2009-12-05
  • 打赏
  • 举报
回复
这个得马克
龙宜坡 2009-12-04
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 v68v6 的回复:]
顶宜坡兄

[/Quote]

回顶!
china1976 2009-12-01
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 powerchuangwai 的回复:]
引用 13 楼 wt_sanlian 的回复:
serialport_DataReceived 是由SerialPort组件中的一个线程产生的,

所以在事件响应中用
textbox.Text = serialport.ReadExisting();
是不安全的。


既然不安全,可能出现的问题是什么呀??
你说的那个同步方法是安全的,对吗??
[/Quote]
菜鸟盼望给个示例呀!
V68V6 2009-11-30
  • 打赏
  • 举报
回复
顶宜坡兄
龙宜坡 2009-11-30
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 tomexou 的回复:]
Q1:
若無硬體的流量控制時,可以使用軟體式的Handshaking
即Hankshaking = xONxOFF屬性即可
但前提是收發雙方都是支援XonXoff流量控制才行(即都是.NET組件)。

Q2:
腳位定義需著重在標準,雙方能溝通為主。

Q3:
用事件觸發收資料,並用loop pooling方式好用。
[/Quote]

貌似很强的一说!赞一个先
tomexou 2009-11-30
  • 打赏
  • 举报
回复
Q1:
若無硬體的流量控制時,可以使用軟體式的Handshaking
即Hankshaking = xONxOFF屬性即可
但前提是收發雙方都是支援XonXoff流量控制才行(即都是.NET組件)。

Q2:
腳位定義需著重在標準,雙方能溝通為主。

Q3:
用事件觸發收資料,並用loop pooling方式好用。
suntory976806 2009-11-30
  • 打赏
  • 举报
回复
顶14楼
学习
ylwqhr 2009-11-28
  • 打赏
  • 举报
回复
学习了
powerchuangwai 2009-11-27
  • 打赏
  • 举报
回复
???
powerchuangwai 2009-11-26
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wt_sanlian 的回复:]
serialport_DataReceived 是由SerialPort组件中的一个线程产生的,

所以在事件响应中用
textbox.Text = serialport.ReadExisting();
是不安全的。

[/Quote]
既然不安全,可能出现的问题是什么呀??
你说的那个同步方法是安全的,对吗??
sxmonsy 2009-11-26
  • 打赏
  • 举报
回复
这个可以顶
lljfl 2009-11-26
  • 打赏
  • 举报
回复
RS232是全双工的,2是接收数据,3发送数据.5接地
一般来说,在进行串口通讯时,都要自己增加校验,以保证数据的正确性,如果特别重要的数据还需要进行回复,以保证数据安全到达,也就是自己定义通讯协议.
wt_sanlian 2009-11-26
  • 打赏
  • 举报
回复
serialport_DataReceived 是由SerialPort组件中的一个线程产生的,

所以在事件响应中用
textbox.Text = serialport.ReadExisting();
是不安全的。
kennie_190602169 2009-11-25
  • 打赏
  • 举报
回复
帮你顶
nic7968 2009-11-25
  • 打赏
  • 举报
回复
2脚同3脚连接一起,就成回路了, 可以从pc机发出数据经串口,又从串口回到pc。

使用windows 的api函数实现串口通信比较灵活,但有点复杂。
zuoming120 2009-11-25
  • 打赏
  • 举报
回复
d
powerchuangwai 2009-11-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wt_sanlian 的回复:]
现在RS232通讯都用2,3,5脚。没有什么问题

serialport组件也很稳定,但要注意serialport_DataReceived事件不在主线程中,若要在主线程中处理串口数据,需要进行同步.
[/Quote]
采用下面代码:
serialport_DataReceived(object sender, serialDataReceivedEventArgs e)
{
textBox.Text = serialport.ReadExisting();
}
是可以接收到数据的。。。
不需要通过线程来解决呀。
powerchuangwai 2009-11-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wt_sanlian 的回复:]
现在RS232通讯都用2,3,5脚。没有什么问题

serialport组件也很稳定,但要注意serialport_DataReceived事件不在主线程中,若要在主线程中处理串口数据,需要进行同步.
[/Quote]

如何进行同步???
ycagri 2009-11-25
  • 打赏
  • 举报
回复
虽然有9针,但通常情况下都只有3个引脚,其实接地也可以没有,采用N,8,1方式打开串口,就可以通信了
liaoyukun111 2009-11-25
  • 打赏
  • 举报
回复
UP
加载更多回复(5)

111,120

社区成员

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

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

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