free性丰满hd毛多多,久久综合给合久久狠狠狠97色69 ,欧美成人乱码一区二区三区,国产美女久久久亚洲综合,7777久久亚洲中文字幕

0
問(wèn)答首頁(yè) 最新問(wèn)題 熱門問(wèn)題 等待回答標(biāo)簽廣場(chǎng)
我要提問(wèn)

485

論RS485總線如何實(shí)現(xiàn)多主通信

    RS485是一種常用的工業(yè)現(xiàn)場(chǎng)總線,由于其只是電氣連接,所以在使用時(shí),還需要一個(gè)通信協(xié)議來(lái)定義各設(shè)備的具體通信方式,以實(shí)現(xiàn)多設(shè)備有秩序地使用總線。

一般地,RS485總線上所使用的是一主多從通信協(xié)議,采用輪詢方式進(jìn)行數(shù)據(jù)通信。也即一條RS485總線上,只有一臺(tái)主機(jī),其余的都是從機(jī),主從機(jī)之間要進(jìn)行通信時(shí),是需要主機(jī)依次輪詢,輪詢到了要發(fā)數(shù)據(jù)的從設(shè)備,從設(shè)備才能發(fā)送數(shù)據(jù)。這種通信方式存在通信實(shí)時(shí)性,可靠性差,而且各個(gè)從設(shè)備之間是不能通信的。另一種稍微高級(jí)一點(diǎn)的RS485通信協(xié)議可以實(shí)現(xiàn)從設(shè)備之間的通信,但這還是需要主設(shè)備的協(xié)調(diào)。有點(diǎn)類似于USB通信協(xié)議,工作機(jī)理大致如下:從設(shè)備首先向主設(shè)備發(fā)送數(shù)據(jù)發(fā)送請(qǐng)求或數(shù)據(jù),再由主設(shè)備將數(shù)據(jù)發(fā)送給另外的從設(shè)備這種方式。

    我想構(gòu)建一種基于RS485總線的多主通信協(xié)議,所有掛載在RS485總線上的設(shè)備均可自由地使用總線,而不需要先向主機(jī)申請(qǐng)。這樣的話就能夠大大提高地提高總線上設(shè)備的實(shí)時(shí)性,可靠性。在這之中,比較關(guān)鍵要解決的是:總線競(jìng)爭(zhēng)以及仲裁機(jī)制。

為此,我設(shè)計(jì)了這樣一個(gè)機(jī)制:設(shè)備在RS485總線進(jìn)行數(shù)據(jù)發(fā)送前,先檢測(cè)當(dāng)前總線是否有數(shù)據(jù)正在傳輸,如果沒(méi)有,則先發(fā)送一串?dāng)?shù)據(jù),用以聲明總線被占用。然后進(jìn)行有效數(shù)據(jù)發(fā)送,并等待DATA_ACK.

數(shù)據(jù)目標(biāo)設(shè)備在接收到數(shù)據(jù)后,此時(shí)僅可發(fā)送DATA_ACK信息,用以告訴數(shù)據(jù)發(fā)送設(shè)備已經(jīng)收到信息。之后數(shù)據(jù)發(fā)送設(shè)備,再次在總線上發(fā)送信息,聲明釋放總線。在這期間,其它掛接在RS485總線上的設(shè)備也能夠接收到數(shù)據(jù),不過(guò)因?yàn)榭偩€已經(jīng)被聲明占用,將不得

發(fā)送任何數(shù)據(jù)。

    在這之中,發(fā)現(xiàn)兩個(gè)可能的原因還是會(huì)導(dǎo)致總線競(jìng)爭(zhēng):    1、RS485總線上的設(shè)備接收到的總線占用和總線釋放聲明信息有誤碼,導(dǎo)致解析失敗。設(shè)備就相當(dāng)于沒(méi)有收到總線占用和釋放聲明,而如果這個(gè)期間進(jìn)行數(shù)據(jù)發(fā)送,就可能出錯(cuò)。

    2、RS485總線上,有兩個(gè)或多個(gè)設(shè)備,同時(shí)聲明總線占用。此時(shí)已經(jīng)導(dǎo)致總線競(jìng)爭(zhēng),從而所有設(shè)備都沒(méi)有收到有效的總線占用信息,那么之后的數(shù)據(jù)發(fā)送仍會(huì)很有可能出現(xiàn)總線競(jìng)爭(zhēng)。

    當(dāng)然,所有的設(shè)備在進(jìn)行任何數(shù)據(jù)發(fā)送前,都會(huì)先進(jìn)行總線載波檢測(cè),以判斷當(dāng)前總線上是否有數(shù)據(jù)發(fā)送。但仍有一定的概率出現(xiàn)兩設(shè)備幾乎同時(shí)開(kāi)始發(fā)送一串?dāng)?shù)據(jù)的第一位數(shù)據(jù),從而導(dǎo)致競(jìng)爭(zhēng)。

    查看了一下CAN總線的總線競(jìng)爭(zhēng)以及仲裁機(jī)制,其接口芯片可以一邊發(fā)送,一邊讀取當(dāng)前總線狀態(tài),如果發(fā)送位和讀取到的總線狀態(tài)不一致,則自動(dòng)丟失總線權(quán),這種非破壞的總線競(jìng)爭(zhēng)方式挺好,就是貌似RS485上無(wú)法實(shí)現(xiàn),因?yàn)镽S485芯片不能邊發(fā)送邊讀取。

大家麻煩給點(diǎn)意見(jiàn)哦,也不知有哪位成功實(shí)現(xiàn)了這種多主通信的嗎?

=====================================================分割線=========================================================>>

結(jié)貼前,對(duì)大家討論的結(jié)論歸納如下:

要實(shí)現(xiàn)RS485總線上的多主通信機(jī)制,首先在硬件設(shè)計(jì)上,需要能夠讓485芯片的TX和RX使能分別單獨(dú)控制;采用半驅(qū)方式進(jìn)行485總線驅(qū)動(dòng)更好,這樣可以實(shí)現(xiàn)類似CAN總線的總線競(jìng)爭(zhēng)檢測(cè)以及仲裁機(jī)制;

軟件設(shè)計(jì)上,每個(gè)設(shè)備在進(jìn)行總線數(shù)據(jù)發(fā)送前,必須先偵聽(tīng)總線是否有數(shù)據(jù)正在傳輸,如果沒(méi)有,則啟動(dòng)傳輸。在傳輸?shù)倪^(guò)程中,在逐字節(jié)地發(fā)送數(shù)據(jù)的同時(shí),也一直偵聽(tīng)并讀取總線上的數(shù)據(jù),如果讀取到的數(shù)據(jù)和發(fā)送的不一致,就說(shuō)明總線上此時(shí)還有其它設(shè)備正在發(fā)送,由此實(shí)現(xiàn)總線競(jìng)爭(zhēng)檢測(cè);

如果要做到類似CAN的無(wú)破壞總線競(jìng)爭(zhēng)檢測(cè)以及仲裁,那么還需要做到傳輸數(shù)據(jù)的逐位檢測(cè),不過(guò)這貌似對(duì)一般的Uart口來(lái)說(shuō)并不容易實(shí)現(xiàn);

另一種比較穩(wěn)定的多主通信方式就是使用令牌,令牌在各個(gè)設(shè)備之間傳遞,只有擁有令牌的設(shè)備才有總線使用權(quán)。

以上為討論后的歸納總結(jié),非常謝謝各位朋友的指點(diǎn)。

提問(wèn)者:一個(gè)黃人 地點(diǎn):- 瀏覽次數(shù):8316 提問(wèn)時(shí)間:10-15 18:12
我有更好的答案
提 交
5條回答
木木川BB 07-17 08:57
1.首先要解決電氣層的沖突,半驅(qū)基本可以;
2.要有退出和重試機(jī)制。
上面2條都可以參考CAN的做法。
云漢007 07-09 02:30
半驅(qū)是指:485芯片只發(fā)送邏輯0,而邏輯1則由485接收方由失效保護(hù)的上下拉得到,簡(jiǎn)而言之,485芯片的TxD端接地,MCU的TxD反相后接到485的DE端,485的RE始終使能。
退出應(yīng)是發(fā)送者自覺(jué)的,只要監(jiān)測(cè)到自己發(fā)送的數(shù)據(jù)有誤(應(yīng)檢查每個(gè)字節(jié)),就停止發(fā)送。
任何發(fā)送者在發(fā)送前必須探測(cè)總線狀態(tài),遇忙應(yīng)隨機(jī)延時(shí)后重新探測(cè)。
60user80 07-15 00:02
全雙工的485可以實(shí)現(xiàn)邊發(fā)邊收的。你這個(gè)多主機(jī)的沒(méi)想過(guò),485的雙機(jī)通訊就是可以做到主從切換的。
testd28 07-13 05:56


謝謝建議,我上網(wǎng)查了一下,找到了一個(gè)RS485全雙工的硬件連接圖,如下:

如果該圖正確的話,即RS485全雙工工作時(shí),設(shè)備接收端接在其它設(shè)備的發(fā)送總線上,設(shè)備的發(fā)送端接在其它設(shè)備的接收總線上。這樣的話,如果還是有兩個(gè)設(shè)備同時(shí)要發(fā)送數(shù)據(jù),產(chǎn)生了總線競(jìng)爭(zhēng),依然是不能檢測(cè)到的。
我猜想這種全雙工的RS485應(yīng)該還是工作在主從模式,最左邊的應(yīng)該是主機(jī),因?yàn)槠浒l(fā)送端接在其它幾個(gè)設(shè)備的接收端。那么主機(jī)發(fā)送到從機(jī)的信息是不會(huì)產(chǎn)生競(jìng)爭(zhēng)的,而從機(jī)要發(fā)送數(shù)據(jù),則要和其他從設(shè)備共用總線,如果要避免競(jìng)爭(zhēng),肯定還是需要
主機(jī)設(shè)備來(lái)從中協(xié)調(diào)。
我準(zhǔn)備這樣來(lái)做個(gè)試驗(yàn):使用半雙工的RS485芯片,其內(nèi)部結(jié)構(gòu)如下:

可以看出,其內(nèi)部結(jié)構(gòu)的接收和發(fā)送是各自由獨(dú)立管腳控制的,所以我想這樣設(shè)置:SP485芯片的RE管腳一直拉低,使RO管腳能夠一直吐出總線上的有效數(shù)據(jù)。設(shè)置DE管腳平時(shí)為低,發(fā)送數(shù)據(jù)時(shí),為高進(jìn)行數(shù)據(jù)發(fā)送,發(fā)送完畢后又置低。
這樣,當(dāng)數(shù)據(jù)發(fā)送完畢后,其實(shí)發(fā)送設(shè)備自己也應(yīng)該收到一份自己發(fā)出的數(shù)據(jù)。
查看該芯片的收發(fā)真值表,如下:

從左圖可以看出:當(dāng)發(fā)送數(shù)據(jù)時(shí),RE管腳的電平不影響數(shù)據(jù)發(fā)送。從右圖來(lái)看:當(dāng)接收數(shù)據(jù)時(shí),DE管腳都是設(shè)置為0,但也并沒(méi)明確說(shuō)明DE為1就不行。因?yàn)槲覄傞_(kāi)始調(diào)試485時(shí),有遇到過(guò)自己發(fā)送的數(shù)據(jù)自己能收到的現(xiàn)象,估摸就是因?yàn)楫?dāng)時(shí)芯片的RE和DE管腳是各自分開(kāi)控制的。
接下來(lái)準(zhǔn)備做個(gè)試驗(yàn)來(lái)驗(yàn)證下,如果可行的話,就可以實(shí)現(xiàn)類似CAN總線的總線競(jìng)爭(zhēng)檢測(cè)機(jī)制了。;)
qp_12 07-12 23:54
這種沖突檢測(cè)+競(jìng)爭(zhēng)想靠軟件做好還是不容易的,RS485多主總線大多都是采用令牌總線方式
撰寫答案
提 交
1 / 3
1 / 3
相關(guān)485
最近被485電了很多次了,求大神分析下為什么
隔離485通信接口芯片ADM2483供電問(wèn)題
關(guān)于SP485芯片經(jīng)常損壞的問(wèn)題
求助 關(guān)于單片機(jī)與485總線 命令幀的發(fā)送和響應(yīng)幀的接收
485通訊如何尋址