標(biāo)題: 單片機(jī)多點(diǎn)通信 請教如何實(shí)現(xiàn)端口識別?主機(jī)識別從機(jī)連接自己的哪個(gè)接口 [打印本頁]

作者: fczxg    時(shí)間: 2023-1-3 06:00
標(biāo)題: 單片機(jī)多點(diǎn)通信 請教如何實(shí)現(xiàn)端口識別?主機(jī)識別從機(jī)連接自己的哪個(gè)接口
各位大神好,我想實(shí)現(xiàn)一個(gè)多點(diǎn)通信的需求,具體如圖:


主機(jī)要能識別從機(jī)連接自己的哪個(gè)接口,并將該信息記錄下來,現(xiàn)在的問題是怎樣識別自己的哪個(gè)端口連接著從機(jī),望各位大神不吝賜教!感謝。

無標(biāo)題.png (97.18 KB, 下載次數(shù): 74)

無標(biāo)題.png

作者: fczxg    時(shí)間: 2023-1-3 06:01
或者有沒有能夠?qū)崿F(xiàn)這種需求的芯片,能否推薦一下,不勝感激!
作者: cnos    時(shí)間: 2023-1-3 12:06
這個(gè)是協(xié)議問題
你先用中文把確認(rèn)過程寫下來,然后就很容易變成代碼。
作者: fczxg    時(shí)間: 2023-1-3 14:15
關(guān)鍵是怎么給485物理端口編號,當(dāng)從機(jī)插上主機(jī)的任意485口后,主機(jī)從哪里讀取端口編號信息呢?注意是主機(jī)讀取主機(jī)自己的485端口信息,不是讀取從機(jī)的標(biāo)識信息,我不需要知道我連了哪個(gè)從機(jī),我只要知道我哪個(gè)口連了從機(jī)就行
作者: fczxg    時(shí)間: 2023-1-3 14:20
協(xié)議解決不了物理端口編號的問題呀,主機(jī)他關(guān)心的是我的哪個(gè)端口連接了從機(jī),不用關(guān)心連接了哪個(gè)從機(jī)。如果只是標(biāo)識不同的從機(jī),那給從機(jī)編個(gè)地址就好了,現(xiàn)在是要給485端口編地址,485芯片也沒這功能呀
作者: fczxg    時(shí)間: 2023-1-3 14:31
cnos 發(fā)表于 2023-1-3 12:06
這個(gè)是協(xié)議問題
你先用中文把確認(rèn)過程寫下來,然后就很容易變成代碼。

協(xié)議解決不了主機(jī)485端口編號的問題呀,最多只能解決從機(jī)標(biāo)識問題,比如給從機(jī)編址,但我不關(guān)心從機(jī)的標(biāo)識,我關(guān)心的是主機(jī)的485端口號
作者: 名字不是重點(diǎn)    時(shí)間: 2023-1-3 15:06
fczxg 發(fā)表于 2023-1-3 14:31
協(xié)議解決不了主機(jī)485端口編號的問題呀,最多只能解決從機(jī)標(biāo)識問題,比如給從機(jī)編址,但我不關(guān)心從機(jī)的標(biāo) ...

協(xié)議做的事情多了去了。前提是你的協(xié)議夠強(qiáng)大、完善!
1、從機(jī)上電后不停發(fā)送某個(gè)信息字,比如“?”
2、主機(jī)遍歷所有端口,如果有端口收到“?”則來回應(yīng)“!”
3、從機(jī)收到主機(jī)發(fā)來的“!”表示聯(lián)機(jī)成功,不南發(fā)送“?”轉(zhuǎn)而發(fā)送從機(jī)的信息。
4、主機(jī)收到從機(jī)的信息,從地址池中取一個(gè)未被占用的地址發(fā)給從機(jī),
5、從機(jī)收到地址后,記錄并更新到本地。并回應(yīng)一個(gè)“!”
6、接下來就是各種操作了:

維持心跳:主機(jī)時(shí)不時(shí)發(fā)一個(gè)"?",詢問從機(jī)是否還在線,從機(jī)收到“?”后回應(yīng)“!”,表示還在線。
如果主機(jī)發(fā)出的“?”沒有回應(yīng)(超時(shí)),則說明從機(jī)已掉線,就把地址收回(置未占用態(tài)),然后等從機(jī)上線,把上邊的1-5再走一次流程。

希望能幫到你。。
作者: lkc8210    時(shí)間: 2023-1-3 15:09
STC89C52要加485芯片來轉(zhuǎn)換TTL信號吧?
8個(gè)485端口就要8個(gè)485芯片
芯片上有使能腳來控制
通信時(shí)每次只使能一個(gè)485芯片
有信號傳回,就是那個(gè)端口接上了從機(jī)

作者: maoizhou    時(shí)間: 2023-1-3 15:18
主機(jī)的8個(gè)接口是分別獨(dú)立的吧,主機(jī)通訊的時(shí)候用的哪個(gè)口有回應(yīng)就是接到的哪個(gè)端口
作者: fczxg    時(shí)間: 2023-1-3 15:55
名字不是重點(diǎn) 發(fā)表于 2023-1-3 15:06
協(xié)議做的事情多了去了。前提是你的協(xié)議夠強(qiáng)大、完善!
1、從機(jī)上電后不停發(fā)送某個(gè)信息字,比如“?”
2 ...

非常感謝,但是雖然兩邊都有地址了,問題是我怎么知道哪個(gè)地址對應(yīng)的我的1-8哪個(gè)485接口呢?
作者: fczxg    時(shí)間: 2023-1-3 15:58
lkc8210 發(fā)表于 2023-1-3 15:09
STC89C52要加485芯片來轉(zhuǎn)換TTL信號吧?
8個(gè)485端口就要8個(gè)485芯片
芯片上有使能腳來控制

是呀,可以UART只有一對引腳,關(guān)鍵是如果不對485芯片進(jìn)行標(biāo)識(編號),怎么識別是從哪個(gè)485芯片(不是從機(jī))接收的數(shù)據(jù)呢?
作者: fczxg    時(shí)間: 2023-1-3 15:59
lkc8210 發(fā)表于 2023-1-3 15:09
STC89C52要加485芯片來轉(zhuǎn)換TTL信號吧?
8個(gè)485端口就要8個(gè)485芯片
芯片上有使能腳來控制

問題的關(guān)鍵就是“有信號傳回,就是那個(gè)端口接上了從機(jī)”那個(gè)端口是哪個(gè)端口
作者: fczxg    時(shí)間: 2023-1-3 16:00
maoizhou 發(fā)表于 2023-1-3 15:18
主機(jī)的8個(gè)接口是分別獨(dú)立的吧,主機(jī)通訊的時(shí)候用的哪個(gè)口有回應(yīng)就是接到的哪個(gè)端口

那只能每個(gè)端口接一個(gè)LED,用眼睛去看啦,我想做到的是單片機(jī)自己識別是從哪個(gè)485端口收到的信息
作者: fczxg    時(shí)間: 2023-1-3 16:02
maoizhou 發(fā)表于 2023-1-3 15:18
主機(jī)的8個(gè)接口是分別獨(dú)立的吧,主機(jī)通訊的時(shí)候用的哪個(gè)口有回應(yīng)就是接到的哪個(gè)端口

是的呀,比如我用8個(gè)485芯片,但是51上的UART口只有一個(gè),單片機(jī)怎么通過這一個(gè)UART口區(qū)分不同的485芯片呢,485芯片又不能編程,沒法在485芯片里寫地址
作者: fczxg    時(shí)間: 2023-1-3 16:07
名字不是重點(diǎn) 發(fā)表于 2023-1-3 15:06
協(xié)議做的事情多了去了。前提是你的協(xié)議夠強(qiáng)大、完善!
1、從機(jī)上電后不停發(fā)送某個(gè)信息字,比如“?”
2 ...

非常感謝您,我說的“485端口編號”不是簡單地做端口區(qū)分,是固定的端口名稱(比如端口1就是0x01,端口255就是0xFF),如果只是解決通信問題,那封裝協(xié)議就能解決,但是要標(biāo)識物理接口,這個(gè)要怎么做?我的51上不可能有256個(gè)UART口呀,但是MAX487E又不能編程,沒法在芯片里燒一個(gè)地址進(jìn)去
作者: 人中狼    時(shí)間: 2023-1-3 16:10
樓主應(yīng)該先好好理解一下什么是485
作者: lhzw2001    時(shí)間: 2023-1-3 16:12
主機(jī)8個(gè)口,哪個(gè)口有數(shù)據(jù)回復(fù),不就知道從機(jī)接在哪個(gè)口嗎?
作者: primoliuyang    時(shí)間: 2023-1-3 16:19
UART走總線,從機(jī)編址即可
作者: 名字不是重點(diǎn)    時(shí)間: 2023-1-3 17:37
fczxg 發(fā)表于 2023-1-3 16:07
非常感謝您,我說的“485端口編號”不是簡單地做端口區(qū)分,是固定的端口名稱(比如端口1就是0x01,端口255 ...

能聯(lián)機(jī)了,就可以建表了,不管什么端口,都有它固定的ID(地址、標(biāo)識、片選、STB。。。。),就如我上貼所說:
比如“端口1與從機(jī)1發(fā)生關(guān)系了”,那么,你能操作端口1,說明你就能GET到端口1的ID,再把端口1與從機(jī)1關(guān)聯(lián)上不就OK了?
作者: 名字不是重點(diǎn)    時(shí)間: 2023-1-3 17:49
fczxg 發(fā)表于 2023-1-3 16:07
非常感謝您,我說的“485端口編號”不是簡單地做端口區(qū)分,是固定的端口名稱(比如端口1就是0x01,端口255 ...

一個(gè)MAX487E只能有一個(gè)485,你主機(jī)上有8個(gè)端口,就需要有8片487,8片IC你總不會所有IO都并聯(lián)接到MCU上吧?那怕各有一個(gè)IO是獨(dú)立的,不就可以區(qū)分8個(gè)485端口了?你這個(gè)獨(dú)立的IO就能看做是485 的ID。還有什么好糾結(jié)的?
我被你整懵了都....
作者: lkc8210    時(shí)間: 2023-1-3 20:56
fczxg 發(fā)表于 2023-1-3 15:58
是呀,可以UART只有一對引腳,關(guān)鍵是如果不對485芯片進(jìn)行標(biāo)識(編號),怎么識別是從哪個(gè)485芯片(不是從 ...

使能腳來控制
作者: coody_sz    時(shí)間: 2023-1-4 11:16
要解決端口硬件沖突、使用軟件器件識別協(xié)議。
作者: 人中狼    時(shí)間: 2023-1-4 12:41
樓主應(yīng)該還沒有做過有關(guān)485通訊的硬件設(shè)計(jì),拋開了硬件設(shè)計(jì)是沒法討論功能需求的
作者: 冰火風(fēng)輪    時(shí)間: 2023-1-4 13:01
fczxg 發(fā)表于 2023-1-3 16:00
那只能每個(gè)端口接一個(gè)LED,用眼睛去看啦,我想做到的是單片機(jī)自己識別是從哪個(gè)485端口收到的信息

LED換成光耦,單片機(jī)就能自己識別了
作者: fczxg    時(shí)間: 2023-1-5 02:30
lhzw2001 發(fā)表于 2023-1-3 16:12
主機(jī)8個(gè)口,哪個(gè)口有數(shù)據(jù)回復(fù),不就知道從機(jī)接在哪個(gè)口嗎?

人可以知道,比如通過看哪根線連接了哪個(gè)端口,485怎么能知道哪個(gè)芯片對應(yīng)哪個(gè)端口呢?485芯片不能編址。∧芫幹返氖菑臋C(jī),我不需要知道是哪個(gè)從機(jī)發(fā)給我的,我要知道是哪個(gè)485芯片接收的。簡單來說就是單片機(jī)沒法給多個(gè)485芯片進(jìn)行編號,所以單片機(jī)沒法區(qū)分是1號芯片收到的信號還是8號芯片收到的。
作者: fczxg    時(shí)間: 2023-1-5 02:36
primoliuyang 發(fā)表于 2023-1-3 16:19
UART走總線,從機(jī)編址即可

我要實(shí)現(xiàn)的不是標(biāo)識從機(jī)呀,我是要實(shí)現(xiàn)主機(jī)感知自己的哪個(gè)接口在和從機(jī)通信,至于對端是哪個(gè)從機(jī),主機(jī)并不關(guān)心。給從機(jī)編址只能標(biāo)識從機(jī),不能標(biāo)識主機(jī)的物理口呀
作者: fczxg    時(shí)間: 2023-1-5 02:39
名字不是重點(diǎn) 發(fā)表于 2023-1-3 17:49
一個(gè)MAX487E只能有一個(gè)485,你主機(jī)上有8個(gè)端口,就需要有8片487,8片IC你總不會所有IO都并聯(lián)接到MCU上吧 ...

我現(xiàn)在想到的也是用io口來區(qū)分,就是不知道電路怎么實(shí)現(xiàn)
作者: fczxg    時(shí)間: 2023-1-5 02:40
冰火風(fēng)輪 發(fā)表于 2023-1-4 13:01
LED換成光耦,單片機(jī)就能自己識別了

好的,謝謝,我學(xué)習(xí)一下,感謝大家,給大家添麻煩了!
作者: 明記冷氣    時(shí)間: 2023-1-11 17:02
用多個(gè)串口,不是很好識別么,,那個(gè)串口接收到數(shù)據(jù)  標(biāo)記一下就好了么  
作者: coody_sz    時(shí)間: 2023-1-12 11:46
RS485多機(jī)通信我基本都用MODBUS-RTU協(xié)議,每個(gè)點(diǎn)都有一個(gè)固定位移的地址。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1