Arduino pouze pro odborníky "MODBUS"

...

Moderátor: Mods_senior

radekzela
nováček
Příspěvky: 3
Registrován: říjen 16
Pohlaví: Muž
Stav:
Offline

Arduino pouze pro odborníky "MODBUS"

Příspěvekod radekzela » 23 říj 2016 17:39

Přátelé potřebuji radu.
Ano nehodí se to jako průmyslové využití ale to teď neřešme.
Jedná se mi o to. Potřebuji rozjed HMI panel a arduino po rs485 s protokolem modbus rtu. drtím se stím už tři dny ale arduino vůbec neumím.
Pevodník který chci použít je MAX485
http://arduino-shop.cz/arduino/985-prev ... 00037.html

V arduinu budou registry na 8 relatek 1,2,3,4,5,6,7,8
Dále regist pro 4 digitalní vstupy 10001,10002,10003,10004
Dále tam potřebuji registr 2 analogove vstupy 30001,30002
A naposled regist 40001 na ultrazvukový senzor.

Už jsme daly dohromady kód který funguje skvěle přes USB v arduinu a simulatorem HMI panelu.
Takto nám to funguje na simulatoru uplně dokonale.
https://www.youtube.com/watch?v=RVCe_gXpAxI

Na převodníku to ale nefunguje vůbec je to asi tím že nemáme definovaný pin na arduinu který se stará o přepínání odesílání a přijímání paketů.
https://www.youtube.com/watch?v=JWPuOrG4poQ


Dokonce když propojím HMI s arduinem přes převodník tak se nic neděje data prolezou ale jen chvilkově když do toho zapnu simulator v PC-arduino ale HMI-arduino se neustale odpojuje a připojuje to není to správné řešení.

Proto žádám někoho o pomoc zda by dokázal v kódu který je níže ošetřit tu komunikaci pomocí RS485 HALF-DUPLEX (převodník MAX485)

Použité knihovny: https://code.google.com/archive/p/arduino-modbus-slave/downloads


Kód: Vybrat vše

#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(); 
}

Reklama
Uživatelský avatar
Sender
Level 3.5
Level 3.5
Příspěvky: 700
Registrován: leden 07
Bydliště: Vysočina
Pohlaví: Muž
Stav:
Offline

Re: Arduino pouze pro odborníky "MODBUS"

Příspěvekod Sender » 23 říj 2016 18:11

S tímhle dotazem spíš na ebastlirna.cz nebo svetelektro.com
Jinak -zkoušel jsi nějaký převodník USB to RS485 ?

radekzela
nováček
Příspěvky: 3
Registrován: říjen 16
Pohlaví: Muž
Stav:
Offline

Re: Arduino pouze pro odborníky "MODBUS"

Příspěvekod radekzela » 23 říj 2016 20:56

Tak jdu na to a pak sem dám návod pro ostatní jak to udělat.
Ale pokud by se zde někdo našel táké by to bylo fajn :-)

Převodník USB-RS485 je na cestě od číňana jak panelový do dveří rozvaděče tak i přímo do USB. Čekám ho do této středy.

Děkuji ti za navigaci.

Uživatelský avatar
Sender
Level 3.5
Level 3.5
Příspěvky: 700
Registrován: leden 07
Bydliště: Vysočina
Pohlaví: Muž
Stav:
Offline

Re: Arduino pouze pro odborníky "MODBUS"

Příspěvekod Sender » 23 říj 2016 21:09

Ještě jsem zapoměl na http://forum.mcontrollers.com ,ale tam chodí míň lidí.
Na google je spousty odkazů v souvislosti s Arduino a RS485.Sám zatím s Arduinem nekamarádím .:)

radekzela
nováček
Příspěvky: 3
Registrován: říjen 16
Pohlaví: Muž
Stav:
Offline

Re: Arduino pouze pro odborníky "MODBUS"

Příspěvekod radekzela » 24 říj 2016 01:44

Tak tu máme pokrok.
Ale ukázal se další oříšek projevuje se Nám nějaké zpoždění na přenosu.
Video s ukázkou zpoždění je zde: http://www.ebastlirna.cz/modules.php?na ... ic&t=77404

Jo a děkuji Sender za nasměřování na to správné místo ;-)


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • USB-C pouze data ? Příloha(y)
    od ski1961 » 08 říj 2023 10:25 » v Rady s výběrem hw a sestavením PC
    4
    2145
    od ski1961 Zobrazit poslední příspěvek
    08 říj 2023 11:40
  • Záloha pouze změněných dat Příloha(y)
    od BulletRide » 29 úno 2024 01:14 » v Programy ke stažení
    3
    1393
    od meda2016 Zobrazit poslední příspěvek
    03 bře 2024 10:34

Zpět na “Vše ostatní (sw)”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 14 hostů