Toon posts:

C++ programma aansturen met php

Pagina: 1
Acties:
  • 105 views sinds 30-01-2008

Verwijderd

Topicstarter
Hallo allemaal,

Ik heb een werkende c++ code welke er voor zorgt dat er 8 ledjes aan en uit kunnen. Deze code werkt.
Nu wil ik er alleen voor zorgen dat ik via php deze leds aan en uit kan doen. Ik heb al veel gezocht op het internet maar kan niet vinden wat ik verkeert doe of wat ik ben vergeten. misschien kunnen jullie me helpen? hieronder staat de c++ code en de php code.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
//#include "Unit1.h"
#include "winbase.h"
#include "windef.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
HANDLE    hcom;

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
        DCB dcb;
        DWORD NumberOfBytesWritten;
        //char number;
        //int a,b,c,d,e,f,g,h,i,j,k;
        HANDLE  hcom = CreateFile ("Com1",
                GENERIC_READ|GENERIC_WRITE,
                0,
                0,
                OPEN_EXISTING,
                0,
                0);
        dcb.DCBlength = sizeof(DCB);
        GetCommState(hcom,&dcb);
        dcb.BaudRate = 4800;
        dcb.ByteSize = 8;
        dcb.Parity = NOPARITY;
        dcb.StopBits = ONESTOPBIT;
        SetCommState(hcom, &dcb);
       // SetCommState(


        //a = 0x01;
        //b = 0x02;
        //c = 0x04;
        //d = 0x08;
        //e = 0x10;
        //f = 0x20;
        //g = 0x40;
        //h = 0x80;
        //k = a + b+c+d+e+f+g+h;
        //cout << "argv[1]";
        //number = (argv[1]);
        WriteFile(hcom, &argv[1], 1, &NumberOfBytesWritten, NULL);
        Sleep(10);
        CloseHandle(hcom);
        return 0;
}


de php code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php
if (isset($_POST['Submit'])){
    if (!isset($_POST['a'])){
        $_POST['a'] = '0';
    }
    if (!isset($_POST['b'])){
        $_POST['b'] = '0';
    }
    if (!isset($_POST['c'])){
        $_POST['c'] = '0';
    }
    if (!isset($_POST['d'])){
        $_POST['d'] = '0';
    }
    if (!isset($_POST['e'])){
        $_POST['e'] = '0';
    }
    if (!isset($_POST['f'])){
        $_POST['f'] = '0';
    }
    if (!isset($_POST['g'])){
        $_POST['g'] = '0';
    }
    if (!isset($_POST['h'])){
        $_POST['h'] = '0';
    }
    $opgetelt = $_POST['a'] + $_POST['b'] + $_POST['c'] + $_POST['d'] + $_POST['e'] + $_POST['f'] + $_POST['g'] + $_POST['h'];
    $value = $opgetelt;
    print $value;
    $prog = "Project2.exe " . $value;
    exec($prog);
}
else {
?>
<form name="form1" method="post" action="">
  <p><br>
    1
    <input name="a" type="checkbox" id="a" value="1">
    <br>
    2
    <input name="b" type="checkbox" id="b" value="2">
    <br>
    3
    <input name="c" type="checkbox" id="c" value="4">
    <br>
    4
    <input name="d" type="checkbox" id="d" value="8">
    <br>
    5
    <input name="e" type="checkbox" id="e" value="16">
    <br>
    6
    <input name="f" type="checkbox" id="f" value="32">
    <br>
    7
    <input name="g" type="checkbox" id="g" value="64">
    <br>
    8
    <input name="h" type="checkbox" id="h" value="128">
    <br>
    <input type="submit" name="Submit" value="laat zien">
  </p>
  </form>
<?php
}
?>

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Haal die values uit je checkboxes, want afaik kan dat helemaal niet, en move die in plaats daarvan naar die grote list if's.

All my posts are provided as-is. They come with NO WARRANTY at all.


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Dat kan wel? Hiermee kun je 'on' overrulen.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Verwijderd

Topicstarter
ok. als ik nu gewoon een getal in geef. dus ik pas even het hele php scriptje aan waardoor hij heeel simpel word. dus dan word hij zo:
code:
1
2
3
4
    $value = '255';
    print $value;
    $prog = "Project2.exe " . $value;
    exec($prog);

dan zouden alle lampjes aan moeten gaan. maar dat gebeurd dus niet.
iemand een idee hoe het wel gaat werken?

  • TheJoxer
  • Registratie: Maart 2004
  • Laatst online: 14-05 22:40

TheJoxer

Nou ja, dat dus....

Verwijderd schreef op woensdag 08 november 2006 @ 20:30:
ok. als ik nu gewoon een getal in geef. dus ik pas even het hele php scriptje aan waardoor hij heeel simpel word. dus dan word hij zo:
code:
1
2
3
4
    $value = '255';
    print $value;
    $prog = "Project2.exe " . $value;
    exec($prog);

dan zouden alle lampjes aan moeten gaan. maar dat gebeurd dus niet.
iemand een idee hoe het wel gaat werken?
Moet die $value altijd 255 zijn?
Zoja, probeer dan eens een ouderwets .bat bestandje te maken...

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
TheJoxer schreef op woensdag 08 november 2006 @ 22:54:
[...]


Moet die $value altijd 255 zijn?
Zoja, probeer dan eens een ouderwets .bat bestandje te maken...
Nee, duh :)
lukkezeh gebruikt die 255 om te testen of het uberhaupt werkt ;)

Wellicht moet je een pad gebruiken voor die exec? (Ik roep ook maar wat, maar het lijkt me niet geheel onmogelijk ;) )

[ Voor 18% gewijzigd door RobIII op 08-11-2006 23:31 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • ggvw
  • Registratie: September 2001
  • Laatst online: 15-12-2024
Ik vermoed dat exec het bestand niet kan vinden (chdir) of de gebruiker waarmee de webserver draait heeft onvoldoende rechten tot het bestand.

Opgeteld.

  • TheJoxer
  • Registratie: Maart 2004
  • Laatst online: 14-05 22:40

TheJoxer

Nou ja, dat dus....

RobIII schreef op woensdag 08 november 2006 @ 23:30:
[...]

Nee, duh :)
lukkezeh gebruikt die 255 om te testen of het uberhaupt werkt ;)

Wellicht moet je een pad gebruiken voor die exec? (Ik roep ook maar wat, maar het lijkt me niet geheel onmogelijk ;) )
Ok :) Duidelijk ;)

Je moet bij exec idd wel een pad meegeven, tenzij het pad in je searchpath staat.

Verwijderd

Topicstarter
ik kan het bestand wel openen met exec. alleen hij geeft een foutieve waarde weer met de lampjes. het maakt ook niet uit welke waarde ik invoer in de php altijd komt er hetzelfde uit. ik denk dat de fout in het programma zit. kan iemand iets met deze info??

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Euh, hoe zijn die leds aangesloten? Ik zie dat je een serieële poort gebruikt in je code? En dien je het argument niet te converteren naar een byte (char)?

[ Voor 29% gewijzigd door RobIII op 09-11-2006 02:20 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 01-12 20:19

Gerco

Professional Newbie

Onder welke user draait de webserver? IUSR_$MACHINENAME heeft vast niet genoeg rechten om zomaar naar de seriele poort te gaan schrijven (www-data of apache warschijnlijk ook niet overigens). Als het op de cmdline wel werkt en vanuit PHP niet is dat waarschijnlijk je probleem. Het kan ook nog zo zijn dat de webserver je .exe file niet kan vinden, probeer een absoluut pad naar die file in te geven.

[ Voor 7% gewijzigd door Gerco op 09-11-2006 08:43 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

Topicstarter
de webserver kan de .exe file wel vinden. dat weet ik zeker.
hoe moet ik hem converteren naar een char?

  • Coca-Cola
  • Registratie: Maart 2001
  • Laatst online: 20:38
Voeg anders een paar debug statements toe aan je C++ programma... Dan kan je zien of je programma echt aangeroepen wordt en met welke argumenten... 1 Coutje lijkt mij wel voldoende...

Verwijderd

Ik moet zeggen dat ik vind dat je niet echt optimaal gebruikt maakt van de taal php.
Je kan het veel makkelijker en in veel minder code doen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
if($_SERVER['REQUEST_METHOD'] == "POST")
{
    $sum = array_sum($_POST);
    echo $sum;
    
    // $prog = "myProgram.exe";
    // exec($prog." ".$sum);
}
else
{
    $abc = 'abcdefgh';
    $str = '';
    
    for($i=1, $y=1; $i<=8; $i++, $y*=2)
    {
        $char = $abc{$i-1};
        $str .= $i.'<input type="checkbox" name="'.$char.'" id="'.$char.'" value="'.$y.'" /><br>';
    }
    
    echo '<form name="form1" method="post" action=""><p>'.$str.'<input type="submit" value="laat zien" /></p></form>';
}
?>

[ Voor 12% gewijzigd door Verwijderd op 09-11-2006 10:17 ]


Verwijderd

Topicstarter
Ik denk dat ik alleen nog ascii moet omzetten naar hexadecimaal. weet iemand hoe dit moet? misschien is dan mijn probleem opgelost. zeker weten doe ik het niet.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Verwijderd schreef op donderdag 09 november 2006 @ 15:48:
Ik denk dat ik alleen nog ascii moet omzetten naar hexadecimaal. weet iemand hoe dit moet? misschien is dan mijn probleem opgelost. zeker weten doe ik het niet.
Kom op joh, dat is toch wel te vinden? :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Ik snap helemaal niet hoe dat deel code werkt wat in jou link staat. misschien kun je er uitleg over geven?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Wat begrijp je er niet aan dan?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
waar ik mijn variabelen moet plaatsen

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Het zijn functies...je variabelen pass je daaraan door. Overigens is dat Javascript en puur bedoeld als voorbeeld, je zal zelf een PHP- of C++-functie moeten verzinnen die exact doet wat jij wil.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Je schrijft momenteel het adres van het 2e item uit de argumenten vector naar je com-poort. Wat dacht je van:
code:
1
2
char c = atoi(argv[1]);
WriteFile(comh, &c, 1);

Verwijderd

Topicstarter
hvdberg dat lukt niet ik krijg een foutmelding met atoi

  • DroogKloot
  • Registratie: Februari 2001
  • Niet online

DroogKloot

depenisvanjezus

En die foutmelding IS...? :z Toon eens een keer wat eigen initiatief, aan berichten van het kaliber "hij doet het niet" hebben we namelijk niets.

[ Voor 3% gewijzigd door DroogKloot op 09-11-2006 18:10 ]


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 14:58
Verwijderd schreef op woensdag 08 november 2006 @ 20:14:
Ik heb een werkende c++ code welke er voor zorgt dat er 8 ledjes aan en uit kunnen. Deze code werkt.
Maar weet je ook hoe die werkt? Nu stuur je de eerste byte van het eerste argument naar de COM port. Als je dan '255' argument geeft, wordt alleen de ASCII-waarde van '2' gestuurd dus, en dan gaan niet alle ledjes aan.

Verder is het een kwestie van zelf debuggen. Ik kan er niet bij dat je hier om hulp komt vragen terwijl je zelf nog niet eens getest hebt of je C++-programma werkt zoals je denkt.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Mja, het is dus niet de bedoeling dat we hier je handje gaan vast houden. Je bent voldoende in de juiste richting gewezen maar ik kan me niet aan de indruk onttrekken dat je je code ergens "geleend" hebt en geen idee hebt waar je mee bezig bent.

Als je dan ook nog eens niet de moeite neemt om te zeggen wat er fout gaat ("ik krijg een foutmelding") dan kunnen wij je ook niet helpen; je zult op z'n minst wat meer info moeten verschaffen en wat eigen initiatief moeten tonen; dat ontbreekt behoorlijk in dit topic. Kijk voor de gein eens de Programming Beleid Quickstart voor een leidraad waar je topic aan dient te voldoen in [PRG].

Mijn advies: verdiep je eens in C++ en in programmeren in het algemeen. Dit is erg basic en omdat dit zo langzamerhand op een "los mijn probleem eens op" of "fix mijn code eens" topic begint te lijken gaat het dan ook op slot.

Edit: Oh, en omdat ik niet de lulligste ben: atoi -> http://www.cplusplus.com/ref/cstdlib/atoi.html ;)

[ Voor 46% gewijzigd door RobIII op 09-11-2006 18:59 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1

Dit topic is gesloten.