Kas notiek, ja divu mezglu ID segmenti ir vienādi?
CAN autobusu tīkli principā neļauj diviem mezgliem būt vienādam ID segmentam, bet kas notiek, ja divu mezglu ID segmenti ir vienādi?
Pirms eksperimenta mums ir jābūt skaidrai izpratnei par CAN vēstījumu struktūru un šķīrējtiesas principiem.
Pirmkārt, CAN ziņu struktūra
Visbiežāk izmantotais CAN-bus tīkla standarts ir V2.0 versija. Šo standartu tālāk iedala A un B daļās. To galvenā atšķirība ir ID koda garums šķīrējtiesas jomā. Starp tiem CAN2.0A (standarta rāmis) ir 11 bitu ID, CAN2.0B (paplašināt kadrs) ir 29 bitu ID. Tālāk 1. tabulā ir parādīta CAN ziņojuma struktūra:
1. tabula CAN ziņu struktūra
| Fāzes nosaukums | Fāzes garums / bits | Apraksts | |
| SOF | 1 | ir datu fāzes sākums, un veido viens dominējošais bits | |
| Abtrišanas fāze | Standarta rāmis | 12 | Norāda rāmja prioritāti, veido 11 ID adreses un 1 RTR |
| pagarināts rāmis | 32 | Norāda rāmja prioritāti, sastāv no 29 ID adresēm, 1 bitu SRR, IDE pagarināts un RTR | |
| Kontroles fāze | 6 | ir datu segmenta datu garuma grupas kods un rezervētie biti | |
| Datu fāze | 0 ~ 8 | datu saturs, kontroles posms kontrolē datu garumu | |
| CRC | 16 | pārbaudiet rāmja transmisijas erro, no SOF uz datu fāzi, visu saturu, izņemot pildīšanas bitus | |
| ACK | 2 | cits mezgls apstiprina šo rāmi, kas pareizi saņemts | |
| Rāmja beigas | 7 | ir rāmja gala | |
Otrkārt, šķīrējtiesas princips
CAN autobusu šķīrējtiesa ir balstīta uz "līniju un principu", kā parādīts 1. attēlā. Kad raiduztvērējs vienlaicīgi emitē dažādu līmeņu signālus, recesīvā līmenī vienmēr ir dominējošais līmenis. Ziņojuma nosūtīšanas laikā CAN kontrolleris uzraudzīs, vai autobusa statuss ir tāds pats kā pats nosūtītais. Ja neatbilstība rodas ID segmentā, šķīrējtiesa notiks. Ja tas notiek citās vietās, tiks aktivizēta atbilstošā kļūda.
Turpmākais ir galvenais jautājums. Ko darīt, ja divu mezglu ID segmenti ir vienādi? Mēs sākām eksperimentu ar divām CAN kartēm un vienu CANScope. CAN karte simulē CAN standarta mezglu, lai nosūtītu un saņemtu ziņas, un CANScope veic komunikāciju uzraudzību, kā parādīts 2. attēlā.
2. att. Eksperimenta platformas būvniecība
Treškārt, eksperimentējiet vienu: "ID segments ir vienāds, bet dati atšķiras"
CAN karti izmanto, lai nosūtītu CAN rāmi ar ID 000H datiem uz 01020304050607H un citu CAN karti, lai nosūtītu CAN rāmi ar 000H datiem līdz 02020304050607H. DNS, ko uzklausa CANScope, parādīts 3. attēlā. Var novērot, ka ir daudz datu lauka aizpildīšanas kļūdas.

3. attēls Datu lauka aizpildīšana kļūda
Kāpēc tas tā ir? Mēs vispirms iegūstam viļņu formas, kas atbilst divām CAN kartes pārraides ziņām, kā parādīts 4. attēlā. Tā kā divu spraudņu ziņojums ir standarta datu frames, un katrs rāmis satur 8 bitus datu, viļņu formas, kas atbilst diviem pakešu rāmjiem, ir ID ID segmentā, RTR, IDE, R0 un DLC segmentos. Tāpēc šķīrējtiesas loma nav efektīva, un abi mezgli uzskata sevi par prioritāti un turpina sūtīt datus.
Tagad mēs koncentrējamies uz datu segmentu, pirmie baitu dati ir vienādi, ir 00H; otrais baits ir atšķirīgs, attiecīgi 01H, 02H. 5. attēlā redzamās bultiņas norāda, ka atbilstošo bitu loģika ir attiecīgi 0 un 1. Agrāk mēs minējām, ka CAN mezgls noteiks, vai autobusa līmenis ir tāds pats kā tā sūtījumam nosūtītais līmenis. Ja neatbilstība rodas šķīrējtiesā, kurā nav šķīrējtiesas, tiek aktivizēta atbilstošā kļūda, tādēļ, ja abi rāmji tiek nosūtīti uz autobusu, tajā pašā laikā ir jāparādās bitu kļūdas. Tā kā bitu sūtīšanas kļūda izraisīs mezgla nosūtīšanu 6 dominējošo bitu, kas pārkāpj aizpildīšanas kārtulu (aktīva kļūda iznīcina rāmja datus), parādās datu lauka aizpildīšanas kļūda, kā parādīts attēlā. 3

5. attēls. Datu lauka konflikti
Ceturtkārt, eksperimentējiet divus "vienus un tos pašus datus ar vienu un to pašu ID"
Tajā pašā laikā izmantojiet divas CAN kartes, lai nosūtītu CAN kadrus, kuru ID ir 000H datu 01020304050607H, un CANScope veic komunikāciju uzraudzību. Pirmkārt, mēs nepārbaudām opciju "autobusu atbilde", lai CANScope darbotos tikai klausīšanās režīmā. Eksperimentālie rezultāti ir parādīti 6. attēlā, un atbildes ierobežotājs ir nepareizā formātā.
6.attēls Atbildes noņemšanas formāta kļūda
Kāpēc tas notiek? Mezgls, kas sūta ziņojumu, ACK segmentā nosūtīs divus recesīvos bitus. Ja pirmajā bitē tiek uztverts dominējošais līmenis, rāmis tiek uzskatīts par pareizi saņemtu. Tā kā abie šķīrējtiesneši uzskata, ka viņi ir ieguvuši šķīrējtiesas tiesības, ja tiem ir viens šķīrējtiesas process, viņi gaida atbildi ACK segmentā, bet tīklā ir tikai divi mezgli. Tādēļ ACK segmentā nevar saņemt nekādu atbildi, un tiek konstatēta atbildes noņemšanas kļūda. Vienkārši runājot, šī situācija ir līdzīga tam, ka autobusi nevarēs nosūtīt tikai vienu mezglu. 7. attēlā parādīts vilnim salīdzinājums, ja ACK segmentā nav atbildes.
Att.7 ACK atbilde
Mēs pārbaudām autobusa atbildi un atkal sāk eksperimentu (šajā laikā autobusā ir 3 mezgli). Šajā laikā, kā parādīts fig. 8, autobusu dati tiek nosūtīti un saņemti normāli.
8. attēls. Sāciet BUS atbildi
Kopsavilkums: ja divi mezgli vienlaikus nosūta paketes ar vienu un to pašu ID un datiem, rodas kļūda laukā. Ja divi mezgli sūta paketes ar vienu un to pašu ID un tos pašus datus, kļūda rodas, ja citi mezgli atbild. Citi mezgli atbildēja ar atbildes kļūdu. Tāpēc, projektējot CAN autobusu, mums vajadzētu izvairīties no vienas situācijas ID segmentā.





