#!/bin/bash
rm -f ./PLC_OK ./CLI_OK
# Run C runtime
$BEREMIZPATH/C_runtime/beremiz_runtime -v -t tcp -p 61131 -h localhost > >(
echo "Start PLC stdout reader loop"
while read line; do
# Wait for server to print modified value
echo "PLC>> $line"
if [[ "$line" == "C runtime OK #3" ]]; then
echo "$line"
touch ./PLC_OK
fi
done
echo "End PLC stdout reader loop"
) &
PLC_PID=$!
# Start PLC with C runtime test
setsid $BEREMIZPYTHONPATH $BEREMIZPATH/Beremiz_cli.py -k \
--project-home $BEREMIZPATH/tests/projects/c_runtime build transfer run > >(
echo "Start CLI loop"
while read line; do
# Wait for CLI to output expected PLC log message on stdout
echo "CLI>> $line"
if [[ $line =~ .*C\ runtime\ log\ OK\ #3$ ]]; then
echo "$line"
touch ./CLI_OK
fi
done
echo "End CLI loop"
) &
CLI_PID=$!
echo all subprocess started, start polling results
res=110 # default to ETIMEDOUT
c=45
while ((c--)); do
if [[ -a ./PLC_OK && -a ./CLI_OK ]]; then
echo got results.
res=0 # OK success
break
else
echo waiting.... $c
sleep 1
fi
done
# Kill PLC and subprocess
echo will kill CLI:$CLI_PID and PLC:$PLC_PID
pkill -s $CLI_PID
kill $PLC_PID
exit $res