Quickstart

Get up and running with this short quickstart.

Prerequisites

The project uses .NET 8.0, so if not already on your system, install. Use Git to clone the project, or download the zip from the Github link.

Mrgada uses .NET 8.0 and Serilog, which have known issues on Linux. Unfortunatly you will have to compile the dotnet project on a Windows machine inable to run on other platforms.

Installation

Make a directory called my_scada_application and clone the mrgada repository.

cd my_scada_application
git clone https://github.com/maremrgazo/mrgada.git

Siemens PLCs

Acknowledgments to s7netplus which is the backbone of this collector (More on collectors in Architecture), enabling reading and writting of bytes to and from Siemens PLCs.

Compatibility

Bellow are compatible hardware and software options. Note that only the PLC type S7-1500 and TIA Portal 15.1 have been verified working.

Software

  • TIA Portal 15.1

  • TIA Portal 16

  • TIA Portal 17

  • TIA Portal 18

  • TIA Portal 19

Hardware

  • S7-200

  • S7-300

  • S7-400

  • S7-1200

  • S7-1500

Importing dbs from TIA Portal

Create a new directory inside my_scada_application\mrgada\Imports\S7, and name it your_plcs_project_name. This name will be used to access variables inside c#.

Example code for writing to the PLC:

using static mrgada;

mrgada.your_plcs_project_name.your_database_name.your_variable_name.CV = 3.14;

Open your TIA Portal project and select one or more dbs you would wish to use in your SCADA application. Right click then select *Generate source from blocks* and press *Including all depended blocks* and copy the source to mrgada/S7/your_plcs_project_name

Change working directory to Imports/S7 and run python ImportS7dbs.py with the argument your_plcs_project_name

   cd Imports/S7
   python ImportS7dbs.py your_plcs_project_name

Simple program

using static mrgada;

public class Program
{
   public static void Main(string[] args)
   {
      var mrgadaServerIp = "0.0.0.0";           // replace with the ip you wish to host mrgada server
      var mrgadaServerPort = 0;                 // replace with the port you wish to host mrgada server
      var machineType = mrgada.MachineType.Server
      mrgada.Init
      (
      mrgadaServerIp, 
      mrgadaServerPort, 
      machineType
      );

      var s7PlcType = mrgada.PlcType.S71500;    // replace your plcs type
      var s7PlcIp = "0.0.0.0";                  // replace your plcs ip
      var s7PlcRack = 0;                        // replace your plcs rack
      var s7PlcSlot = 1;                        // replace your plcs slot
      mrgada.your_plcs_project_name.Init        // replace with your_plcs_project_name 
      (
      s7PlcType, 
      s7PlcRack, 
      s7PlcSlot, 
      s7PlcIp
      );

      mrgada.Start();                           // start mrgada

      mrgada.your_plcs_project_name.OnFirstCollectorConnect += (sender) => {

         // read from plc
         Console.WriteLine
         (
            mrgada.your_plcs_project_name.your_db_name.your_variable_name.CV
         );           
         // write to plc
         mrgada.your_plcs_project_name.your_db_name.your_variable_name.CV = 3.14       
         // subscribe to the CV on changed event
         mrgada.your_plcs_project_name.your_db_name.your_variable_name.OnValueChanged += (sender, newValue) => {
         Console.WriteLine($"your_variable_name changed value to {newValue}");
         };

      }

      Console.ReadLine();

      mrgada.Stop();                            // stop mrgada

   }
}

Install dependencies

dotnet restore

Run the program

dotnet run

To see an example Historian SCADA application and HMI read the next chapter