Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/29: Рейтинг темы: голосов - 29, средняя оценка - 4.79
4 / 4 / 1
Регистрация: 28.11.2015
Сообщений: 108

Библиотека FreeModbus и pic16F

23.03.2016, 05:22. Показов 6189. Ответов 3

Студворк — интернет-сервис помощи студентам
Здравствуйте, начал изучать библиотеку freemodbus, искал в инете и так и не нашел рабочего примера. Есть примеры где modbus RTU но там не используется freemodbus. Сам собрал modbus ASCII , но хочется изучить библиотеку. У меня микроконтроллер pic 16 f 877. ниже скину код . компилятор xc8 , MPLAB X IDE. в архиве есть файл протеуса и прога modbus tester и даташит . О самом коде , 1 это функции чтения и записи (eMBRegInputCB) "просто скопировал не разбирался еще", уперся во все что написано в файле mbport.h (реализация находится в port.c) инициализация проходит, первое что не понятно функция (vMBPortSerialEnable), на первый взгляд все просто, "включить, выключил" но ощущение что при включении передачи "TX" должна начаться передача строки из буфера а потом отключаться (только зачем так делать если есть прерывание ), дальше с таймерами и событиями вообще ничего не понятно. Нашелся бы добрый человек который смог бы все это объяснить. modbus_RTU_pic16f.rar
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.03.2016, 05:22
Ответы с готовыми решениями:

FreeModBus + MSP430
Ребята Help. Ситуация такова: скачал библиотеку FreeModBus и запихнул ее в проект и возникла проблема. Вод здесь: /* Stop Watchdog...

FreeModBus RTU
Вообще мне нужно было портировать это чудо на мой ARM контроллер, с чем можно сказать справился. Теперь остается вопрос освоение работы...

freemodbus stm32
Приветствую. Переделываю библиотеку freemodebus под stm32. Отлаживаю на stm32f4discovery. Возник вопрос. modbus poll посылает запрос на...

3
4 / 4 / 1
Регистрация: 28.11.2015
Сообщений: 108
23.03.2016, 05:25  [ТС]
файл mbport.h
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/* 
 * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU.
 * Copyright (c) 2006 Christian Walter <wolti@sil.at>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. The name of the author may not be used to endorse or promote products
 *    derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * File: $Id: mbport.h,v 1.19 2010/06/06 13:54:40 wolti Exp $
 */
 
#ifndef _MB_PORT_H
#define _MB_PORT_H
#include "port.h"
#ifdef __cplusplus
PR_BEGIN_EXTERN_C
#endif
 
/* ----------------------- Type definitions ---------------------------------*/
 
typedef enum
{
    EV_READY,                   /*!< Startup finished. */
    EV_FRAME_RECEIVED,          /*!< Frame received. */
    EV_EXECUTE,                 /*!< Execute function. */
    EV_FRAME_SENT               /*!< Frame sent. */
} eMBEventType;
 
/*! \ingroup modbus
 * \brief Parity used for characters in serial mode.
 *
 * The parity which should be applied to the characters sent over the serial
 * link. Please note that this values are actually passed to the porting
 * layer and therefore not all parity modes might be available.
 */
typedef enum
{
    MB_PAR_NONE,                /*!< No parity. */
    MB_PAR_ODD,                 /*!< Odd parity. */
    MB_PAR_EVEN                 /*!< Even parity. */
} eMBParity;
 
/* ----------------------- Supporting functions -----------------------------*/
BOOL            xMBPortEventInit( void );
 
BOOL            xMBPortEventPost( eMBEventType  eEvent );
 
BOOL            xMBPortEventGet(  /*@out@ */ eMBEventType * eEvent );
 
/* ----------------------- Serial port functions ----------------------------*/
 
BOOL            xMBPortSerialInit( UCHAR ucPort, ULONG ulBaudRate,
                                   UCHAR ucDataBits, eMBParity eParity );
 
void            vMBPortClose( void );
 
void            xMBPortSerialClose( void );
 
void            vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable );
 
BOOL            xMBPortSerialGetByte( volatile CHAR * pucByte );
 
BOOL            xMBPortSerialPutByte( CHAR  ucByte );
 
/* ----------------------- Timers functions ---------------------------------*/
BOOL            xMBPortTimersInit( USHORT usTimeOut50us );
 
void            xMBPortTimersClose( void );
 
void            vMBPortTimersEnable( void );
 
void            vMBPortTimersDisable( void );
 
void            vMBPortTimersDelay( USHORT usTimeOutMS );
 
/* ----------------------- Callback for the protocol stack ------------------*/
 
/*!
 * \brief Callback function for the porting layer when a new byte is
 *   available.
 *
 * Depending upon the mode this callback function is used by the RTU or
 * ASCII transmission layers. In any case a call to xMBPortSerialGetByte()
 * must immediately return a new character.
 *
 * \return <code>TRUE</code> if a event was posted to the queue because
 *   a new byte was received. The port implementation should wake up the
 *   tasks which are currently blocked on the eventqueue.
 */
extern          BOOL( *pxMBFrameCBByteReceived ) ( void );
 
extern          BOOL( *pxMBFrameCBTransmitterEmpty ) ( void );
 
extern          BOOL( *pxMBPortCBTimerExpired ) ( void );
 
/* ----------------------- TCP port functions -------------------------------*/
BOOL            xMBTCPPortInit( USHORT usTCPPort );
 
void            vMBTCPPortClose( void );
 
void            vMBTCPPortDisable( void );
 
BOOL            xMBTCPPortGetRequest( UCHAR **ppucMBTCPFrame, USHORT * usTCPLength );
 
BOOL            xMBTCPPortSendResponse( const UCHAR *pucMBTCPFrame, USHORT usTCPLength );
 
#ifdef __cplusplus
PR_END_EXTERN_C
#endif
#endif
файл port.c
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <pic.h>
#define _XTAL_FREQ 20000000UL
#define delay(x)  _delay(x)
 
#include "modbus/include/mb.h"
#define BAUD 9600
#define FOSC 20000000L
#define NINE 0     /* Use 9bit communication? FALSE=8bit */
#define DIVIDER ((int)(FOSC/(16UL * BAUD) -1))
#define HIGH_SPEED 1
 
#if NINE == 1
#define NINE_BITS 0x40
#else
#define NINE_BITS 0
#endif
 
#if HIGH_SPEED == 1
#define SPEED 0x4
#else
#define SPEED 0
#endif
#if defined(_16F87) || defined(_16F88)
#define RX_PIN TRISB2
#define TX_PIN TRISB5
#else
#define RX_PIN TRISC7
#define TX_PIN TRISC6
#endif
    /* Serial initialization */
#define init_comms() \
        RX_PIN = 1; \
    TX_PIN = 1; \
    SPBRG = DIVIDER; \
    RCSTA = (NINE_BITS); \
    TXSTA = (SPEED|NINE_BITS)
 
 
 
 
BOOL xMBPortSerialInit(UCHAR ucPort, ULONG ulBaudRate, UCHAR ucDataBits, eMBParity eParity) {
 
 
 
 
 
    //void putch(unsigned char);
    //unsigned char getch(void);
    //unsigned char getche(void);
    //int getline(char s[], int lim);
 
    if (1 == 1) {
        init_comms();
    }
    return 1;
}
 
void vMBPortClose(void) {
    SPEN = FALSE; //SeralPort Disabled
    TXEN = FALSE; //TX translit
    CREN = FALSE; //RX translit
}
 
void vMBPortSerialEnable(BOOL xRxEnable, BOOL xTxEnable) {
    SPEN = TRUE; //SeralPort Enabled
    TXEN = xTxEnable; //TX Setup
    CREN = xRxEnable; //RX Setup
 
}
 
BOOL xMBPortSerialGetByte(volatile UCHAR * pucByte) {
    //  const char i='m';
    //    pucByte=&i;
 
    *pucByte = RCREG;
    return 1;
}
 
BOOL xMBPortSerialPutByte(CHAR  ucByte) {
    while (!TXIF) /* set when register is empty */
       continue;
    TXREG = ucByte;
    return 1;
}
 
BOOL xMBPortEventInit(void) {
    GIE = TRUE; //interrupt
    RCIE = TRUE; //interrupt RX
    PEIE = TRUE;
    TXIE = FALSE; //interrupt TX
    
    return 1;
}
 
BOOL xMBPortEventPost(eMBEventType  eEvent) {
  /*  if (TXREG != 0) TXEN = 1;
    else TXEN = 0;
    if (TXEN && TXIF)
        eEvent = EV_EXECUTE;
    //  xMBPortSerialPutByte((char *)&BUFF);
   */
    return 1;
}
 
BOOL xMBPortEventGet(/*@out@ */ eMBEventType * eEvent) {
 
    *eEvent = EV_READY;
 
    if (RCIF) {
        RCIF = 0;
       // xMBPortSerialGetByte((char *) &BUFF);
       // xMBPortSerialPutByte((char *) &BUFF);
 
    }
    return 1;
}
BOOL            xMBPortTimersInit( USHORT usTimeOut50us )
{
    T0CS=0;
    PSA=1;
    PS0=0;
    PS1=0;
    PS2=0;
    return 1;
}
void            vMBPortTimersEnable( void )
{
    
}
void            vMBPortTimersDelay( USHORT usTimeOutMS )
{
 
}
1
4 / 4 / 1
Регистрация: 28.11.2015
Сообщений: 108
30.03.2016, 07:48  [ТС]
я так понял вообще никто в этом не разбирается просто копируют демки и все кто нибудь разбирался что там написано ????????? а именно в папке port . может есть инструкция по портированию "freemodbus" именно его потому что от идет для мк.
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
30.03.2016, 08:58
Цитата Сообщение от DVyacheslavN Посмотреть сообщение
Нашелся бы добрый человек который смог бы все это объяснить.
Цитата Сообщение от DVyacheslavN Посмотреть сообщение
я так понял вообще никто в этом не разбирается просто копируют демки и все кто нибудь разбирался что там написано ?
Конечно разбирались. И мало того, я так думаю, плотно использовали (я не юзал, писал самостоятельно). Просто "добрых людей", готовых вот так вот сразу нахаляву сидеть и расписывать вам использование бесплатного freemodbus'а. Обратитесь в другую ветку, там вам все распишут, за "сходный кошт".

Цитата Сообщение от DVyacheslavN Посмотреть сообщение
зачем так делать если есть прерывание
у вас же в руках рабочий инструмент, с открытым исходным кодом. Переделайте его по своему усмотрению, с улучшениями и дополнениями. Почему нет?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.03.2016, 08:58
Помогаю со студенческими работами здесь

FreeModbus + AVR
Здравствуйте! Появилась необходимость создать Slave устройство AVR с протоколом Modbus. Исходники модуля с сайта...

freemodbus + Eclipse
Никак не получается скомпилировать. freemodbus v1.5, istypsi 3.7.1, winAVR 20100110 Файлы из архива кинул так: в папку...

Freemodbus для rs485
подскажите, пожалуйста, как добавить в библиотеку freemodbus поддержку протокола rs485, где нужно дописать управление пином RTS,...

FreeModbus + at90can32 + IAR
Доброго времени суток! Пытаюсь прикрутить к своему проекту упомянутую либу. Написал portserial.c и porttimer.c. Объявил...

Порт для freemodbus
Может кто видел в сети порт для STM32 под freemodbus TCP. Или может кто сам делал?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru