• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino ModBUS_RS485 problem
#1
Witam od niedawna zacząłem zabawę z arduino .
W internecie znalazłem kod dzięki któremu odczytuje lub zapisuje stany stany wejść lub wyjść.
Za pośrednictwem protokołu ModBUS RTU. I wszystko chodzi dobrze na kablu USB,
ale chciałem nawiązać komunikacje wykorzystując piny (0)RX, (1)TX, podłączając do nich
[url=http://allegro.pl/modul-konwerter-max485-uart-ttl-arduino-i5803359182.html][/url]MODUŁ KONWERTER MAX485 - UART TTL ARDUINO a następnie przejściówkę rs485 na USB.


Kod:
#include <modbus.h>
#include <modbusDevice.h>
#include <modbusRegBank.h>
#include <modbusSlave.h>

/* PINS
Add more registers if needed
Digital input pins 2,3,4,5,6,7
Digital output pins 8,9,12,13
Analog output pins 10,11 (PWM)
Analog input pins 0,1,2,3,4,5
*/


modbusDevice regBank;
modbusSlave slave;

int AI0,AI1,AI2,AI3,AI4,AI5;


void setup()
{  
 regBank.setId(10); ///Set Slave ID

//Add Digital Input registers
 regBank.add(10002);
 regBank.add(10003);
 regBank.add(10004);
 regBank.add(10005);
 regBank.add(10006);
 regBank.add(10007);
// Add Digital Output registers
 regBank.add(8);
 regBank.add(9);
 regBank.add(12);
 regBank.add(13);
//Analog input registers
 regBank.add(30001);
 regBank.add(30002);
 regBank.add(30003);
 regBank.add(30004);
 regBank.add(30005);
 regBank.add(30006);
//Analog Output registers
 regBank.add(40010);  
 regBank.add(40011);  

 slave._device = &regBank;  
 slave.setBaud(9600);  
 
 pinMode(2,INPUT);
 pinMode(3,INPUT);
 pinMode(4,INPUT);
 pinMode(5,INPUT);
 pinMode(6,INPUT);
 pinMode(7,INPUT);
 pinMode(8,OUTPUT);
 pinMode(9,OUTPUT);
 pinMode(12,OUTPUT);
 pinMode(13,OUTPUT);
 
}
void loop(){

 while(1){  
 //Digital Input
   byte DI2 = digitalRead(2);
   if (DI2 >= 1)regBank.set(10002,1);
   if (DI2 <= 0)regBank.set(10002,0);
   byte DI3 = digitalRead(3);
   if (DI3 >= 1)regBank.set(10003,1);
   if (DI3 <= 0)regBank.set(10003,0);
   byte DI4 = digitalRead(4);
   if (DI4 >= 1)regBank.set(10004,1);
   if (DI4 <= 0)regBank.set(10004,0);
   byte DI5 = digitalRead(5);
   if (DI5 >= 1)regBank.set(10005,1);
   if (DI5 <= 0)regBank.set(10005,0);
   byte DI6 = digitalRead(6);
   if (DI6 >= 1)regBank.set(10006,1);
   if (DI6 <= 0)regBank.set(10006,0);
   byte DI7 = digitalRead(7);
   if (DI7 >= 1)regBank.set(10007,1);
   if (DI7 <= 0)regBank.set(10007,0);
                               
 //Digital output
   int DO8 = regBank.get(8);
     if (DO8 <= 0 && digitalRead(8) == HIGH)digitalWrite(8,LOW);
     if (DO8 >= 1 && digitalRead(8) == LOW)digitalWrite(8,HIGH);
   int DO9 = regBank.get(9);
     if (DO9 <= 0 && digitalRead(9) == HIGH)digitalWrite(9,LOW);
     if (DO9 >= 1 && digitalRead(9) == LOW)digitalWrite(9,HIGH);
   int DO12 = regBank.get(12);
     if (DO12 <= 0 && digitalRead(12) == HIGH)digitalWrite(12,LOW);
     if (DO12 >= 1 && digitalRead(12) == LOW)digitalWrite(12,HIGH);
   int DO13 = regBank.get(13);
     if (DO13 <= 0 && digitalRead(13) == HIGH)digitalWrite(13,LOW);
     if (DO13 >= 1 && digitalRead(13) == LOW)digitalWrite(13,HIGH);
           
 //Analog input  ***READ Twice deliberately
   AI0 = analogRead(0);
   delay(10);
   AI0 = analogRead(0);
   regBank.set(30001, (word) AI0);
   delay(10);
   
   AI1 = analogRead(1);
   delay(10);
   AI1 = analogRead(1);
   regBank.set(30002, (word) AI1);
   delay(10);
   
   AI2 = analogRead(2);
   delay(10);
   AI2 = analogRead(2);
   regBank.set(30003, (word) AI2);
   delay(10);
   
   AI3 = analogRead(3);
   delay(10);
   AI3 = analogRead(3);
   regBank.set(30004, (word) AI3);
   delay(10);
   
   AI4 = analogRead(4);
   delay(10);
   AI4 = analogRead(4);
   regBank.set(30005, (word) AI4);
   delay(10);
   
   AI5 = analogRead(5);
   delay(10);
   AI5 = analogRead(5);
   regBank.set(30006, (word) AI5);
   delay(10);
       
 //Analog output
   word AO10 = regBank.get(40010);
   analogWrite(10,AO10);
   delay(10);
   word AO11 = regBank.get(40011);
   analogWrite(11,AO11);
   delay(10);
       
 slave.run();  
 }
}
Wszystkie biblioteki w załączniku.


Załączone pliki Miniatury
   

.zip   Modbus_projekt.zip (Rozmiar: 3.35 KB / Pobrań: 8)
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości