' schrieb:Noch eine Merkwürdigkeit
Bei IndexOffset 0 bekomme ich die Daten von Table 0. Doch wenn ich IndexOffset auf 0xFF stelle und über Table 0 hinaus Daten einlese, kommen plötzlich die Daten von Table 100!
Jeder IndexOffset größer 0xFF kommt wieder bei Table 0 raus, als ob der IndexOffset irgendwo auf 8bit begrenzt würde.
Habe auch schon den Programmcode durchforstet. Aber überall ist die Variable 32bit groß. Hast du eine Idee für dieses Merkwürdige Verhalten?
Gruß
O.
Also wie das genau geht kann ich leider auch nicht erraten und testen geht nicht da ich schon lange keine Hardware mehr hier habe. Aber die Daten sehen ja an sich vielversprechend aus. Du hast einen Offset von 0xFA und liest dann anscheinend 12 Bytes bevor die Daten der Tabelle 100 erscheinen. 0xFA ist -6 und die Register sind 2 Bytes was dann denn Offset von 12 Bytes erklären würde.
Warum die Daten der Tabelle 100 direkt denen der Tabelle 0 folgen ist mir auch nicht deutlich aber wird wohl ein internes Mapping im Controller sein.
Der IndexOffset ist wahrscheinlich tatsächlich auf 8 Bytes in den unteren 16 Bytes bechränkt da eine Tabelle wahrscheinlich nicht mehr dann 256 Register haben kann. ABER: gemäss Doku des BK9000/9100 sollte in den oberen 16 Bytes die Tabellennummer codiert sein. Deshalb die von mir vorgeschlagenen 0x64000E um das Watchdogregister anzusprechen, respektive 0x640000 in deinem Beispiel um einen Teil oder die ganze Tabelle zu lesen.
Das die Variable 32 bit gross ist hat einfach mit der Definition des ADS Protokolls zu tun. Dort werden halt nun mal 32 Bit Werte verwendet und ich sah keinen Grund um dies in den höher gelegenen VIs künstlich zu beschränken. Für den IO Bereich hat dies keine Bedeutung da dort der Offset linear ist aber für die Register wird eben die Tabellennummer und der Registeroffset zusammen in das 32Bit Word codiert.
Rolf Kalbermatter