Symcon das richtige für mein Projekt?

Hallo,

was sagt Ihr würde das so in etwa funktionieren?
Oder muss da noch viel mehr in den Sketch?

/**
 *  Modbus slave example 2:
 *  The purpose of this example is to link the Arduino digital and analog
 *	pins to an external device.
 *
 *  Recommended Modbus Master: QModbus
 *  http://qmodbus.sourceforge.net/
 */

#include <ModbusRtu.h>
#define ID   1

Modbus slave(ID, 0, 0); // this is slave ID and RS-232 or USB-FTDI
boolean led;
int8_t state = 0;
unsigned long tempus;

// data array for modbus network sharing
uint16_t au16data[9];

/**
 *  Setup procedure
 */
void setup() {
  io_setup(); // I/O settings

  // start communication
  slave.begin( 19200 );
  tempus = millis() + 100;
  digitalWrite(13, HIGH );
}

/**
 *  Loop procedure
 */
void loop() {
  // poll messages
  // blink led pin on each valid message
  state = slave.poll( au16data, 9 );

  if (state > 4) {
    tempus = millis() + 50;
    digitalWrite(13, HIGH);
  }
  if (millis() > tempus) digitalWrite(13, LOW );

  // link the Arduino pins to the Modbus array
  io_poll();
} 

/**
 * pin maping:
 * 0 - digital input
 * 1 - digital input
 * 2 - digital output PWM
 * 3 - digital output PWM
 * 4 - digital output PWM
 * 5 - digital output PWM
 * 6 - digital output PWM
 * 7 - digital output PWM
 * 8 - digital output PWM
 * 9 - digital output PWM
 * 10 - digital output PWM
 * 11 - digital output PWM
 * 12 - digital output PWM
 * 13 - digital output PWM
 * 14 - digital input
 * 15 - digital input
 * 16 - digital input
 * 17 - digital input
 * 18 - digital input
 * 19 - digital input
 * 20 - digital input
 * 21 - digital input
 * A0 - analog input
 * A1 - analog input
 * A2 - analog input
 * A3 - analog input
 *
 * pin 13 is reserved to show a successful query
 */
void io_setup() {
  // define i/o
  pinMode(0, INPUT);
  pinMode(1, INPUT);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(15, INPUT);
  pinMode(16, INPUT);
  pinMode(17, INPUT);
  pinMode(18, INPUT);
  pinMode(19, INPUT);
  pinMode(20, INPUT);
  pinMode(21, INPUT);

  digitalWrite(2, LOW );
  digitalWrite(3, LOW );
  digitalWrite(4, LOW );
  digitalWrite(5, LOW );
  digitalWrite(6, LOW );
  digitalWrite(7, LOW );
  digitalWrite(8, LOW );
  digitalWrite(9, LOW );
  digitalWrite(10, LOW );
  digitalWrite(11, LOW );
  digitalWrite(12, LOW );
  digitalWrite(13, LOW );
}

/**
 *  Link between the Arduino pins and the Modbus array
 */
void io_poll() {
  // get digital inputs -> au16data[0]
  bitWrite( au16data[0], 0, digitalRead( 0 ));
  bitWrite( au16data[0], 1, digitalRead( 1 ));
  bitWrite( au16data[0], 2, digitalRead( 15 ));
  bitWrite( au16data[0], 3, digitalRead( 16 ));
  bitWrite( au16data[0], 4, digitalRead( 17 ));
  bitWrite( au16data[0], 5, digitalRead( 18 ));
  bitWrite( au16data[0], 6, digitalRead( 19 ));
  bitWrite( au16data[0], 7, digitalRead( 20 ));
  bitWrite( au16data[0], 8, digitalRead( 21 ));

  // set digital outputs -> au16data[1]
  digitalWrite( 2, bitRead( au16data[1], 0 ));
  digitalWrite( 3, bitRead( au16data[1], 1 ));
  digitalWrite( 4, bitRead( au16data[1], 2 ));
  digitalWrite( 5, bitRead( au16data[1], 4 ));
  digitalWrite( 6, bitRead( au16data[1], 5 ));
  digitalWrite( 7, bitRead( au16data[1], 6 ));
  digitalWrite( 8, bitRead( au16data[1], 7 ));
  digitalWrite( 9, bitRead( au16data[1], 8 ));
  digitalWrite( 10, bitRead( au16data[1], 9 ));
  digitalWrite( 11, bitRead( au16data[1], 10 ));
  digitalWrite( 12, bitRead( au16data[1], 11 ));
  digitalWrite( 13, bitRead( au16data[1], 12 ));

  // set analog outputs
  // analogWrite( 10, au16data[2] );
  // analogWrite( 11, au16data[3] );

  // read analog inputs
  au16data[4] = analogRead( 0 );
  au16data[5] = analogRead( 1 );
  au16data[6] = analogRead( 2 );
  au16data[7] = analogRead( 3 );

  // diagnose communication
  au16data[8] = slave.getInCnt();
  au16data[9] = slave.getOutCnt();
  au16data[10] = slave.getErrCnt();
}

