P.B. Programování Mosaic 5. 2. 2025 11:29 4. 2. 2025 14:30

Dobry den,

programuji implementaci tcp protokolu funkci fbRecvFrom a resim jeden problem.

Kdyz vyctu mene dat nez je velikost zony a dalsi data neustale chodi tak prijdu o data ktera nebyla vyctena ze zony.

Pri tomto chovani se nastavi COM_ERR3. 

Jsou scenare kde je nutne nevycist cely obsah napr reasemblace ramcu. Interface FB ma na vstupu nastavitelnou velikost bufferu kam se data vycitaji. Jedna se o TCP spojeni ktere se musi umet uridit samo bez vypadku dat.

Ocekavane chovani je ze si FB pouze doplni volne misto nebo zahodi cele TCP spojeni, zadny mezistav.

 

Odpovědi 2

M.B. 4. 2. 2025 14:25

Dobrý den,

pokud používáte fbRecvFrom nad kanálem vytvořeným v IO Configurátoru, pak jediný způsob jak se vyhnout chybě COM_ERR3. je číst vždy velikost odpovídající velikosti přijímacího bufferu kanálu. Slkládání rámců je pak nutné řešit v rámci nadřízeného algoritmu.

V případě, kdy se používá spojení vytvořené pomocí OpenUniSocket nebo OpenUniChannel, se velikost přijímacího bufferu nastavuje dle vstupu lenRx bloku fbRecvFrom. Pokud chceme mezi cykly PLC velikost přijímacího buferu měnit je nutné po přijetí dat zavolat blok ještě jednou s parametrem rq := 0 a lenRx nastavenou na novou velikost. To způsobí, že následující cyklus se vyčte právě jen lenRx bajtů.

P.B. 4. 2. 2025 14:30

Dekuji za informaci.

Tento dotaz je vyřešený.