Avatar billede bennyn Nybegynder
02. juni 2013 - 19:01 Der er 5 kommentarer og
1 løsning

Hente Værdier via Modbus TCP

Vi har et moniteringsmodul hvor vi forsøger at hente data ud fra.

Værdien vi skal komme frem til ligger omkring de 230

vi får dette svar fra modulet
Status:
readMultipleRegisters: START
Connected
Packet: b87700000006000310ab0002
Send
Wait data ...
Data received
Packet: b877000000070003044367d70a
Modbus response error code: NOERROR
Disconnected
readMultipleRegisters: DONE


Data:
Array
(
    [0] => 67
    [1] => 103
    [2] => 215
    [3] => 10
)


-1.5202209549517E+14

Er der nogen der har et godt forslag til hvordan vi får vist den rigtige værdi
Avatar billede plc-consult Nybegynder
03. juni 2013 - 11:22 #1
Word swap

    [0] => 67
    [1] => 103
    [2] => 215
    [3] => 10

    [0] => 215
    [1] => 10
    [2] => 67
    [3] => 103
Avatar billede bennyn Nybegynder
03. juni 2013 - 11:43 #2
Hej PLC-Consult

Det forstod jeg ikke ret meget af..
Kan jeg overtale dig til at forklare nærmere
Avatar billede plc-consult Nybegynder
03. juni 2013 - 13:26 #3
Hej

Det data array du viser består af 4 bytes eller 2 16 bit words
Det du skal gøre for at få vist det rigtige tal at bytte de to ord
eller 4 bytes

byte 2 flyttes til byte 0 plads
byte 3 flyttes til byte 1 plads
byte 0 flyttes til byte 2 plads
byte 1 flyttes til byte 3 plads
Avatar billede bennyn Nybegynder
03. juni 2013 - 19:46 #4
Hej Plc Consult
Jeg er ked af at ulejlige dig igen.
Måske er jeg lidt tung i opfattelsen.
Når nu De er byttet rundt som du illustrerer, hvordan kommer jeg så frem til det rigtige tal

endnu engang tak for dit forsøg på at hjælpe mig
Avatar billede plc-consult Nybegynder
03. juni 2013 - 22:22 #5
Jeg er ingen ørn til php men dette burde virke

$data = array( 215, 10,67,103,);

$value = (($data[3] & 0xFF)<<16) |
                    (($data[2] & 0xFF)<<24) |
                    (($data[1] & 0xFF)) |
                    (($data[0] & 0xFF)<<8);
                   
print $value;

$ulong = pack("L", $value);
        // set float
        $float = unpack("f", $ulong);
       
      print $float[1];
Avatar billede bennyn Nybegynder
04. juni 2013 - 22:24 #6
Så tror jeg det lykkedes - ellers vender jeg tilbage..

1000 tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester