├── script.st ├── README.md ├── mbconfig.cfg ├── Dockerfile └── run.sh /script.st: -------------------------------------------------------------------------------- 1 | PROGRAM prog0 2 | VAR 3 | var_in : BOOL; 4 | var_out : BOOL; 5 | END_VAR 6 | 7 | var_out := var_in; 8 | END_PROGRAM 9 | 10 | 11 | CONFIGURATION Config0 12 | 13 | RESOURCE Res0 ON PLC 14 | TASK Main(INTERVAL := T#50ms,PRIORITY := 0); 15 | PROGRAM Inst0 WITH Main : prog0; 16 | END_RESOURCE 17 | END_CONFIGURATION 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # openplc-docker 2 | ## About 3 | Docker container for [OpenPLC v3](http://www.openplcproject.com/) Linux Runtime. 4 | 5 | ## Build 6 | `docker build -t openplc-docker .` 7 | 8 | ## Run 9 | Place a structured text file _script.st_ in a directory and run the container 10 | 11 | `docker run --name plc -d -p 8080:8080 -p 502:502 -v /PATH/TO/SCRIPT:/home/openplc/scripts openplc-docker` 12 | -------------------------------------------------------------------------------- /mbconfig.cfg: -------------------------------------------------------------------------------- 1 | Num_Devices = "1" 2 | Polling_Period = "100" 3 | Timeout = "1000" 4 | # ------------ 5 | # DEVICE 0 6 | # ------------ 7 | device0.name = "Test" 8 | device0.slave_id = "0" 9 | device0.protocol = "TCP" 10 | device0.address = "127.0.0.1" 11 | device0.IP_Port = "502" 12 | device0.RTU_Baud_Rate = "115200" 13 | device0.RTU_Parity = "None" 14 | device0.RTU_Data_Bits = "8" 15 | device0.RTU_Stop_Bits = "1" 16 | 17 | device0.Discrete_Inputs_Start = "0" 18 | device0.Discrete_Inputs_Size = "8" 19 | device0.Coils_Start = "0" 20 | device0.Coils_Size = "8" 21 | device0.Input_Registers_Start = "0" 22 | device0.Input_Registers_Size = "8" 23 | device0.Holding_Registers_Read_Start = "0" 24 | device0.Holding_Registers_Read_Size = "8" 25 | device0.Holding_Registers_Start = "0" 26 | device0.Holding_Registers_Size = "8" 27 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:stretch 2 | 3 | USER root 4 | WORKDIR /root/ 5 | RUN apt-get update && \ 6 | apt-get -y install git python-pip autoconf bison build-essential pkg-config bison flex autoconf automake libtool make git python2.7 python-pip sqlite3 cmake sudo 7 | RUN pip install flask flask-login pyserial pymodbus 8 | 9 | RUN useradd --create-home --shell /bin/bash openplc 10 | RUN adduser openplc sudo && \ 11 | echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers 12 | 13 | USER openplc 14 | WORKDIR /home/openplc 15 | 16 | RUN git clone https://github.com/thiagoralves/OpenPLC_v3.git 17 | WORKDIR /home/openplc/OpenPLC_v3 18 | RUN sudo ./install.sh custom 19 | 20 | RUN sudo apt-get clean 21 | 22 | RUN mkdir /home/openplc/scripts 23 | 24 | COPY run.sh /home/openplc 25 | RUN sudo chmod +x /home/openplc/run.sh 26 | 27 | EXPOSE 502 28 | EXPOSE 8080 29 | EXPOSE 20000 30 | EXPOSE 43628 31 | 32 | CMD ["/home/openplc/run.sh"] -------------------------------------------------------------------------------- /run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ ! -f /home/openplc/scripts/script.st ]; then 4 | echo "Structured text file missing!" 5 | exit 1 6 | fi 7 | 8 | if [ ! -f /home/openplc/scripts/mbconfig.cfg ]; then 9 | echo "Config file missing!" 10 | exit 1 11 | fi 12 | 13 | SQL_SCRIPT="INSERT INTO Programs (Name, Description, File, Date_upload) VALUES ('Test', 'Desc', 'script.st', strftime('%s', 'now'));" 14 | SQL_DEVICE="INSERT INTO Slave_dev (dev_name, dev_type, slave_id, 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 ('Testdevice', 'TCP', 0, '127.0.0.1', 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);" 15 | SQL_AUTOST="UPDATE Settings SET Value = 'true' WHERE Key = 'Start_run_mode';" 16 | 17 | cp /home/openplc/scripts/script.st /home/openplc/OpenPLC_v3/webserver/st_files 18 | sqlite3 /home/openplc/OpenPLC_v3/webserver/openplc.db "$SQL_SCRIPT" 19 | 20 | cp /home/openplc/scripts/mbconfig.cfg /home/openplc/OpenPLC_v3/webserver 21 | sqlite3 /home/openplc/OpenPLC_v3/webserver/openplc.db "$SQL_DEVICE" 22 | 23 | sqlite3 /home/openplc/OpenPLC_v3/webserver/openplc.db "$SQL_AUTOST" 24 | 25 | sudo /home/openplc/OpenPLC_v3/start_openplc.sh 26 | --------------------------------------------------------------------------------