Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > Открытый проект умного дома

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.12.2012, 15:03   #11
andr128
Senior Member
 
Аватар для andr128
 
Регистрация: 16.09.2012
Адрес: Irkutsk
Сообщений: 555
Вес репутации: 1605
andr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond repute
По умолчанию тестовый код управление ардуиной по Modbus RTU

PHP код:
//gcc mbmaster.c -o mbmaster `pkg-config --libs --cflags libmodbus`

//==========================
//   Modbus RTU Master
//==========================

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <modbus.h>


#define INT_REGS 10 //10 регистров

//============================
int main(int argcchar *argv[])
{

uint16_t tab_reg[INT_REGS];
modbus_t *ctx;
modbus_mapping_t *mb_mapping;
int rc;
int i;
char c;

    
ctx modbus_new_rtu("/dev/ttyUSB0"9600'N'81);
    if (
ctx == NULL) { fprintf(stderr"Unable to create the modbus context\n"); return -1; }

    
modbus_set_slave(ctx1); //id=1

    
if (modbus_connect(ctx) == -1) { 
    
fprintf(stderr"Connection failed: %s\n"modbus_strerror(errno));
    
modbus_free(ctx);
        return -
1;
    }

//основной цикл
for(;;) {
    
rc modbus_read_registers(ctx0INT_REGStab_reg);
    if (
rc == -1) { 
    
fprintf(stderr"Read - %s\n"modbus_strerror(errno));
    
//return -1;
    
}

    if (
rc != -1) { 
    for (
i=0rci++) { printf("reg[%d]=%d (0x%X)\n"itab_reg[i], tab_reg[i]); }
    }

    
scanf ("%c",&c);
    if (
=='a'tab_reg[0] = 1// посылаем ардуине команды с клавиатуры
    
if (=='s'tab_reg[0] = 0
    if (
=='z'tab_reg[1] = 11
    if (
=='q') break; 

    
rc modbus_write_registers(ctx01tab_reg);
    if (
rc == -1) { fprintf(stderr"Write - %s\n"modbus_strerror(errno)); }

    

//for cycle

printf("Quit mbmaster: %s\n"modbus_strerror(errno));
modbus_close(ctx);
modbus_free(ctx);


return 
0;

andr128 вне форума   Ответить с цитированием
 


Здесь присутствуют: 3 (пользователей: 0 , гостей: 3)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 02:53. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика