Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 2017-11-13 22:45
- #include <SPI.h>
- #include <Ethernet.h>
- #include "Settimino.h"
- #include <OneWire.h>
- #include <DallasTemperature.h>
- // Enter a MAC address and IP address for your controller below.
- // The IP address will be dependent on your local network:
- byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0x08, 0xE1 };
- IPAddress Local(192,168,99,114); // Local Address
- IPAddress PLC(192,168,99,111); // PLC Address
- IPAddress Gateway(192, 168, 99, 1);
- IPAddress Subnet(255, 255, 255, 0);
- // DS magistrales ir kintamieji
- #define ds_pin_1 22
- #define ds_pin_2 23
- #define ds_pin_3 24
- #define ds_pin_4 25
- #define ds_pin_5 26
- #define ds_pin_6 27
- #define ds_pin_7 28
- #define ds_pin_test 29
- #define search_enable_pin 42
- //byte gedimo_temperatura = 255; // Neradus jutiklio, į valdikli nusiunčiama temperatura
- //float dvt;
- // Setup a oneWire instance to communicate with any OneWire devices
- OneWire oneWire_1(ds_pin_1); // Linija Nr. 1
- OneWire oneWire_2(ds_pin_2); // Linija Nr. 2
- OneWire oneWire_3(ds_pin_3); // Linija Nr. 3
- OneWire oneWire_4(ds_pin_4); // Linija Nr. 4
- OneWire oneWire_5(ds_pin_5); // Linija Nr. 5
- OneWire oneWire_6(ds_pin_6); // Linija Nr. 6
- OneWire oneWire_7(ds_pin_7); // Linija Nr. 7
- OneWire oneWire_test(ds_pin_test); // Linija jutikliu paieskai
- // Pass our oneWire reference to Dallas Temperature.
- DallasTemperature sensors_on_1(&oneWire_1); // Linija Nr. 1
- DallasTemperature sensors_on_2(&oneWire_2); // Linija Nr. 2
- DallasTemperature sensors_on_3(&oneWire_3); // Linija Nr. 3
- DallasTemperature sensors_on_4(&oneWire_4); // Linija Nr. 4
- DallasTemperature sensors_on_5(&oneWire_5); // Linija Nr. 5
- DallasTemperature sensors_on_6(&oneWire_6); // Linija Nr. 6
- DallasTemperature sensors_on_7(&oneWire_7); // Linija Nr. 7
- //DallasTemperature sensors_on_test(&oneWire_test); // Linija jutikliu paieskai
- // konstantos
- int DBNum_from_plc = 68; // This DB must be present in your PLC
- int DBNum_to_plc = 69;
- byte len_settings_area = 28; // nustatymai pradiniam nuskaitymui
- byte buf_settings[28]; // Pradiniu nustatymu paimamu is valdiklio buferis
- byte buf_temperatures_out[240]; //Buffer to store output temperatures
- #define sakos_pos_in_db 20 // Saku skaicius laikomas DB atmintyje, 20 pozicijoje(offset)
- #define sakos_max_amount 20 // Didziausias galima saku skaicius valdiklyje
- #define linijoje_max_jutikliu 5 // Didziausias galima jutikliu skaicius linijoje
- #define jutiklio_gedimo_t_vieta 16 // Neradus jutiklio, į valdikli nusiunčiama temperatura
- #define jutikliu_tikslumo_vieta 19 //Jutikliu padalos verte, rezoliucija 9-12
- #define atnaujinimo_periodas_vieta 18 //kas kiek laiko nuskaitoma temperatura is termometru
- DeviceAddress DS_Adresai[7][40];
- bool get_settings_mode_previous = true; //Pasizymima buvusi reiksme skirta duomenu gavimo is valdiklio rezimui.
- bool initial_settings_ok=false;
- bool vykdyti_Pradinis_jutikliu_konfiguravimas=false;
- bool leisti_vykdyti_Request_temperatures = false;
- bool temperaturu_uzklausa_jau_issiusta = false;
- unsigned long temperatures_requested_at;
- unsigned long atnaujinimo_periodas;
- byte new_device[16];
- //byte last_device[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
- //byte new_device[] = {0,0,0,0,0,0,0,0};;
- boolean new_device_search_first_run = true;
- S7Client Client(_S7WIRED);
- unsigned long Elapsed; // To calc the execution time
- //----------------------------------------------------------------------
- // Setup : Init Ethernet and Serial port
- //----------------------------------------------------------------------
- void setup() {
- //bandymai
- pinMode(search_enable_pin, INPUT);
- // Open serial communications and wait for port to open:
- Serial.begin(115200);
- //--------------------------------Wired Ethernet Shield Initialization
- // Start the Ethernet Library
- Ethernet.begin(mac, Local);
- // Setup Time, someone said me to leave 2000 because some
- // rubbish compatible boards are a bit deaf.
- delay(2000);
- Serial.println("");
- Serial.println("Cable connected");
- Serial.print("Local IP address : ");
- Serial.println(Ethernet.localIP());
- }
- //----------------------------------------------------------------------
- // Main Loop
- //----------------------------------------------------------------------
- void loop()
- {
- //Serial.println("*************************************** LOOP ********************");
- MarkTime();
- boolean laikinas;
- //----------- Vienkartiniai procesai
- while(!Handle_initial_settings())
- {
- delay(1000);
- }
- if(vykdyti_Pradinis_jutikliu_konfiguravimas)
- {
- Pradinis_jutikliu_konfiguravimas();
- vykdyti_Pradinis_jutikliu_konfiguravimas=false;
- }
- if(leisti_vykdyti_Request_temperatures==true && temperaturu_uzklausa_jau_issiusta==false) //paklausti temperaturu
- {
- //Pradinis_jutikliu_konfiguravimas();
- //leisti_vykdyti_Request_temperatures = false;
- Request_temperatures(true);
- }
- if(leisti_vykdyti_Request_temperatures==true && temperaturu_uzklausa_jau_issiusta==true) //nuskaityti temperaturas
- {
- //leisti_vykdyti_Request_temperatures = false;
- laikinas=Read_Temperatures(true);
- }
- if(digitalRead(search_enable_pin)==0)
- {
- new_device_search();
- }
- //----------------------------------
- ShowTime();
- }
- byte Low_byte(float x) //liekana
- {
- unsigned int temperatura;
- temperatura=apvalinti_int (x);
- if (temperatura<0){
- temperatura=(256*255)+temperatura;
- temperatura=temperatura+256;
- }
- //Serial.print(" ");Serial.print(temperatura);Serial.print(" ");
- return temperatura % 256;
- }
- byte High_byte(float x) //liekana
- {
- unsigned int temperatura;
- temperatura=apvalinti_int (x);
- if (temperatura<0){
- temperatura=(256*255)+temperatura;
- temperatura=temperatura+256;
- }
- //Serial.print(" ");Serial.print(temperatura);Serial.print(" ");
- return temperatura / 256;
- }
- unsigned int apvalinti_int (float x){
- /*
- x= 153,2 x= 151,8 x= -122,7
- y= 153 y= 152 y= -123
- */
- x=x*10;
- int y=0;
- if (x > 0){
- x = x+0.5;
- }
- if (x < 0)
- {
- x = x-0.5;
- }
- //x=round(x);
- y = int(x);
- return y;
- }
- bool Read_Temperatures(bool show_execution_duration)
- {
- unsigned long current_time;
- unsigned long exe_duration;
- float nuskaityta_temperatura;
- int temperature_out_pozicija;
- byte retry;
- current_time= millis();
- if((current_time-temperatures_requested_at) > atnaujinimo_periodas) //vykdyti temperaturu nuskaityma
- {
- temperature_out_pozicija=0; // Issiunciamu duomenu buferyje nustatoma pirma vieta
- exe_duration=millis();
- for(byte linija_i=1; linija_i <= buf_settings[sakos_pos_in_db] ;linija_i++ ) //visos sakos/linijos
- {
- Serial.println("===============================================");
- Serial.print(" Uzklausiamos temperaturos linijoje nr - ");Serial.println(linija_i);
- if( linija_i==1 && buf_settings[sakos_pos_in_db+linija_i] > 0 ) // Linija Nr.1
- {
- for(byte jutiklis_i=0; jutiklis_i<buf_settings[sakos_pos_in_db+linija_i] ;jutiklis_i=jutiklis_i+1 )
- {
- nuskaityta_temperatura=sensors_on_1.getTempC(DS_Adresai[linija_i-1][jutiklis_i]);
- buf_temperatures_out[temperature_out_pozicija]=Low_byte(nuskaityta_temperatura);
- buf_temperatures_out[temperature_out_pozicija+1]=High_byte(nuskaityta_temperatura);
- Serial.print(jutiklis_i);Serial.print(" ");Serial.println(nuskaityta_temperatura);
- //Serial.print(" ");Serial.print(Low_byte(nuskaityta_temperatura));Serial.print(" ");Serial.print(buf_temperatures_out[temperature_out_pozicija]);
- //Serial.print(" ");Serial.print(High_byte(nuskaityta_temperatura));Serial.print(" ");Serial.println(buf_temperatures_out[temperature_out_pozicija+1]);
- temperature_out_pozicija=temperature_out_pozicija+2;
- //Serial.print(" Low ");Serial.print(Low_byte(nuskaityta_temperatura));Serial.print(" High ");Serial.println(High_byte(nuskaityta_temperatura));
- //Serial.print(jutiklis_i);Serial.print(" ");Serial.print(nuskaityta_temperatura);Serial.println(" Celcijai ");
- }
- }
- if( linija_i==2 && buf_settings[sakos_pos_in_db+linija_i] > 0 ) // Linija Nr.2
- {
- for(byte jutiklis_i=0; jutiklis_i<buf_settings[sakos_pos_in_db+linija_i] ;jutiklis_i=jutiklis_i+1 )
- {
- nuskaityta_temperatura=sensors_on_2.getTempC(DS_Adresai[linija_i-1][jutiklis_i]);
- buf_temperatures_out[temperature_out_pozicija]=Low_byte(nuskaityta_temperatura);
- buf_temperatures_out[temperature_out_pozicija+1]=High_byte(nuskaityta_temperatura);
- temperature_out_pozicija=temperature_out_pozicija+2;
- Serial.print(jutiklis_i);Serial.print(" ");Serial.println(nuskaityta_temperatura);
- }
- }
- if( linija_i==3 && buf_settings[sakos_pos_in_db+linija_i] > 0 ) // Linija Nr.3
- {
- for(byte jutiklis_i=0; jutiklis_i<buf_settings[sakos_pos_in_db+linija_i] ;jutiklis_i=jutiklis_i+1 )
- {
- nuskaityta_temperatura=sensors_on_3.getTempC(DS_Adresai[linija_i-1][jutiklis_i]);
- buf_temperatures_out[temperature_out_pozicija]=Low_byte(nuskaityta_temperatura);
- buf_temperatures_out[temperature_out_pozicija+1]=High_byte(nuskaityta_temperatura);
- temperature_out_pozicija=temperature_out_pozicija+2;
- Serial.print(jutiklis_i);Serial.print(" ");Serial.println(nuskaityta_temperatura);
- }
- }
- if( linija_i==4 && buf_settings[sakos_pos_in_db+linija_i] > 0 ) // Linija Nr.4
- {
- for(byte jutiklis_i=0; jutiklis_i<buf_settings[sakos_pos_in_db+linija_i] ;jutiklis_i=jutiklis_i+1 )
- {
- nuskaityta_temperatura=sensors_on_4.getTempC(DS_Adresai[linija_i-1][jutiklis_i]);
- buf_temperatures_out[temperature_out_pozicija]=Low_byte(nuskaityta_temperatura);
- buf_temperatures_out[temperature_out_pozicija+1]=High_byte(nuskaityta_temperatura);
- temperature_out_pozicija=temperature_out_pozicija+2;
- Serial.print(jutiklis_i);Serial.print(" ");Serial.println(nuskaityta_temperatura);
- }
- }
- if( linija_i==5 && buf_settings[sakos_pos_in_db+linija_i] > 0 ) // Linija Nr.5
- {
- for(byte jutiklis_i=0; jutiklis_i<buf_settings[sakos_pos_in_db+linija_i] ;jutiklis_i=jutiklis_i+1 )
- {
- nuskaityta_temperatura=sensors_on_5.getTempC(DS_Adresai[linija_i-1][jutiklis_i]);
- buf_temperatures_out[temperature_out_pozicija]=Low_byte(nuskaityta_temperatura);
- buf_temperatures_out[temperature_out_pozicija+1]=High_byte(nuskaityta_temperatura);
- temperature_out_pozicija=temperature_out_pozicija+2;
- Serial.print(jutiklis_i);Serial.print(" ");Serial.println(nuskaityta_temperatura);
- }
- }
- if( linija_i==6 && buf_settings[sakos_pos_in_db+linija_i] > 0 ) // Linija Nr.6
- {
- for(byte jutiklis_i=0; jutiklis_i<buf_settings[sakos_pos_in_db+linija_i] ;jutiklis_i=jutiklis_i+1 )
- {
- nuskaityta_temperatura=sensors_on_6.getTempC(DS_Adresai[linija_i-1][jutiklis_i]);
- buf_temperatures_out[temperature_out_pozicija]=Low_byte(nuskaityta_temperatura);
- buf_temperatures_out[temperature_out_pozicija+1]=High_byte(nuskaityta_temperatura);
- temperature_out_pozicija=temperature_out_pozicija+2;
- Serial.print(jutiklis_i);Serial.print(" ");Serial.println(nuskaityta_temperatura);
- }
- }
- if( linija_i==7 && buf_settings[sakos_pos_in_db+linija_i] > 0 ) // Linija Nr.7
- {
- for(byte jutiklis_i=0; jutiklis_i<buf_settings[sakos_pos_in_db+linija_i] ;jutiklis_i=jutiklis_i+1 )
- {
- nuskaityta_temperatura=sensors_on_7.getTempC(DS_Adresai[linija_i-1][jutiklis_i]);
- buf_temperatures_out[temperature_out_pozicija]=Low_byte(nuskaityta_temperatura);
- buf_temperatures_out[temperature_out_pozicija+1]=High_byte(nuskaityta_temperatura);
- temperature_out_pozicija=temperature_out_pozicija+2;
- Serial.print(jutiklis_i);Serial.print(" ");Serial.println(nuskaityta_temperatura);
- }
- }
- }
- temperaturu_uzklausa_jau_issiusta=false;
- //Serial.print(">>> Read_Temperatures b (ms) ");Serial.println(millis()-exe_duration);
- retry=0;
- while(!Send_temperatures(temperature_out_pozicija) && retry<5){
- if(retry>0)
- Serial.print("Pakartotinai bandomi siusti duomenys po 1 s (kartas) ");Serial.println(retry+1);
- delay(1000);
- retry++;
- }
- //send data
- if(show_execution_duration)
- Serial.print(">>> Read_Temperatures ir send data truko (ms) ");Serial.println(millis()-exe_duration);
- }
- return true;
- }
- bool Send_temperatures(int length){
- while (!Client.Connected)
- {
- if (!Connect())
- delay(500);
- Serial.println("Bandoma prisijungti prie PLC funkcijoje 'Send_temperatures' ");
- }
- Serial.print("============ Issiunciami duomenys ====== ");Serial.println(length);
- int eilute=0;
- for(int i=0; i<length;i++){
- Serial.print(buf_temperatures_out[i]);Serial.print(" ");
- eilute++;
- if(eilute==15)
- {
- eilute=0;
- Serial.println();
- }
- }
- Serial.println("");
- int Result=Client.WriteArea(S7AreaDB, // We are requesting DB access
- DBNum_to_plc, // DB Number
- 0, // Start from byte N.0
- 20, // nustatymai pradiniam nuskaitymui
- buf_temperatures_out); // Put them into our target (Buffer or PDU)
- if (Result==0)
- {
- Serial.println(">>>Duomenys issiusti i valdikli ");
- /*
- int result_read=Client.ReadArea(S7AreaDB, // We are requesting DB access
- DBNum_to_plc, // DB Number
- 0, // Start from byte N.0
- 64, // nustatymai pradiniam nuskaitymui
- NULL); // Put them into our target (Buffer or PDU)
- if(result_read==0)
- {/*
- eilute=0;
- for(int i=0; i<length+2;i++)
- {
- Serial.print(PDU.DATA[i]);Serial.print(" ");
- eilute++;
- if(eilute==15)
- {
- eilute=0;
- Serial.println();
- }
- }//
- Dump(14);
- }else{
- Serial.println(">>>Protokolo klaida read ");
- }*/
- return true;
- }else
- {
- Serial.println(">>>Protokolo klaida Send_temperatures ");
- CheckError(Result);
- return false;
- }
- }
- void Request_temperatures(bool show_execution_duration)
- {
- unsigned long exe_duration;
- exe_duration=millis();
- sensors_on_1.requestTemperatures();
- sensors_on_2.requestTemperatures();
- sensors_on_3.requestTemperatures();
- sensors_on_4.requestTemperatures();
- sensors_on_5.requestTemperatures();
- sensors_on_6.requestTemperatures();
- sensors_on_7.requestTemperatures();
- temperatures_requested_at=millis();
- temperaturu_uzklausa_jau_issiusta=true;
- Serial.print(">>> Uzklausiamos temperaturos ties (ms) ");Serial.println(temperatures_requested_at);
- if(show_execution_duration)
- Serial.print(">>> Temperaturu uzklausimas truko (ms) ");Serial.println(millis()-exe_duration);
- }
- //----------------------------------------------------------------------
- bool Handle_initial_settings( )
- {
- bool result;
- byte get_settings_result = 0;
- if (analogRead(A0) < 20 && get_settings_mode_previous == true) //Gaunami duomenys
- {
- Serial.println("Vykdomas duomenu nuskaitymas is valdiklio");
- get_settings_mode_previous=false;
- get_settings_result = Get_Settings_From_Plc();
- while(get_settings_result == 1)
- {
- delay(1000);
- Serial.println("Įvyko protokolo klaida, bandoma vėl nuskaityti");
- get_settings_result = Get_Settings_From_Plc();
- }
- if(get_settings_result == 2){
- Serial.println("Įvyko duomenų bazės klaida, pataisykite ir bandykite vel");
- initial_settings_ok = false;
- }
- if(get_settings_result == 0){
- Serial.println("Duomenys nuskaityti sėkmingai");
- initial_settings_ok = true;
- vykdyti_Pradinis_jutikliu_konfiguravimas=true;
- }
- }
- else //Praleidziama
- {
- //Serial.println("Praleidziamas duomenu nuskaitymas is valdiklio");
- if (analogRead(A0) > 20)
- get_settings_mode_previous=true;
- }
- if(initial_settings_ok){
- return true;
- }else{
- return false;
- }
- }
- byte Get_Settings_From_Plc()
- {
- while (!Client.Connected)
- {
- if (!Connect())
- delay(500);
- Serial.println("Bandoma prisijungti prie PLC funkcijoje 'Get_Settings_From_Plc' ");
- }
- int Size, Result;
- byte nuskaitymas_sekmingas = 0;
- // 0 - Nuskaityta sekmingai
- // 1 - klaida is protokolo, galima bandyti vel
- // 2 - klaida buferiuose, neverta iskart bandyti, laukti kol bus istaisyta klaida ir isnaujo paleisti funkcija
- //----------------------------Pradinių duomenu gavimas------------------------------------------
- Serial.print("Reading ");Serial.print(len_settings_area);Serial.print(" bytes from DB");Serial.println(DBNum_from_plc);
- // Get the current tick
- Result=Client.ReadArea(S7AreaDB, // We are requesting DB access
- DBNum_from_plc, // DB Number
- 0, // Start from byte N.0
- len_settings_area, // nustatymai pradiniam nuskaitymui
- buf_settings); // Put them into our target (Buffer or PDU)
- if (Result==0)
- {
- //Spausdinamas nustatymu buferis i konsole
- for (int i=0; i<len_settings_area ;i++)
- {
- Serial.print(i);
- if (i<10)
- Serial.print(" ");
- Serial.print(" : ");
- Serial.println(buf_settings[i]);
- }
- // sakos_pos_in_db sakos_max_amount
- //Imami adresai
- if(buf_settings[sakos_pos_in_db] <= sakos_max_amount) // Ar ne per daug atskirų liniju
- {
- int jutikliu_kiekis=0;
- for(int linija_i=1; linija_i <= buf_settings[sakos_pos_in_db] ;linija_i++ ) //visos sakos/linijos
- {
- jutikliu_kiekis=jutikliu_kiekis+buf_settings[sakos_pos_in_db+linija_i];
- }
- int adresu_nuskaitimo_pradzia = sakos_pos_in_db+buf_settings[sakos_pos_in_db]+1;
- Serial.print("Jutikliai bus nuskaitomi nuo "); Serial.println(sakos_pos_in_db+buf_settings[sakos_pos_in_db]+1);
- Serial.print("Bus nuskaitoma iki ");Serial.print(sakos_pos_in_db+buf_settings[sakos_pos_in_db]+1+(jutikliu_kiekis*8));Serial.println(" baito imtinai");
- for(byte linija_i=1; linija_i <= buf_settings[sakos_pos_in_db] ;linija_i++ ) //visos sakos/linijos
- {
- if(buf_settings[sakos_pos_in_db+linija_i] <=linijoje_max_jutikliu) // Ar ne per daug jutikliu linijoje
- {
- byte imamas_adresas = 10;
- byte pdu_pozicija = 0;
- for(byte jutiklis_i=0; jutiklis_i<buf_settings[sakos_pos_in_db+linija_i] ;jutiklis_i=jutiklis_i+1 ) //kiekviena linija
- {
- if(imamas_adresas>7) //Standartinis buferis turi 64byte = 8adresus. Jeigu bus imamas aukstesnis adresas, nuskaitomi duomenys is valdiklio
- {
- adresu_nuskaitimo_pradzia=adresu_nuskaitimo_pradzia+pdu_pozicija;
- if(!Atnaujinti_jutikliu_addr_buf(adresu_nuskaitimo_pradzia))
- {
- goto baigti_nuskaitymus;
- }
- imamas_adresas=0;
- pdu_pozicija=0;
- }
- DS_Adresai[linija_i-1][jutiklis_i][0]=PDU.DATA[pdu_pozicija];
- DS_Adresai[linija_i-1][jutiklis_i][1]=PDU.DATA[pdu_pozicija+1];
- DS_Adresai[linija_i-1][jutiklis_i][2]=PDU.DATA[pdu_pozicija+2];
- DS_Adresai[linija_i-1][jutiklis_i][3]=PDU.DATA[pdu_pozicija+3];
- DS_Adresai[linija_i-1][jutiklis_i][4]=PDU.DATA[pdu_pozicija+4];
- DS_Adresai[linija_i-1][jutiklis_i][5]=PDU.DATA[pdu_pozicija+5];
- DS_Adresai[linija_i-1][jutiklis_i][6]=PDU.DATA[pdu_pozicija+6];
- DS_Adresai[linija_i-1][jutiklis_i][7]=PDU.DATA[pdu_pozicija+7];
- pdu_pozicija=pdu_pozicija+8;
- imamas_adresas++;
- }
- adresu_nuskaitimo_pradzia=adresu_nuskaitimo_pradzia+pdu_pozicija;
- }else{
- Serial.println("Klaida: Per didelis atskiru termometrų skaicius linijoje. Max - linijoje_max_jutikliu jutikliai");
- nuskaitymas_sekmingas=2;
- }
- }
- }else{
- Serial.println("Klaida: Per didelis atskiru termometrų linijų skaicius. Max - sakos_max_amount linijos");
- nuskaitymas_sekmingas=2;
- }
- }
- else{
- baigti_nuskaitymus:
- Serial.println("Klaida: Get_Settings_From_Plc nuskaitymas_sekmingas=1");
- CheckError(Result);
- nuskaitymas_sekmingas=1;
- }
- if(nuskaitymas_sekmingas == 0) //Isvesti į ekrana gautus adresus
- {
- for(byte linija_i=1; linija_i <= buf_settings[sakos_pos_in_db] ;linija_i++ ) //visos sakos/linijos
- {
- Parodyti_adresus((linija_i-1),buf_settings[sakos_pos_in_db+linija_i]);
- }
- }
- delay(500);
- return nuskaitymas_sekmingas;
- }
- void Parodyti_adresus(byte linijos_nr, byte jutikliu_n)
- {
- byte cnt=0;
- // DS_Adresai[linija_i][jutiklis_i][7] linijos_nr
- Serial.println("===============================================");
- Serial.print("[ Nuskaityti ");Serial.print(jutikliu_n);Serial.print(" jutikliu adresai linijoje Nr. ");Serial.println(linijos_nr);
- for (byte jutiklis=0; jutiklis<jutikliu_n; jutiklis++)
- {
- Serial.print(jutiklis+1);
- if((jutiklis+1)<10)
- Serial.print(" ");
- Serial.print(" : ");
- for(byte j=0; j<8; j++)
- {
- if (DS_Adresai[linijos_nr][jutiklis][j]<0x10)
- Serial.print("0");
- Serial.print(DS_Adresai[linijos_nr][jutiklis][j], HEX);
- Serial.print(" ");
- }
- Serial.println();
- }
- Serial.println("===============================================");
- }
- bool Atnaujinti_jutikliu_addr_buf(int pradzia)
- {
- if (pradzia < 100)
- {
- //Serial.print("Reading ");Serial.print(len_settings_area);Serial.print(" bytes from DB");Serial.println(DBNum_from_plc);
- int Result=Client.ReadArea(S7AreaDB, // We are requesting DB access
- DBNum_from_plc, // DB Number
- pradzia, // Start from byte N.0
- 64, // nustatymai pradiniam nuskaitymui
- NULL); // Put them into our target (Buffer or PDU)
- if (Result==0)
- {
- Serial.print("OK 'Atnaujinti_jutikliu_addr_buf', nuskaityta nuo ");Serial.println(pradzia);
- return true;
- }else{
- Serial.println("Protokolo klaida Atnaujinti_jutikliu_addr_buf ");
- CheckError(Result);
- return false;
- }
- }else{
- Serial.print("Klaida 'Atnaujinti_jutikliu_addr_buf', bandoma nuskaityti per toli ");Serial.println(pradzia);
- return false;
- }
- }
- void Pradinis_jutikliu_konfiguravimas ()
- {
- byte tikslumas;
- // Initialize the Temperature measurement library
- sensors_on_1.begin();
- sensors_on_2.begin();
- sensors_on_3.begin();
- sensors_on_4.begin();
- sensors_on_5.begin();
- sensors_on_6.begin();
- sensors_on_7.begin();
- //sensors_on_test.begin();
- // set the resolution to 10 bit (Can be 9 to 12 bits .. lower is faster)
- //*********************** Rezoliucijos nustatymas ******************
- if(buf_settings[jutikliu_tikslumo_vieta] < 9 || buf_settings[jutikliu_tikslumo_vieta] > 12 )
- {
- tikslumas = 12; // numatytas tiksliausia padalos verte
- }
- else
- {
- tikslumas = buf_settings[jutikliu_tikslumo_vieta];
- }
- Serial.print("Jutikliu rezoliucija - ");Serial.println(tikslumas);
- //*********************** atnaujinimo periodo nustatymas ******************
- if(buf_settings[atnaujinimo_periodas_vieta] == 0 )
- {
- atnaujinimo_periodas = 10000; // numatytas tiksliausia padalos verte
- }
- else
- {
- atnaujinimo_periodas = buf_settings[atnaujinimo_periodas_vieta]*1000;
- }
- Serial.print("Atnaujinimo periodas - ");Serial.println(atnaujinimo_periodas);
- for(byte linija_i=1; linija_i <= buf_settings[sakos_pos_in_db] ;linija_i++ ) //visos sakos/linijos
- {
- if( linija_i==1 && buf_settings[sakos_pos_in_db+linija_i] > 0 ) // Linija Nr.1
- {
- for(byte jutiklis_i=0; jutiklis_i<buf_settings[sakos_pos_in_db+linija_i] ;jutiklis_i=jutiklis_i+1 )
- {
- sensors_on_1.setResolution(DS_Adresai[linija_i-1][jutiklis_i], tikslumas);
- }
- }
- if( linija_i==2 && buf_settings[sakos_pos_in_db+linija_i] > 0 ) // Linija Nr.2
- {
- for(byte jutiklis_i=0; jutiklis_i<buf_settings[sakos_pos_in_db+linija_i] ;jutiklis_i=jutiklis_i+1 )
- {
- sensors_on_2.setResolution(DS_Adresai[linija_i-1][jutiklis_i], tikslumas);
- }
- }
- if( linija_i==3 && buf_settings[sakos_pos_in_db+linija_i] > 0 ) // Linija Nr.3
- {
- for(byte jutiklis_i=0; jutiklis_i<buf_settings[sakos_pos_in_db+linija_i] ;jutiklis_i=jutiklis_i+1 )
- {
- sensors_on_3.setResolution(DS_Adresai[linija_i-1][jutiklis_i], tikslumas);
- }
- }
- if( linija_i==4 && buf_settings[sakos_pos_in_db+linija_i] > 0 ) // Linija Nr.4
- {
- for(byte jutiklis_i=0; jutiklis_i<buf_settings[sakos_pos_in_db+linija_i] ;jutiklis_i=jutiklis_i+1 )
- {
- sensors_on_4.setResolution(DS_Adresai[linija_i-1][jutiklis_i], tikslumas);
- }
- }
- if( linija_i==5 && buf_settings[sakos_pos_in_db+linija_i] > 0 ) // Linija Nr.5
- {
- for(byte jutiklis_i=0; jutiklis_i<buf_settings[sakos_pos_in_db+linija_i] ;jutiklis_i=jutiklis_i+1 )
- {
- sensors_on_5.setResolution(DS_Adresai[linija_i-1][jutiklis_i], tikslumas);
- }
- }
- if( linija_i==6 && buf_settings[sakos_pos_in_db+linija_i] > 0 ) // Linija Nr.6
- {
- for(byte jutiklis_i=0; jutiklis_i<buf_settings[sakos_pos_in_db+linija_i] ;jutiklis_i=jutiklis_i+1 )
- {
- sensors_on_6.setResolution(DS_Adresai[linija_i-1][jutiklis_i], tikslumas);
- }
- }
- if( linija_i==7 && buf_settings[sakos_pos_in_db+linija_i] > 0 ) // Linija Nr.7
- {
- for(byte jutiklis_i=0; jutiklis_i<buf_settings[sakos_pos_in_db+linija_i] ;jutiklis_i=jutiklis_i+1 )
- {
- sensors_on_7.setResolution(DS_Adresai[linija_i-1][jutiklis_i], tikslumas);
- }
- }
- }
- Serial.println("Pradinis_jutikliu_konfiguravimas baigtas");
- leisti_vykdyti_Request_temperatures = true; //leisti paklausti jutikliu temperaturu
- }
- //----------------------------------------------------------------------
- // Connects to the PLC
- //----------------------------------------------------------------------
- bool Connect() //OK
- {
- int Result=Client.ConnectTo(PLC,
- 0, // Rack (see the doc.)
- 0); // Slot (see the doc.)
- Serial.print("Connecting to ");Serial.println(PLC);
- if (Result==0)
- {
- Serial.print("Connected ! PDU Length = ");Serial.println(Client.GetPDULength());
- }
- else
- Serial.println("Connection error");
- return Result==0;
- }
- //----------------------------------------------------------------------
- // Dumps a buffer (a very rough routine)
- //----------------------------------------------------------------------
- void Dump( int Length)
- {
- int i, cnt=0;
- pbyte buf;
- buf = pbyte(&PDU.DATA[0]);
- Serial.print("[ Dumping ");Serial.print(Length);
- Serial.println(" bytes ]===========================");
- for (i=0; i<Length; i++)
- {
- cnt++;
- if (buf[i]<0x10)
- Serial.print("0");
- Serial.print(buf[i], HEX);
- Serial.print(" ");
- if (cnt==16)
- {
- cnt=0;
- Serial.println();
- }
- }
- Serial.println("===============================================");
- }
- //----------------------------------------------------------------------
- // Prints the Error number
- //----------------------------------------------------------------------
- void CheckError(int ErrNo)
- {
- Serial.print("Error No. 0x");
- Serial.println(ErrNo, HEX);
- // Checks if it's a Severe Error => we need to disconnect
- if (ErrNo & 0x00FF)
- {
- Serial.println("SEVERE ERROR, disconnecting.");
- Client.Disconnect();
- }
- }
- //----------------------------------------------------------------------
- // Profiling routines
- //----------------------------------------------------------------------
- void MarkTime()
- {
- Elapsed=millis();
- }
- //----------------------------------------------------------------------
- void ShowTime()
- {
- // Calcs the time
- Elapsed=millis()-Elapsed;
- if(Elapsed > 10 ){
- Serial.print("loop time (ms) : ");
- Serial.println(Elapsed);
- }
- }
- void new_device_search()
- {
- byte i;
- int Result;
- boolean naujas =false;
- discoverOneWireDevices(); //ieskoma nauju prietaisu
- while (!Client.Connected)
- {
- if (!Connect())
- delay(500);
- Serial.println("Bandoma prisijungti prie PLC funkcijoje 'new_device_search' ");
- }
- for(i=0;i<8;i++) // patikrinti ar rastas naujas adresas
- {
- if(new_device[i+8]!=new_device[i])
- {
- naujas=true;
- }
- /* Serial.print(i);Serial.print(" "); Serial.print(new_device[i]);Serial.print(" "); Serial.print(last_device[i]);Serial.print(" ");
- if(naujas){
- Serial.println("true");
- }else{
- Serial.println("false"); }*/
- }
- if(naujas ){ //issaugoti nauja adresa, issiusti i valdikli && !new_device_search_first_run
- //Serial.println("Surastas naujas jutiklis");
- Serial.print(" Surastas termometras: "); //Parodyti serial monitor nauja adresa
- for(i=0;i<8;i++)
- {
- //last_device[i]=new_device[i];
- Serial.print(new_device[i+8]);Serial.print(" ");
- }
- Serial.println(" ");
- Result=Client.WriteArea(S7AreaDB, // We are requesting DB access
- DBNum_from_plc, // DB Number
- 0, // Start from byte N.0
- 16, // Amount
- new_device); // Put them into our target (Buffer or PDU)
- if (Result==0)
- {
- Serial.println(">>>'new_device_search' Duomenys issiusti i valdikli ");
- for(i=0;i<8;i++)
- {
- new_device[i]=new_device[i+8];
- }
- }else{
- Serial.println(">>> 'new_device_search' Nepavyko issiusti i valdikli ");
- }
- }
- delay(3000);
- }
- void discoverOneWireDevices(void) {
- byte i;
- byte present = 0;
- byte data[12];
- byte addr[8];
- //Serial.print("Looking for 1-Wire devices...\n\r");// "\n\r" is NewLine
- while(oneWire_test.search(addr)) {
- //Serial.print("\n\r\n\rFound \'1-Wire\' device with address:\n\r");
- for( i = 0; i < 8; i++) {
- //Serial.print("0x");
- if (addr[i] < 16) {
- // Serial.print('0');
- }
- // Serial.print(addr[i], HEX);
- if (i < 7) {
- // Serial.print(", ");
- }
- }
- if ( OneWire::crc8( addr, 7) != addr[7]) {
- //Serial.print("CRC is not valid!\n\r");
- return;
- }
- }
- //Serial.println();
- for(i=0;i<8;i++)
- {
- new_device[i+8]=addr[i];
- }
- //Serial.println("Done");
- oneWire_test.reset_search();
- return;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement