altRobots
/robotigs/icons/actuator.pngActuatoren
/robotigs/icons/printboards.pngAlgemeen
/robotigs/icons/chassis.pngChassis
/robotigs/icons/florigs.pngFlorigs
/robotigs/icons/interfacing.gifInterfacing
/robotigs/icons/microphone_icon.pngMuziek
/robotigs/icons/musicKey_icon.pngMuzikanten
/robotigs/icons/shield.pngSchildjes
/sys/icons/sensors.pngSensors
/robotigs/icons/languages.pngTalen
/robotigs/icons/battery.pngVoedingen
/sys/icons/microController.pngµControllers
altContact
Perl 2018"); echo ("  "); } ?>  "); /* echo (""); echo (" "); //Show pencil as button */ ?> alt  

Deze pagina is verouderd. Ga naar de vernieuwde pagina.

"); $counter = 0; $aantal = str_word_count($pict_list, 0, "0123456789"); $lijst = str_word_count($pict_list, 1, "0123456789"); while($counter < $aantal){ $pictkey = $lijst[$counter]; $qryy1 = ("SELECT * FROM illustrations WHERE ill_id = $pictkey ;"); $resulty1 = pg_query($con1, $qryy1); while($row = pg_fetch_array($resulty1)){ //Fields accesible by their name foreach( $row AS $key => $val ){ $$key = stripslashes( $val ); } } $image = ("/robotigs/documentatie/plaatjes/$ill_name"); $pictfull = str_replace('_small', '', $image); //Pictfull=biggest version $alt = ("Just wait till your 57...."); $txtname = get_txt($con1, 18, $koekje[2], $ill_id); //Robot illustrations subtitles echo (""); echo (''. $alt .'
'); $nummer = $counter + 1; $txtAfb = get_txt($con1, 9, $koekje[2], 3865); //Pic Afb if ($koekje[0]>0 and $koekje[3]>0){ //User is logged in and translates echo ("$txtAfb $nummer: "); echo ("$txtname"); echo ("
"); echo ("Ontkoppelen "); if ($counter==0){ echo ("Up "); }else{ echo ("Up "); } if ($nummer == $aantal){ echo ("Down"); }else{ echo ("Down"); } }else{ //Else of if Meaning the current useer is logged in echo ("$txtAfb $nummer: $txtname"); } echo ('

'); //End of this picture $counter++; //Prepair for next picture } echo (''); //All pictures are printed } //End of if there are 1 or more pictures to be printed ---------------------- ?>

Wij gebruiken sinds 2018 Python in plaats van Perl Perl is een programmeertaal die bij ons uitsluitend wordt gebruikt in het Flora systeem op de server en wel om daar op gezette tijden data op te halen van alle flora stations en deze data op te slaan in een PostgreSQL database. Deze database wordt dan bijvoorbeeld gebruikt om grafieken te maken. Om de server zo min mogelijk te belasten wordt een Deamon gemaakt die op de achtergrond loopt. Deze moet vanzelf starten als de server wordt gestart. Anno Ubuntu 18.04 is het natuurlijk de vraag wat er al is geïnstalleerd en wat we verder nog nodig hebben.

Eerste test
We gaan eerst kijken of Perl is geïnstalleerd en zo ja welke versie door in een terminal perl -V uit te voeren. Een Perl programma kan geschreven worden met een gewone tekstverwerker. Als het programma is opgeslagen moeten de rechten worden aangepast zodat het een uitvoerbaar programma wordt. Vervolgens kan het programma met perl /var/www/cgi-bin/test1.pl worden uitgevoerd. Dit zal laten zien dat we de module DBI missen.

Er bestaan diverse methodes om een module te installeren, die allen niet werken bij mij:

  • cpanminus
    Om makkelijk modules in Perl te kunnen installeren moet eerst cpanminus worden geïnstalleerd. Dit kan in een terminal worden gedaan met: sudo apt install cpanminus. sudo cpan App::cpanminus Vanaf nu kan iedere module worden geïnstalleerd met sudo cpanm Module::Name.

  • make install
    sudo apt install make. Installeer vervolgens DBI. perl Makefile.PL
    make
    make test
    make install
export PERL5LIB=$HOME/perllib

DBI
DBI is een database onafhankelijke interface voor Perl. Het is dus een soort abstractielaag tussen Perl en de database drivers. DBI kan op zichzelf nog niets, er zal dus ook nog een databasedriver moeten worden geïnstalleerd. DBI kan worden gevonden op metacpan. Installeer DBI met cpanm Module::DBI --sudo. tar xzf tar xzf DBI-1.641.tar.gz

Deze kan worden worden geïnstalleerd via het Ubuntu software centrum. Als test kan nu perl /var/www/cgi-bin/intro1.pl. worden gedraaid.DBI-1.607 (20080722) is een module voor perl die de communicatie met de database interfaces verzorgt. De onderstaande database driver heeft deze module nodig om correct te kunnen functioneren. Download de module naar een temp directory. Ga in een terminal naar deze directory en voer daar uit . Dit zal een nieuwe directory creëren. Ga daar in. Lees eerst de readme en volg de daar gegeven instructies. Voer de volgende stappen in deze directory uit:
DBI-1.51
DBI-1.51 (20060619) is een module voor perl die de communicatie met de database interfaces verzorgt. Het is dus een soort laag tussen perl en de perl-postgres driver. De onderstaande postgres driver heeft deze module nodig om correct te kunnen functioneren. Download de module naar een temp directory. Ga in een terminal naar deze directory en voer daar uit gzip -dc DBI-1.51.tar.gz | tar -xof -. Dit zal een nieuwe directory creeren. Ga daar in. Lees eerst de readme en volg de daar gegeven instructies. Voer de volgende stappen in deze directory uit:
perl Makefile.PL
make
In een terminal enter perl -v. Antwoord hier: This is perl, v5.8.8 built for i386-linux-thread-multi make test
make install

DBD PostgreSQL

