rol-jal-bim112 with automatic reference
Verfasst: 24. Dez 2018, 15:52
hi
many roller shutter actuators are equipped with an automatic reference which, in the event of a black-out, leads, in case of absolute positioning request, the shutter to position 0% (top) itself, thus obtaining a precise reference for subsequent positioning.
I worked a bit on the firmware "rol-jal-bim112" modifying the file "channel.cpp" in the routine "Channel::objectUpdate" and precisely in the point:
case COM_OBJ_SET_POSITION:
if (! (activeLocks & LOCK_ABSOLUTE_POSITION))
{
// inizio modifica **************************************************
//--aggiunta per riferimento in caso di blackout
if (!positionValid) // verifico se necessito di riferimento
{
position=value;
_savePosition (features & FEATURE_RESTORE_AFTER_REF);
// indipendentemente da dove si trova la tapparella
// voglio che vada su per il tempo massimo stabilito in ETS, per essere sicuro
// che dopo sia effettivamente tutta aperta
position=255; // ora l'attuatore pensa che la tapparella sia tutta chiusa
moveTo (0); // tutto su per il riferimento
}
if (positionValid) // solo se la posizione risulta valida, vado alla posizione richiesta
// fine modifica *********************************************************
moveTo(value); // vai alla posizione... %
}
break;
this change seems to work for the moment, but you must also change the routine that manages the scenes because even here there is a "moveTo" that must verify the validity of the position.
I try to add the same changes made previously but in the routine of scene manage :
void Channel::handleScene(unsigned int value)
{
bool save = value & 0x80;
value &= 0x3F;
for (unsigned int i = 0; i < NO_OF_SCENES; i++)
{
if (sceneNumber == value)
{
if (save)
{
if (features & FEATURE_STORE_SCENE)
{
if (_storeScene(i))
userEeprom.modified();
}
}
else //richiesta esecuzione di una scena
{
// inizio modifiche -----------------------------------------------------
if (!positionValid) // verifico se necessito di riferimento
{
position=value;
_savePosition (features & FEATURE_RESTORE_AFTER_REF);
position=255; // ora l'attuatore pensa che la tapparella i-esima sia tutta chiusa
moveTo (0); // tutto su per il riferimento
}
if (positionValid)
//fine modifiche ------------------------------------------
_moveToScene(i);
}
}
}
}
but in this case, when the position is not valid, the shutters go up (0%) validating the position but do not move to the position decided with the scene.
It seems that the call "_moveToScene (i)" is not executed!
I accept suggestions
thank you
many roller shutter actuators are equipped with an automatic reference which, in the event of a black-out, leads, in case of absolute positioning request, the shutter to position 0% (top) itself, thus obtaining a precise reference for subsequent positioning.
I worked a bit on the firmware "rol-jal-bim112" modifying the file "channel.cpp" in the routine "Channel::objectUpdate" and precisely in the point:
case COM_OBJ_SET_POSITION:
if (! (activeLocks & LOCK_ABSOLUTE_POSITION))
{
// inizio modifica **************************************************
//--aggiunta per riferimento in caso di blackout
if (!positionValid) // verifico se necessito di riferimento
{
position=value;
_savePosition (features & FEATURE_RESTORE_AFTER_REF);
// indipendentemente da dove si trova la tapparella
// voglio che vada su per il tempo massimo stabilito in ETS, per essere sicuro
// che dopo sia effettivamente tutta aperta
position=255; // ora l'attuatore pensa che la tapparella sia tutta chiusa
moveTo (0); // tutto su per il riferimento
}
if (positionValid) // solo se la posizione risulta valida, vado alla posizione richiesta
// fine modifica *********************************************************
moveTo(value); // vai alla posizione... %
}
break;
this change seems to work for the moment, but you must also change the routine that manages the scenes because even here there is a "moveTo" that must verify the validity of the position.
I try to add the same changes made previously but in the routine of scene manage :
void Channel::handleScene(unsigned int value)
{
bool save = value & 0x80;
value &= 0x3F;
for (unsigned int i = 0; i < NO_OF_SCENES; i++)
{
if (sceneNumber == value)
{
if (save)
{
if (features & FEATURE_STORE_SCENE)
{
if (_storeScene(i))
userEeprom.modified();
}
}
else //richiesta esecuzione di una scena
{
// inizio modifiche -----------------------------------------------------
if (!positionValid) // verifico se necessito di riferimento
{
position=value;
_savePosition (features & FEATURE_RESTORE_AFTER_REF);
position=255; // ora l'attuatore pensa che la tapparella i-esima sia tutta chiusa
moveTo (0); // tutto su per il riferimento
}
if (positionValid)
//fine modifiche ------------------------------------------
_moveToScene(i);
}
}
}
}
but in this case, when the position is not valid, the shutters go up (0%) validating the position but do not move to the position decided with the scene.
It seems that the call "_moveToScene (i)" is not executed!
I accept suggestions
thank you