Met PHP seriële compoort aansturen

Pagina: 1
Acties:
  • 364 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hi,

Ik wil via php een modem kunnen aansturen, deze heeft com21 toegewezen gekregen. Het onderstaande scriptje dat ook elders te vinden is gebruik ik hiervoor. Het lukt echter niet om de poort te open. Via hyperterminal kan ik de modem met dezelfde poortinstellingen gewoon benaderen. Verder heb ik al zonder succes geprobeerd om de compoort te wijzigen. Wel kan ik met dit scriptje de standaard faxmodem (com3) benaderen. Heeft iemand een idee wat ik verkeerd doe of wat ik nog eventueel kan proberen. Er zijn meerdere topics die hierover gaan, maar ik heb helaas geen oplossing kunnen vinden.

Alvast bedankt voor de moeite


<?php
"mode com21: BAUD=2400 PARITY=N data=8 stop=1";
$fp = fopen ("COM21:", "w+");
if (!$fp)
{
echo ":(";
}
else
{
echo ':)';
}
?>

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Sowieso is het handig om je code tussen [php] te zetten. Dat maakt het een stuk leesbaarder. Verder vraag ik me af wat je met de eerste regel wilt bereiken. Die slaat in deze vorm namelijk helemaal nergens op. Ben je soms een stuk vergeten te kopieren?

Tot slot is het handig wanneer je aangeeft op wat voor platform je werkt (windows of linux)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Janoz bedankt voor je reactie,

excuses als de code wat onleesbaar is, maar dit is zeg maar het betere knip en plakwerk of juist niet. De complete code staat hieronder. Dit scriptje heb ik ook van internet. Het doel is dus om met PHP een sms te kunnen sturen via het aangesloten modem. Ik heb zelf weinig ervaring met PHP, daarintegen wel wat met c++. De code zelf kom ik aardig uit, waar de eerste regel voor dient durf ik niet te zeggen. Ik was in de veronderstelling dat dat deze gegevens noodzakelijk zijn voor de foutcorrectie en dergelijke en op deze manier kan worden meegegeven.

Het platform waar ik op werk is Windows XP

<?php

// Use this code to write directly to the COM4 serial port
// First, you want to set the mode of the port. You need to set
// it only once; it will remain the same until you reboot.


`mode com4: BAUD=115200 PARITY=N data=8 stop=1`;
$fp = fopen ("COM4:", "w+");
if (!$fp)
{
echo "Uh-oh. Port not opened.";
}
else
{
$string="AT\r\n";
fputs ($fp, $string )or die ("error 1");
do
{
$dummy=fread($fp,1) or die ("error 1.1");
print "value=".$dummy."<br>";

}while ($dummy!="Q");


$string="AT+CMGF=1\r\n";
fputs ($fp, $string )or die ("error 2");
do
{
$dummy=fread($fp,1)or die ("error 2.1");
print "value=".$dummy."<br>";

}while ($dummy!="Q");


@$string="AT+CMGS="."\r\"+94777331580\"\r".",129\r\n";
fputs ($fp, $string )or die ("error 3");

@$string="TEST MESSAGE";

fputs ($fp, $string )or die ("error 4");

fclose ($fp);
echo $string;

}
?>

Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Gaat niet werken denk ik zo je 1e regel is namelijk:
PHP:
1
`mode com4: BAUD=115200 PARITY=N data=8 stop=1`;

` is een kortere versie voor Exec, er wordt een commando uitgevoerd op je server, en windows kent dit commando niet...

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Megamind schreef op woensdag 27 juni 2007 @ 14:12:
Gaat niet werken denk ik zo je 1e regel is namelijk:
PHP:
1
`mode com4: BAUD=115200 PARITY=N data=8 stop=1`;

` is een kortere versie voor Exec, er wordt een commando uitgevoerd op je server, en windows kent dit commando niet...
pardon? dat is juist een windows commando om zoals hier je com poort in te stellen ;)

Acties:
  • 0 Henk 'm!

  • hamsteg
  • Registratie: Mei 2003
  • Laatst online: 20-09 00:03

