23. maj 2010 - 23:53Der er
19 kommentarer og 1 løsning
Kommunikation mellem PHP og en PLC-styring
Hey, mangler hjælp til kommunikation melllem en PHP hjemmesiden og en PLC kodet i basic.
Jeg mangler hjælp til at forbinde en hjemmeside med en simpel PLC styring. Har prøvet med fsocketopen() osv.. men intet virker.
Pt. ligger styringen på et lokalt netværk - men planen er den skal være global. Derfor skal vi kunne "ringe" op til den og modtage et svar. PLC er på forhånd kodet til at registrere et opkald og en kode, men hvordan sender jeg forespørgslen i PHP?
PLC KODE: (* PLC START *) Dim s As Socket = Nothing Dim address As IPAddress address = IPAddress.Parse(url) Dim port As Integer port = 59004 Dim endPoint As New IPEndPoint(address, port)
Dim tempSocket As New Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp)
If ReadThis = "Open" Then tempSocket.Connect(address, 59004)
If tempSocket.Connected Then tempSocket.Send(bytesSentSend, bytesSentSend.Length, 0) For x = 1 To 2
bytes = tempSocket.Receive(bytesReceived, bytesReceived.Length, 0) Data = Data + Encoding.ASCII.GetString(bytesReceived, 0, bytes) + ControlChars.CrLf Next x End If tempSocket.Close()
End If (* PLC SLUT)
Forespørglsen skulle også gerne kunne virke på "forskellige" PLC anlæg.
Styrringen der er brugt er modellen CB290 og den har en XPORT som er en dongle fra seriel til ethernet. Selve styrringen sender data når den modtager en kode der fortæller hvilke registre der skal sendes.
Selve Plc koden og VWD koden er taget fra http://www.shelato.com/SecurityRobot/ og plc koden er ændret en lille smule for at kunne sende forskellige data.
Ønsket er dog at have samme funktion i PHP som der er lavet i VWD så der kan oprettes forbindelsen mellem siden og styrringen.
Serveren der skal afvikle PHP koden er windows baseret.
Jamen så er hele problemet jo, at din php ikke har installeret support for sockets. Hmmmmm.
Hvad er det for en webserver du kører (apache, IIS....)?
Jeg kan anbefale WAMP server til windows. Den installerer Apache, PHP og MySql.
Alternativt skal du have din nuværende PHP til at kunne håndtere sockets. Da min sidste Windows computer blev slagtet for næsten et år siden, til fordel for Linux, så er jeg ikke lige den rette til at svare på, hvordan du installerer et socket modul til din PHP.
Det er en linuxmaskine den til slut skal ligge på men lige nu er wamp kørende på min egen... Har lige sat sockets til... nu melder den bare fejl i forbindelsen... Måske der kunne være en firewall i router.. ?!
Weee, fået skidtet til at virke på en win-server... Lige testet på unix.. Det dutter ikke... Har prøvet at ændre AF_INET til AF_UNIX.. Dutter nix... Point når vi lige får den til at virke der...
Den skriver den slet ikke kender funktionen socket_create()
AF_UNIX er en unix/linux intern protokol, som bruges til at kommunikere internt mellem applikationer på unix/linux, så på Linux skal du også bruge AF_INET. AF_INET (Address Family INET) = IP addressering = nnn.nnn.nnn.nnn
Så denne kode virker lige så godt på Linux (jeg har KUN Linux). Her er iøvrigt en kortere (og meget hurtigere) version, hvor følgende er ændret: Sleep(2) er fjernet. Til gængæld er sidste parameter i socket_recv() ændret til 0, hvilket betyder at funktionen venter på svar. Dette skulle efter min mening være ok, da funktionen kun kaldes hvis PLC'en har accepteret connection.
Når du prøver koden på dit webhotel, har du så husket at ændre PLCens IP i php scriptet? Så skal IP jo være din wan ip, ikke ip'en på dit lokale net...
Efter at have testet php scriptet hos min webhoster, kan jeg konstatere, at her virker sockets.
Min webhoster er netplads.dk/gratisdns.dk - og det koster næsten ikke noget, og det er 'taletid' princippet: Du sætter lidt penge ind, når du synes - og så bli'r der trukket nogle øre pr dag. Og hvis du køber f.eks. et .DK domæne, så er du EJER af dette domæne, hvilket vil sige at den fremtidige pris kun er kr. 45,- årligt, afregnet direkte med DK-HOSTMASTER.
Så: Køb et domain, og få en fast IP (det kan din netudbyder forsyne dig med)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.