![]() |
發布時間: 2023-1-3 06:00
正文摘要:各位大神好,我想實現一個多點通信的需求,具體如圖: 主機要能識別從機連接自己的哪個接口,并將該信息記錄下來,現在的問題是怎樣識別自己的哪個端口連接著從機,望各位大神不吝賜教!!感謝。 |
RS485多機通信我基本都用MODBUS-RTU協議,每個點都有一個固定位移的地址。 |
用多個串口,不是很好識別么,,那個串口接收到數據 標記一下就好了么 |
冰火風輪 發表于 2023-1-4 13:01 好的,謝謝,我學習一下,感謝大家,給大家添麻煩了! |
名字不是重點 發表于 2023-1-3 17:49 我現在想到的也是用io口來區分,就是不知道電路怎么實現 |
primoliuyang 發表于 2023-1-3 16:19 我要實現的不是標識從機呀,我是要實現主機感知自己的哪個接口在和從機通信,至于對端是哪個從機,主機并不關心。給從機編址只能標識從機,不能標識主機的物理口呀 |
lhzw2001 發表于 2023-1-3 16:12 人可以知道,比如通過看哪根線連接了哪個端口,485怎么能知道哪個芯片對應哪個端口呢?485芯片不能編址。∧芫幹返氖菑臋C,我不需要知道是哪個從機發給我的,我要知道是哪個485芯片接收的。簡單來說就是單片機沒法給多個485芯片進行編號,所以單片機沒法區分是1號芯片收到的信號還是8號芯片收到的。 |
fczxg 發表于 2023-1-3 16:00 LED換成光耦,單片機就能自己識別了 |
樓主應該還沒有做過有關485通訊的硬件設計,拋開了硬件設計是沒法討論功能需求的 |
要解決端口硬件沖突、使用軟件器件識別協議。 |
fczxg 發表于 2023-1-3 15:58 使能腳來控制 |
fczxg 發表于 2023-1-3 16:07 一個MAX487E只能有一個485,你主機上有8個端口,就需要有8片487,8片IC你總不會所有IO都并聯接到MCU上吧?那怕各有一個IO是獨立的,不就可以區分8個485端口了?你這個獨立的IO就能看做是485 的ID。還有什么好糾結的? 我被你整懵了都.... |
fczxg 發表于 2023-1-3 16:07 能聯機了,就可以建表了,不管什么端口,都有它固定的ID(地址、標識、片選、STB。。。。),就如我上貼所說: 比如“端口1與從機1發生關系了”,那么,你能操作端口1,說明你就能GET到端口1的ID,再把端口1與從機1關聯上不就OK了? |
UART走總線,從機編址即可 |
主機8個口,哪個口有數據回復,不就知道從機接在哪個口嗎?![]() |
樓主應該先好好理解一下什么是485 |
名字不是重點 發表于 2023-1-3 15:06 非常感謝您,我說的“485端口編號”不是簡單地做端口區分,是固定的端口名稱(比如端口1就是0x01,端口255就是0xFF),如果只是解決通信問題,那封裝協議就能解決,但是要標識物理接口,這個要怎么做?我的51上不可能有256個UART口呀,但是MAX487E又不能編程,沒法在芯片里燒一個地址進去 |
maoizhou 發表于 2023-1-3 15:18 是的呀,比如我用8個485芯片,但是51上的UART口只有一個,單片機怎么通過這一個UART口區分不同的485芯片呢,485芯片又不能編程,沒法在485芯片里寫地址 |
maoizhou 發表于 2023-1-3 15:18 那只能每個端口接一個LED,用眼睛去看啦,我想做到的是單片機自己識別是從哪個485端口收到的信息 ![]() |
lkc8210 發表于 2023-1-3 15:09 問題的關鍵就是“有信號傳回,就是那個端口接上了從機”那個端口是哪個端口 ![]() |
lkc8210 發表于 2023-1-3 15:09 是呀,可以UART只有一對引腳,關鍵是如果不對485芯片進行標識(編號),怎么識別是從哪個485芯片(不是從機)接收的數據呢? |
名字不是重點 發表于 2023-1-3 15:06 非常感謝,但是雖然兩邊都有地址了,問題是我怎么知道哪個地址對應的我的1-8哪個485接口呢? |
主機的8個接口是分別獨立的吧,主機通訊的時候用的哪個口有回應就是接到的哪個端口 |
STC89C52要加485芯片來轉換TTL信號吧? 8個485端口就要8個485芯片 芯片上有使能腳來控制 通信時每次只使能一個485芯片 有信號傳回,就是那個端口接上了從機 |
fczxg 發表于 2023-1-3 14:31 協議做的事情多了去了。前提是你的協議夠強大、完善! 1、從機上電后不停發送某個信息字,比如“?” 2、主機遍歷所有端口,如果有端口收到“?”則來回應“!” 3、從機收到主機發來的“!”表示聯機成功,不南發送“?”轉而發送從機的信息。 4、主機收到從機的信息,從地址池中取一個未被占用的地址發給從機, 5、從機收到地址后,記錄并更新到本地。并回應一個“!” 6、接下來就是各種操作了: 維持心跳:主機時不時發一個"?",詢問從機是否還在線,從機收到“?”后回應“!”,表示還在線。 如果主機發出的“?”沒有回應(超時),則說明從機已掉線,就把地址收回(置未占用態),然后等從機上線,把上邊的1-5再走一次流程。 希望能幫到你。。 |
cnos 發表于 2023-1-3 12:06 協議解決不了主機485端口編號的問題呀,最多只能解決從機標識問題,比如給從機編址,但我不關心從機的標識,我關心的是主機的485端口號 |
協議解決不了物理端口編號的問題呀,主機他關心的是我的哪個端口連接了從機,不用關心連接了哪個從機。如果只是標識不同的從機,那給從機編個地址就好了,現在是要給485端口編地址,485芯片也沒這功能呀 |
關鍵是怎么給485物理端口編號,當從機插上主機的任意485口后,主機從哪里讀取端口編號信息呢?注意是主機讀取主機自己的485端口信息,不是讀取從機的標識信息,我不需要知道我連了哪個從機,我只要知道我哪個口連了從機就行 |
這個是協議問題 你先用中文把確認過程寫下來,然后就很容易變成代碼。 |
或者有沒有能夠實現這種需求的芯片,能否推薦一下,不勝感激!! |