Close

UNO a HMI rs485 modbus RTU

Úvodní stránka Fórum Hardware Arduino UNO a HMI rs485 modbus RTU

Aktuálně je na stránce zobrazen 1 příspěvek (celkem z 1)
  • Autor
    Příspěvky
  • #8887
    radekzela
    Účastník

    Dobrý den je tu někdo kdo by nám pomol rozchodit arduino UNO a HMI panel po rs485 modbus RTU
    http://arduino-shop.cz/arduino/985-prevodnik-ttl-na-rs-485-1427700037.html

    Zde mame k nahlédnutí kod:

    #include <modbus.h>
    #include <modbusDevice.h>
    #include <modbusRegBank.h>
    #include <modbusSlave.h>
    
    //deklarování pinů relé karty
    int rele1 = 4;
    int rele2 = 5;
    int rele3 = 6;
    int rele4 = 7;
    int rele5 = 8;
    int rele6 = 9;
    int rele7 = 10;
    int rele8 = 11;
    
    int ECHO = 12; // Echo pin z HC-SC04 na pinu 2
    int TRIG = 13; // Trig pin z HC-SC04 na pin 3
    
    //Setup the brewtrollers register bank
    //All of the data accumulated will be stored here
    modbusDevice regBank;
    //Create the modbus slave protocol handler
    modbusSlave slave;
    
    void setup(){
    
    Serial.begin(9600);
    
    //Assign the modbus device ID.
    regBank.setId(1);
    
    regBank.add(1);
    regBank.add(2);
    regBank.add(3);
    regBank.add(4);
    regBank.add(5);
    regBank.add(6);
    regBank.add(7);
    regBank.add(8);
    
    regBank.add(30001); //regist pro teplotni senzor A0
    regBank.add(30002); //regist pro teplotni senzor A1
    regBank.add(40020); //registr pro data z ultrazvuku
    
    slave._device = &regBank;
    
    //inicializace sériového portu s rychlostí 9600
    slave.setBaud(9600);
    
    pinMode(rele1, OUTPUT);
    pinMode(rele2, OUTPUT);
    pinMode(rele3, OUTPUT);
    pinMode(rele4, OUTPUT);
    pinMode(rele5, OUTPUT);
    pinMode(rele6, OUTPUT);
    pinMode(rele7, OUTPUT);
    pinMode(rele8, OUTPUT);
    
    //Nastaví pin 12 jako vstupní
    pinMode(ECHO, INPUT);
    //Nastaví pin 13 jako výstupní
    pinMode(TRIG, OUTPUT);
    }
    
    void loop(){
    
    unsigned long cas = millis();
    while(millis() - cas < 100){
    //zapnutí a vypnutí relé
    digitalWrite(rele1, regBank.get(1));
    digitalWrite(rele2, regBank.get(2));
    digitalWrite(rele3, regBank.get(3));
    digitalWrite(rele4, regBank.get(4));
    digitalWrite(rele5, regBank.get(5));
    digitalWrite(rele6, regBank.get(6));
    digitalWrite(rele7, regBank.get(7));
    digitalWrite(rele8, regBank.get(8));
    
    slave.run();
    }
    
    //HCSR-04
    digitalWrite(TRIG, LOW);
    delayMicroseconds(2);
    digitalWrite(TRIG, HIGH);
    delayMicroseconds(10);
    digitalWrite(TRIG, LOW);
    
    // Spočítá vzdálenost
    float distance = pulseIn(ECHO, HIGH);
    distance= distance*0.017315f;
    int vzdalenost = (distance * 100) + 0.5;
    if(vzdalenost > 40000) vzdalenost = 40000;
    
    regBank.set(40020, (word) vzdalenost); //vzdálenost od 0 do 1000, 1mm = 1, 1000mm = 1000
    
    // Spocita teplotu z cidla A0
    int sensorValue = analogRead(A0);
    float volt = (sensorValue/1020.0) * 5.0; //Volts
    float tempC = (volt -0.5) * 10000; //Celcius
    regBank.set(30001, (word) tempC);
    
    // Spocita teplotu z cidla A1
    int sensorValue1 = analogRead(A1);
    float volt1 = (sensorValue1/1020.0) * 5.0; //Volts
    float tempC1 = (volt1 -0.5) * 10000; //Celcius
    regBank.set(30002, (word) tempC1);
    
    slave.run();
    }
Aktuálně je na stránce zobrazen 1 příspěvek (celkem z 1)
  • Pro reakci na toto téma se musíte přihlásit.