Merge branch 'thiagoralves:master' into long_long_sleep

This commit is contained in:
Lucas Hartmann
2022-10-13 14:43:56 -03:00
committed by GitHub
8 changed files with 246 additions and 113 deletions
+2 -2
View File
@@ -1,6 +1,6 @@
FROM debian
FROM debian:bullseye-20211201
COPY . /workdir
RUN cd /workdir && ./install.sh docker
WORKDIR /workdir
RUN ./install.sh docker
ENTRYPOINT ["./start_openplc.sh"]
+54 -9
View File
@@ -21,10 +21,32 @@ fi
#set -x
# arg1: sudo or blank
function linux_install_deps {
$1 apt-get update
$1 apt-get install -y build-essential pkg-config bison flex autoconf \
automake libtool make git python2.7 \
sqlite3 cmake git curl python3
#Detecting OS type
INSTALLER=""
OS=$(awk '/NAME=/' /etc/*-release | sed -n '1 p' | cut -d= -f2 | cut -d\" -f2 | cut -d" " -f1)
if [ "$OS" = "Fedora" ]; then
INSTALLER="yum"
elif [ "$OS" = "CentOS" ]; then
INSTALLER="yum"
elif [ "$OS" = "Red" ]; then
INSTALLER="yum"
else
INSTALLER="apt"
fi
if [ "$INSTALLER" = "yum" ]; then
yum clean expire-cache
yum check-update
$1 yum -q -y install curl make automake gcc gcc-c++ kernel-devel pkg-config bison flex autoconf libtool openssl-devel cmake python3 python3-pip
$1 yum -q -y install python2.7 python2-devel
#Installing dependencies for Ubuntu/Mint/Debian
else
$1 apt-get update
$1 apt-get install -y build-essential pkg-config bison flex autoconf \
automake libtool make git python2.7 \
sqlite3 cmake git curl python3 python3-pip
fi
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
$1 python2.7 get-pip.py
}
@@ -142,15 +164,18 @@ WantedBy=multi-user.target" >> openplc.service
if [ "$1" == "win" ]; then
echo "Installing OpenPLC on Windows"
cp ./utils/apt-cyg/apt-cyg ./
cp ./utils/apt-cyg/wget.exe /bin
if [ -f "/usr/bin/wget" ]
then
echo "found wget. Skipping install"
else
echo "wget not found. Installing from binary"
cp ./utils/apt-cyg/wget.exe /bin
fi
install apt-cyg /bin
apt-cyg update
# replace cygwin installed database to avoid installation errors
cp ./installed.db /etc/setup/installed.db
apt-cyg install lynx
rm -f /bin/wget.exe
# apt-cyg remove gcc-core gcc-g++ pkg-config automake autoconf libtool make python2 python2-pip sqlite3
apt-cyg install wget gcc-core gcc-g++ git pkg-config automake autoconf libtool make python2 python2-pip sqlite3 python3
apt-cyg install gcc-core gcc-g++ git pkg-config automake autoconf libtool make python2 python2-pip sqlite3 python3
lynx -source https://bootstrap.pypa.io/pip/2.7/get-pip.py > get-pip.py
lynx -source https://bootstrap.pypa.io/pip/get-pip.py > get-pip3.py
/usr/bin/python2 get-pip.py
@@ -244,7 +269,27 @@ elif [ "$1" == "linux" ]; then
install_py_deps "sudo -H"
install_all_libs sudo
#Detecting OS type
OS_TYPE=""
OS=$(awk '/NAME=/' /etc/*-release | sed -n '1 p' | cut -d= -f2 | cut -d\" -f2 | cut -d" " -f1)
if [ "$OS" = "Fedora" ]; then
OS_TYPE="yum"
elif [ "$OS" = "CentOS" ]; then
OS_TYPE="yum"
elif [ "$OS" = "Red" ]; then
OS_TYPE="yum"
else
OS_TYPE="apt"
fi
#Fix for Fedora
if [ "$OS_TYPE" = "yum" ]; then
sudo cp /usr/local/lib/pkgconfig/libmodbus.pc /usr/share/pkgconfig/
sudo cp /usr/local/lib/lib*.* /lib64/
fi
echo ""
echo "[FINALIZING]"
cd webserver/scripts
+20 -11
View File
@@ -4,6 +4,9 @@
#include <cstring>
#include <cstdlib>
#define MAX_LINE_INPUT 1024
#define MAX_LOCAL_BUFFER 100
using namespace std;
/// Write the header to the output stream. The header is common among all glueVars files.
@@ -79,28 +82,34 @@ void glueVars()\r\n\
int parseIecVars(istream& locatedVars, char *varName, char *varType)
{
string line;
char buffer[1024];
char buffer[MAX_LINE_INPUT];
if (getline(locatedVars, line))
{
int i = 0, j = 0;
strncpy(buffer, line.c_str(), 1024);
for (i = 0; buffer[i] != '('; i++);
strncpy(buffer, line.c_str(), MAX_LINE_INPUT);
for (i = 0; i < MAX_LINE_INPUT && buffer[i] != '('; i++);
i++;
while (buffer[i] != ',')
while (i < MAX_LINE_INPUT && buffer[i] != ',')
{
varType[j] = buffer[i];
i++; j++;
varType[j] = '\0';
if(j < MAX_LOCAL_BUFFER)
{
varType[j] = buffer[i];
i++; j++;
varType[j] = '\0';
}
}
i++; j=0;
while (buffer[i] != ',')
while (i < MAX_LINE_INPUT && buffer[i] != ',')
{
varName[j] = buffer[i];
i++; j++;
varName[j] = '\0';
if(j < MAX_LOCAL_BUFFER)
{
varName[j] = buffer[i];
i++; j++;
varName[j] = '\0';
}
}
return 1;
+66 -23
View File
@@ -69,6 +69,7 @@ struct MB_device
char rtu_parity;
int rtu_data_bit;
int rtu_stop_bit;
int rtu_tx_pause;
uint8_t dev_id;
bool isConnected;
@@ -166,7 +167,8 @@ void parseConfig()
char temp_buffer[5];
getData(line_str, temp_buffer, '"', '"');
num_devices = atoi(temp_buffer);
mb_devices = (struct MB_device *)malloc(num_devices*sizeof(struct MB_device));
//initializes the allocated memory to zero
mb_devices = calloc(num_devices, sizeof(struct MB_device));
}
else if (!strncmp(line_str, "Polling_Period", 14))
{
@@ -241,6 +243,12 @@ void parseConfig()
getData(line_str, temp_buffer, '"', '"');
mb_devices[deviceNumber].rtu_stop_bit = atoi(temp_buffer);
}
else if (!strncmp(functionType, "RTU_TX_Pause", 12))
{
char temp_buffer[10];
getData(line_str, temp_buffer, '"', '"');
mb_devices[deviceNumber].rtu_tx_pause = atoi(temp_buffer);
}
else if (!strncmp(functionType, "Discrete_Inputs_Start", 21))
{
char temp_buffer[10];
@@ -355,30 +363,31 @@ void *querySlaveDevices(void *arg)
for (int i = 0; i < num_devices; i++)
{
//Check if there is a device using the same port
//Check if there is a connected RTU device using the same port
bool found_sharing = false;
for (int a = 0; a < num_devices; a++)
bool rtu_port_connected = false;
if (mb_devices[i].protocol == MB_RTU)
{
if (a != i && !strcmp(mb_devices[i].dev_address, mb_devices[a].dev_address))
for (int a = 0; a < num_devices; a++)
{
found_sharing = true;
if (mb_devices[i].isConnected == false && mb_devices[a].isConnected == true)
if (a != i && !strcmp(mb_devices[i].dev_address, mb_devices[a].dev_address))
{
mb_devices[i].mb_ctx = mb_devices[a].mb_ctx;
sprintf(log_msg, "Connected to MB device %s\n", mb_devices[i].dev_name);
log(log_msg);
mb_devices[i].isConnected = true;
found_sharing = true;
if (mb_devices[a].isConnected)
{
rtu_port_connected = true;
}
}
}
}
if (found_sharing)
{
//Must reset mb context to current device's slave id
modbus_set_slave(mb_devices[i].mb_ctx, mb_devices[i].dev_id);
if (found_sharing)
{
//Must reset mb context to current device's slave id
modbus_set_slave(mb_devices[i].mb_ctx, mb_devices[i].dev_id);
}
}
//Verify if device is connected
if (!mb_devices[i].isConnected)
if (!mb_devices[i].isConnected && !rtu_port_connected)
{
sprintf(log_msg, "Device %s is disconnected. Attempting to reconnect...\n", mb_devices[i].dev_name);
log(log_msg);
@@ -404,16 +413,24 @@ void *querySlaveDevices(void *arg)
mb_devices[i].isConnected = true;
}
}
if (mb_devices[i].isConnected)
if (mb_devices[i].isConnected || rtu_port_connected)
{
struct timespec ts;
ts.tv_sec = 0;
ts.tv_nsec = (1000*1000*1000*28)/mb_devices[i].rtu_baud;
if (mb_devices[i].protocol == MB_RTU)
{
ts.tv_nsec = (1000*1000*1000*28)/mb_devices[i].rtu_baud;
}
else
{
ts.tv_nsec = 0;
}
//Read discrete inputs
if (mb_devices[i].discrete_inputs.num_regs != 0)
{
sleepms(mb_devices[i].rtu_tx_pause);
uint8_t *tempBuff;
tempBuff = (uint8_t *)malloc(mb_devices[i].discrete_inputs.num_regs);
nanosleep(&ts, NULL);
@@ -449,6 +466,7 @@ void *querySlaveDevices(void *arg)
//Write coils
if (mb_devices[i].coils.num_regs != 0)
{
sleepms(mb_devices[i].rtu_tx_pause);
uint8_t *tempBuff;
tempBuff = (uint8_t *)malloc(mb_devices[i].coils.num_regs);
@@ -481,7 +499,7 @@ void *querySlaveDevices(void *arg)
//Read input registers
if (mb_devices[i].input_registers.num_regs != 0)
{
sleepms(mb_devices[i].rtu_tx_pause);
uint16_t *tempBuff;
tempBuff = (uint16_t *)malloc(2*mb_devices[i].input_registers.num_regs);
nanosleep(&ts, NULL);
@@ -517,6 +535,7 @@ void *querySlaveDevices(void *arg)
//Read holding registers
if (mb_devices[i].holding_read_registers.num_regs != 0)
{
sleepms(mb_devices[i].rtu_tx_pause);
uint16_t *tempBuff;
tempBuff = (uint16_t *)malloc(2*mb_devices[i].holding_read_registers.num_regs);
nanosleep(&ts, NULL);
@@ -551,6 +570,7 @@ void *querySlaveDevices(void *arg)
//Write holding registers
if (mb_devices[i].holding_registers.num_regs != 0)
{
sleepms(mb_devices[i].rtu_tx_pause);
uint16_t *tempBuff;
tempBuff = (uint16_t *)malloc(2*mb_devices[i].holding_registers.num_regs);
@@ -602,10 +622,33 @@ void initializeMB()
}
else if (mb_devices[i].protocol == MB_RTU)
{
mb_devices[i].mb_ctx = modbus_new_rtu( mb_devices[i].dev_address, mb_devices[i].rtu_baud,
mb_devices[i].rtu_parity, mb_devices[i].rtu_data_bit,
mb_devices[i].rtu_stop_bit);
//Check if there is a device using the same port
int share_index = -1;
for (int a = 0; a < num_devices && a < i; a++)
{
if (strcmp(mb_devices[i].dev_address, mb_devices[a].dev_address) == 0)
{
share_index = a;
break;
}
}
if (share_index != -1)
{
if (mb_devices[i].rtu_baud != mb_devices[share_index].rtu_baud || mb_devices[i].rtu_parity != mb_devices[share_index].rtu_parity ||
mb_devices[i].rtu_data_bit != mb_devices[share_index].rtu_data_bit || mb_devices[i].rtu_stop_bit != mb_devices[share_index].rtu_stop_bit)
{
unsigned char log_msg[1000];
sprintf(log_msg, "Warning MB device %s port setting missmatch\n", mb_devices[i].dev_name);
log(log_msg);
}
mb_devices[i].mb_ctx = mb_devices[share_index].mb_ctx;
}
else
{
mb_devices[i].mb_ctx = modbus_new_rtu(mb_devices[i].dev_address, mb_devices[i].rtu_baud,
mb_devices[i].rtu_parity, mb_devices[i].rtu_data_bit,
mb_devices[i].rtu_stop_bit);
}
}
//slave id
+66 -56
View File
@@ -27,6 +27,8 @@
#include "ladder.h"
uint8_t pstorage_read = false;
//-----------------------------------------------------------------------------
// Main function for the thread. Should create a buffer for the persistent
// data, compare it with the actual data and write back to the persistent
@@ -34,16 +36,20 @@
//-----------------------------------------------------------------------------
void startPstorage()
{
//We can only start persistent storage after the persistent.file was read
while (pstorage_read == false)
sleepms(100);
unsigned char log_msg[1000];
IEC_UINT persistentBuffer[BUFFER_SIZE];
IEC_UINT persistentBuffer[BUFFER_SIZE];
//Read initial buffers into persistent struct
pthread_mutex_lock(&bufferLock); //lock mutex
for (int i = 0; i < BUFFER_SIZE; i++)
{
if (int_memory[i] != NULL) persistentBuffer[i] = *int_memory[i];
}
pthread_mutex_unlock(&bufferLock); //unlock mutex
pthread_mutex_lock(&bufferLock); //lock mutex
for (int i = 0; i < BUFFER_SIZE; i++)
{
if (int_memory[i] != NULL) persistentBuffer[i] = *int_memory[i];
}
pthread_mutex_unlock(&bufferLock); //unlock mutex
//Perform the first write
if (access("persistent.file", F_OK) == -1)
@@ -69,47 +75,47 @@ void startPstorage()
fclose(ps);
//Run the main thread
while (run_pstorage)
{
while (run_pstorage)
{
//Verify if persistent buffer is outdated
bool bufferOutdated = false;
pthread_mutex_lock(&bufferLock); //lock mutex
for (int i = 0; i < BUFFER_SIZE; i++)
{
if (int_memory[i] != NULL)
{
if (persistentBuffer[i] != *int_memory[i])
{
persistentBuffer[i] = *int_memory[i];
bufferOutdated = true;
}
}
}
pthread_mutex_unlock(&bufferLock); //unlock mutex
bool bufferOutdated = false;
pthread_mutex_lock(&bufferLock); //lock mutex
for (int i = 0; i < BUFFER_SIZE; i++)
{
if (int_memory[i] != NULL)
{
if (persistentBuffer[i] != *int_memory[i])
{
persistentBuffer[i] = *int_memory[i];
bufferOutdated = true;
}
}
}
pthread_mutex_unlock(&bufferLock); //unlock mutex
//If buffer is outdated, write the changes back to the file
if (bufferOutdated)
{
FILE *fd = fopen("persistent.file", "w"); //if file already exists, it will be overwritten
if (fd == NULL)
{
if (bufferOutdated)
{
FILE *fd = fopen("persistent.file", "w"); //if file already exists, it will be overwritten
if (fd == NULL)
{
sprintf(log_msg, "Persistent Storage: Error creating persistent memory file!\n");
log(log_msg);
return 0;
}
return 0;
}
if (fwrite(persistentBuffer, sizeof(IEC_INT), BUFFER_SIZE, fd) < BUFFER_SIZE)
{
if (fwrite(persistentBuffer, sizeof(IEC_INT), BUFFER_SIZE, fd) < BUFFER_SIZE)
{
sprintf(log_msg, "Persistent Storage: Error writing to persistent memory file!\n");
log(log_msg);
return 0;
}
fclose(fd);
}
return 0;
}
fclose(fd);
}
sleepms(pstorage_polling*1000);
}
sleepms(pstorage_polling*1000);
}
}
//-----------------------------------------------------------------------------
@@ -121,31 +127,35 @@ void startPstorage()
int readPersistentStorage()
{
unsigned char log_msg[1000];
FILE *fd = fopen("persistent.file", "r");
if (fd == NULL)
{
FILE *fd = fopen("persistent.file", "r");
if (fd == NULL)
{
sprintf(log_msg, "Warning: Persistent Storage file not found\n");
log(log_msg);
return 0;
}
pstorage_read = true;
return 0;
}
IEC_INT persistentBuffer[BUFFER_SIZE];
IEC_INT persistentBuffer[BUFFER_SIZE];
if (fread(persistentBuffer, sizeof(IEC_INT), BUFFER_SIZE, fd) < BUFFER_SIZE)
{
if (fread(persistentBuffer, sizeof(IEC_INT), BUFFER_SIZE, fd) < BUFFER_SIZE)
{
sprintf(log_msg, "Persistent Storage: Error while trying to read persistent.file!\n");
log(log_msg);
return 0;
}
fclose(fd);
pstorage_read = true;
return 0;
}
fclose(fd);
sprintf(log_msg, "Persistent Storage: Reading persistent.file into local buffers\n");
log(log_msg);
pthread_mutex_lock(&bufferLock); //lock mutex
for (int i = 0; i < BUFFER_SIZE; i++)
{
if (int_memory[i] != NULL) *int_memory[i] = persistentBuffer[i];
}
pthread_mutex_unlock(&bufferLock); //unlock mutex
}
pthread_mutex_lock(&bufferLock); //lock mutex
for (int i = 0; i < BUFFER_SIZE; i++)
{
if (int_memory[i] != NULL) *int_memory[i] = persistentBuffer[i];
}
pthread_mutex_unlock(&bufferLock); //unlock mutex
pstorage_read = true;
}
Binary file not shown.
+23 -2
View File
@@ -1487,9 +1487,11 @@ add_slave_devices_tail = """
<input type='text' id='dev_data' name='device_data' placeholder='8'>
<label for='dev_stop'><b>Stop Bits</b></label>
<input type='text' id='dev_stop' name='device_stop' placeholder='1'>
<label for='dev_pause'><b>Transmission Pause</b></label>
<input type='text' id='dev_pause' name='device_pause' placeholder='0'>
</div>
</div>
<div style="float:right; width:45%; height:730px">
<div style="float:right; width:45%; height:780px">
<p style='font-size:20px; margin-top:0px'><b>Discrete Inputs (%IX100.0)</b></p>
<label for='di_start'><b>Start Address:</b></label>
<input type='text' style='width: 20%' id='di_start' name='di_start' placeholder='0'>
@@ -1564,6 +1566,7 @@ add_devices_script = """
var devparity = document.getElementById("dev_parity");
var devdata = document.getElementById("dev_data");
var devstop = document.getElementById("dev_stop");
var devpause = document.getElementById("dev_pause");
var distart = document.getElementById("di_start");
var disize = document.getElementById("di_size");
@@ -1666,6 +1669,8 @@ add_devices_script = """
devparity.value = "None"
turnElementOn(devdata)
turnElementOn(devstop)
turnElementOn(devpause)
devpause.value = "0"
turnElementOn(distart)
turnElementOn(disize)
turnElementOn(dostart)
@@ -1692,6 +1697,8 @@ add_devices_script = """
devdata.value = "8"
turnElementOff(devstop)
devstop.value = "1"
turnElementOff(devpause)
devpause.value = "0"
turnElementOff(distart)
distart.value = "0"
turnElementOff(disize)
@@ -1728,6 +1735,8 @@ add_devices_script = """
devdata.value = "8"
turnElementOff(devstop)
devstop.value = "1"
turnElementOff(devpause)
devpause.value = "0"
turnElementOff(distart)
distart.value = "0"
turnElementOff(disize)
@@ -1768,6 +1777,7 @@ add_devices_script = """
var devbaud = document.forms["uploadForm"]["dev_baud"].value;
var devdata = document.forms["uploadForm"]["dev_data"].value;
var devstop = document.forms["uploadForm"]["dev_stop"].value;
var devpause = document.forms["uploadForm"]["dev_pause"].value;
var distart = document.forms["uploadForm"]["di_start"].value;
var disize = document.forms["uploadForm"]["di_size"].value;
@@ -1826,9 +1836,11 @@ edit_slave_devices_tail = """
<input type='text' id='dev_data' name='device_data' placeholder='8'>
<label for='dev_stop'><b>Stop Bits</b></label>
<input type='text' id='dev_stop' name='device_stop' placeholder='1'>
<label for='dev_pause'><b>Transmission Pause</b></label>
<input type='text' id='dev_pause' name='device_pause' placeholder='0'>
</div>
</div>
<div style="float:right; width:45%; height:730px">
<div style="float:right; width:45%; height:780px">
<p style='font-size:20px; margin-top:0px'><b>Discrete Inputs (%IX100.0)</b></p>
<label for='di_start'><b>Start Address:</b></label>
<input type='text' style='width: 20%' id='di_start' name='di_start' placeholder='0'>
@@ -1898,6 +1910,7 @@ edit_devices_script = """
var devparity = document.getElementById("dev_parity");
var devdata = document.getElementById("dev_data");
var devstop = document.getElementById("dev_stop");
var devpause = document.getElementById("dev_pause");
var distart = document.getElementById("di_start");
var disize = document.getElementById("di_size");
@@ -2000,6 +2013,8 @@ edit_devices_script = """
devparity.value = "None"
turnElementOn(devdata)
turnElementOn(devstop)
turnElementOn(devpause)
devpause.value = "0"
turnElementOn(distart)
turnElementOn(disize)
turnElementOn(dostart)
@@ -2026,6 +2041,8 @@ edit_devices_script = """
devdata.value = "8"
turnElementOff(devstop)
devstop.value = "1"
turnElementOff(devpause)
devpause.value = "0"
turnElementOff(distart)
distart.value = "0"
turnElementOff(disize)
@@ -2062,6 +2079,8 @@ edit_devices_script = """
devdata.value = "8"
turnElementOff(devstop)
devstop.value = "1"
turnElementOff(devpause)
devpause.value = "0"
turnElementOff(distart)
distart.value = "0"
turnElementOff(disize)
@@ -2102,6 +2121,7 @@ edit_devices_script = """
var devbaud = document.forms["uploadForm"]["dev_baud"].value;
var devdata = document.forms["uploadForm"]["dev_data"].value;
var devstop = document.forms["uploadForm"]["dev_stop"].value;
var devpause = document.forms["uploadForm"]["dev_pause"].value;
var distart = document.forms["uploadForm"]["di_start"].value;
var disize = document.forms["uploadForm"]["di_size"].value;
@@ -2153,6 +2173,7 @@ edit_devices_script = """
var devparity = document.getElementById("dev_parity");
var devdata = document.getElementById("dev_data");
var devstop = document.getElementById("dev_stop");
var devpause = document.getElementById("dev_pause");
var distart = document.getElementById("di_start");
var disize = document.getElementById("di_size");
+15 -10
View File
@@ -139,7 +139,8 @@ def generate_mbconfig():
mbconfig += 'device' + str(device_counter) + '.RTU_Baud_Rate = "' + str(row[5]) + '"\n'
mbconfig += 'device' + str(device_counter) + '.RTU_Parity = "' + str(row[6]) + '"\n'
mbconfig += 'device' + str(device_counter) + '.RTU_Data_Bits = "' + str(row[7]) + '"\n'
mbconfig += 'device' + str(device_counter) + '.RTU_Stop_Bits = "' + str(row[8]) + '"\n\n'
mbconfig += 'device' + str(device_counter) + '.RTU_Stop_Bits = "' + str(row[8]) + '"\n'
mbconfig += 'device' + str(device_counter) + '.RTU_TX_Pause = "' + str(row[21]) + '"\n\n'
mbconfig += 'device' + str(device_counter) + '.Discrete_Inputs_Start = "' + str(row[11]) + '"\n'
mbconfig += 'device' + str(device_counter) + '.Discrete_Inputs_Size = "' + str(row[12]) + '"\n'
@@ -1093,7 +1094,7 @@ def add_modbus_device():
<br>
<h2>Add new device</h2>
<br>
<div style="float:left; width:45%; height:730px">
<div style="float:left; width:45%; height:780px">
<form id = "uploadForm"
enctype = "multipart/form-data"
action = "add-modbus-device"
@@ -1145,6 +1146,7 @@ def add_modbus_device():
devparity = flask.request.form.get('device_parity')
devdata = flask.request.form.get('device_data')
devstop = flask.request.form.get('device_stop')
devpause = flask.request.form.get('device_pause')
di_start = flask.request.form.get('di_start')
di_size = flask.request.form.get('di_size')
@@ -1157,15 +1159,15 @@ def add_modbus_device():
aow_start = flask.request.form.get('aow_start')
aow_size = flask.request.form.get('aow_size')
(devname, devtype, devid, devcport, devbaud, devparity, devdata, devstop, devip, devport, di_start, di_size, do_start, do_size, ai_start, ai_size, aor_start, aor_size, aow_start, aow_size) \
= sanitize_input(devname, devtype, devid, devcport, devbaud, devparity, devdata, devstop, devip, devport, di_start, di_size, do_start, do_size, ai_start, ai_size, aor_start, aor_size, aow_start, aow_size)
(devname, devtype, devid, devcport, devbaud, devparity, devdata, devstop, devpause, devip, devport, di_start, di_size, do_start, do_size, ai_start, ai_size, aor_start, aor_size, aow_start, aow_size) \
= sanitize_input(devname, devtype, devid, devcport, devbaud, devparity, devdata, devstop, devpause, devip, devport, di_start, di_size, do_start, do_size, ai_start, ai_size, aor_start, aor_size, aow_start, aow_size)
database = "openplc.db"
conn = create_connection(database)
if (conn != None):
try:
cur = conn.cursor()
cur.execute("INSERT INTO Slave_dev (dev_name, dev_type, slave_id, com_port, baud_rate, parity, data_bits, stop_bits, ip_address, ip_port, di_start, di_size, coil_start, coil_size, ir_start, ir_size, hr_read_start, hr_read_size, hr_write_start, hr_write_size) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", (devname, devtype, devid, devcport, devbaud, devparity, devdata, devstop, devip, devport, di_start, di_size, do_start, do_size, ai_start, ai_size, aor_start, aor_size, aow_start, aow_size))
cur.execute("INSERT INTO Slave_dev (dev_name, dev_type, slave_id, com_port, baud_rate, parity, data_bits, stop_bits, ip_address, ip_port, di_start, di_size, coil_start, coil_size, ir_start, ir_size, hr_read_start, hr_read_size, hr_write_start, hr_write_size, pause) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", (devname, devtype, devid, devcport, devbaud, devparity, devdata, devstop, devip, devport, di_start, di_size, do_start, do_size, ai_start, ai_size, aor_start, aor_size, aow_start, aow_size, devpause))
conn.commit()
cur.close()
conn.close()
@@ -1212,7 +1214,7 @@ def modbus_edit_device():
<br>
<h2>Edit slave device</h2>
<br>
<div style="float:left; width:45%; height:730px">
<div style="float:left; width:45%; height:780px">
<form id = "uploadForm"
enctype = "multipart/form-data"
action = "modbus-edit-device"
@@ -1296,7 +1298,8 @@ def modbus_edit_device():
return_str += 'aorstart.value = "' + str(row[17]) + '";'
return_str += 'aorsize.value = "' + str(row[18]) + '";'
return_str += 'aowstart.value = "' + str(row[19]) + '";'
return_str += 'aowsize.value = "' + str(row[20]) + '";}</script></html>'
return_str += 'aowsize.value = "' + str(row[20]) + '";'
return_str += 'devpause.value = "' + str(row[21]) + '";}</script></html>'
except Error as e:
print("error connecting to the database" + str(e))
@@ -1318,6 +1321,7 @@ def modbus_edit_device():
devparity = flask.request.form.get('device_parity')
devdata = flask.request.form.get('device_data')
devstop = flask.request.form.get('device_stop')
devpause = flask.request.form.get('device_pause')
di_start = flask.request.form.get('di_start')
di_size = flask.request.form.get('di_size')
@@ -1330,15 +1334,15 @@ def modbus_edit_device():
aow_start = flask.request.form.get('aow_start')
aow_size = flask.request.form.get('aow_size')
(devname, devtype, devid, devcport, devbaud, devparity, devdata, devstop, devip, devport, di_start, di_size, do_start, do_size, ai_start, ai_size, aor_start, aor_size, aow_start, aow_size, devid_db) \
= sanitize_input(devname, devtype, devid, devcport, devbaud, devparity, devdata, devstop, devip, devport, di_start, di_size, do_start, do_size, ai_start, ai_size, aor_start, aor_size, aow_start, aow_size, devid_db)
(devname, devtype, devid, devcport, devbaud, devparity, devdata, devstop, devpause, devip, devport, di_start, di_size, do_start, do_size, ai_start, ai_size, aor_start, aor_size, aow_start, aow_size, devid_db) \
= sanitize_input(devname, devtype, devid, devcport, devbaud, devparity, devdata, devstop, devpause, devip, devport, di_start, di_size, do_start, do_size, ai_start, ai_size, aor_start, aor_size, aow_start, aow_size, devid_db)
database = "openplc.db"
conn = create_connection(database)
if (conn != None):
try:
cur = conn.cursor()
cur.execute("UPDATE Slave_dev SET dev_name = ?, dev_type = ?, slave_id = ?, com_port = ?, baud_rate = ?, parity = ?, data_bits = ?, stop_bits = ?, ip_address = ?, ip_port = ?, di_start = ?, di_size = ?, coil_start = ?, coil_size = ?, ir_start = ?, ir_size = ?, hr_read_start = ?, hr_read_size = ?, hr_write_start = ?, hr_write_size = ? WHERE dev_id = ?", (devname, devtype, devid, devcport, devbaud, devparity, devdata, devstop, devip, devport, di_start, di_size, do_start, do_size, ai_start, ai_size, aor_start, aor_size, aow_start, aow_size, int(devid_db)))
cur.execute("UPDATE Slave_dev SET dev_name = ?, dev_type = ?, slave_id = ?, com_port = ?, baud_rate = ?, parity = ?, data_bits = ?, stop_bits = ?, ip_address = ?, ip_port = ?, di_start = ?, di_size = ?, coil_start = ?, coil_size = ?, ir_start = ?, ir_size = ?, hr_read_start = ?, hr_read_size = ?, hr_write_start = ?, hr_write_size = ?, pause = ? WHERE dev_id = ?", (devname, devtype, devid, devcport, devbaud, devparity, devdata, devstop, devip, devport, di_start, di_size, do_start, do_size, ai_start, ai_size, aor_start, aor_size, aow_start, aow_size, devpause, int(devid_db)))
conn.commit()
cur.close()
conn.close()
@@ -2397,6 +2401,7 @@ if __name__ == '__main__':
openplc_runtime.start_runtime()
time.sleep(1)
configure_runtime()
monitor.parse_st(openplc_runtime.project_file)
app.run(debug=False, host='0.0.0.0', threaded=True, port=8080)