Gruß

Ich kenne mich ja mit Modbus gar nicht aus aber gibt es da nicht irgendwelche fertigen Sketches die man nutzten kann oder muss man das alles selber zurechtbasteln?

IPS kann Modbus von Haus aus.

Das schon aber der Arduino nicht unbedingt oder? Ich kenne mich nun aber mit Arduino gar nicht aus das sind Böhmische Dörfer für mich. So viel ich das verstanden habe will er ja per Modbus von IP-Symcon auf einen Arduino zugreifen. Was man dafür aber auf Seiten des Arduino konfigurieren muss bin ich zumindest überfragt.

Ich kenne mich mit Arduino auch nicht aus. Wenn der aber Modbus kann, kann IPS das mit Bordmitteln abfragen.

Der Ardunino kann das wohl aber nicht einfach so, der muss programmiert werden.
Aber unter

Arduino Mudbus
ist ja beschrieben wie da in Kombination mit IP-Symcon vorgegangen wurde.

Vielen Dank für die Antworten!

Dachte bekomme schon keine, diesen Beitrag
hatte ich gefunden gehabt. Nur leider noch nicht
dazu gekommen.
Werde bei der Platine aber kein Ethernetshield benutzen nur USB.
Mal sehen ob es dann auch klappt.

Gruß

Hallo,

noch bin ich nicht weiter gekommen mit dem Modbus und IPS.
Hatte auch keine Zeit…

Nun dir Demostunde ist vorbei, IPS lässt mich nichts mehr machen. Nach ein und ausschalten,
ist die Demoversion immer noch zu ende.

Wie resette ich diese?

Dankeschön

Starte mal deinen PC neu - dann geht es auf jeden Fall.

paresy

Hallo,

konnte ich leider nicht testen, weil die SD Karte nach einer Woche einsatz in etwa, defekt ist.
Könnt Ihr vielleicht einen Hersteller empfehlen?

Glaube aber damals Neustart half nicht aber ohne
Gewähr gerade.

Hab da ne Frage zu Modbus und IPS.

Da über USB klappte es bei mir nicht so sauber alles, hab es jetzt mit Ethernetmodul ausprobiert.
Und das funktioniert mitlerweile ganz gut,
bin aber noch am ausprobieren.

Die 12 Pins kann ich per Modbus Testsoftware ansprechen und die tun was die sollen.
Kann diese also von 0 bis 255 steuern.

Würde es aber gerne so haben das die änderungen
übers Fade funktionieren.
Würdet Ihr es im Arduino so einstellen das jeder
Ausgang über fade geändert wird, oder soll man
dies über IPS realisieren?
Wenn Arduino dies selber machen würde, würde
der Datenverkehr viel geriner sein.

Gruß

Hallo,

hab mein Arduino scetch doch so weit hinbekommen, das die Daten
über Netzwerk verfügbar sind.

Bin noch am Lesen der Bedienungsanleitung da habe ich noch 1000 Fragen,
hoffe die kann ich mir aus der Anleitung herauslesen.

Wollte aber etwas zu der Lizenz fragen, wird diese ins Raspberry geschrieben,
oder auf dem Windows Rechner.
Wie sichere ich den die Installation ab, sagen wir mal wenn der Rechner neu gemacht
werden muss. (Wegen Viren oder Hardwaredefekt)

Kann man an 2 Win Rechnern eine Konfiguration machen?

Danke

Einfach das Verzeichnis sichern, dies kann dann später zurück kopiert werden, siehe Datensicherung.

Wenn Du das als Privatperson nutzt, kannst Du das im Haushalt auf so vielen Rechnern installieren wie Du willst, es kann aber immer nur ein Rechner als Produktivsystem dienen, dieser ist dann z.B. für Push Nachrichten zuständig bzw. über IP-Symcon Connect erreichbar, siehe Nutzungsrechte.

Hallo Fronzo,

vielen Dank für die Antwort!

Backup ist ja so weit klar, es ging mir eher um
Lizenzverlust etc.
Falls also der Hauptrechner hier Windows kaputt
geht und dieser neu gemacht wird, benötige ich
eine subskription zum wieder installieren?

Wenn ja dann muss man am besten ein Abbild
des Rechners machen.

Wegen 2 Rechners ist es so das ich eins im Bastelzimner hab und eines im Wohnzimmer.
Solange ich noch am experimentieren bin,
wollte ich den alten Rechner nutzen.
Wie definiert man den Hauptrechner?
(Zum Verständnis der Server der alles schaltet
wird Raspi sein)

Bietet die Profi Version viel mehr Wert am Anfang als die Basis, auf dauer wird die Basis eher sowie so
vermutlich nicht reichen.

Gruß

Den Lizenzschlüssel solltest Du so wie bei jeder anderen Software auch an einem sicheren Ort verwahren wo Du diesen wieder findest. Es reicht eine Datensicherung zu machen und hebe Dir am besten zu der jeweiligen Version noch einen Installer auf. Dann kannst Du z.B. unter Windows den Installer ausführen dann die Datensicherung wieder herstellen und falls benötigt den Lizenzkey erneut eingeben. Eine Subskription ist dafür nicht erforderlich, es sei denn Du möchtest zu dem Zeitpunkt die neuste IP-Symcon Version verwenden.

Der Hauptrechner wird dadurch definiert das man dort z.B. IP-Symcon Connect aktiviert oder den Push Dienst das geht nur an einem Rechner. Sobald Du dies an einem anderen Rechner mit der gleichen Lizenz aktivierst wird der Dienst am vorherigen Rechner deaktiviert.

Bei der Basis musst Du Dir sehr genau überlegen was Du an Variablen benutzt für den Anfang mag das reichen oder wenn man eine überschaubare Anzahl an Geräten besitzt. Solltest Du sehr viele Geräte besitzen wirst Du je nachdem früher oder später so oder so in den Bereich kommen wo Du eine Professional Lizenz brauchst. Der Unterschied ist außerdem das bei den größeren Lizenzen eine WYSIWYG Editor enthalten ist, damit kann der Webfront einfacher angepasst werden wenn man diesen benutzt, außerdem ist eine längere Subskriptionszeit von Anfang an enthalten.

Hallo Fronzo,

vielen Dank für die Antwort und die Mühe!

Also kann ich den Schlüssel auf beiden Rechnern eingeben. Gut zu wissen.

Werde mir dann Gedanken darüber machen.

Gruß

Hallo,

hätte 2 Fragen an euch. Bin Grad am probieren.

Möchte zu einem Zimmer Variablen des Modbus Gateway hinzufügen.

Die Verbindung steht, weiß aber nicht was ich auswählen muss. Da diese Bits Sachen
da kenne ich mich wenig aus.

Mit dem Programm ModbusView TCP kann ich zugreifen und schreiben.
Dort ist folgendes Ausgewählt:

Holding Register 4xxxx
Unsignet Integers

Gateway von IPS im Debug zeigt mir folgendes:

00 FA 00 00 00 06 01 03 00 02 00 01 

Die Adressen bei dem Modbus auf demArduino sind von 2 bis 27

Daher meine Frage, was wähle ich aus bei:

Einheit
Funktion Lesen
Adresse Lesen
Funktion Schreiben
Adresse Schreiben

IPS sagt öfters Datentyp ist kein Bit z.B.

Für nen kurzen Tipp wäre ich sehr Dankbar.

Gruß

Ah hier ist mehr dazu beschrieben:

https://www.symcon.de/service/dokumentation/modulreferenz/modbus-rtu-tcp/

Werde dies später probieren.

Gruß

Hallo,

wollte mich mal zurückmelden. Es klappt, wäre wahrscheinlich
auch gestern. Ich klickte als auf Testumgebung an, da meckerte er.

Hab ein paar Kategorien erstellt und ein paar Geräte über Modbus,
Befehle testen funktioniert. Er setzte selber selber variable, wenn ich
da über Befehle testen gehe ändert sich diese. Gehe ich über variable ändern,
sagt er es wäre nur zum lesen da. Da muss ich noch schauen.

Darf ich euch um eure Erfahrungswerte fragen? Was nimmt Ihr so bei Beleuchtung für
Reaktionszeiten?
500 Millisekunden waren echt lang, 10 sind schon sehr flott. Was nimmt Ihr da so immer?

Hab mir jetzt die Professional gegönnt, mit der Lizenz nur in der Verwaltungskonsole reicht das aus?
Da ich beim suchen auf viele verschiedene Aussagen gekommen bin, sind wahrscheinlich auch
ältere Beiträge.

Gruß

Das ist völlig normal, bei Instanzen ist eine Variable ein Anzeigeinstrument, wie der Tacho beim Auto, daher nur lesen. Wenn Du etwas ändern willst ruft Du einen Befehl auf den Du an die Instanz schickst, dann wird in Folge dessen auch die Variable geändert, wenn denn das Gerät den Status ändert. Beim Auto drückst Du auch auf die Bremse bzw. Gas und drehst nicht am Tacho um schneller oder langsamer zu fahren ;-).

Danke für die Antwort!

Werde wohl auch früher oder später um Funk nicht
drum herum kommen.
Könnt Ihr mir einen guten Funkstick empfehlen?

Mit Raspi wird es wohl kaum mit plug and play funktionieren war?

Edit: oder kommt man mittlerweile weit mit Wlan? Z.B. Sonoff Produkte?

Danke Dir Fronzo für die Tipps zwischen durch!

Gruß