Buggfix Plus
Aktuellt datum och tid: 16.44 2019-09-19

Alla tidsangivelser är UTC + 1 timme




Svara på tråd  [ 1104 inlägg ]  Gå till sida Föregående  1 ... 69, 70, 71, 72, 73, 74  Nästa
Författare Meddelande
InläggPostat: 15.57 2019-03-07 
EF Sponsor

Blev medlem: 13.21 2003-06-02
Inlägg: 19626
Ort: Östergötland
Hur går det med värmeväxlaren om det är väldigt kallt vatten? Finns det inte risk att den fryser?


Upp
 Profil  
 
InläggPostat: 17.47 2019-03-07 
Användarvisningsbild

Blev medlem: 14.00 2004-06-17
Inlägg: 1940
Ort: sthlm
Jo. Man får lösa det med ordentligt flöde. Och ett styr- och övervakningssystem som stänger av värmepumpen om det håller på att gå åt helvete. Därav att jag bygger det jag nu håller på att bygga.


Upp
 Profil  
 
InläggPostat: 18.21 2019-03-07 

Blev medlem: 21.19 2009-05-06
Inlägg: 7263
Sidospår: Är det bara för mig som AliExpress-länken ändras till att visa sidan på ryska när jag klickar på den?

Det enda relaterat till ryska jag kan tänkas ha sysslat med är att jag öppnat filer som skickats med ICQ och ICQ är väl ryskägt sen några år.


Upp
 Profil  
 
InläggPostat: 18.45 2019-03-07 

Blev medlem: 22.31 2008-03-27
Inlägg: 1653
Ort: stockholm
Bilaga:
vatten.PNG


borde väl vara en enkel matte övning att räkna ut flödet för att ta ut till exempel 5 kW vid en sänkning med 0.2 grader :)

gissar att det blir ganska mycket...


Logga in för att visa de filer som bifogats till detta inlägg.


Upp
 Profil  
 
InläggPostat: 18.50 2019-03-07 

Blev medlem: 21.19 2009-05-06
Inlägg: 7263
Hur mycket skiljer temperaturen beroende på djup? Det är väl ett par meter från vattenytan till botten.


Upp
 Profil  
 
InläggPostat: 18.52 2019-03-07 

Blev medlem: 18.44 2004-12-04
Inlägg: 2111
Att hämta sjövatten nära botten borde ge värmare vatten än nära ytan.

En sug ledning med intag ca 0,5m från botten borde ge lägre strömförbrukning.

Med de nya definitionerna av kilogram och meter är vattnets densitet vid +4 °C 0,99995 kg/dm3.

Vid alla andra temperatur lägre.

https://sv.wikipedia.org/wiki/Densitet


Upp
 Profil  
 
InläggPostat: 07.31 2019-03-18 
Användarvisningsbild

Blev medlem: 14.00 2004-06-17
Inlägg: 1940
Ort: sthlm
Nu försöker jag snacka med energimätaren. Så här ser min kod ut:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
#include <SPI.h>
#include <Controllino.h>

char initMessage[] = {0x2f, 0x3f, 0x21, 0x0d, 0x0a};
char setReadoutMode[] = {0x06, 0x30, 0x34, 0x30, 0x0D, 0x0A};
String readBuffer;

void setup() {
  // Seriesnöre till dator för debug 
  Serial.begin(9600);
 
  /* Initialize CONTROLLINO RS485 direction control DE/RE pins and Serial3 */
  Controllino_RS485Init(9600);
}

