How to / Komunikacja przemysłowa

Routery Advantech - Metody tworzenia własnych skryptów

15.04.2021 Producent: Advantech Zastosowanie: Zakłady przemysłowe, Energetyka, Woda i ścieki, Gaz i Paliwa
Wizerunek autora
Przemysław Strzała Inne artykuły tego autora
Routery Advantech - Metody tworzenia własnych skryptów

Metody tworzenia własnych skryptów

Są dwie możliwości tworzenia skryptów:

1.      Pierwszą z nich jest stworzenie skryptu na komputerze w edytorze tekstowym i skopiowanie, go do komputera przez FTP (SFTP). Instrukcja aktywowania FTP oraz połączenia dostępna jest w instrukcji obsługi routerów.

W przypadku wyboru tej opcji należy zachować ostrożność, ponieważ routery nie są oparte na systemie Windows, a Linux. Chodzi tutaj o sygnalizację końca linii (EOL – End Of Line). Windows wykorzystuje LF+CR, natomiast Linux tylko LF jako sygnalizację końca linii (EOL).

Skrypt może zostać skopiowany do folderu „root” w pamięci flash lub „/var/data” w pamięci MRAM. W wypadku ważnych danych lepsza będzie druga opcja, gdyż pamięć MRAM nie jest kasowana przy zaniku zasilania. Do tymczasowych testów wystarczy folder „root”.

 

2.      Drugą z opcji jest stworzenie skryptu w sekcji „Startup Script” i jest to opcja, którą rekomendujemy ze względu na brak bezpośredniej ingerencji w system plików.

Tutaj również możemy zastosować dwie techniki.

 

·  Pierwsza wykorzystuje komendę „cat” jak w przykładzie poniżej. Szerszy opis komendy pod linkiem: http://www.tldp.org/LDP/abs/html/here-docs.html

Przykład tworzenia skryptu w sekcji „Startup Script”:

#!/bin/sh

#

# This script will be executed *after* all the other init scripts.

# You can put your own initialization stuff in here.

 

cat > /var/scripts/smsan.sh << EOF

#!/bin/sh

 

PHONE=+48500123456

an1thrshold=500

an2thrshold=500

an1txt="Activation an1"

an2txt="Activation an2"

OLD1=0

OLD2=0

 

while true

do

 

 VAL1=\`/usr/bin/io get an1\`

 if [ \$VAL1 -gt \$an1thrshold ]; then

    POMVAL1=1

 else

    POMVAL1=0 

 fi

 if [ "\$POMVAL1" != "\$OLD1" ]; then

   [ "\$POMVAL1" = "1" ] && gsmsms \$PHONE "\$an1txt"

   OLD1=\$POMVAL1

 fi

 

 VAL2=\`/usr/bin/io get an2\`

 if [ \$VAL2 -gt \$an2thrshold ]; then

    POMVAL2=1

 else

    POMVAL2=0 

 fi

 if [ "\$POMVAL2" != "\$OLD2" ]; then

   [ "\$POMVAL2" = "1" ] && gsmsms \$PHONE "\$an2txt"

   OLD2=\$POMVAL2

 fi

 

 sleep 1

 

done

EOF

W takim wypadku skrypt zostanie utworzony w folderze /var/scripts i nazwany smsan.sh. Jego zawartość poniżej.

Skrypt /var/scripts/smsan.sh powodujący wysłanie SMSa w momencie, gdy wejście an1 lub an2 przekroczą ustalony w zmiennych próg:

#!/bin/sh
 
PHONE=+48500123456
an1thrshold=500
an2thrshold=500
an1txt="Aktivace an1"
an2txt="Aktivace an2"
OLD1=0
OLD2=0
 
while true
do
 
 VAL1=`/usr/bin/io get an1`
 if [ $VAL1 -gt $an1thrshold ]; then
    POMVAL1=1
 else
    POMVAL1=0  
 fi
 if [ "$POMVAL1" != "$OLD1" ]; then
   [ "$POMVAL1" = "1" ] && gsmsms $PHONE "$an1txt"
   OLD1=$POMVAL1
 fi
 
 VAL2=`/usr/bin/io get an2`
 if [ $VAL2 -gt $an2thrshold ]; then
    POMVAL2=1
 else
    POMVAL2=0  
 fi
 if [ "$POMVAL2" != "$OLD2" ]; then
   [ "$POMVAL2" = "1" ] && gsmsms $PHONE "$an2txt"
   OLD2=$POMVAL2
 fi
 
 sleep 1
 
done
EOF

 

·  Druga technika wykorzystuje komendę echo, tak jak w przykładzie poniżej.

Skrypt stworzony przy wykorzystaniu komendy „echo”:

#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here.
 
echo -en "#!/bin/sh" \
         "\nPHONE=+48500123456" \
         "\nMESSAGE=\"BIN0 is active\"" \
         "\nwhile true" \
         "\ndo" \
         "\n  /usr/bin/io get bin0" \
         "\n  VAL=\$?" \
         "\n  if [ \"\$VAL\" != \"\$OLD\" ]; then" \
         "\n    [ \"\$VAL\" = \"0\" ] && gsmsms \$PHONE \$MESSAGE" \
         "\n    OLD=\$VAL" \
         "\n  fi" \
         "\nsleep 1" \
         "\ndone" >> /var/scripts/my_test.sh

 

Skrypt zostanie stworzony w folderze /var/scripts i nazwany my_test.sh. Jego zawartość poniżej.

Skrypt /var/scripts/my_test.sh wysyłający SMS w momencie, gdy wejście cyfrowe bin0 jest w stanie wysokim.

#!/bin/sh
PHONE=+48500123456
MESSAGE="BIN0 is active"
while true
do
  /usr/bin/io get bin0
  VAL=$?
  if [ "$VAL" != "$OLD" ]; then
    [ "$VAL" = "0" ] && gsmsms $PHONE $MESSAGE
    OLD=$VAL
  fi
sleep 1
done

 

3.      Po stworzeniu skryptu należy go uruchomić. Realizujemy to wykorzystując odpowiednie komendy wpisywane w sekcję „Startup Script*” lub „Up/Down Script**”. Przykład poniżej.

 

Skrypt z sekcji „Startup Script” lub „Up/Down Script”:

#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here.
  
echo -en "#!/bin/sh" \
         .
         .
# Here is body of your script.
         .
         .
         "\ndone" >> /var/scripts/my_test.sh
 
chmod 777 /var/scripts/my_test.sh
sh /var/scripts/my_test.sh &

 

Ważne:

*Skrypt stworzony w sekcji Startup Script będzie wywoływany po każdym restarcie urządzenia. Ta metoda zapisuje go w konfiguracji nawet po ponownym wgraniu firmwareu.

** Skrypt uruchamiany w sekcji Up Script musi być wyłączany w sekcji Down Script inaczej będzie on wywoływany w nieskończonej pętli przy każdym startowaniu połączenia WAN.