hamsteg

Species 5618

Volgens mij moet je system() gebruiken. Nu wordt dit gezien als dode string.

... gecensureerd ...


Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Erkens schreef op woensdag 27 juni 2007 @ 14:13:
[...]

pardon? dat is juist een windows commando om zoals hier je com poort in te stellen ;)
Ow pardon :P Ik had er nog nooit van gehoord en ging er eigenlijk vanuit dat het geen windows was hehe

Acties:
  • 0 Henk 'm!

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

C:\>mode /?
Configures system devices.

Serial port:       MODE COMm[:] [BAUD=b] [PARITY=p] [DATA=d] [STOP=s]
                                [to=on|off] [xon=on|off] [odsr=on|off]
                                [octs=on|off] [dtr=on|off|hs]
                                [rts=on|off|hs|tg] [idsr=on|off]

Device Status:     MODE [device] [/STATUS]

Redirect printing: MODE LPTn[:]=COMm[:]

Select code page:  MODE CON[:] CP SELECT=yyy

Code page status:  MODE CON[:] CP [/STATUS]

Display mode:      MODE CON[:] [COLS=c] [LINES=n]

Typematic rate:    MODE CON[:] [RATE=r DELAY=d]

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

hamsteg schreef op woensdag 27 juni 2007 @ 14:22:
Volgens mij moet je system() gebruiken. Nu wordt dit gezien als dode string.
`backticks` doet hetzelfde als shell_exec: http://nl2.php.net/manual...e.operators.execution.php

is dus niet hetzelfde als een string ;)

Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Erkens schreef op woensdag 27 juni 2007 @ 14:58:
[...]

`backticks` doet hetzelfde als shell_exec: http://nl2.php.net/manual...e.operators.execution.php

is dus niet hetzelfde als een string ;)
Wel als je de startpost bekijkt.

Acties:
  • 0 Henk 'm!

  • ikke007
  • Registratie: Juni 2001
  • Laatst online: 18-09 14:10
Wij gebruiken HotSMS op mijn werk, deze hebben zelf een PHP api geschreven om hun systeem aan te roepen en een SMS te versturen. Misschien een idee om naar te kijken...?

http://www.wireless-services.nl/ - business url HotSMS

Lets remove all security labels and let the problem of stupidity solve itself


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Megamind schreef op woensdag 27 juni 2007 @ 14:59:
[...]

Wel als je de startpost bekijkt.
tja, maar als je het topic doorleest dan zie je dat de topicstarter het fout had ge-copy/paste.

Acties:
  • 0 Henk 'm!

Verwijderd

ik denk dat je de Direct I/O functie van PHP zoekt. Direct I/O Manual

je kunt met dio_open de COM poort openen en met dio_write kun je er naar schrijven. het grote voordeel is dat je nie met een buffer van 8K zit zoals met fwrite en fread. daarnaast zijn deze functie ook nog wat geheugen vriedenlijker en geven iets meer controle over wat er verstuurd wordt.

jet zult echter onder windows het programma 'mode' moeten uitvoeren omdat dio_tcsetattr niet beschikbaar is evenals dio_fcntl. gebruik hiervoor niet de backtick operator maar de daarvoor bestemde functies beschreven in Program Execution Functions zoals shell_exec om niet met strings te verwarren.

deze functie zijn echter niet beschikbaar in safe-mode maar dat zal COM21 waarschijnlijk ook niet zijn. MODE is trouwens een Dos-commando en werdt inderdaad gebruikt o.a voor het opzetten van het modem of meer precies: het opzetten van de serieele poort.

ik zou zeggen de lees de manual en dan kom je er vanzelf wel uit.

Acties:
  • 0 Henk 'm!

  • CodeIT
  • Registratie: Juni 2002
  • Laatst online: 15-09 21:49

CodeIT

Code IT

Als je maar eenmaal de modus hoeft te zetten, kun je dat toch ook doen als je OS boot (via autorun)?
Pagina: 1