void loop() {

  bool isInitialized = 0;

  while (!isInitialized) {
    Serial.print("Skickar initMessage: ");
    Serial.write(initMessage);
    Controllino_RS485TxEnable();
    Serial3.write(initMessage);//, sizeof(initMessage));
    Serial3.flush(); // wait until the trasmission is complete

    Controllino_RS485RxEnable();
    readBuffer = Serial3.readString();
    Serial.print("Svar: ");
    Serial.println(readBuffer);
    Serial.print("Svar tecken för tecken i HEX: ");
    for (int i=0;i<sizeof(readBuffer);i++) {
      Serial.print(readBuffer[i], HEX);
      Serial.print(' ');
    }
    Serial.println();
    Serial.println();
   
    if (readBuffer == "rätt svar") {
      isInitialized = 1;
      Serial.println("\nInitierad!");
    }
  }
  while (isInitialized) {
    Controllino_RS485TxEnable();
    Serial3.write(setReadoutMode);//, sizeof(initMessage));
    Serial3.flush(); // wait until the trasmission is complete   

    Controllino_RS485RxEnable();
    readBuffer = Serial3.readString();
    Serial.print(readBuffer);
  }
}


Och det som kommer ut på seriesnöret:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
Skickar initMessage: /?!
Svar:
Svar tecken för tecken i HEX: 0 0 0 0 0 0

Skickar initMessage: /?!
Svar: ⸮⸮⸮⸮5\⸮⸮⸮-M⸮-D⸮V00⸮⸮0⸮⸮⸮⸮⸮

Svar tecken för tecken i HEX: FFFFFFAF FFFFFFC5 FFFFFFC6 FFFFFFD2 35 5C

Skickar initMessage: /?!
Svar: ⸮
Svar tecken för tecken i HEX: FFFFFF95 0 0 0 0 0

Skickar initMessage: /?!
Svar: ⸮⸮⸮⸮5\⸮⸮⸮-M⸮-D⸮V00⸮⸮0⸮⸮⸮⸮⸮

Svar tecken för tecken i HEX: FFFFFFAF FFFFFFC5 FFFFFFC6 FFFFFFD2 35 5C

Skickar initMessage: /?!
Svar: ⸮
Svar tecken för tecken i HEX: FFFFFF95 0 0 0 0 0

Skickar initMessage: /?!
Svar:
Svar tecken för tecken i HEX: 0 0 0 0 0 0

Skickar initMessage: /?!
Svar: ⸮⸮⸮⸮5\⸮⸮⸮-M⸮-D⸮V00⸮⸮0⸮⸮⸮⸮⸮

Svar tecken för tecken i HEX: FFFFFFAF FFFFFFC5 FFFFFFC6 FFFFFFD2 35 5C



Enligt manualen ska jag ju få nåt liknande "/EFR5\EFR-M4-DRV004101222<CR><LF>" tillbaka. Nåt lurigt med HEX/ASCII-konverteringen? Jag tycker ju att jag borde få ut nåt mellan 00 och FF när jag försöker skriva ut varje byte i readBuffer och inte t.ex. FFFFFFAF som ju är 4294967215 decimalt.

Kanske ska jag inte köra en String readBuffer utan istället typ char readBuffer[50] och sen läsa in byte för byte?


Upp
 Profil  
 
InläggPostat: 18.06 2019-03-18 

Blev medlem: 06.51 2008-05-19
Inlägg: 22061
Ort: Upplands väsby
Paritet? Fel "polaritet"? (D.v.s. 1 ska vara 0.)

När man pillade med vanliga gamla serieportar bommade man väl ofta på att 1 var typ -9 V och 0 var + 9 V eller nåt sånt.


Upp
 Profil  
 
InläggPostat: 08.25 2019-03-19 

Blev medlem: 19.27 2011-05-27
Inlägg: 504
Ort: Älvsjö
Det ser ut som de negativa bytearna du får in signextendas till 32bits integer. Jag tänker att om du gör Serial.print(0xff & readBuffer[i], HEX); så blir det vackrare utskrift. Sedan verkar det vara något med paritet som nämndes ovan. Om man kollar i de bytes du får in så har de jämnt antal ett satta bits. Sannolikt har du jämn paritet i det data du får in. Ställ in din UART för 7 bits och jämn paritet så skall du se att det blir bättre. T ex Serial.begin(9600, SERIAL_7E1);


Upp
 Profil  
 
