发新帖我要提问
12
返回列表
打印
[技术讨论]

与用户设备串口通讯产生问题

[复制链接]
楼主: cjseng
手机看帖
扫描二维码
随时随地手机跟帖
21
cjseng|  楼主 | 2021-9-17 17:15 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
叶春勇 发表于 2021-9-17 17:10
还有双串口服务器转以太网,主机那边装一个虚拟串口。
A和B,都要转一手。出错概率就小一些。 ...

主机不是电脑,没法装虚拟串口啊

使用特权

评论回复
22
叶春勇| | 2021-9-17 18:09 | 只看该作者
还是要回到你的方案。这是一个硬件总线仲裁。
前面有高手说了a的数据到你这转一手。其实挺好。
串口空闲时是高电平,需要检测tx和rx同时,如果原来主机和a是一应一答,只有检测a。
在串口高电平一段时间内,把a离线。b开始发
如果a不是一应一答,a会自主发通讯,还是比较难搞,需要同时检测rx和tx都是高电平

使用特权

评论回复
23
cjseng|  楼主 | 2021-9-17 18:47 | 只看该作者
叶春勇 发表于 2021-9-17 18:09
还是要回到你的方案。这是一个硬件总线仲裁。
前面有高手说了a的数据到你这转一手。其实挺好。
串口空闲时 ...

不是一应一答,状态改变时,主机与从机都会主动发数据,接收方收到数据要应答。另外,从机每隔三秒要发一个心跳帧,主机收到心跳帧会有应答。
是全双工通讯,不是半双工。

使用特权

评论回复
24
叶春勇| | 2021-9-17 22:00 | 只看该作者
cjseng 发表于 2021-9-17 18:47
不是一应一答,状态改变时,主机与从机都会主动发数据,接收方收到数据要应答。另外,从机每隔三秒要发一 ...

目前来看,
1、B需要知道A和主机的通讯状态。
2、B有权拦截数据
3、直接切换232信号有干扰。就是切换A和B的TX信号
我想了一下:
1、主机RX和A的TX,B的TX是通的,不切换,信号冲突,物理层用485解决
2、主机和B的RX是通的。
3、主机和A的RX,通过max485的发送使能,接受使能由B控制,占用io。
4、A发送心跳帧,主机应答后,切断A的RX,主要看A对通讯超时如何处理。如果A心跳帧一直发的话就没辙。
5、B在3秒内完成通讯。把A的心跳和主机对A的应答当做令牌。期间静默。
6、与原方案,A和B的RX并联,TX切换,保证主机RX信号无干扰。
现在的方案是A和B的TX并联,RX切换。B是能了解通讯的状态的。
这个方法成功与否,主要看A对通讯超时的处理。

使用特权

评论回复
25
cjseng|  楼主 | 2021-9-17 22:50 | 只看该作者
叶春勇 发表于 2021-9-17 22:00
目前来看,
1、B需要知道A和主机的通讯状态。
2、B有权拦截数据

A每隔3秒发一次心跳帧,A检测到自身状态发生改变,立即发一帧“当前状态”帧。3秒一次心跳帧是固定的,其它帧是随机的。有别的帧发送,当前一次的心跳帧不发。

使用特权

评论回复
26
叶春勇| | 2021-9-17 23:50 | 只看该作者
a如果是面板加按钮之类的东西,一把干掉,你的b设备替代之。你是老手花了你两个月搞通讯,不值

使用特权

评论回复
27
cjseng|  楼主 | 2021-9-18 00:22 | 只看该作者
叶春勇 发表于 2021-9-17 23:50
a如果是面板加按钮之类的东西,一把干掉,你的b设备替代之。你是老手花了你两个月搞通讯,不值 ...

不行啊,客户要求保留A。

使用特权

评论回复
28
逍遥派掌门| | 2021-9-18 09:30 | 只看该作者
本帖最后由 逍遥派掌门 于 2021-9-18 09:32 编辑

B机增加判断A机是否在发送数据的硬件,避免A机、B机同时发送即可。
B机工作在A机的空闲时段。

使用特权

评论回复
评论
cjseng 2021-9-18 09:31 回复TA
对,下个版本就算这么做。 
29
xmar| | 2021-9-18 09:34 | 只看该作者
本帖最后由 xmar 于 2021-9-18 09:37 编辑


不需要继电器。A与PC的通信通过B电路内的单片机。B与PC的通信在A与PC通信间隙进行。

使用特权

评论回复
30
cjseng|  楼主 | 2021-9-18 10:01 | 只看该作者
本帖最后由 cjseng 于 2021-9-18 10:15 编辑
xmar 发表于 2021-9-18 09:34
不需要继电器。A与PC的通信通过B电路内的单片机。B与PC的通信在A与PC通信间隙进行。
...

说明一下,主机不是PC。
你这个方案正是我下一个版本要做的,如果客户还要下一批的话。第一个版本已经交货了。
一开始想用4串口的单片机,然鹅没买到,买到的是双串口的,因为B要跟无线数传通讯,占掉一个串口了。
我原先的方案是A、B是并列关系。今后改用用多串口方案,实际上是改成级联关系,B相当于一个中转的桥梁。B与主机及A通信,必要时,负责转发A与主机的通信,不需要A工作时,只接受A通信,不转发。其中主机TXD始终与A、B连接,A、B始终能收到主机数据。
这样做,能解决大部分问题,但主机本身的缺陷还是存在:不能处理异常数据。比如正常工作时,A或者B突然瞬间掉电,主机就会收到异常数据了。

A与B是互斥关系,不允许两个同时工作,当选择A时,B不能对主机发送数据;当选择B时,A不能对主机发送数据。所以,不存在A与主机通讯的间隙,B发送数据这种情况。逻辑上来讲,就是要用个开关切换,开关可以是继电器,也可以是软逻辑开关。



使用特权

评论回复
31
叶春勇| | 2021-9-18 11:41 | 只看该作者
级联最好了,这种双方都有权发的,比较难搞的。需要仲裁。
西门子的profibus,就是多主机,需要复杂的令牌环机制。
楼主告诉我们的经验,这里的客户的想法:
主机和A不想动,让B去解决。
实际上客户已经把控制权交给B。
不要被原主机迷惑,还把它当主机。现在B是主机了。
没有看清问题,容易影响报价。
感谢楼主分享经验。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则