so war gerade am Auto und hatte eine Eingebung mit Erfolg:
Ich habe mir die Nettodaten nochmal angesehen. Es geht um die rot markierte Zeile, das ist die Adresse von OEL_MAX_WERT aus dem NCSDummy. Das sind ja 7 Bytes und nicht 8. Also gleich nochmal den Lesebuffer angepasst.
B 00300000,0010,FF,AB,0A,04,50,05,00,1E,1E,1E,1E,1E,7D,7D,05,14
B 00300010,0002,0F,0F
B 00300100,0010,67,FF,FF,FB,FF,FF,FF,FF,F7,FF,FF,FF,FF,FF,FF,FF
B 00300110,0010,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF
B 00300120,0010,FF,FF,FF,FF,FF,FF,EF,FF,FF,FF,FF,FB,FF,FE,FF,FF
B 00300130,0010,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,7D,03,00
B 00300200,0009,00,23,5C,DC,A3,4A,5D,B5,A2
B 00300300,0007,A4,4A,CA,24,00,FF,FF
B 00300400,0010,4B,0F,00,58,05,07,55,80,00,50,08,00,00,00,90,00
B 00300410,0003,00,03,00
B 00300500,0010,0B,20,50,0A,05,82,03,03,88,00,10,22,36,4A,00,14
B 00300510,0003,2C,42,4A
B 00300600,0010,95,74,0B,1A,04,E8,12,32,06,19,00,69,00,C8,00,22
B 00300610,000E,01,7C,01,19,00,63,00,E1,00,3B,01,7C,01,00
B 00300700,0006,0C,02,02,FF,FF,0C
B 00300800,0010,2E,28,40,DC,05,2C,01,3C,00,10,0E,50,46,FF,FF,E0
B 00300810,0004,1E,08,10,60
B 00300900,0010,FC,50,0A,41,C1,C1,91,C1,91,91,64,91,3C,C1,30,91
B 00300910,0010,18,C2,18,92,01,92,C2,D2,32,FF,FF,FF,FF,FF,FF,FF
B 003C0300,0005,00,25,11,14,20
B 003C0400,0004,B1,01,58,E8
B 003C0F00,0004,0C,07,0B,00Also habe ich nochmal T32 gestarten und den JOB c_c_lesen mit folgenden Buffer aufgerufen
Position: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
Buffer: 01 01 01 01 00 00 00 00 00 00 00 00 00 07 00 00 00 00 03 30 00 FF FF FF FF FF FF FF 03
Bytes: 00 01 02 03 04 05 06 Position 13 muss auf 07 gesetzt werden, da 7 Bytes lesen werden sollen. An Pos 17-20 trägt man die Adrresse aus NCSDummy ein.
Adresse sieht man auch in den Nettodaten B 00300300. Dieser Wert muss noch auf die Positionen im Buffer Byte 17,18,19,20 Wortadresse (low/highbyte, low/highword)
highWord | lowWord | highByte | lowByte
Adresse B 00 | 30 | 03 | 00
Pos 20 | 19 | 18 | 17 Somit muss von rechts nach links in den Buffer eingetragen werden. Adresse B 00 30 03 00 -> ergibt 00 03 30 00
Position: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
Buffer: 01 01 01 01 00 00 00 00 00 00 00 00 00 07 00 00 00 00 03 30 00 FF FF FF FF FF FF FF 03Dann ab Pos 21-28 7 mal FF auffüllen, das ist reservierte Patz für die zu lesenden Bytes.
Position: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
Buffer: 01 01 01 01 00 00 00 00 00 00 00 00 00 07 00 00 00 00 03 30 00 FF FF FF FF FF FF FF 03In T32 DATA Checkbox anhaken und Job c_c_Lesen einmal ausführen. Und siehe da, erhält man auch ein Ergebnis und keine Fehlermeldung mehr.
T32 Results
apiJobData("KOMBI60","c_c_lesen",{DATA}, 29,"")
{DATA}: 29 Bytes
0000 : 01 01 01 01 00 00 00 00 00 00 00 00 00 07 00 00 ........ ........
0010 : 00 00 03 30 00 FF FF FF FF FF FF FF 03 ...0.ÿÿÿ ÿÿÿÿ.
Satz : 0
OBJECT = kombi60
SAETZE = 1
JOBNAME = c_c_lesen
VARIANTE = KOMBI60
JOBSTATUS =
UBATTCURRENT = -1
UBATTHISTORY = -1
IGNITIONCURRENT = -1
IGNITIONHISTORY = -1
Satz : 1
CODIER_DATEN = 29 Bytes
0000 : 01 01 01 01 00 00 00 00 00 00 00 00 00 07 00 00 ........ ........
0010 : 00 00 03 30 00 A4 4A CA 24 00 FF FF 03 ...0.¤JÊ $.ÿÿ.
JOB_STATUS = OKAY
_TEL_ANTWORT = 14 Bytes
0000 : 8A F1 60 62 30 03 A4 4A CA 24 00 FF FF 4A ?ñ`b0.¤J Ê$.ÿÿJOrange ist wieder die Adresse und grün die Codierdaten, genau 7 Bytes.
Um nun BMW M (Motorsport) Wert 00 am Byte 01 mit MASK 08 zu codieren
Bytes 00 01 02 03 04 05 06
A4 4A CA 24 00 FF FF 03
Hex Binär (blau MASKe 08)
Byte 01 = 4A = 01001010
BMW M 42 = 01000010 Das wäre in Nettodaten
B 00300300,0007,A4,42,CA,24,00,FF,FFOEL_MAX_WERT wird an BYTE 02 mit MASK 3F codiert, dabei muss lt. NCSDummy der gewünschte maximale Ölwert / 10 geteilt werden. Für 150° muss 15 codiert werden.
Hex Binär (blau MASKe 3F)
Byte 02 = CA = 11001010 (Falls man CA stehen lassen würde müssten 100° als OEL_MAX_WERT gesetzt sein A = 10 = 100°)
OEL_MAX CF = 01001111 Das wäre in Nettodaten
B 00300300,0007,A4,42,CF,24,00,FF,FFPosition: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
Buffer: 01 01 01 01 00 00 00 00 00 00 00 00 00 07 00 00 00 00 03 30 00 A4 42 CF 24 00 FF FF 03
Bytes: 00 01 02 03 04 05 06T32 JOB c_c_Schreiben 01 01 01 01 00 00 00 00 00 00 00 00 00 07 00 00 00 00 03 30 00 A4 42 CF 24 00 FF FF 03
DATA Checkbox anklicken und Job einmal ausführen.