pg_config executable
In een terminal enter which pg_config. Antwoord hier: /usr/bin/pg_config.
Indien pg_config niet gevonden wordt, dan krijgt u iets te zien zoals: not available. In dat geval moet u de pg_config executable installeren. Dit programmapakket is de ontwikkelomgeving voor PostgreSQL. Het is zelfs noodzakelijk dat u het installeert indien u PostgreSQL al lopend heeft, want DBD::Pg heeft het nodig tijdens zijn installatie. U kunt het pakket als su installeren met: yum install postgresql-devel. DBD-Pg-1.49
Zorg dat u geen root bent, maar een gewone user. DBD-Pg-1.49 (20060505) is een module voor perl die de communicatie met een postgres database verzorgt. Het is noodzakelijk om eerst de bovenstaande module te installeren. Download de module naar de Desktop. Ga in een terminal naar deze directory en voer daar uit gzip -dc DBD-Pg-1.49.tar.gz | tar -xof -. Dit zal een nieuwe directory creeren. Ga daar in. Lees eerst de readme en volg de daar gegeven instructies. De readme zegt:
    REQUIREMENTS:
    -------------
    • build, test, and install Perl 5 (at least 5.6.1)
      In een terminal enter perl -v. Antwoord hier: This is perl, v5.8.8 built for i386-linux-thread-multi
    • build, test, and install the DBI module (at least 1.45)
      Zie boven: DBI-1.51
    • build, test, and install PostgreSQL (at least 7.3)
      In een terminal enter psql --version. Antwoord hier: psql (PostgreSQL) 8.1.4
    • build, test, and install Test::Simple (at least 0.30)
      Perl basic utilities for writing tests. Geen idee hoe ik kan testen of deze geinstalleerd is?

    Voer de volgende stappen in deze directory uit:

    perl Makefile.PL
    make

    Voordat u nu verder kunt gaan moeten er eerst een aantal zaken worden uitgelegd aan het testprogramma. Dit gebeurt door middel van zogenaamde environment variables. Er moeten er 3 worden gezet en dit kan in de terminal met de onderstaande instructies:
    export DBI_DSN=dbi:Pg:dbname=test
    export DBI_USER=gebruikersnaam
    export DBI_PASS=password

    make test
    su
    make install

  • SQL syntax
    Overzicht SQL commando`s

Nu kan perl met PostgreSQL werken. Deze interface wordt onderhouden door pgfoundry.org. Deze organisatie heeft meerdere tools en interfaces voor PostgreSQL.

CPAN Device-SerialPort LEGACY
Om de seriële poort uit te kunnen lezen is een programma nodig dat in staat is om op de achtergrond de seriële poort uit te lezen en de gegevens op te slaan in een database. Onder Windows is het steeds moeilijker om met de seriële poort te werken. Dat is één van de redenen dat ik voor Linux heb gekozen. Onder Linux zal er een daemon module moeten worden gebouwd die deze taken op zich neemt. De serial port module verzorgt het uitlezen van de seriële poort. Het is een aangename module om als eerste te installeren omdat hij de standaard regels voor een installatie van Cpan helemaal volgt. Lees eerst de readme en volg de daar gegeven instructies. Zorg dat er niets op de seriële poorten is aangesloten.
javascript:post_action(12)sudo su -
cd /opt/perl/lib/5.10.1/modules
wget http://search.cpan.org/CPAN/authors/id/C/CO/Cook/Device-SerialPort-1.04.tar.gz
tar xzf Device-SerialPort-1.04.tar.gz
cd Device-SerialPort-1.04
perl Makefile.PL TESTPORT=/dev/ttyUSB0
make
make test
make install


Hij geeft tijdens het testen bij mij een klein testfoutje, maar alles werkt verder uitstekend. Voor het uitlezen van de poort heb ik een combinatie gebruikt van voorbeeld1 (poort instellen) en voorbeeld8 (poort uitlezen). Dit werkt uitstekend in een terminal. De volgende stap is om de gegevens die worden ontvangen op te slaan in een database.

Installatie Legacy
Ubuntu installeert Perl voor eigen gebruik. U kunt dit controleren in een terminal met Perl -v Het wordt afgeraden om deze versie van Perl te wijzigen omdat je nooit weet waar het schip zal stranden. Kan zijn, maar nu weet je zeker dat je bij iedere update een probleem hebt. Het wordt daarom geadviseerd om een extra versie van Perl te installeren. Deze methode is zoals vroeger alles gebeurde onder Linux:

sudo su -
cd /opt
mkdir perl-5.10.1
mkdir src
cd src
wget http://cpan.org/src/perl-5.10.1.tar.gz
tar xzf perl-5.10.1.tar.gz
cd perl-5.10.1
rm -f config.sh Policy.sh
./Configure -Dprefix=/opt/perl-5.10.1
make
make test
make install
cd /opt
ln -s perl-5.10.1 perl
exit


?? Verder moet u in uw scripts altijd duidelijk aangeven welke versie van perl u wilt gebruiken met: #!/opt/perl/bin/perl...

Perl daemon maken
Dit klinkt ingewikkeld en dat zou het ook zijn zonder een uitstekende handleiding op het internet. Het principe komt er in het kort op neer dat tijdens het opstarten een programma wordt opgestart. Dit programma forkt zichzelf naar een zelfstandig lopend dochterprogramma en doet daarna zichzelf afsluiten. Vanaf dat moment loopt het uitleesprogramma op de achtergrond. Onder Windows is deze stap overigens iets ingewikkelder, maar ook uitvoerbaar. Het programma moet onder Fedora worden aangeroepen vanuit /etc/rc.d/rc.local.

Inleiding
Perl is een programmeertaal die zowel werkt onder Windows alsook onder Linux. Deze beschrijving gaat over een installatie onder Ubuntu. Perl werkt met een interpreter en is ong. 23 keer zo langzaam als C++ maar weer wel dubbel zo snel als bijvoorbeeld PHP. Learn.perl.org/ bevat veel informatie. Het is niet verstandig om mijn programma’s in Perl rechtstreeks te kopiëren om te gebruiken voor uw eigen programma’s. Aangezien mijn kennis van Perl beperkt is zijn mijn programma’s in ieder geval niet erg efficiënt en mogelijk soms zelfs fout. U bent gewaarschuwd :)

Om sommige specifieke taken kunnen uitvoeren moeten er diverse modules aan Perl worden toegevoegd. Perl is een programmeertaal, waarmee ook daemons gemaakt kunnen worden. Om de data in een PostgreSQL database te kunnen opslaan, moeten er een aantal plug-ins worden gecompileerd en geïnstalleerd. Let op de volgorde van installatie, want die is belangrijk. De beste site om plug-in modules te halen voor Perl is Cpan. Er bestaat weliswaar een algemene beschrijving over hoe modules in Perl dienen te worden geïnstalleerd, maar iedere module van CPAN levert een eigen installatiebeschrijving mee die absoluut gevolgd moet worden.

DBD MySQL Legacy
DBD-msql-4.011 (20090414) is een module voor Perl die de communicatie tussen Perl en een databasemodule verzorgt. Het is noodzakelijk om eerst de bovenstaande module te installeren. Deze module kan simpel worden geïnstalleerd door CPAN te gebruiken.

《= Vorige: SDL Basic Volgende: Positiebepaling =》

$val ){ $$key = stripslashes( $val ); } $jaar = substr($changeddate,0,4); $maand = substr($changeddate,5,2); $dag = substr($changeddate,8,2); $lastupdate = ("$jaar $maand $dag"); $prtsrttxt = get_txt($con1, 26, 1, $idsrtodd); $jaar = substr($createddate,0,4); $maand = substr($createddate,5,2); $dag = substr($createddate,8,2); $create_stamp = ("$dag $maand $jaar"); //GENERAL INFO FOR EVERY USER ************************************************** echo ("

"); echo (""); if ($codetext) { //Code like KY-026 or NA-41 echo (""); } //End of if ($codetext) $tmp = get_txt($con1, 9, $koekje[2], 3741); //Fieldname at screen if ($prijseurinclbtw > 0){ //Show price indication $prijs_formatted = number_format($prijseurinclbtw / 100, 2, ',', '.'); echo (""); echo (""); } //End of if ($prijseurinclbtw > 0) if ($sketchtext) { //Link to OWN SOFTWARE $tmp = get_txt($con1, 9, $koekje[2], 3738); //Fieldname at screen echo (""); } //End of if ($sketchtext) $tmp = get_txt($con1, 9, $koekje[2], 3744); //Fieldname at screen if ($pinouttext) { //Pinout echo (""); } $tmp = get_txt($con1, 9, 1, 3735); //Fieldname at screen $tmp2 = get_txt($con1, 26, 1, $row4[16]); //Group name in its language echo (""); if ($koekje[0]>0 and $koekje[3]>0){ //User is logged in and translates $tmp = get_txt($con1, 9, $koekje[2], 3918); //Fieldname at screen LANGUAGE if ($row4[26] == 1) {$imgname = "nederland.png";} if ($row4[26] == 2) {$imgname = "deutschland.png";} if ($row4[26] == 3) {$imgname = "uk.png";} if ($row4[26] == 4) {$imgname = "france.png";} echo (""); $tmp = get_txt($con1, 9, $row4[27], 3919); //Fieldname at screen $statuskey = get_status_key($con1, $status); $tmp2 = get_txt($con1, 61, $koekje[2], $statuskey); //Fieldname at screen echo (""); } $tmp = get_txt($con1, 9, 1, 3966); //Fieldname at screen echo (""); echo ("
"); //Header $tmp = get_txt($con1, 9, $koekje[2], 3923); //Fieldname at screen if ($koekje[3]=="1") { //If this user wants to translate then echo ("$tmp"); //If desired }else{ echo ("$tmp"); } //Else just show if no need to translate if ($koekje[0]>0 and $koekje[3]>0){ //User is logged in and translates echo (" (edit)"); } echo ("Algemene informatie test
"); $tmp = get_txt($con1, 9, $koekje[2], 3739); //Fieldname at screen if ($koekje[3]=="1") { //If this user wants to translate then echo ("$tmp"); //Class for colour }else{ //So you are not allowed to translate echo $tmp; //Show screenname of this field in user language } //End of If you want to translate this fieldname at screen echo (" "); if ($codelink) { echo ("$codetext"); }else{ echo ("$codetext"); } //End of if ($pinoutlink) echo ("
$tmp  "); if ($urlprijs){ echo ("€  $prijs_formatted"); }else{ echo ("€  $prijs_formatted"); } //End of if ($urlprijs > "") echo ("
$tmp  "); if ($sketchlink) { echo ("$sketchtext"); }else{ echo ("$sketchtext"); } //End of if ($sketchlink) echo ("
$tmp  "); if ($pinoutlink) { echo ("$pinouttext"); }else{ echo ("$pinouttext"); } //End of if ($pinoutlink) echo ("
$tmp  "); //MENU GROUP echo (""); echo ("$tmp2
$tmp"); echo ("flag.gif"); echo ("
$tmp  "); //STATUS echo ("$status $tmp2
$tmp  "); //LAST CHANGED $tmp = substr($changeddate, 0, 10); echo ("$tmp

"); return; //////////////////////////////////////////////////////////////////////////////// function get_status_key($con, $num){ $qry = ("SELECT id FROM status WHERE nr = $num ;"); $result = pg_query($con, $qry); $row = pg_fetch_array($result); return ("$row[0]"); } 0 AND software.rstid = 2 AND tblsystext.lanid = $koekje[2] AND tblsystext.txlid = 19 ORDER BY sftname ASC , controller ASC ;"); $result = pg_query($con1, $qry2); if (pg_num_rows($result)>0) { //Only if at least 1 program exists echo ('

'); echo (""); while($col = pg_fetch_array($result)){ $col[0] = ("$col[0]"); echo (""); echo (""); echo (""); if ($koekje[0] > 0 and $koekje[3]>0){ //User is logged in and translates echo (""); } echo (''); } echo ('
"); //Header $tmp = get_txt($con1, 9, $koekje[2], 3922); //Fieldname at screen if ($koekje[3]=="1") { //If this user wants to translate then echo ("$tmp"); //If desired }else{ echo ("$tmp"); } //Else just show if no need to translate echo ("
$col[2]  $col[0]"); echo ("(Edit)
'); } ?> 0){ if ($header == 0) { echo ("

"); echo (""); $header++; } //End of if ($header == 0) echo (""); echo (""); } } if ($header > 0){ echo ("
"); //Header $tmp = get_txt($con1, 9, $koekje[2], 3879); //Fieldname at screen if ($koekje[3]=="1") { //If this user wants to translate then echo ("$tmp"); //If desired }else{ echo ("$tmp"); } //Else just show if no need to translate echo ("
$colbpp[2]"); //Show software van deze bot $qry=("SELECT software_basedir FROM farmbotversie WHERE id = $colbpp[0];"); $result = pg_query($con1, $qry); $col = pg_fetch_array ($result ,0); $dir1 = "/var/www/html/robotigs/software/$col[0]"; $arr1 = glob($dir1, GLOB_ONLYDIR); if (isset($arr1[0])){ $folder = $arr1[0]; $countertmp = 0; echo ("
    "); foreach (scandir($folder, 1) as $filename) { if ($filename<>"." AND $filename <>".."){ if ($countertmp == 0){ $countertmp++; } //End of if ($countertmp == 0) $tmp = "/"; $dir = substr($folder, 14) ."/"; $link = $tmp .$dir .$filename; $showname = substr($filename, 0 ,-4); echo ("
  • "); echo "$showname"; echo ("
  • "); } //End of if ($filename<>"." AND $filename <>".."){ } //End of foreach (scandir($folder, 1) as $filename) echo ("
      "); } //End of if (isset($arr1[0])) echo ("
"); } ?>
Warning: include(/var/www/html/robotigs/includes/wishlistperpart.php): Failed to open stream: No such file or directory in /var/www/html/robotigs/includes/parts_header.php on line 128

Warning: include(): Failed opening '/var/www/html/robotigs/includes/wishlistperpart.php' for inclusion (include_path='.:/usr/share/php') in /var/www/html/robotigs/includes/parts_header.php on line 128