![]() |
|
|
#5 |
|
Senior Member
Регистрация: 16.09.2012
Адрес: Irkutsk
Сообщений: 555
Вес репутации: 1606 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Мои эксперименты с Modbus
В arduino залита следующая программа: Код:
/*
Test Modbus RTU - Arduino
Для простоты и уменьшения потребления памяти
поддерживается только две следующие функции Modbus:
- read holding registers (0x03)
- write multiple registers (0x10)
*/
#include <SoftwareSerial.h>
#include <Modbusino.h>
const int RL0 = 22;
const int RL1 = 24;
const int RL2 = 26;
const int RL3 = 28;
const int rl_arr[] = {RL0,RL1,RL2,RL3};
const int regs = 10; // количество регистров
const int ID_slave = 25;
uint16_t tab_reg[regs]; //задаем массив регистров
// Инициализация SLAVE, идентификатор (адрес) в сети ID = 25
ModbusinoSlave modbusino_slave(ID_slave);
// на цифр. выходы сразу записываем значение регистров
// любое значение > 0 это HIGH, 0 - LOW
void SetRelay() {
int i;
for (i = 0; i < 4; i++) {
digitalWrite(rl_arr[i], tab_reg[i]);
}
}
void setup() {
modbusino_slave.setup(115200);
pinMode(RL0, OUTPUT); // установка цифровых вх/вых в режим выхода
pinMode(RL1, OUTPUT);
pinMode(RL2, OUTPUT);
pinMode(RL3, OUTPUT);
}
void loop() {
modbusino_slave.loop(tab_reg, regs);
SetRelay();
tab_reg[9] = analogRead(A0); //запись аналогового значения в 9-ый регистр
}
здесь я щелкаю реле а здесь читаю аналоговый вход На время эксперимента я специально подключился с помощью стороннего преобразователя TTL-USB к serial порту RX0, TX0 т.к. планирую сделать TTL-RS485 преобразователь на MAX485. Чтобы все было "по взрослому" ![]() вот планируемая схема ttl-rs485.zip Последний раз редактировалось andr128; 17.12.2012 в 05:50. |
|
|
|
| Здесь присутствуют: 2 (пользователей: 0 , гостей: 2) | |
|
|