InläggPostat: 12.07 2019-03-19 
Användarvisningsbild

Blev medlem: 14.00 2004-06-17
Inlägg: 1940
Ort: sthlm
Tackar så mycket för hjälpen!

Nu ser det ut så här och jag lyckas snacka med mätaren. Bara resten av programmet kvar...
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
#include <SPI.h>
#include <Controllino.h>

char initMessage[] = {0x2f, 0x3f, 0x21, 0x0d, 0x0a};
char setReadoutMode[] = {0x06, 0x30, 0x35, 0x30, 0x0D, 0x0A};
String readBuffer;

void setup() {
  // Seriesnöre till dator för debug 
  Serial.begin(9600);
 
  /* Initialize CONTROLLINO RS485 direction control DE/RE pins and Serial3 */
  Controllino_RS485Init(9600);
  Serial3.begin(9600, SERIAL_7E1); // Controllinos bibliotek stöder inte config-argumentet så det behöver göras här.

}

void loop() {

  bool isInitialized = 0;

  while (!isInitialized) {
    Serial.print("Skickar initMessage: ");
    Serial.write(initMessage);
    Controllino_RS485TxEnable();
    Serial3.write(initMessage);//, sizeof(initMessage));
    Serial3.flush(); // wait until the trasmission is complete

    Controllino_RS485RxEnable();

    readBuffer = Serial3.readString();
    Serial.print("Svar: ");
    Serial.println(readBuffer);
    Serial.print("Svar tecken för tecken i HEX: ");
    for (int i=0;i<readBuffer.length();i++) {
      Serial.print(0xff & readBuffer[i], HEX);
      Serial.print(' ');
    }
    Serial.println();
    Serial.println();

    if (readBuffer.startsWith("/EFR5")) {
      isInitialized = 1;
      Serial.println("\nInitierad!");
    }
  }
  while (isInitialized) {
    Controllino_RS485TxEnable();
    Serial3.write(setReadoutMode);//, sizeof(initMessage));
    Serial3.flush(); // wait until the trasmission is complete   

    Controllino_RS485RxEnable();
    readBuffer = Serial3.readString();
    Serial.print(readBuffer);
  }
}


Resultatet:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
Skickar initMessage: /?!
Svar: /EFR5\EFR-M4-DRV004101222

Svar tecken för tecken i HEX: 2F 45 46 52 35 5C 45 46 52 2D 4D 34 2D 44 52 56 30 30 34 31 30 31 32 32 32 D A


Initierad!
EFR-M4-DRV004101222
1-0:0.0.0*255(GETTONE)
1-0:1.8.0*255(00000.00*kWh)
1-0:2.1.7*255(00000.00*kWh)
1-0:4.1.7*255(00000.00*kWh)
1-0:6.1.7*255(00000.00*kWh)
1-0:21.7.255*255(0000.0015*kW)
1-0:41.7.255*255(0000.0000*kW)
1-0:61.7.255*255(0000.0000*kW)
1-0:1.7.255*255(0000.0000*kW)
1-0:96.5.5*255(   )
0-0:96.1.255*255(11402295)
!
:


Upp
 Profil  
 
InläggPostat: 17.54 2019-03-19 
Användarvisningsbild

Blev medlem: 14.00 2004-06-17
Inlägg: 1940
Ort: sthlm
Nu har jag lyckats få till att läsa elmätaren i alla fall!

Dock ballar det ur när jag försöker lägga ihop det med mitt program som läser temperatursensorer och skickar upp det på internets till Cayenne. Båda programmen funkar perfekt var för sig, men när jag försöker lägga ihop dem får jag ingen kontakt med elmätaren.

Jag använder Tempsensorer DS18B20 och snackar med Cayenne via Ethernet. Men så fort jag försöker läsa av sensorerna eller skicka data via Ethernet så går RS485-kommunikationen sönder. Jag får helt enkelt inget svar alls från mätaren. Tempsensorerna sitter på OneWire på Pin 6 (Pinout här) men jag har även testat att ha dem på Pin 20.

Ethernet och OneWire funkar ju bra tillsammans enligt koden nedan. Men om jag avkommenterar raden som kör getMeterStatus(), d.v.s. försöker prata med mätaren, så fastnar programmet då jag inte får svar. Jag har testat att gå andra vägen och ta mitt fungerande RS485-program och lägga till del för del av temperaturmätarprogrammet men så fort jag försöker läsa OneWire ELLER initiera Ethernet så pajjar det.

RS485 kör jag ju nu via Serial3 och jag har försökt skumma igenom både OneWire- och Cayennebiblioteken för att se om de bråkar med Serial3 men inte hittat något.

Nån som har nåt tips om var jag ska leta efter en lösning?

Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Controllino.h>
#include <CayenneMQTTEthernet.h>

#define DS18B20_PIN 6
#define CAYENNE 1   // used to enable/disable cayenne logging
//#define CAYENNE_PRINT Serial  // Comment this out to disable prints and save space

// Cayenne authentication info. This should be obtained from the Cayenne Dashboard.
char username[] = "00f091e0-4053-11e9-b395-f53190c2ab6f";
char password[] = "xxx";
char clientID[] = "8279bbb0-4053-11e9-9622-9b9aeccba453";

// Elmätarens status. 0-4 = Mätarställning, kW på fas 1, 2, 3 och alla faser.
float meterStatus[5]={142525.54, 10.1, 20.2, 30.3, 40.4};

// Saker för att kommunicera med elmätaren
const char initMessage[] = {0x2F, 0x3F, 0x21, 0x0D, 0x0A};
const char setReadoutMode[] = {0x06, 0x30, 0x35, 0x30, 0x0D, 0x0A};

// MAC?: FE-38-85-62-17-19
// Kommer från Cayennes exempelskiss

// Create a Onewire Referenca and assign it to pin 20
OneWire oneWire(DS18B20_PIN);

// declare as sensor reference by passing oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

// The addresses to the sensors are hard coded
const char tempSensors[15][8] = {{0x28, 0x88, 0x98, 0x28, 0x00, 0x00, 0x80, 0x3C},
                       {0x28, 0x44, 0xA7, 0x28, 0x00, 0x00, 0x80, 0x35},
                       {0x28, 0xBC, 0x87, 0x28, 0x00, 0x00, 0x80, 0x1E},
                       {0x28, 0xEA, 0xA4, 0x28, 0x00, 0x00, 0x80, 0x34},
                       {0x28, 0x5A, 0xA2, 0x28, 0x00, 0x00, 0x80, 0xAF},
                       {0x28, 0x7A, 0x91, 0x28, 0x00, 0x00, 0x80, 0xD3},
                       {0x28, 0x3E, 0xA0, 0x28, 0x00, 0x00, 0x80, 0x33},
                       {0x28, 0xE1, 0x94, 0x28, 0x00, 0x00, 0x80, 0x48},
                       {0x28, 0x09, 0x95, 0x28, 0x00, 0x00, 0x80, 0x0D},
                       {0x28, 0x55, 0xA9, 0x28, 0x00, 0x00, 0x80, 0xFB},
                       {0x28, 0x83, 0x8A, 0x28, 0x00, 0x00, 0x80, 0x3B},
                       {0x28, 0x2B, 0x52, 0x01, 0x00, 0x00, 0x80, 0x45},
                       {0x28, 0xE7, 0x9F, 0x28, 0x00, 0x00, 0x80, 0x8A},
                       {0x28, 0xDF, 0x92, 0x28, 0x00, 0x00, 0x80, 0x2A},
                       {0x28, 0xBF, 0x93, 0x28, 0x00, 0x00, 0x80, 0x24}};

const float sensorZeroCalibration[15] = {0.125, 0.250, 0.250, 0.250, 0.125, 0.250, 0.375, 0.500, 0.250, 0.250, 0.375, 0, 0.375, 0, 0.375};   
   // Dessa kokpunkter mättes med nollpunktskorrigeringen påslagen!
   // Kokpunkt vid tillfället 99,44 *C
   //const float sensor100Calibration[15] = {99.125, 98.875, 99.375, 98.875, 99.125, 98.875, 98.875, 98.5, 99.375, 99.250, 98.875, 99, 99.25, 97.375, 98.625};

float tempC;

// Startar kommunikation med och läser ställningen på elmätaren
void getMeterStatus() {
   int index=0, isInitialized=0;
   String readString, readBuffer;

  Controllino_RS485Init(9600);
  Serial3.begin(9600, SERIAL_7E1); // Controllinos bibliotek stöder inte config-argumentet så det behöver göras här.

  Serial.print("i getMeter!");
  while (!readBuffer.startsWith("/EFR5")) {
    Controllino_RS485TxEnable();
    Serial3.write(initMessage);//, sizeof(initMessage));
    Serial3.flush(); // wait until the trasmission is complete
     Serial.write("Init: "); Serial.write(initMessage); Serial.println();
    Controllino_RS485RxEnable();
    readBuffer = Serial3.readString();
    Serial.println(readBuffer);
    for (int i=0;i<readBuffer.length();i++) {
      Serial.print(0xff & readBuffer[i], HEX);
      Serial.print(' KOMMER HIT? ');
    }
  }

  Controllino_RS485TxEnable();
  Serial3.write(setReadoutMode);
  Serial3.flush(); // wait until the trasmission is complete
  Controllino_RS485RxEnable(); 
  readBuffer = Serial3.readString();
  Serial.print(readBuffer);

  index = readBuffer.indexOf("1-0:1.8.0*255") + 14;
  readString = readBuffer.substring(index,index+8);
  meterStatus[0] = readString.toFloat();
  index = readBuffer.indexOf("1-0:21.7.255*255") + 17;
  readString = readBuffer.substring(index,index+9);
  meterStatus[1] = readString.toFloat();
  index = readBuffer.indexOf("1-0:41.7.255*255") + 17;
  readString = readBuffer.substring(index,index+9);
  meterStatus[2] = readString.toFloat();   
  index = readBuffer.indexOf("1-0:61.7.255*255") + 17;
  readString = readBuffer.substring(index,index+9);
  meterStatus[3] = readString.toFloat();
  index = readBuffer.indexOf("1-0:1.7.255*255") + 16;
  readString = readBuffer.substring(index,index+9);
  meterStatus[4] = readString.toFloat();
}


void setup(void)
{
   Serial.begin(9600);

   if(CAYENNE) {Cayenne.begin(username, password, clientID);}

   for (int i=0;i<15;i++) {
      // set the resolution to 11 bit - Valid values are 9, 10, or 11 bit.
      sensors.setResolution(tempSensors[i], 11);
      // confirm that we set that resolution by asking the DS18B20 to repeat it back
      Serial.print("Sensor Resolution: ");
      Serial.println(sensors.getResolution(tempSensors[i]), DEC);
      Serial.println();
   }

}

void loop(void)
{
   while (1) {
      // Läs elmätaren via RS485
      //getMeterStatus();
      if(CAYENNE) {
         Cayenne.virtualWrite(15, meterStatus[0], "analog_sensor", "null");
         Cayenne.virtualWrite(16, meterStatus[1], "analog_sensor", "null");
         Cayenne.virtualWrite(17, meterStatus[2], "analog_sensor", "null");
         Cayenne.virtualWrite(18, meterStatus[3], "analog_sensor", "null");
         Cayenne.virtualWrite(19, meterStatus[4], "analog_sensor", "null");
      }
      // Läs tempsensorerna och skicka in på Cayenne
      for (int n=0;n<15;n++) {
         sensors.requestTemperaturesByAddress(tempSensors[n]); // Send the command to get temperatures
         tempC = sensors.getTempC(tempSensors[n]);// - sensorZeroCalibration[n];
         Serial.print("Sensor "); Serial.print(n); Serial.print(" :"); Serial.print(tempC, 4); Serial.println(" *C");
         if(CAYENNE) {Cayenne.celsiusWrite(n, tempC);}
         delay(100);
      }

      delay(3000);
      Serial.println("\n");
   }
}


Upp
 Profil  
 
InläggPostat: 16.32 2019-03-20 

Blev medlem: 21.19 2009-05-06
Inlägg: 7263
Nån interruptdelning som kräver specialhantering eller?

*spekulerar vilt*


Upp
 Profil  
 
InläggPostat: 07.49 2019-03-22 
Användarvisningsbild

Blev medlem: 14.00 2004-06-17
Inlägg: 1940
Ort: sthlm
Ja, det är nåt skumt som händer bakom kulisserna vid kompilering. Även om jag aldrig kör Cayenneinitieringen (Cayenne.begin(username, password, clientID)) utan lägger den EFTER RS485-läsningen så pajjar elmätarläsningen.


Upp
 Profil  
 
InläggPostat: 10.56 2019-04-09 
Användarvisningsbild

Blev medlem: 14.00 2004-06-17
Inlägg: 1940
Ort: sthlm
Jag har tyvärr inte hunnit lösa det här än. Men jag har pulat med annat. T.ex. har jag inskaffat ventilstängare och håller på att mecka ihop dem med kulventiler (DN50).

Bilaga:
IMG_20190404_153703 (Medium).jpg


Kopplar man in 24 V så är det en liten motor i som öppnar ventilen och samtidigt spänner en klockfjäder. Vid strömbortfall stänger fjädern ventilen automatiskt. Känns som en skön försäkring att ha...

Jag håller på att fundera på styrning av sjövattenpumpen. Nu sitter det en centrifugalpump med en 0,55 kW asynkronmotor. Många gånger behövs bara en bråkdel av flödet så planen är att styra motorn via en frekvensomformare. Men jag funderar lite på vad det finns för energieffektivare alternativ.

Om pumpen går på halv effekt hela året så kostar det 0,55 kW * 0,5 * 24 h * 365 * 1,75*1,25 kr/kWh = 5270 kr/år. Det finns alltså potential att spara en del slantar om man kan få ner energiförbrukningen.

Jag funderade på att köra en PM-motor med styrning (t.ex. BLT-650 här). Men då måste man också ha ett nätagg 48V 20A och frågan är om effektiviteten på hela systemet blir bättre än med en asynkronmotor och en modern frekvensomformare? Båda verkar ju ha en verkningsgrad kring typ 80 % vid märkvarvtal och sjunkande vid sjunkande varvtal. Någon som har input eller tips om energieffektiva motorer krin 0,5 - 1 kW?


Logga in för att visa de filer som bifogats till detta inlägg.


Upp
 Profil  
 
InläggPostat: 12.05 2019-04-09 

Blev medlem: 20.11 2009-01-06
Inlägg: 178
Ort: Kvidinge
Kolla vad förbrukningen blir om du bara stryper den på trycksidan av pumpen , det är ett normalt förfarande för att minska flödet/effekten, men absolut inte på sugsidan då det skapar kavitation på impellern.


Upp
 Profil  
 
Visa inlägg nyare än:  Sortera efter  
Svara på tråd  [ 1104 inlägg ]  Gå till sida Föregående  1 ... 69, 70, 71, 72, 73, 74  Nästa

Alla tidsangivelser är UTC + 1 timme


Vilka är online

Användare som besöker denna kategori: PeterH och 2 gäster


Du kan inte skapa nya trådar i denna kategori
Du kan inte svara på trådar i denna kategori
Du kan inte redigera dina inlägg i denna kategori
Du kan inte ta bort dina inlägg i denna kategori
Du kan inte bifoga filer i denna kategori

Sök efter:
Hoppa till:  
   
Drivs av phpBB® Forum Software © phpBB Group
Swedish translation by Peetra & phpBB Sweden © 2006-2010