Hello,
i everyone, i made some code to simulate the working of a shade motor and but it dosent work because an error appear which states An Access Violation Segmentation Fault raised in your program, i dont know what to do, perhaps you guys can figure that out.

Code:
#include <iostream>
using namespace std;

struct NVAR_DigitalOutputOnOff
{
        bool wm_bc;
        bool do_bc;
        bool do_bs; 
};

struct VAR_DigitalOutputOnOff
{
        bool dom_bs;
        bool doa_bs;          
};
struct NVAR_DigitalInput
{
        bool di_bs;
};

struct NVAR_ShadeVar
{
        int shadeVar;
        int shadeTime;
        int shadeRef;
        int shadeOff;
        int temp_time;
        char flag_shade;
};

struct MainModule
{
    NVAR_DigitalOutputOnOff         digOutN[2];
    VAR_DigitalOutputOnOff          digOutV[2];
    NVAR_DigitalInput               digInpN[2];
    NVAR_ShadeVar                   m01_var[1];   
};

 void shadeM01(
               NVAR_DigitalOutputOnOff *digOut1N, 
               NVAR_DigitalOutputOnOff *digOut2N,
               VAR_DigitalOutputOnOff *digOut1V, 
               VAR_DigitalOutputOnOff *digOut2V,
               NVAR_DigitalInput *digInp3, 
               NVAR_DigitalInput *digInp4, 
               NVAR_ShadeVar *shadeVar, 
               int shade_time) 
 {  
 																						 
  if (digOut1N->wm_bc  // Q1 MANUAL
      && digOut2N->wm_bc) // Q2 MANUAL
      { 
        if (shadeVar->flag_shade == 0) // ZALUZIJE MIRUJEJO
        {
          if ((digInp3->di_bs
              ^ digOut1N->do_bc)
              && !digInp4->di_bs
              && !digOut2N->do_bc) // KOMANDA TOUCHA SPUSCANJA NI AKTIVNA 
          { 
              shadeVar->flag_shade = 1;
              // digOut2->dom_bs = 0;
          } else digOut1V->dom_bs = 0; 
                        	    
          if ((digInp4->di_bs
          		^digOut2N->do_bc)
            && !digInp3->di_bs
            && !digOut1N->do_bc)
          { 
              shadeVar->flag_shade = 2;
             // digOut1->dom_bs = 0;
          } else digOut2V->dom_bs = 0;
        }               	    
        else if (shadeVar->flag_shade == 1) // ODPIRANJE ZALUZIJ
        { 
          if (shadeVar->shadeTime < shade_time)
          {
            if (digInp3->di_bs
              ^digOut1N->do_bc)
            {
              if (shadeVar->temp_time < 833)
              {
                shadeVar->temp_time++;
                digOut1V->dom_bs = 1;
              } 
              else if (shadeVar->temp_time == 833)
              {
                shadeVar->temp_time = 0;
                shadeVar->shadeTime++;
              }
            } 
            else 
            {
              if (shadeVar->temp_time < 833)
              {
                shadeVar->temp_time++;
                digOut1V->dom_bs = 1;
              } 
              else if (shadeVar->temp_time == 833)
              {
                digOut1V->dom_bs = 0;
                  if (shadeVar->shadeOff < 255)
                  {
                    shadeVar->shadeOff++;
                  } 
                  else if (shadeVar->shadeOff == 255)
                  {
                    shadeVar->shadeTime++;
                    shadeVar->flag_shade = 0;
                    shadeVar->shadeOff = 0;
                    shadeVar->temp_time = 0;
                  }
              }
            }
          }
          else 
          { // ZALUZIJE ODPRTE
            digOut1V->dom_bs = 0;
            digOut1N->do_bc = 0;
            shadeVar->shadeTime = shade_time;
            shadeVar->flag_shade = 0;
          }		
        }
        else if (shadeVar->flag_shade == 2) // ZAPIRANJE ZALUZIJ 
        { 
          if (shade_time > 0)
          {
            if (digInp4->di_bs
                ^digOut2N->do_bc)
            {
              if (shadeVar->temp_time < 833) 
              {
                shadeVar->temp_time++;
                digOut2V->dom_bs = 1;
              } 
              else if (shadeVar->temp_time == 833)
              {
                shadeVar->temp_time = 0;
                shadeVar->shadeTime--;
              }
            } 
            else 
            {
              if (shadeVar->temp_time < 833)
              {
                shadeVar->temp_time++;
                digOut2V->dom_bs = 1;
              } 
              else if (shadeVar->temp_time == 833)
              {
                digOut2V->dom_bs = 0;
                  if (shadeVar->shadeOff < 255)
                  {
                    shadeVar->shadeOff++;
                  } 
                  else if (shadeVar->shadeOff == 255)
                  {
                    shadeVar->shadeTime--;
                    shadeVar->flag_shade = 0;
                    shadeVar->shadeOff = 0;
                    shadeVar->temp_time = 0;
                  }
              }
            }
          }
          else 
          { // ZALUZIJE ZAPRTE
            digOut2V->dom_bs = 0;
            digOut2N->do_bc = 0;
            shadeVar->shadeTime = 0;
            shadeVar->flag_shade = 0;
          }		
        }
        //vpisi8(nvvar,shadeRef, shadeVar->shade_time);                       	 
      }
  }

//MainModule *MM;

int main()
{   
    int shade_time = 0;
    cout << "Digital output 1: " << endl;
    cout << "insert 1 - manual mode" << endl; 
    cout << "insert 0 - auto mode" << endl;  
    cin >> MM->digOutN[0].wm_bc;
    
    cout << "Digital output 2: " << endl;
    cout << "insert 1 - manual mode" << endl; 
    cout << "insert 0 - auto mode" << endl; 
    cin >> MM->digOutN[1].wm_bc;
      
    shadeM01(&MM->digOutN[0],  //NVAR_DigitalOutputOnOff *digOut1N 
             &MM->digOutN[1],  //NVAR_DigitalOutputOnOff *digOut2N
             &MM->digOutV[0],  //VAR_DigitalOutputOnOff *digOut1V
             &MM->digOutV[1],  //VAR_DigitalOutputOnOff *digOut2V
             &MM->digInpN[0],  //NVAR_DigitalInput *digInp3
             &MM->digInpN[1],  //NVAR_DigitalInput *digInp4
             &MM->m01_var[0],  //NVAR_ShadeVar *shadeVar
             shade_time);      //int shade_time
    
    cout << "State of first output" << MM->digOutN[0].do_bs << endl;
    cout << "State of second output" << MM->digOutN[1].do_bs << endl;
    
    return 0;
}
Thanks for your time and help.
Best Regards,
Boschow.