Sida 4 av 4
Re: Göra om UDP-data till seriell data
Postat: 29 oktober 2016, 19:46:02
av Magnus_K
EDIT: Såg ditt nya meddelande precis när jag skulle posta det här ,
sc3.
Ska läsa igenom det riktigt och återkomma!
sc3 skrev:
Du ska inte starta nc.exe och sedan ge kommando utan du startar det med växlarna mankan föreslog. Det som händer då är att netcat startar och kör en evig loop med instruktionerna som du angav. Prova detta;
Fungerade kanon

Förstod inte att jag kunde köra det i ett enda kommando utan trodde man var tvungen att "starta" programmet först och sen kommandot. Tack!
@Nerre:
När jag inte använder -p så klagar den på att "UDP listen needs -p arg". Antagligen har jag en version som kräver det argumentet.
De som är riktigt spännande är jag står på målsnöret nu!
Gjorde som du/ni skrev, dvs att ta en sak i taget. Genom att skriva
nc -lu -p 5004 och trycka enter så händer inget mer utan antog att netcat nu var i lyssna mode, och visst var den det!
Om jag skickar ett hello från win-datorn genom
echo -n "hello" | nc -u -q1 192.168.1.8 5004 så ploppar det upp "hello" hos RPi:n. Skickar jag hello från PAcket Sender till RPi:n så dyker hello också upp. Problemet verkar dock vara hos windowsmaskinen.
Fastän det ser ut som att den lyssnar och att meddelandet "går fram" så visar den inte meddelande. Kan det vara något jag missar?
Ursäkta mitt röra svar men är alldeles i eld och lågor efter att vara så nära. Ungefär som morsan när hon kollar på hockey

Re: Göra om UDP-data till seriell data
Postat: 29 oktober 2016, 20:22:27
av sc3
Visar den ett meddelande "första" gången, dvs att du bara får ett (1st) hello?
Då är det isåfall som jag skrev att netcat förväntar sig att det ska komma paket från "samma uppkoppling" även fast UDP inte är uppkopplingsorienterat som TCP. Så då behöver du använda socat eller någon annan lösning
Re: Göra om UDP-data till seriell data
Postat: 29 oktober 2016, 20:32:05
av Magnus_K
Njooo... Testade efter att ha läst ditt meddelande och det kommer bara upp ett "hello", oavsett hur många gånger jag skickar.
Även om jag använder -k.
netcat i win-burken har ännu inte visat något meddelande alls. Det kanske är brandväggen eller annat tok.
Det var synd att det inte gick att göra så här då. Det lät jätteintressant med det där om python-koden men där är jag verkligen lost.
Jag vet inte om några problem med att använda TCP förutom att jag själv aldrig gått nära det. Nu har jag alltså lyckats skicka och ta emot UDP-data från RPi, Arduino och min PLC vilket också är anledningen varför jag valde just UDP.
Re: Göra om UDP-data till seriell data
Postat: 29 oktober 2016, 20:34:23
av sc3
Att köra TCP ska inte vara några större problem hoppas jag. Kan din PLC det?
Re: Göra om UDP-data till seriell data
Postat: 29 oktober 2016, 20:39:58
av Magnus_K
Det verkar som det. Det är en WAGO PLC med Codesys, och det verkar finnas bra bibliotek för det.
Re: Göra om UDP-data till seriell data
Postat: 29 oktober 2016, 22:57:28
av sc3
På netcat sidan är det enkelt att gå över till TCP. Vad jag förstår har du PLCet som pratar med Raspberryn, eller du kan iaf labba med den så. Kör då denna serverdel på den för labb:
Den startar en TCP server och skriver ut till skärmen, när kopplet stängs ned startar den om. Dvs svara på nytt anrop efter det andra. Det som behövs är att göra det så att det dirigerar om trafiken senare till den virtuella serieporten, samt att skriva "loopen" i en bat fil för windows.... men en sak i taget.
för att testa skickar du tex. från samma dator men det tror jag du hajjar:
Re: Göra om UDP-data till seriell data
Postat: 29 oktober 2016, 23:12:53
av Magnus_K
Nej PLC:n är också en "nod" som skickar data men vi kan glömma den och Arduinon. Det blir ett senare skede samt att datan från dessa ska inte hanteras av lizerds mjukvara. Så setup:en är just nu enbart att få kommunikationen mellan RPi:n och windows-laptop:en att lira.
Med hjälp av dina kodsnuttar där så har jag lyckats skicka TCP-paket från RPi:n till win-datorn, och motsatt
Ska jobba lite med det här nu och se om jag kan skrämma igång det
Tack för all hjälp!
Re: Göra om UDP-data till seriell data
Postat: 29 oktober 2016, 23:43:10
av Magnus_K
Efter lite

så kommer här en skärmdump från
Lizerdboy
mjukvara.
"Hello" är skickat via TCP från RPi:n till win-datorn där det "virtuellt" vart ute och vänt på två COM-portar för att sluta upp i mjukvaran.
Nu är jag så jäkla glad så jag nästan spricker. Kvar är att försöka göra den där while-loopen i .bat-filen för det enda den innehåller just nu är:
C:\Netcat\nc.exe -l -p 5004 > \\.\COM54; PAUSE
Liz.JPG
Re: Göra om UDP-data till seriell data
Postat: 30 oktober 2016, 12:12:06
av sc3
Kanon! Bra jobbat!
Det tar emot att rekommendera 'GOTO' men i detta fall kanske man kan se mellan fingarna, (det var första google svaret och jag har ingen windowsmaskin att testa på):
Kod: Markera allt
:loop
C:\Netcat\nc.exe -l -p 5004 > \\.\COM54
goto loop
Re: Göra om UDP-data till seriell data
Postat: 30 oktober 2016, 12:33:36
av Magnus_K
Tack!
Kikade på loopen igår också men var kanske feg. Finns det risk att man hänger datorn och krasch som följd?
Sen måste jag fråga om bat-filer också.
Om jag inte avslutar med PAUSE så blinkar fönstret bara till och sen försvinner. Det kommer den inte göra ön man gör en loop alltså?
Det jag tänker på är hur jag avslutar loopen om det inte är något synligt fönster?
Ps. Tack för att du lägger tid på det här fastän det är win-relaterat. Ds
Re: Göra om UDP-data till seriell data
Postat: 30 oktober 2016, 16:17:53
av sc3
Nä, den kommer inte att spinna okontrollerat i loopen. Det som händer är att programmet:
"blockar", dvs den startar en server och väntar på en tcp-connection, när klienten kopplar ner avslutar programmet. Men vi vill ju starta om och vänta på nästa tcp-koppel som kommer från en annan eller samma klient. Så där kommer loopen in och återstartar programmet. Det är därför du var tvungen att lägga in PAUS i programmet för att kunna hänga med när det ville avsluta.
Eftersom du vill ha detta som en permanent "omdirigering"(?) så låter vi bara den gå efter start. Jag tror att du avbryter med Ctrl+C eller liknande.
Ifall du vill se en "logg" i ditt fönster kan du lägga in tex ett
(tror det är rätt windows syntax)
För varje paket(egentligen uppkoppling) som det tar emot så skriver den ut att det fått ta emot och dirigerat om, sedan startar den netcat servern igen.
Sen kan du sätta upp så att det automatiskt startar när du startar datorn, men se då till att du startat programmet som skapar dom virtuella portarna först, annars blir det nog stök med Netcat scriptet.
Det som ev ställer till det på klientsidan är att det är en annan klient som just kopplat upp sig på samma port, men det går att "koda runt" genom att prova igen direkt efteråt ca 5ggr innan man ger upp. Men det löser vi ifall det problemet kommer upp.
Tillägg till loopen enligt ovan:
Kod: Markera allt
loop
C:\Netcat\nc.exe -l -p 5004 > \\.\COM54
ECHO Received and redirected packet
goto loop
Re: Göra om UDP-data till seriell data
Postat: 30 oktober 2016, 21:16:45
av Magnus_K
Nu ska ni få höra på något väldigt märkligt...
Fick loopen att fungera enligt
sc3
inlägg. Sköt ner kommandotolken för att greja med lite annat men för att sen återgå till ämnet.
Det märkliga är att denna gången hände ingenting när jag skickade packet.
Det såg precis ut som att den väntade på inkommande paket men inget hände när ett paket kom.
Förstod inte vad som hade hänt då jag inte ändrat en siffra sen senaste försöket, men fick börja om från början.
Tog bort loopen och satte en PAUSE där istället. Nej, lika dött... Va nu då?? Kollade så jag hade skrivit fel i .bat-filen, nejdå det står precis som innan. Sen kollar jag i kommandotolken (när bat-filen körs) och tror inte mina ögon. Se nedan och jämför raderna, översta är
exakt vad som står i bat-filen och understa raden är vad som verkligen körs i kommandotolken. Hur kan det bli så?
När jag hade sett det här så plockade jag bort "redirecten" till COM-porten och då fungerar loopen kalas igen, men skickar givetvis inget till COM54.
Det är väl knappast någon som sett det här tidigare?
Har även verifierat att COM54 existerar.
EDIT: Här är någon med samma problem. Återkommer i ärendet!
EDIT2: Det verkar som att det ska vara så, bara att jag inte lagt märke till det innan. Det verkar fungera nu efter jag startade mjukvaran som "lyssnar" på COM55 (dvs COM54 med com0com). Suddar vidare men loopen verkar lira!
Kod: Markera allt
C:\Netcat\nc.exe -l -p 5004 > \\.\COM54
C:\Netcat\nc.exe -l -p 5004 1>\\.\COM54
Re: Göra om UDP-data till seriell data
Postat: 30 oktober 2016, 23:25:36
av Magnus_K
Japp, det var antagligen att jag inte hade startat upp lizerds mjukvara (som är "kopplad" till COM-porten) som gjorde att det inte fungerade.
Loopen fungerar utmärkt men verkar inte kunna starta om speciellt snabbt. Skickar jag paket snabbare än en sekund så verkar det börja "studsa". Spelar ingen roll i nuläget för jag kommer bara sampla en gång i sekunden.
nu ska bara hårdvaran på plats, sen ska här loggas!
Tackar för all hjälp
