Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: engineer42 - 17 Ekim 2022, 13:32:26

Başlık: Freemodbus Kütüphanesi MB_EIO Hatası
Gönderen: engineer42 - 17 Ekim 2022, 13:32:26
İyi günler,

Freemodbus kütüphanesini M031 için port ettim. UART ve TIMER için gerekli ayarları da yaptım. Projeyi KEIL de hatasız derliyorum ancak MODBUS POLL programında sürekli TIMEOUT hatası alıyorum. İlk önce TIMER ayarını doğru yapmadım diye düşündüm ancak debug ederken eMBRTUReceive() fonksiyonunun IO hatası döndürdüğünü gördüm. bu IO hatası nedir ve neyi yanlış yapıyorum anlayamadım. Yardımcı olabilecek fikirlere açığım. eMBErrorCode
eMBRTUReceive( UCHAR * pucRcvAddress, UCHAR ** pucFrame, USHORT * pusLength )
{
    BOOL            xFrameReceived = FALSE;
    eMBErrorCode    eStatus = MB_ENOERR;

    ENTER_CRITICAL_SECTION(  );
    assert( usRcvBufferPos < MB_SER_PDU_SIZE_MAX );

   
    if( ( usRcvBufferPos >= MB_SER_PDU_SIZE_MIN )
        && ( usMBCRC16( ( UCHAR * ) ucRTUBuf, usRcvBufferPos ) == 0 ) )
    {

       
        *pucRcvAddress = ucRTUBuf[MB_SER_PDU_ADDR_OFF];

         
        *pusLength = ( USHORT )( usRcvBufferPos - MB_SER_PDU_PDU_OFF - MB_SER_PDU_SIZE_CRC );

       
        *pucFrame = ( UCHAR * ) & ucRTUBuf[MB_SER_PDU_PDU_OFF];
        xFrameReceived = TRUE;
    }
    else
    {
        eStatus = MB_EIO;
printf("/n MB_EIO  ");
    }

    EXIT_CRITICAL_SECTION(  );
    return eStatus;
}
Başlık: Ynt: Freemodbus Kütüphanesi MB_EIO Hatası
Gönderen: robikod - 17 Ekim 2022, 13:36:04
ucRTUBuf'u print etmeye çalışın ve gerçekten göndermek istediğiniz datayı mı içeriyor ona bakabilirsiiz
Başlık: Ynt: Freemodbus Kütüphanesi MB_EIO Hatası
Gönderen: quarko - 17 Ekim 2022, 14:43:02
Hocam önce modlink le çalışabilirsiniz. Sorguları tek tek atıp adım adım debug yaparsınız. Paketi düzgün bir şekilde alıp almadığına emin olursunuz. Ondan sonra doğru bir şekilde cevap hazırlama kısmına geçersiniz. Ardından da hazırlanan cevabı doğru bir şekilde gönderme kısmı üzerinde çalışabilirsin. En son emin olduktan sonra modbus poll ile testlere devam edebilirsin.
Başlık: Ynt: Freemodbus Kütüphanesi MB_EIO Hatası
Gönderen: engineer42 - 17 Ekim 2022, 15:01:22
robikod'un dediğini denedim. Masterdan gelen veri ile ucRTUBuf uyuşmuyor. Daha önce de freemodbus ile bir kaç proje yapmıştım ama üzerinden epey vakit geçti. UART birimini mi doğru kuramıyorum acaba.  CLK_EnableModuleClock(UART1_MODULE);

       
        CLK_SetModuleClock(UART1_MODULE, CLK_CLKSEL1_UART1SEL_HIRC, CLK_CLKDIV0_UART1(1));
         
        SYS->GPA_MFPL = (SYS->GPA_MFPL & ~(SYS_GPA_MFPL_PA2MFP_Msk | SYS_GPA_MFPL_PA3MFP_Msk))    |       \
                    (SYS_GPA_MFPL_PA2MFP_UART1_RXD | SYS_GPA_MFPL_PA3MFP_UART1_TXD);

        SYS_ResetModule(UART1_RST);

       
        UART_SetLine_Config(UART1, ulBaudRate, ucDataBits, parity, UART_STOP_BIT_1);

       

       
        NVIC_SetPriority(UART1_IRQn, 0);
        NVIC_EnableIRQ(UART1_IRQn);
Başlık: Ynt: Freemodbus Kütüphanesi MB_EIO Hatası
Gönderen: quarko - 17 Ekim 2022, 15:19:32
freemodbus'ı daha önce kullanmadım. Kendi yazdığım modbus kütüphanesini genelde port ediyorum. Test ederken modlink her zaman ilk olarak daha kullanışlı oluyor.  Modbus Poll sürekli sorgu attığından ilk çalıştırırken çok kullanışlı olmuyor. Sonradan uzun testler için daha uygun oluyor.