NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 2856 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 4 از 4

موضوع: راه اندازی freemodbus برای STM32

  1. #1
    تازه وارد
    تاریخ عضویت
    Nov 2007
    نوشته ها
    3
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض راه اندازی freemodbus برای STM32

    سلام
    کسی با کتابخونه های freemodbus در حالت rtu slave کار کرده راهنمایی کنه آدرس برای متغیر چطوری تعریف بشه؟ و یا اصلا میشه این کتابخونه رو برای stm32 استفاده کرد؟
    کتابخونه: https://sourceforge.net/projects/fre...0.zip/download
    یه راهنمایی گنگ هم پیدا کردم ولی کار راه نمیندازه: https://habrahabr.ru/post/279747/

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    کاربر فعال
    تاریخ عضویت
    Mar 2010
    نوشته ها
    236
    تشکر
    101
    تشکر شده 246 بار در 163 پست

    پیش فرض

    کد:
    eMBErrorCode eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs,eMBRegisterMode eMode )
    {
        eMBErrorCode    eStatus = MB_ENOERR;
        int             iRegIndex;
        USHORT            usTempVal;
    
        if( ( usAddress >= REG_INPUT_START )&& ( usAddress + usNRegs <= REG_INPUT_START + REG_INPUT_NREGS ) )
        {
            if (eMode==MB_REG_READ)
            {
                iRegIndex = ( int )( usAddress - usRegInputStart );
                while( usNRegs > 0 )
                {
                    usTempVal = ReadReg(iRegIndex);
                    //printf("read reg:\taddr:%d\tvalue:%x\r",iRegIndex,usTempVal);
                    *pucRegBuffer++ =( unsigned char )( usTempVal >> 8 );
                    *pucRegBuffer++ =( unsigned char )( usTempVal & 0xFF );
                    iRegIndex++;
                    usNRegs--;
                }
            }
            else if(eMode==MB_REG_WRITE)
            {
                iRegIndex = ( int )( usAddress - usRegInputStart );
                while( usNRegs > 0 )
                {
    
                    usTempVal = *pucRegBuffer++;
                    usTempVal <<= 8;
                    usTempVal |= *pucRegBuffer++;
                    WriteReg(iRegIndex,usTempVal);
                    //printf("write reg:\taddr:%d\tvalue:%x\r",iRegIndex,usTempVal);
                    iRegIndex++;
                    usNRegs--;
                }
            }
        }
        else
        {
            eStatus = MB_ENOREG;
        }
    
        return eStatus;
    }
    برای استفاده در st باید فایلهای porttimer , portserial
    رو تغیر بدید که میشه تنظیم تایمر و یوزارت
    بعد از اون هم برای فانکش کد 3 و6 کد بالا رو استفاده کنید
    داخل کد بالا 2 تا تابع تعریف کردم ReadReg و WriteReg
    که پارامتر ورودیش اندیس رجیستر موردنظر هست
    برای بقیه فانکش کد ها مثل همین تابع رو باید خودتون بنویسید

  4. تشکرها از این نوشته :


  5. #3
    تازه وارد
    تاریخ عضویت
    Nov 2007
    نوشته ها
    3
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض

    خیلی ممنون فقط چند نکته:
    1) حالا مثلا فانکشن 3 که رید هستش برای آدرسهای مختلف باید داخل همین تابع ادامه بدم و برم جلو یعنی مثلا سه دما با سه آدرس متفاوت باید چطوری عمل کرد.
    2) داخل اینتراپت تایمر و یوزارت کدوم تابع ی این کتابخونه باید فراخونده شه؟ یا اینکه چیزی نباید بزاریم اونجا فقط در وایل برنامه eMBPoll() باید مکررن صدا زده شه؟

    - - - Updated - - -

    سوال اولمو خودم فهمیدم چی شد. سوال دومم ولیهنوز مونده.

  6. #4
    کاربر فعال
    تاریخ عضویت
    Mar 2010
    نوشته ها
    236
    تشکر
    101
    تشکر شده 246 بار در 163 پست

    پیش فرض

    برای اینکه متوجه بشید مثلا پورت ای وی ار رو نگاه کنید
    داخل اینتراپت ها "توابع مشخص شده" رو باید فراخوانی کنید که داخل خود serialport نوشته

  7. تشکرها از این نوشته :


موضوعات مشابه

  1. [سوال] مشکل در برنامه راه اندازی nrf24l01 با stm32
    توسط Doloop در انجمن stm32
    پاسخ: 11
    آخرين نوشته: 27-12-2018, 11:53
  2. [سوال] مشکل با LSE و راه اندازی RTC در stm32
    توسط ali19844891 در انجمن stm32
    پاسخ: 10
    آخرين نوشته: 04-08-2018, 13:39
  3. پاسخ: 15
    آخرين نوشته: 18-03-2015, 18:21
  4. راه اندازی lcd 6300 با stm32
    توسط wantedboy در انجمن stm32
    پاسخ: 9
    آخرين نوشته: 10-11-2014, 17:54
  5. راه اندازی و کار با keypad در stm32
    توسط spring110.sh در انجمن stm32
    پاسخ: 2
    آخرين نوشته: 21-09-2013, 10:05

کلمات کلیدی این موضوع

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •