- 嵌入式網(wǎng)絡(luò)編程
- 胡成華 劉傳瑞 郭文生編著
- 6221字
- 2018-12-27 16:43:13
2.2 基本的軟件/硬件體系設(shè)計(jì)
2.2.1 串行接口芯片及其選擇
RS-485接口芯片已廣泛應(yīng)用于工業(yè)控制、儀器、儀表、多媒體網(wǎng)絡(luò)、機(jī)電一體化產(chǎn)品等諸多領(lǐng)域,可用于RS-485接口的芯片種類也越來(lái)越多。如何在種類繁多的接口芯片中找到最合適的芯片,是擺在每一個(gè)使用者面前的一個(gè)問(wèn)題。RS-485接口在不同的使用場(chǎng)合,對(duì)芯片的要求和使用方法也有所不同。使用者在芯片的選型和電路的設(shè)計(jì)上應(yīng)考慮哪些因素,由于某些芯片的固有特性,通信中有些故障甚至還需要在軟件上做相應(yīng)調(diào)整,如此等等。這些有關(guān)RS-485接口的常見(jiàn)問(wèn)題還是需要我們特別注意的。
1.RS-485接口標(biāo)準(zhǔn)
傳輸方式:差分。
傳輸介質(zhì):雙絞線。
標(biāo)準(zhǔn)節(jié)點(diǎn)數(shù):32。
最遠(yuǎn)通信距離:1200m,共模電壓最大、最小值:+12V;-7V。
差分輸入范圍:-7V~+12V。
接收器輸入靈敏度:±200mV。
接收器輸入阻抗:≥12kΩ。
2.節(jié)點(diǎn)數(shù)及半雙工和全雙工通信
(1)節(jié)點(diǎn)數(shù)
所謂節(jié)點(diǎn)數(shù),即每個(gè)RS-485接口芯片的驅(qū)動(dòng)器能驅(qū)動(dòng)多少個(gè)標(biāo)準(zhǔn)RS-485負(fù)載。根據(jù)規(guī)定,標(biāo)準(zhǔn)RS-485接口的輸入阻抗為≥12kΩ,相應(yīng)的標(biāo)準(zhǔn)驅(qū)動(dòng)節(jié)點(diǎn)數(shù)為32。為適應(yīng)更多節(jié)點(diǎn)的通信場(chǎng)合,有些芯片的輸入阻抗設(shè)計(jì)成1/2負(fù)載(≥24kΩ)、1/4負(fù)載(≥48kΩ)甚至1/8負(fù)載(≥96kΩ),相應(yīng)的節(jié)點(diǎn)數(shù)可增加到64、128和256。表2-2為一些常見(jiàn)RS-485接口芯片的節(jié)點(diǎn)數(shù)。
表2-2 常見(jiàn)RS-485接口芯片的節(jié)點(diǎn)數(shù)

(2)半雙工和全雙工
RS-485接口可連接成半雙工和全雙工兩種通信方式,如圖2-14所示。半雙工通信的芯片有SN75176、SN75276、SN75LBC184、MAX485、MAX 1487、MAX3082、MAX1483等;全雙工通信的芯片有SN75179、SN75180、MAX488~MAX491、MAX1482等。

圖2-14 RS-485接口芯片的半雙工和全雙工通信電路
3.應(yīng)用中的常見(jiàn)問(wèn)題
(1)抗雷擊和抗靜電沖擊
RS-485接口芯片在使用、焊接或設(shè)備的運(yùn)輸途中都有可能受到靜電的沖擊而損壞。在傳輸線架設(shè)于戶外的使用場(chǎng)合,接口芯片乃至整個(gè)系統(tǒng)還有可能遭致雷電的襲擊。選用抗靜電或抗雷擊的芯片可有效避免此類損失,常見(jiàn)的芯片有MAX485E、MAX487E、MAX1487E等。特別值得一提的是SN75LBC184,它不但能抗雷電的沖擊而且能承受高達(dá)8kV的靜電放電沖擊,是目前市場(chǎng)上不可多得的一款產(chǎn)品。
(2)限斜率驅(qū)動(dòng)
由于信號(hào)在傳輸過(guò)程中會(huì)產(chǎn)生電磁干擾和終端反射,使有效信號(hào)和無(wú)效信號(hào)在傳輸線上相互疊加,嚴(yán)重時(shí)會(huì)使通信無(wú)法正常進(jìn)行。為解決這一問(wèn)題,某些芯片的驅(qū)動(dòng)器設(shè)計(jì)成限斜率方式,使輸出信號(hào)邊沿不要過(guò)陡,以便不在傳輸線上產(chǎn)生過(guò)多的高頻分量,從而有效地扼制干擾的產(chǎn)生,如MAX487、SN75LBC184等都具有此功能。
(3)故障保護(hù)
故障保護(hù)技術(shù)是近兩年產(chǎn)生的,一些新的RS-485芯片都采用了此項(xiàng)技術(shù),如SN75276、MAX3080~MAX3089。什么是故障保護(hù),為什么要有故障保護(hù),如果沒(méi)有故障保護(hù)會(huì)產(chǎn)生什么后果?
眾所周知,RS-485接口采用的是一種差分傳輸方式,各節(jié)點(diǎn)之間的通信都是通過(guò)一對(duì)(半雙工)或兩對(duì)(全雙工)雙絞線作為傳輸介質(zhì)的。根據(jù)RS-485的標(biāo)準(zhǔn)規(guī)定,接收器的接收靈敏度為±200mV,即接收端的差分電壓大于等于+200mV時(shí),接收器輸出為高電平;小于等于-200mV時(shí),接收器輸出為低電平;介于±200mV之間時(shí),接收器輸出為不確定狀態(tài)。在總線空閑即傳輸線上所有節(jié)點(diǎn)都為接收狀態(tài),以及在傳輸線開(kāi)路或短路故障時(shí),若不采取特殊措施,則接收器可能輸出高電平也可能輸出低電平。一旦某個(gè)節(jié)點(diǎn)的接收器產(chǎn)生低電平就會(huì)使串行接收器(UART)找不到起始位,從而引起通信異常。解決此類問(wèn)題的方法可以從以下兩個(gè)方面來(lái)考慮:
硬件方面
使用帶故障保護(hù)的芯片,它會(huì)在總線開(kāi)路、短路和空閑情況下,使接收器的輸出為高電平。確保總線空閑、短路時(shí)接收器輸出高電平是由改變接收器輸入門限來(lái)實(shí)現(xiàn)的。例如,MAX3080~MAX 3089輸入靈敏度為-50mV/-200mV,即差分接收器輸入電壓UA-B≥-50mV時(shí),接收器輸出邏輯高電平;如果 UA-B≤-200mV,則輸出邏輯低電平。當(dāng)接收器輸入端總線短路或總線上所有發(fā)送器被禁止時(shí),接收器差分輸入端為0V,從而使接收器輸出高電平。同理,SN75276的靈敏度為0mV/-300mV,因而達(dá)到故障保護(hù)的目的。
軟件方面
若使用不帶故障保護(hù)的芯片,如SN75176、MAX1487等,可在軟件上做一些處理,從而避免通信異常。即在進(jìn)入正常的數(shù)據(jù)通信之前,由主機(jī)預(yù)先將總線驅(qū)動(dòng)為大于+200mV,并保持一段時(shí)間,使所有節(jié)點(diǎn)的接收器產(chǎn)生高電平輸出。這樣,在發(fā)出有效數(shù)據(jù)時(shí),所有接收器能夠正確地接收到起始位,進(jìn)而接收到完整的數(shù)據(jù)。
(4)光電隔離
在某些工業(yè)控制領(lǐng)域,由于現(xiàn)場(chǎng)情況十分復(fù)雜,各個(gè)節(jié)點(diǎn)之間存在很高的共模電壓。雖然RS-485接口采用的是差分傳輸方式,具有一定的抗共模干擾的能力,但當(dāng)共模電壓超過(guò)RS-485接收器的極限接收電壓,即大于+12V或小于-7V時(shí),接收器就再也無(wú)法正常工作了,嚴(yán)重時(shí)甚至?xí)龤酒蛢x器設(shè)備。
解決此類問(wèn)題的方法是通過(guò)DC-DC將系統(tǒng)電源和RS-485收發(fā)器的電源隔離;通過(guò)光耦將信號(hào)隔離,徹底消除共模電壓的影響。實(shí)現(xiàn)此方案的途徑可分為:
㊣ 用光耦、帶隔離的DC-DC、RS-485芯片構(gòu)筑電路;
㊣ 使用二次集成芯片,如PS1480、MAX1480等。
以上主要介紹在不同場(chǎng)合如何選擇合適的RS-485接口芯片,以及可能碰到的有關(guān)問(wèn)題的解決方法,從而避免通信異常。至于其他諸如終端匹配、傳輸線的選擇和屏蔽、通信速率的選擇等,在一些相關(guān)資料中都能找到答案,這里就不再介紹了。
2.2.2 串行接口通信的軟/硬件設(shè)計(jì)
1.RS-485芯片(SN75176)DE控制端的設(shè)計(jì)
在應(yīng)用系統(tǒng)中,主機(jī)與分機(jī)相隔較遠(yuǎn),通信線路的總長(zhǎng)度往往超過(guò)400m,而分機(jī)系統(tǒng)上電或復(fù)位又常常不在同一個(gè)時(shí)刻完成。如果此時(shí)某個(gè)75176的DE端電位為“1”,那么它的485總線輸出將會(huì)處于發(fā)送狀態(tài),也就是占用了通信總線,這樣其他分機(jī)就無(wú)法與主機(jī)進(jìn)行通信。這種情況尤其表現(xiàn)在某個(gè)分機(jī)出現(xiàn)異常情況下(死機(jī)),會(huì)使整個(gè)系統(tǒng)通信崩潰。因此在電路設(shè)計(jì)時(shí),應(yīng)保證系統(tǒng)上電復(fù)位時(shí)75176的DE端電位為0。由于8031在復(fù)位期間,I/O口輸出高電平,故圖2-15電路的接法能有效地解決復(fù)位期間分機(jī)“咬”總線的問(wèn)題。
2.隔離光耦電路的參數(shù)選取
在應(yīng)用系統(tǒng)中,由于要對(duì)現(xiàn)場(chǎng)情況進(jìn)行實(shí)時(shí)監(jiān)控及響應(yīng),通信數(shù)據(jù)的波特率往往做得較高(通常都在4800波特以上)。限制通信波特率提高的“瓶頸”,并不是現(xiàn)場(chǎng)的導(dǎo)線(現(xiàn)場(chǎng)施工一般使用5類非屏蔽的雙絞線),而是在與單片機(jī)系統(tǒng)進(jìn)行信號(hào)隔離的光耦電路上。此處采用TIL117。電路設(shè)計(jì)中可以考慮采用高速光耦,如6N137、6N136等芯片,也可以優(yōu)化普通光耦電路參數(shù)的設(shè)計(jì),使之能工作在最佳狀態(tài)。例如,電阻R2、R3如果選取得較大,將會(huì)使光耦合器的發(fā)光管由截止進(jìn)入飽和變得較慢;如果選取得過(guò)小,退出飽和也會(huì)很慢,所以這兩只電阻的數(shù)值要精心選取,不同型號(hào)的光耦合驅(qū)動(dòng)電路使得這兩個(gè)電阻的數(shù)值略有差異,這一點(diǎn)在電路設(shè)計(jì)中要特別慎重,不能隨意,通常可以由實(shí)驗(yàn)來(lái)定。
3.485總線輸出電路部分的設(shè)計(jì)
輸出電路的設(shè)計(jì)要充分考慮到線路上的各種干擾及線路特性阻抗的匹配。由于工程環(huán)境比較復(fù)雜,現(xiàn)場(chǎng)常有各種形式的干擾源,所以485總線的傳輸端一定要加有保護(hù)措施。在電路設(shè)計(jì)中采用穩(wěn)壓管VD1、VD2組成的吸收回路,也可以選用能夠抗浪涌的TVS瞬態(tài)雜波抑制器件,或者直接選用能抗雷擊的485芯片(如SN75LBC184等)。
考慮到線路的特殊情況(如某一臺(tái)分機(jī)的485芯片被擊穿短路),為防止總線中其他分機(jī)的通信受到影響,在75176的485信號(hào)輸出端串聯(lián)了兩個(gè)20Ω的電阻R10、R11。這樣本機(jī)的硬件故障就不會(huì)使整個(gè)總線的通信受到影響。
在應(yīng)用系統(tǒng)工程的現(xiàn)場(chǎng)施工中,由于通信載體是雙絞線,它的特性阻抗為120Ω左右,所以線路設(shè)計(jì)時(shí),在RS-485網(wǎng)絡(luò)傳輸線的始端和末端各應(yīng)接1只120Ω的匹配電阻(如圖2-15中的R8),以減少線路上傳輸信號(hào)的反射。

圖2-15 RS-485應(yīng)用典型電路
由于RS-485芯片的特性,接收器的檢測(cè)靈敏度為±200mV,即輸入端差分電壓VA-VB≥+200mV,輸出邏輯1,VA-VB≤-200mV,輸出邏輯0;而A、B端電位差的絕對(duì)值小于200mV時(shí),輸出為不確定。在總線上所有發(fā)送器被禁止時(shí),接收器輸出邏輯0,這會(huì)誤認(rèn)為通信幀的起始引起工作不正常。解決這個(gè)問(wèn)題的辦法是人為地使A端電位高于B兩端電位,這樣RXD的電平在485總線不發(fā)送期間(總線懸浮時(shí))呈現(xiàn)唯一的高電平,8031單片機(jī)就不會(huì)被誤中斷而收到亂字符。通過(guò)在485電路的A、B輸出端加接上拉、下拉電阻R7、R9,即可很好地解決這個(gè)問(wèn)題。
4.軟件的編程
485芯片的軟件編程對(duì)產(chǎn)品的可靠性也有很大影響。由于485總線是異步半雙工的通信總線,在某一個(gè)時(shí)刻,總線只可能呈現(xiàn)一種狀態(tài),所以這種方式一般適用于主機(jī)對(duì)分機(jī)的查詢方式通信,總線上必然有一臺(tái)始終處于主機(jī)地位的設(shè)備在巡檢其他分機(jī),所以需要制定一套合理的通信協(xié)議來(lái)協(xié)調(diào)總線的分時(shí)共用。這里采用的是數(shù)據(jù)包通信方式。通信數(shù)據(jù)是成幀成包發(fā)送的,每包數(shù)據(jù)都由引導(dǎo)碼、長(zhǎng)度碼、地址碼、命令碼、內(nèi)容、校驗(yàn)碼等部分組成。其中引導(dǎo)碼是用于同步每一包數(shù)據(jù)的引導(dǎo)頭;長(zhǎng)度碼是這一包數(shù)據(jù)的總長(zhǎng)度;命令碼是主機(jī)對(duì)分機(jī)(或分機(jī)應(yīng)答主機(jī))的控制命令;地址碼是分機(jī)的本機(jī)地址號(hào);“內(nèi)容”是這一包數(shù)據(jù)里的各種信息;校驗(yàn)碼是這一包數(shù)據(jù)的校驗(yàn)標(biāo)志,可以采用奇偶校驗(yàn)、和校驗(yàn)等不同的方式。
在485芯片的通信中,尤其要注意對(duì)485控制端DE的軟件編程。為了可靠的工作,在485總線狀態(tài)切換時(shí)需要做適當(dāng)延時(shí),再進(jìn)行數(shù)據(jù)的收發(fā)。具體的做法是:在數(shù)據(jù)發(fā)送狀態(tài)下,先將控制端置1,延時(shí)1ms左右的時(shí)間,再發(fā)送有效的數(shù)據(jù),一包數(shù)據(jù)發(fā)送結(jié)束后再延時(shí)1ms后,將控制端置0。這樣的處理會(huì)使總線在狀態(tài)切換時(shí),有一個(gè)穩(wěn)定的工作過(guò)程。
2.2.3 串行接口主從式多機(jī)通信協(xié)議
1.數(shù)據(jù)傳輸協(xié)議
此協(xié)議定義了一個(gè)控制器能認(rèn)識(shí)使用的信息結(jié)構(gòu),而不管它們是經(jīng)過(guò)何種網(wǎng)絡(luò)進(jìn)行通信的。它描述了控制器請(qǐng)求訪問(wèn)其他設(shè)備的過(guò)程,如何回應(yīng)來(lái)自其他設(shè)備的請(qǐng)求,以及怎樣偵測(cè)錯(cuò)誤并記錄。它制定了消息域格局和內(nèi)容的公共格式。
此協(xié)議決定了每個(gè)控制器需要知道它們的設(shè)備地址,識(shí)別按照地址發(fā)來(lái)的消息,決定要產(chǎn)生何種行動(dòng)。如果需要回應(yīng),控制器將生成反饋信息按本協(xié)議發(fā)出。
(1)數(shù)據(jù)在網(wǎng)絡(luò)上轉(zhuǎn)輸
控制器通信使用主從技術(shù),即僅一個(gè)設(shè)備(主設(shè)備)能初始化傳輸(查詢),其他設(shè)備(從設(shè)備)根據(jù)主設(shè)備查詢提供的數(shù)據(jù)做出相應(yīng)反應(yīng)。
主設(shè)備可以單獨(dú)與從設(shè)備通信,也能以廣播方式與所有從設(shè)備通信。如果單獨(dú)通信,從設(shè)備返回消息作為回應(yīng),如果是以廣播方式查詢的,則從設(shè)備不做任何回應(yīng)。協(xié)議建立了主設(shè)備查詢的格式:設(shè)備(或廣播)地址、功能代碼、所有要發(fā)送的數(shù)據(jù)和錯(cuò)誤檢測(cè)域。
從設(shè)備回應(yīng)信息也由協(xié)議構(gòu)成,包括確認(rèn)要行動(dòng)的域、任何要返回的數(shù)據(jù)及錯(cuò)誤檢測(cè)域。如果在消息接收過(guò)程中發(fā)生錯(cuò)誤(無(wú)相應(yīng)的功能碼),或從設(shè)備不能執(zhí)行其命令,從設(shè)備將建立錯(cuò)誤消息并把它作為回應(yīng)發(fā)送出去。
(2)在對(duì)等類型網(wǎng)絡(luò)上轉(zhuǎn)輸
在對(duì)等網(wǎng)絡(luò)上,控制器使用對(duì)等技術(shù)通信,故任何控制都能初始與其他控制器的通信。這樣在單獨(dú)的通信過(guò)程中,控制器既可作為主設(shè)備也可作為從設(shè)備。
在消息位,本協(xié)議仍提供了主從原則,盡管網(wǎng)絡(luò)通信方法是“對(duì)等”的。如果控制器發(fā)送消息,它只是作為主設(shè)備,并期望從設(shè)備得到回應(yīng)。同樣,當(dāng)控制器接收到消息時(shí),它將建立從設(shè)備回應(yīng)格式并返回給發(fā)送的控制器。
(3)查詢回應(yīng)周期
① 查詢。查詢消息中的功能代碼告之被選中的從設(shè)備要執(zhí)行何種功能。數(shù)據(jù)段包含了從設(shè)備要執(zhí)行功能的任何附加信息。錯(cuò)誤檢測(cè)域?yàn)閺脑O(shè)備提供了一種驗(yàn)證消息內(nèi)容是否正確的方法。
② 回應(yīng)。如果從設(shè)備產(chǎn)生一正常的回應(yīng),則在回應(yīng)消息中的功能代碼是在查詢消息中的功能代碼的回應(yīng)。數(shù)據(jù)段包括了從設(shè)備收集的數(shù)據(jù)。如果有錯(cuò)誤發(fā)生,功能代碼將被修改,以用于指出回應(yīng)消息是錯(cuò)誤的,同時(shí)數(shù)據(jù)段包含了描述此錯(cuò)誤信息的代碼。錯(cuò)誤檢測(cè)域允許主設(shè)備確認(rèn)消息內(nèi)容是否可用。
2.傳輸方式
控制器能設(shè)置傳輸模式為RS-485串行傳輸,通信參數(shù)為9600、n、8、1。在配置每個(gè)控制器的時(shí)候,在一個(gè)網(wǎng)絡(luò)上的所有設(shè)備都必須選擇相同的串口參數(shù)。即:地址 功能代碼 數(shù)據(jù)數(shù)量 數(shù)據(jù)1,……,數(shù)據(jù)n CRC字節(jié)。
其中,每個(gè)字節(jié)的位包括一個(gè)起始位、8個(gè)數(shù)據(jù)位(最小的有效位先發(fā)送)和一個(gè)停止位;錯(cuò)誤檢測(cè)域是CRC(循環(huán)冗余碼校驗(yàn))。
3.消息幀
(1)幀格式
傳輸設(shè)備將消息轉(zhuǎn)為有起點(diǎn)和終點(diǎn)的幀,這就允許接收的設(shè)備在消息起始處開(kāi)始工作,讀地址分配信息,判斷哪一個(gè)設(shè)備被選中(廣播方式則傳給所有設(shè)備),判知何時(shí)信息已完成。錯(cuò)誤消息也能偵測(cè)到并能返回結(jié)果。
消息發(fā)送至少要以10ms時(shí)間的停頓間隔開(kāi)始。傳輸?shù)牡谝粋€(gè)域是設(shè)備地址。網(wǎng)絡(luò)設(shè)備不斷偵測(cè)網(wǎng)絡(luò)總線,包括停頓間隔時(shí)間內(nèi)。當(dāng)?shù)谝粋€(gè)域(地址域)接收到時(shí),每個(gè)設(shè)備都進(jìn)行解碼以判斷是否是發(fā)往自己的。在最后一個(gè)傳輸字符之后,一個(gè)至少10ms時(shí)間的停頓標(biāo)定了消息的結(jié)束。一個(gè)新的消息可在此停頓后開(kāi)始。
整個(gè)消息幀必須作為連續(xù)的輸入。如果在幀完成之前有超過(guò)5ms時(shí)間的停頓時(shí)間,接收設(shè)備將刷新不完整的消息并假定下一字節(jié)是一個(gè)新消息的地址域。同樣地,如果一個(gè)新消息在小于5ms的時(shí)間內(nèi)接著前一消息開(kāi)始,接收的設(shè)備將認(rèn)為它是前一消息的延續(xù)。這將導(dǎo)致一個(gè)錯(cuò)誤,因?yàn)樵谧詈蟮腃RC域的值不可能是正確的。典型的消息幀是:起始間隔、設(shè)備地址、功能代碼、數(shù)據(jù)數(shù)量、數(shù)據(jù)、CRC校驗(yàn)、結(jié)束。
(2)地址域
消息幀的地址域包含一個(gè)字符(8位)。可能的從設(shè)備地址是0~247(十進(jìn)制)。單個(gè)設(shè)備的地址范圍是1~247。主設(shè)備通過(guò)將要聯(lián)系的從設(shè)備地址放入消息中的地址域來(lái)選擇從設(shè)備。當(dāng)從設(shè)備發(fā)送回應(yīng)消息時(shí),也把自己的地址放入回應(yīng)的地址域中,以便主設(shè)備知道是哪一個(gè)設(shè)備做出回應(yīng)的。
地址0被用做廣播地址,以使所有的從設(shè)備都能認(rèn)識(shí)。
(3)功能域
消息幀中的功能代碼域包含一個(gè)字符(8位)。可能的代碼范圍是十進(jìn)制的1~255。當(dāng)然,有些代碼是適用于所有控制器的,有些是應(yīng)用于某種控制器的,還有些是保留的以備后用。
當(dāng)消息從主設(shè)備發(fā)往從設(shè)備時(shí),功能代碼域?qū)⒏嬷畯脑O(shè)備需要執(zhí)行哪些行為。例如,去讀取當(dāng)前檢測(cè)參量的值或開(kāi)關(guān)狀態(tài),讀從設(shè)備的診斷狀態(tài),允許調(diào)入、記錄、校驗(yàn)在從設(shè)備中的程序等。
當(dāng)從設(shè)備回應(yīng)時(shí),它使用功能代碼域來(lái)指示是正常回應(yīng)(無(wú)誤)還是有某種錯(cuò)誤發(fā)生(稱做異議回應(yīng))。對(duì)正常回應(yīng),從設(shè)備僅回應(yīng)相應(yīng)的功能代碼。對(duì)異議回應(yīng),從設(shè)備返回一等同于正常代碼的代碼,但功能代碼的最高位為邏輯1。
例如,主設(shè)備發(fā)往從設(shè)備的消息要求讀一組保持寄存器,將產(chǎn)生如下功能代碼:0 0 0 0 0 0 1 1(十六進(jìn)制數(shù)03H)。對(duì)正常回應(yīng),從設(shè)備僅回應(yīng)同樣的功能代碼。對(duì)異議回應(yīng),它返回:1 0 0 0 0 0 1 1(十六進(jìn)制數(shù)83H)。
除功能代碼因異議錯(cuò)誤做了修改外,從設(shè)備將一獨(dú)特的代碼放到回應(yīng)消息的數(shù)據(jù)域中,這能告訴主設(shè)備發(fā)生了什么錯(cuò)誤。
主設(shè)備應(yīng)對(duì)程序得到異議的回應(yīng)后,典型的處理過(guò)程是重發(fā)消息,或者診斷發(fā)給從設(shè)備的消息并報(bào)告給操作員。
(4)數(shù)據(jù)域
從主設(shè)備發(fā)給從設(shè)備消息的數(shù)據(jù)域包含附加的信息:從設(shè)備用于進(jìn)行執(zhí)行由功能代碼所定義的行為所需的數(shù)據(jù)。
如果沒(méi)有錯(cuò)誤發(fā)生,從設(shè)備返回的數(shù)據(jù)域包含請(qǐng)求的數(shù)據(jù)。如果有錯(cuò)誤發(fā)生,此域包含異議代碼,主設(shè)備應(yīng)用程序可以用來(lái)判斷采取下一步行動(dòng)。
數(shù)據(jù)域最長(zhǎng)為70字節(jié),但是在某種消息中數(shù)據(jù)域可以是0長(zhǎng)度。例如,主設(shè)備要求從設(shè)備回應(yīng)通信事件記錄,從設(shè)備回應(yīng)不需任何附加的信息。
(5)錯(cuò)誤檢測(cè)域
錯(cuò)誤檢測(cè)域包含一個(gè)字符(8位)。錯(cuò)誤檢測(cè)域的內(nèi)容是通過(guò)對(duì)消息內(nèi)容進(jìn)行循環(huán)冗余檢測(cè)方法得出的。CRC域附加在消息的最后,故CRC字節(jié)是發(fā)送消息的最后一個(gè)字節(jié)。
4.錯(cuò)誤檢測(cè)方法
(1)超時(shí)檢測(cè)
用戶要給主設(shè)備配置一個(gè)預(yù)先定義的超時(shí)時(shí)間間隔,這個(gè)時(shí)間間隔要足夠長(zhǎng),以使任何從設(shè)備都能做出正常反應(yīng)。如果從設(shè)備檢測(cè)到傳輸錯(cuò)誤,消息將不會(huì)接收,也不會(huì)向主設(shè)備做出回應(yīng),這樣超時(shí)事件將觸發(fā)主設(shè)備來(lái)處理錯(cuò)誤。發(fā)往不存在的從設(shè)備的地址也會(huì)產(chǎn)生超時(shí)。
(2)CRC檢測(cè)
CRC域是一個(gè)字節(jié),檢測(cè)了整個(gè)消息的內(nèi)容。它由傳輸設(shè)備計(jì)算后加入到消息中。接收設(shè)備重新計(jì)算收到消息的CRC,并與接收到的CRC域中的值比較,如果兩個(gè)值不同,則有誤,從設(shè)備對(duì)此消息不做回應(yīng)。
通信網(wǎng)絡(luò)只設(shè)有一個(gè)主機(jī),所有通信都由它發(fā)起。網(wǎng)絡(luò)可支持254個(gè)之多的遠(yuǎn)程從屬控制器,但實(shí)際所支持的從機(jī)數(shù)要由所用通信設(shè)備決定。
- 大學(xué)計(jì)算機(jī)基礎(chǔ)(第二版)
- C程序設(shè)計(jì)簡(jiǎn)明教程(第二版)
- 小創(chuàng)客玩轉(zhuǎn)圖形化編程
- Web Scraping with Python
- Web交互界面設(shè)計(jì)與制作(微課版)
- Vue.js 3.x從入門到精通(視頻教學(xué)版)
- Android 應(yīng)用案例開(kāi)發(fā)大全(第3版)
- Android應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)
- Python數(shù)據(jù)可視化之美:專業(yè)圖表繪制指南(全彩)
- SwiftUI極簡(jiǎn)開(kāi)發(fā)
- 超簡(jiǎn)單:用Python讓Excel飛起來(lái)(實(shí)戰(zhàn)150例)
- 從零開(kāi)始學(xué)Selenium自動(dòng)化測(cè)試:基于Python:視頻教學(xué)版
- Redmine Cookbook
- AngularJS UI Development
- Parallel Programming with Python