Opened 13 years ago

Closed 13 years ago

#165 closed Aufgabe (fixed)

RMGBus > Modbus

Reported by: Melanie Hermann Owned by: Melanie Hermann
Priority: kurzfristig Milestone:
Component: Gesamtsystem Version:
Severity: Fehler Keywords:
Cc:

Description (last modified by Melanie Hermann)

Wenn z.B. auf der COM6 RMGBus eingestellt ist und dann auf Modbus umgeschaltet wird kommt die Trace-Meldung "ModbusSlave 6 kann COM3: nicht öffnen". Wenn dann die Auswahl Modbus ein zweites Mal bestätigt wird kommt folgende Trace-Meldung "ModbusSlave 6 COM3: geöffnet".
Wird aber von Modbus auf RMGBus umgeschaltet funktioniert dieser sofort.

TODO:

Prüfen, worin Problem besteht beim ersten Umschalten.

Change History (2)

comment:1 by Melanie Hermann, 13 years ago

Description: modified (diff)

comment:2 by Melanie Hermann, 13 years ago

Resolution: fixed
Status: newclosed

DONE:
Problem lag darin, dass der Modbus zuerst versucht hat die COM zu öffnen und erst danach hat der RMGBus die COM geschlossen.
Nun wird abhängig vom gewählten Modus entschieden ob zuerst RMGBus oder zuerst Modbus die COM schließt und dann anschließend RMGBus oder Modbus die COM öffnet.
Von diesem Problem waren COM3 und COM6 betroffen.

Änderungen:
InOut.cpp, SetComModeAndParameter():
Vorher:

...
case COM3:
  SerSetBiosParameter(com,nValue(ComBaudrate)[idx], nValue(ComBits)[idx],nValue(ComMode)[idx]); 
  theApp.m_MbCanCOM3->ModeChanged(); 
  theApp.m_RmgbCanCOM3->ModeChanged();
  //Dsfg läuft immer und wird bei passendem Mode in CanToDSfG versorgt
  break;
case COM4: 
  ...
  break;
case COM5:
  ...
  break;    
case COM6:
  // Mode changed  
  theApp.m_MbCOM6->ModeChanged(); 
  theApp.m_RmgbCOM6->ModeChanged();
       
  // Parameter changed
  SerSetRS485Time (com,nValue(ComBaudrate)[idx]);  
  switch(nValue(ComMode)[5])
  {
  case ComMode_5_AUS:
    break;
  case ComMode_5_MODBRTU:
  case ComMode_5_MODBASC:  
    theApp.m_MbCOM6->ParamsChanged(); 
    break;
  case ComMode_5_RMGBOUT:
    theApp.m_RmgbCOM6->ParamsChanged();
    break;
  default:
    ASSERT(false);  // TODO
  }
  break;
case COM7:
  ...

Jetzt:

case COM3:
  SerSetBiosParameter(com,nValue(ComBaudrate)[idx], nValue(ComBits)[idx],nValue(ComMode)[idx]); 
  switch(nValue(ComMode)[2])
  {
  case ComMode_2_AUS:
    theApp.m_MbCanCOM3->ModeChanged(); 
    theApp.m_RmgbCanCOM3->ModeChanged();			
    break;
  case ComMode_2_MODBRTU:
  case ComMode_2_MODBASC:  
    theApp.m_RmgbCanCOM3->ModeChanged(); 
    theApp.m_MbCanCOM3->ModeChanged(); 
    break;
  case ComMode_2_RMGBOUT:
    theApp.m_MbCanCOM3->ModeChanged(); 
    theApp.m_RmgbCanCOM3->ModeChanged();
    break;
  default:
    ASSERT(false);	 // TODO
  }
  //Dsfg läuft immer und wird bei passendem Mode in CanToDSfG versorgt
  break;
case COM4: 
  ...
  break;
case COM5:
  ...
  break; 
case COM6:
  // Mode changed  
  switch(nValue(ComMode)[5])
  {
  case ComMode_5_AUS:
    theApp.m_MbCOM6->ModeChanged(); 
    theApp.m_RmgbCOM6->ModeChanged();			
    break;
  case ComMode_5_MODBRTU:
  case ComMode_5_MODBASC:  
    theApp.m_RmgbCOM6->ModeChanged(); 
    theApp.m_MbCOM6->ModeChanged(); 
    break;
  case ComMode_5_RMGBOUT:
    theApp.m_MbCOM6->ModeChanged(); 
    theApp.m_RmgbCOM6->ModeChanged();
    break;
  default:
    ASSERT(false);	 // TODO
  }
         
  // Parameter changed
  SerSetRS485Time (com,nValue(ComBaudrate)[idx]);  
  switch(nValue(ComMode)[5])
  {
  case ComMode_5_AUS:
    break;
  case ComMode_5_MODBRTU:
  case ComMode_5_MODBASC:  
    theApp.m_MbCOM6->ParamsChanged(); 
    break;
  case ComMode_5_RMGBOUT:
    theApp.m_RmgbCOM6->ParamsChanged();
    break;
  default:
    ASSERT(false); // TODO
  }
  break;
case COM7:
   ...
Note: See TracTickets for help on using tickets.