一个485串口的读写操作可不可以同时进行?

时间:2023-01-27 08:36:11

一个485串口的读写操作可不可以同时进行?

即:
任务甲使用2脚:发送数据;
与此同时:
任务乙使用3脚:接收数据; 

可以吗?

21 个解决方案

#1


没人愿意回答吗?

#2


个人认为:不可以。
首先,windows是不会让两个进程同时占用同一个com口的。
其次,可能是这样,发送数据,在底层上不单单是发送,可能还需要握手、同步等双向通讯。

#3


哦,有理

#4


半双工的吧,485??
我也是菜鸟,请指教

#5


是半双工

#6


在window下com是当作一个文件打开的,只能有一个进程控制,但如果你自己写一个类似代理的进程来管理com,那么你其他的任务可以通过这个代理实现com的共享。

#7


谢谢!

#8


485是半工的,不行,422可以。进程不行,线程就不可以吗?当然可以,俺做过,422可以,全工。

#9


我的意思就是同一个进程的不同线程可不可以同时对485串口进行读写?
线程甲占用2脚,线程乙占用3脚。

#10


采用同一进程的不同线成同时对485读写,其实也并不是完整意义上的全双工,因为毕竟是线程是分时工作的,当然,如果你是用的双CPU系统,那又另当别论。

你指的同时工作,是指一个线程读,一个线程写么?这是完全可以做到的。

如果你是指两个线程都要既要读又要写,这可能会存在不同步的问题,应该适当的加入一些同步控制。

#11


<<你指的同时工作,是指一个线程读,一个线程写么?这是完全可以做到的。

正是这样的,而且非阻塞通信不怎么占CPU呀。

#12


485完成不了“同时”的读写,但是422就可以了。
关于线程的问题,其实CPU分时的周期很快,而IO设备毕竟是慢得多,而且慢的不是一点半点,也就是说,多个线程对一个IO设备操作完全是真正的物理上的并行。
另外,对422写时,一般要先给个电平,然后再写,读的时候也是,先识别到一个电平,再读,它们持续的时间很长,线程就是循环若干次,都可以啊。
也就是说:在422下,能实现物理上真正的全双工。

#13


在485下就不行了,因为协议规程不允许,即使看起来象,也是“象”,不是物理上的并发操作。

#14


是不是232就可以?

#15


232全双工,485半双工

#16


232、422可以,485不可以。

#17


我认为youwill() 说得有道理,能不能再仔细的把想法说一说呢。

#18


232全双工,485半双工 ,收发数据要设置DTR握手

#19


很有收获!
看样子,最好是加个232-485 转换了 

#20


我觉得上次我对问题理解有误,如果问题是从硬件层面谈,那么如果物理协议上485是半双工,收发是不能同时的。从软件层面,如果如我上次提到的作一个软件串口代理,那么软件上是可以不用考虑同时收发会冲突的问题了,代理程序来考虑收发的调度。

#21


嗯,很有收获。

#1


没人愿意回答吗?

#2


个人认为:不可以。
首先,windows是不会让两个进程同时占用同一个com口的。
其次,可能是这样,发送数据,在底层上不单单是发送,可能还需要握手、同步等双向通讯。

#3


哦,有理

#4


半双工的吧,485??
我也是菜鸟,请指教

#5


是半双工

#6


在window下com是当作一个文件打开的,只能有一个进程控制,但如果你自己写一个类似代理的进程来管理com,那么你其他的任务可以通过这个代理实现com的共享。

#7


谢谢!

#8


485是半工的,不行,422可以。进程不行,线程就不可以吗?当然可以,俺做过,422可以,全工。

#9


我的意思就是同一个进程的不同线程可不可以同时对485串口进行读写?
线程甲占用2脚,线程乙占用3脚。

#10


采用同一进程的不同线成同时对485读写,其实也并不是完整意义上的全双工,因为毕竟是线程是分时工作的,当然,如果你是用的双CPU系统,那又另当别论。

你指的同时工作,是指一个线程读,一个线程写么?这是完全可以做到的。

如果你是指两个线程都要既要读又要写,这可能会存在不同步的问题,应该适当的加入一些同步控制。

#11


<<你指的同时工作,是指一个线程读,一个线程写么?这是完全可以做到的。

正是这样的,而且非阻塞通信不怎么占CPU呀。

#12


485完成不了“同时”的读写,但是422就可以了。
关于线程的问题,其实CPU分时的周期很快,而IO设备毕竟是慢得多,而且慢的不是一点半点,也就是说,多个线程对一个IO设备操作完全是真正的物理上的并行。
另外,对422写时,一般要先给个电平,然后再写,读的时候也是,先识别到一个电平,再读,它们持续的时间很长,线程就是循环若干次,都可以啊。
也就是说:在422下,能实现物理上真正的全双工。

#13


在485下就不行了,因为协议规程不允许,即使看起来象,也是“象”,不是物理上的并发操作。

#14


是不是232就可以?

#15


232全双工,485半双工

#16


232、422可以,485不可以。

#17


我认为youwill() 说得有道理,能不能再仔细的把想法说一说呢。

#18


232全双工,485半双工 ,收发数据要设置DTR握手

#19


很有收获!
看样子,最好是加个232-485 转换了 

#20


我觉得上次我对问题理解有误,如果问题是从硬件层面谈,那么如果物理协议上485是半双工,收发是不能同时的。从软件层面,如果如我上次提到的作一个软件串口代理,那么软件上是可以不用考虑同时收发会冲突的问题了,代理程序来考虑收发的调度。

#21


嗯,很有收获。