@ -169,24 +169,43 @@ void Periphery::processDigitalOutput(){
# pragma CODE_SECTION("ramfuncs");
void Periphery : : sendModbusDataToCPU ( ) {
_message . mdl . all = 0 ; // TODO delete maybe?
_message . mdh . all = 0 ;
WEINBUS : : WeinbusTableRegister reg ;
reg = modbusRTU . dataHandler . outputRegisters . get_register_cursor ( _modbusRegCounter ) ;
if ( modbusRTU . dataHandler . outputRegisters . address_range ( reg . get_address ( ) ) ) {
_message . mdl . all = reg . get_address ( ) ;
reg . read ( _message . mdh . all ) ;
_message . mdl . all = reg . get_address ( ) ;
switch ( reg . get_type ( ) ) {
case WEINBUS : : DATA_UINT16 :
{
reg . read ( reinterpret_cast < uint16_t & > ( _message . mdh . all ) ) ;
break ;
}
case WEINBUS : : DATA_INT16 :
{
reg . read ( reinterpret_cast < int16_t & > ( _message . mdh . all ) ) ;
break ;
}
case WEINBUS : : DATA_UINT32 :
{
reg . read ( reinterpret_cast < uint32_t & > ( _message . mdh . all ) ) ;
break ;
}
case WEINBUS : : DATA_INT32 :
{
reg . read ( reinterpret_cast < int32_t & > ( _message . mdh . all ) ) ;
break ;
}
case WEINBUS : : DATA_FLOAT :
{
reg . read ( reinterpret_cast < float & > ( _message . mdh . all ) ) ;
break ;
}
default : { }
}
else {
_modbusRegCounter = 0 ;
reg = modbusRTU . dataHandler . outputRegisters . get_register_cursor ( _modbusRegCounter ) ;
_message . mdl . all = reg . get_address ( ) ;
reg . read ( _message . mdh . all ) ;
}
_modbusRegCounter + + ;
if ( _modbusRegCounter > = modbusRTU . dataHandler . outputRegisters . get_quantity ( ) ) {
_modbusRegCounter = 0 ;
}
_cana . transmitMsg ( can_space : : MODBUS_DATA_COMM_TO_CPU_MBOX , _message ) ;
}
@ -200,7 +219,8 @@ void Periphery::receiveCpuModbusData(){
WEINBUS : : WeinbusTableRegister reg ;
uint32_t addr = _message . mdl . all ;
reg = modbusRTU . dataHandler . inputRegisters . get_register_cursor ( addr - modbusRTU . dataHandler . inputRegisters . get_start_address ( ) ) ;
if ( modbusRTU . dataHandler . inputRegisters . is_address_exists ( addr ) ) return ;
reg = modbusRTU . dataHandler . inputRegisters . get_register_address ( addr ) ;
reg . write_data ( _message . mdh . all ) ;
}
}