Hallo! Ich habe vor langer Zeit ein Programm in Arduino 1.0.6 geschrieben, heute wollte ich etwas verändern und hab dazu schon das neu Arduino 1.6.9 verwendet. Ohne Veränderung kommt der Fehler: C:\Program Files (x86)\arduino-1.6.9\libraries\ModbusMaster/ModbusMaster.h:88:24: fatal error: util/crc16.h: No such file or directory Könnt Ihr mir bei diesem Problem helfen? (Ich möchte gerne Arduino 1.6.9) weiter verwenden) Danke!
Ich glaube die Libary "ModbusMaster" ist nicht für die 1.6.x ausgelegt!
Marc schrieb: > C:\Program Files > (x86)\arduino-1.6.9\libraries\ModbusMaster/ModbusMaster.h:88:24: fatal > error: util/crc16.h: No such file or directory Die Library wurde nicht eingerichtet. Du musst die Library noch dem System bekannt machen.
Habe nun die neue Libary für Modbus installiert. Damit lese ich einen SDM630 Zähler aus, senden kann ich aber empfangen nichts. Hat jemand eine Ahnung ? Meine SOFT: #include <ModbusMaster.h> ModbusMaster node(1,1); //MODBUS PORT UND ADRESSE static int MAX_ITERATION = 20; const int SDM_SIZE = 30; float SDM_Data[SDM_SIZE]; void setup() { node.begin(9600); //ModBus UART Serial.begin(9600); } void loop() { for(int i = 0; i < SDM_SIZE;i++) SDM_Data[i] = -1; getRTUMore(0x000C,3,7); // Parameter 7 - 9 Watt getRTUMore(0x0000,3,1); // Parameter 1 - 3 Spannung Serial.print(SDM_Data[1]); Serial.print(" : "); Serial.print(SDM_Data[2]); Serial.print(" : "); Serial.println(SDM_Data[3]); delay(1000); } boolean getRTUMore(uint16_t m_startAddress,uint8_t m_length,int arrayPosition){ uint16_t result; int counter = 0; while(counter < MAX_ITERATION) { digitalWrite(3, HIGH); // TX if (node.ku8MBSuccess == node.readInputRegisters(m_startAddress, (m_length*2))) { for(int i = 0; i < m_length; i++){ SDM_Data[arrayPosition] = reform_uint16_2_float32(node.getResponseBuffer(i*2),node.getResponseBuff er((i*2)+1)); arrayPosition++; } node.clearResponseBuffer(); return true; } counter++; digitalWrite(3, LOW); } return false; } float reform_uint16_2_float32(uint16_t u1, uint16_t u2) { uint32_t num = ((uint32_t)u1 & 0xFFFF) << 16 | ((uint32_t)u2 & 0xFFFF); float numf; memcpy(&numf, &num, 4); return numf; }
im Setup ist noch folgende Zeile: pinMode(3, OUTPUT);
Marc schrieb: > Ich habe vor langer Zeit ein Programm in Arduino 1.0.6 geschrieben, Ein Programm kann man nur in einer Programmiersprache schreiben. "Arduino 1.0.6" ist keine solche.
john schrieb: > Marc schrieb: >> Ich habe vor langer Zeit ein Programm in Arduino 1.0.6 geschrieben, > > Ein Programm kann man nur in einer Programmiersprache schreiben. > "Arduino 1.0.6" ist keine solche. Ein Programm kann man auch in Indien schreiben oder in einem Büro oder in einer IDE ;-)
:
Bearbeitet durch User
Ich habe jetzt mal mit dem Scope gemessen. Ich kann nicht erkennen dass der Max485 umgeschaltet wird (Richtung) - kann es sein das ich was an der ModbusMaster.h etwas verändern muss?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.