mizl píše:fulda píše:Mimochodem - možná by stálo za úvahu naučit tento program "updatovat" knihovny v MultiMAUS.
Mohl bych to někoho naučit, je to celkem jednoduché. Připojí se GenLI do slave konektoru, program odešle jména a čísla mašin a MM si je uloží.
nápad to není špatný. Mohl by jsi trochu přiblížit softwarovou komunikaci s myší ?? Třeba by se to dalo využít i jinak
. V tomto odvětví zaostávám
.
Ahoj,
nevím proč jsem tady nereagoval hned, asi jsem si nevšiml.
Komunikace je celkem jednoduchá, nutný předpoklad je, že máš ve slave konektoru zapíchlé nějaké rozhraní (LI100, GenLI, ...)
Nebo pochopitelně pokud máš NanoX, tak na rozdvojce, na tom nezáleží.
Rozhraní se tváří v PC jako sériový port, takže stačí otevřít,
- Kód: Vybrat vše
FPortHandle := CreateFile(PChar('\\.\'+sCom), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, longint(0));
nastavit správnou rychlost a atributy:
- Kód: Vybrat vše
if GetCommState(FPortHandle, dcbPort) then
begin
{ fill in the fields of the structure }
dcbPort.BaudRate := sSpeed; {9600}
dcbPort.ByteSize := 8;
dcbPort.Parity := NOPARITY;
dcbPort.StopBits := ONESTOPBIT;
dcbPort.Flags := $3005; {Hardware handshake = dcb_Binary or dcb_OutxCtsFlow or dcb_RtsFlow}
SetCommState(FPortHandle, dcbPort);
end;
A pak už jen zapisovat:
- Kód: Vybrat vše
WriteFile(FPortHandle, PChar(sData)^, Length(sData), dwCharsWritten, nil);
a nebo číst:
- Kód: Vybrat vše
ReadFile(FPortHandle, PChar(Result)^, cbCharsAvailable, cbCharsRead, nil);
a na konci pak uzavřít:
- Kód: Vybrat vše
Result:=CloseHandle(FPortHandle);
Tak a teď jak se posílá "knihovna". Příkaz pro knihovnu je: 0xEA 0xF1 AddrH AddrL IDX SIZE [NAME][XOR]
To znamená, že pošleš bajt 0xEA, za ním 0xF1 (to 0x znamená, že je to hexa).
Pak pošleš horní polovinu čísla lokomotivy, a spodní polovinu, pak pošleš pořadové číslo položky (počítá se od 0 do počet lokomotiv -1)
Další číslo je celkovej počet lokomotiv
Pak je Ascii jméno lokomotivy - musí bejt 5 znaků, pokud chceš jen 4 znaky, tak první znak bude místo 0xEA jen 0xE9, pro tříznakové jméno 0xE8
a na konci pošleš kontrolní součet, ten vznikne tak, že je to XOR všech předchozích znaků.
Pak dostaneš odpověď 0xE2 0x61 0x82 0xE3
Každou lokomotivu posíláš dvakrát za sebou, pokaždé s mezerou alespoň 100ms.
- Kód: Vybrat vše
příklad 4 loco:
0003 "BR140"
0004 "BR86"
0005 "BR70 "
0006 "BR110"
EA F1 00 03 00 04 42 52 31 34 30 39
E2 61 82 E3
{100ms}
EA F1 00 03 00 04 42 52 31 34 30 39
E2 61 82 E3
{100ms}
E9 F1 00 04 01 04 42 52 38 36 07
E2 61 82 E3
{100ms}
E9 F1 00 04 01 04 42 52 38 36 07
E2 61 82 E3
{100ms}
EA F1 00 05 02 04 42 52 37 30 20 2F
E2 61 82 E3
{100ms}
EA F1 00 05 02 04 42 52 37 30 20 2F
E2 61 82 E3
{100ms}
EA F1 00 06 03 04 42 52 31 31 30 3A
E2 61 82 E3
{100ms}
EA F1 00 06 03 04 42 52 31 31 30 3A
E2 61 82 E3