Opened 9 years ago
Last modified 9 years ago
#362 accepted Fehler
Modbus userlist
| Reported by: | Gerd Hedtke | Owned by: | Sebastian Herschmann |
|---|---|---|---|
| Priority: | mittelfristig | Milestone: | 01 Nächstes Release |
| Component: | Gesamtsystem | Version: | ALLE |
| Severity: | Fehler | Keywords: | |
| Cc: |
Description
Durch die Softwareerweiterung für das Gateway wurden einige Sichtbarkeitsregeln für Messwerte und Parameter überarbeitet.
Diese Regeln sind für das nicht Funktionieren der Modbus-Userlist verantwortlich. Alle Modbusregister die in der originalen Liste vorhanden sind, können neu belegt werden, unbekannte Register bringen einen Fehler.
Attachments (1)
Change History (5)
comment:2 by , 9 years ago
| Milestone: | → 01 Nächstes Release |
|---|
comment:3 by , 9 years ago
| Owner: | set to |
|---|---|
| Status: | new → accepted |
comment:4 by , 9 years ago
Im Rückgabepointer der Funktion FindRegister pMBL steht bereits die Information pMBL-Access zum gesuchten Register drin. Man braucht also nicht nochmal nach dem Register suchen.
In der Funktion ReadUsrMbl wird Access gesetzt. Achtung: Access ist ein Array über alle GC-Varianten, es wird nur das Array-Element zur gegenwärtig aktiven GC-Variante gesetzt alle anderen sind undefiniert.
Wichtig: Überprüfen ob ReadUsrMbl auch bei Änderung des Parameters GCVariante ausgeführt wird. Problem ist hier die Logic mit mystat (Zeitstempel der UserModbusListen-Datei) zur Ermittlung ob such was verändert hat. Hier ist die mögliche Änderung der GCVariante nicht berücksichtigt.
Erklärung:
int CModbusSlave::RegisterToModbus(uint16 Reg, uint16 RegAnz,bool disableusr) ... pMBL=FindRegister(Register,disableusr); if ((NULL == pMBL) || (!IsRegisterVisible(pMBL->Reg))) // Angefordertes Register NICHT in der Liste ... bool CModbusSlave::IsRegisterVisible(uint16 Reg) { Hier wird nur in MBL gesucht, nicht in der UserModbusliste usrMbl }das führt dazu, dass ein Eintrag der Usermodbusliste mit ihrer Registernummer in MBL gesucht werden.
Richtig wäre: