Nano. Нужен исполнитель.

UW5EGA
Offline
Зарегистрирован: 16.09.2020

Необходимо написать или переписать данный код. Необходима работа без Deley, то есть что-бы цикл задержек всегда можно было остановить. Данный вариант кода не работает, почему я не знаю, автор не общительный. Нужно добавить дополнительно: контролировать положение LOW или HIGH на digital pin 2, объяснить мне как это значение контролировать с помощью POST запроса. То есть от положения контакта должна загораться лампочка на другой вебстранице, сообщающая о готовности устройства к работе. Доступ к редактору страницы доступен через TeamViewer. Так же создать условие запрещающее перевод digital pin 8 в положение LOW, пока на digital pin 2 не будет LOW. Вывод информации на html страницу не нужен, ниже будет скрипт с помощью которого на другой вебстранице осуществляется управление кнопками "Пуск" "Стоп". С помощью подобного скрипта необходимо зажигать лампочку о готовности без обновления страницы.

#include <SPI.h>
#include <Ethernet.h>
boolean newInfo = 0;
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 };     
byte gateway[] = { 192, 168, 4, 1 };
byte subnet[] = { 255, 255, 255, 0 }; 
IPAddress ip(192,168,4,70);
 
EthernetServer server(80);
  int a;
  int count;
  int operation;
void setup()
{
  cli();
  pinMode(8, OUTPUT);
  digitalWrite(8,HIGH);
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.begin(9600);
  /*
   * Настройка таймера по переполнению
   */
  TCCR1A = 0; // установить TCCR1A регистр в 0
  OCR1A = 15624; // установка регистра совпадения
  TCCR1B |= (1 << WGM12); // включение в CTC режим
  TIMSK1 = (1 << OCIE1A);//включить прерывание Timer1 overflow
  TCCR1B |= (1 << CS12); 
  TCCR1B |= (0 << CS11);
  TCCR1B |= (1 << CS10);
  sei();
 
  a = 0;
  count = 0;
  operation = 0;
}
ISR(TIMER1_COMPA_vect)
{
  switch (a){
    case 1:
      count = 0;
      break;
    case 2:
      count = count + 1;
      break;
    default:;
  }
  if(a == 1)blinker();
}
void blinker()
{
  /*
  digitalWrite(8, LOW);
  delay(8000);
  digitalWrite(8, HIGH);
  delay(5000);
  digitalWrite(8, LOW);
  delay(8000);
  digitalWrite(8, HIGH);
  delay(10000);
  digitalWrite(8, LOW);
  delay(210000);
  digitalWrite(8, HIGH);
  */
  if(operation == 1){
    digitalWrite(8, HIGH);
    operation = 2;
    a = 1;
  }
  if((operation == 2) && (count == 8)){
    digitalWrite(8, LOW);
    operation = 3;
    count = 0;
  }
  if((operation == 3) && (count == 5)){
    digitalWrite(8, HIGH);
    operation = 4;
    count = 0;
  }
  if((operation == 4) && (count == 8)){
    digitalWrite(8, LOW);
    operation = 5;
    count = 0;
  }
  if((operation == 5) && (count == 10)){
    digitalWrite(8, HIGH);
    operation = 6;
    count = 0;
  }
  if((operation == 6) && (count == 210)){
    digitalWrite(8, LOW);
    operation = 0;
    a = 0;
  }
}
 
void loop()
{
  EthernetClient client = server.available();
  if(client){
  boolean currentLineIsBlank = true;
  while (client.connected()) {
    if (client.available()) {
      char c = client.read();
                                                  
      if(newInfo && c == ' '){
        newInfo = 0;
      }
      
      if(c == '$'){
        newInfo = 1;
      }
      
      if((newInfo == 1) && (operation == 0)){
          Serial.println(c);
          if(c == '1'){
          Serial.println("ON");
          operation = 1;
          blinker();
          }
          
          if(c == '2'){
          Serial.println("OFF");
          digitalWrite(8, HIGH);
          }    
      } 
      
      if (c == '\n') {
        currentLineIsBlank = true;
      } 
      else if (c != '\r') {
        currentLineIsBlank = false;
      }
    
      if (c == '\n' && currentLineIsBlank) {
        client.println("HTTP/1.1 200 OK");
        client.println("Content-Type: text/html");
        client.println("Connection: close");  
        client.println("Refresh: 30");
        client.println();
        client.println("<!DOCTYPE HTML>");
        client.println("<html>");
        client.print("<title>Web Server</title>");
        client.print("<H1>Web Server</H1>");
        client.print("<a href=\"/$1\"><button>On</button></a>");
        client.print("<a href=\"/$2\"><button>Off</button></a>");
        client.println("<br />");       
        client.println("</html>");
        break;
      }
    
    }
    
  }
  delay(1);
  client.stop();
}
}
<script>
$(function(){


$('#pusk').click(function() {
    $.post('http://192.168.4.70/$1', {"url": '$1',},
        function(data){
            if (data.success) {
                $('#result').html(data.success.msg);
            } else {
                $('#result').html(data.error.msg);
            }
        }, "json");
    return false;
});

});

$(function(){


$('#stop').click(function() {
    $.post('http://192.168.4.70/$2', {"url": '$2',},
        function(data){
            if (data.success) {
                $('#result').html(data.success.msg);
            } else {
                $('#result').html(data.error.msg);
            }
        }, "json");
    return false;
});

});
</script>

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Цикл задержек остановить чем? Пулеметной очередью, ударом кузнечного молота? Как исполнитель должен это требование реализовывать? Вы так и не желаете учиться оценивать перспективу, замечаете только delay().

UW5EGA
Offline
Зарегистрирован: 16.09.2020

Данное устройство будет работать 24\7 в ожидании команды запуска 1 раз в месяц. Воля исполнителя применить какие-то доработки оптимизирующие безперебойную работу сети. Участник sadman41 писал по этому поводу здесь http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/vopros-novichka#comment-557784

Здесь http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/snova-voprosy?page=2 было обсуждение данной поделки. В теме дано много подсказок, но я не понимаю как применить их на практике. 

UW5EGA
Offline
Зарегистрирован: 16.09.2020

sadman41 пишет:
Цикл задержек остановить чем? Пулеметной очередью, ударом кузнечного молота? Как исполнитель должен это требование реализовывать? Вы так и не желаете учиться оценивать перспективу, замечаете только delay().

Просто остановиться в ожидании запуска. По истечению 210 секунд перейти из LOW в HIGH и ждать следующего запуска. 

UW5EGA
Offline
Зарегистрирован: 16.09.2020

sadman41 пишет:
Цикл задержек остановить чем? Пулеметной очередью, ударом кузнечного молота? Как исполнитель должен это требование реализовывать? Вы так и не желаете учиться оценивать перспективу, замечаете только delay().

Наверное в этом форуме отсутствует возможность написания личных сообщений. Я много раз хотел написать вам в личку но никак. Хотел попросить вас закончить эту эпопею, не бесплатно конечно. 

man9913
Offline
Зарегистрирован: 19.03.2016

напишу правильно работающий скетч заново. 2тр. man9913@mail.ru

sadman41
Offline
Зарегистрирован: 19.10.2016

Я сейчас наслаждаюсь прелестями "медициносодержащей услуги" от Минздрава, так что браться пока за это не буду. А с учётом уже озвученных 2 тыщ при тех проблемах , что мне уже известны, данный заказ вообще становится не очень привлекателен.

UW5EGA
Offline
Зарегистрирован: 16.09.2020

Выше написали только за скетч, про зажигание лампочек ничего не говорилось. Мне нужно все вместе сделать или по отдельности но без обратной связи никак. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

sadman41 пишет:
Я сейчас наслаждаюсь прелестями "медициносодержащей услуги" от Минздрава, так что браться пока за это не буду. А с учётом уже озвученных 2 тыщ при тех проблемах , что мне уже известны, данный заказ вообще становится не очень привлекателен.

2 тысячи это совершенно не серьёзно или исполнитель не понял задачи

UW5EGA
Offline
Зарегистрирован: 16.09.2020

ua6em пишет:

sadman41 пишет:
Я сейчас наслаждаюсь прелестями "медициносодержащей услуги" от Минздрава, так что браться пока за это не буду. А с учётом уже озвученных 2 тыщ при тех проблемах , что мне уже известны, данный заказ вообще становится не очень привлекателен.

2 тысячи это совершенно не серьёзно или исполнитель не понял задачи

Он не понял. В течении часа в почте веду переписку. 

man9913
Offline
Зарегистрирован: 19.03.2016

чтобы он понял, надо нормально задачу формулировать, чтобы исполнитель клещами не вытаскивал информацию из вас по крупинкам, это кстати увеличивает стоимость выполнения.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

man9913 пишет:

чтобы он понял, надо нормально задачу формулировать, чтобы исполнитель клещами не вытаскивал информацию из вас по крупинкам, это кстати увеличивает стоимость выполнения.

на прямо заданные вопросы ответа не было, если это дизель-генератор, к примеру из серии ДГА-48 и далее, то они оборудованы шкафами автоматики, ранее это было на логике-Т, то-есть можно получить часть данных со шкафа, для ручного управления там две кнопки (режим ручной проверки), пуск и стоп, сначала включается насос прокачки масла, далее, по истечении определённого периода времени если с давлением всё в норме включается запуск либо от аккумуляторов 24 вольта либо от рессиверов с воздухом и должен произойти выход на рабочие обороты (1500 об/мин) за определённое время, нет выхода - авария, стоп...
Так и не услышал, что за дизеля там такие и система автоматики к ним... а сейчас идёт обсуждение "сферического коня в вакууме"... и таких коней аж 7 вроде )))

b707
Offline
Зарегистрирован: 26.05.2017

посмотрел представленный код... блинкер вызывается в обработке запроса сервера? :) ну-ну...

Я так понимаю, что в этой задаче главная работа - это разгрести все то, что от невежества наворотили Заказчик и прошлый исполнитель?

rst
Offline
Зарегистрирован: 25.06.2018

b707 пишет:
Я так понимаю, что в этой задаче главная работа - это разгрести все то, что от невежества наворотили Заказчик и прошлый исполнитель?
А то-ж! Потому и оплата такая - как ассенизатору. За разгребание аналогичной субстанции.  ;)))

UW5EGA
Offline
Зарегистрирован: 16.09.2020

b707 пишет:

посмотрел представленный код... блинкер вызывается в ответе сервера? :) ну-ну...

Я так понимаю, что в этой задаче главная работа - это разгрести все то, что от невежества наворотили Заказчик и прошлый исполнитель?

Я инициатор, я заказчик, я исполнитель. Платить исполнителю буду из своей зарплаты, сколько бы это не стоило. Стоимость не оглашал, надеялся на предложения. Код выложил с последними изменениями. Если хотите, то вот последний рабочий вариант:

 

#include <SPI.h>
#include <Ethernet.h>
boolean newInfo = 0;
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 };     
byte gateway[] = { 192, 168, 4, 1 };
byte subnet[] = { 255, 255, 255, 0 }; 
IPAddress ip(192,168,4,70);
EthernetServer server(80);


void setup()
{
  pinMode(8, OUTPUT);          
  digitalWrite(8,HIGH);
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.begin(9600);
}

void blinker()
{
  digitalWrite(8, LOW);
  delay(8000);
  digitalWrite(8, HIGH);
  delay(5000);
  digitalWrite(8, LOW);
  delay(8000);
  digitalWrite(8, HIGH);
  delay(10000);
  digitalWrite(8, LOW);
  delay(210000);
  digitalWrite(8, HIGH);
}


void loop()
{
  EthernetClient client = server.available();
  if(client){ 
  boolean currentLineIsBlank = true;
  while (client.connected()) {             
    if (client.available()) {                       
      char c = client.read();                       
                                                  
      if(newInfo && c == ' '){                      
        newInfo = 0;                                
      }
      
      if(c == '$'){                                 
                                                    
        newInfo = 1;                                
      }
      
                                                     
      if(newInfo == 1){                              
          Serial.println(c);
          if(c == '1'){                              
          Serial.println("ON");
          digitalWrite(8, LOW);
		  blinker();
          }
          
          if(c == '2'){                              
          Serial.println("OFF");
          digitalWrite(8, HIGH);                     
          }    
      } 
      
      if (c == '\n') {                              
        currentLineIsBlank = true;                  
      } 
      else if (c != '\r') {                         
        currentLineIsBlank = false;                 
      }
    
      if (c == '\n' && currentLineIsBlank) {        
        client.println("HTTP/1.1 200 OK");          
        client.println("Content-Type: text/html");
        client.println("Connection: close");  
        client.println("Refresh: 1");              
        client.println();
        client.println("<!DOCTYPE HTML>");         
        client.println("<html>");                   
        client.print("<title>Alarm</title>");                
        client.print("<H1>Block 1</H1>");                        
        if (digitalRead(8))
  {
    client.println("<h3>OFF</h3>");
  }
  else
  {
    client.println("<h3>ON</h3>");
  }      
        client.println("<br />");       
        client.println("</html>");                  
        break;                                     
      }
    
    }
    
  }
  delay(1);                                          
  client.stop();
}
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Разве системы ГО и ЧС не требуют сертификатов на продукцию? От них жизнь людей зависит. А ну как зависнет эта ваша конструкция через пару недель, а никто и знать не будет, пока не жахнет.

Я, конечно, понимаю, что в это верить не хочется, но когда начнут искать виноватых - мысли в голове будут совсем другие: "на кой хер я взялся жопу начальству прикрывать и ещё за свой счёт?"

UW5EGA
Offline
Зарегистрирован: 16.09.2020

sadman41 пишет:
Разве системы ГО и ЧС не требуют сертификатов на продукцию? От них жизнь людей зависит. А ну как зависнет эта ваша конструкция через пару недель, а никто и знать не будет, пока не жахнет.

Вот по этому я долгое время скрывал настоящие цели, но шила в мешке не утаишь... 

Сейчас ответственность за эти блоки государство перенесло на плечи предприятий где они установлены. Я работаю на одном из таких предприятий и когда зависнет, буду первый кто получит по шапке. Зачем мне это? Интерес и опыт какой-то. Тут или вперед или никто не поймет, почему проект был свернут в самый разгар. 

sadman41
Offline
Зарегистрирован: 19.10.2016

Ну и зря скрывали. Никакая опасность потерять работу не стоит 5 лет колонии.

А уж начальники, будьте уверены, все оформят самоуправством за милую душу.

И, вообще, такая постановка задачи, в корне меняет подход к проектированию системы.

Почему "никто не поймет?"
Есть факт - система работает неустойчиво, к вводу в эксплуатацию допущена быть не может. Все.

UW5EGA
Offline
Зарегистрирован: 16.09.2020

Хорошо. Какие вы предлагаете изменения для получения стабильности?

sadman41
Offline
Зарегистрирован: 19.10.2016

Сертифицированное оборудование, а не нанки, у которых не дай бог кварцы поотваливаются после эксплуатации в промышленных условиях.

Я вижу - вы упрямо желаете стать фигурантом "Зимней Вишни - 2". Это крайне печально.

UW5EGA
Offline
Зарегистрирован: 16.09.2020

Просто я помню недавнюю историю с сертифицированным оборудованием...

Решили значит в цехах и не только заменить старые побитые жизнью алюминиевые рупоры для громкоговорящей связи. Питаются они от трансляционной линии 120 вольт. Фирма смонтировала свои сертифицированные рупоры, а усилители остались старыми. Через месяц начали гореть эти рупоры как семечки, фирма исчезла, а мы выколуповали из старых колоколов трансформаторы и меняли их в новых колоколах. Вот еще осталась кучка этих китайских типа трансформаторов, у них даже между собой параметры разные. Хотел этим сказать, что с сиренами которые включают 1 раз в месяц для проверки будет та же история, а включают их подпирая вручную палочкой контакты пускателя в назначенное время уже лет 10 если не больше. А видео наблюдение? Лучше промолчу! Нет веры никому, только себе. Нашу скромную электро-мастерскую нужно переименовать в бюро доводок и доделок. 

 

b707
Offline
Зарегистрирован: 26.05.2017

я вам советую разделить задачу на понятные части.

Для начала закажите отдельно переписывание этого кода без делей. Только это, без всяких модификаций, без добавления чтения каких-то пинов и посылки POST запроса. Это относительно несложная задача, и, главное - на нее уже есть ТЗ.

Думаю, на это вы исполнителя найдете легко.

А потом, когда эта часть заработает - может напрягетесь и сумеете внятно сформулировать. что там вам за управление пинами через POST запросы нужно, потому как пока я абсолютно ничего не понял.

man9913
Offline
Зарегистрирован: 19.03.2016

b707 пишет:

посмотрел представленный код... блинкер вызывается в обработке запроса сервера? :) ну-ну...

Я так понимаю, что в этой задаче главная работа - это разгрести все то, что от невежества наворотили Заказчик и прошлый исполнитель?

ващето blinker вызывается из прерывания если чё.

b707
Offline
Зарегистрирован: 26.05.2017

man9913 пишет:

ващето blinker вызывается из прерывания если чё.

точно, не увидел...

Не сложилось у вас с ТС. я так понял?

man9913
Offline
Зарегистрирован: 19.03.2016

b707 пишет:

точно, не увидел...

Не сложилось у вас с ТС. я так понял?

исполнителем этого проекта я не являюсь.

сейчас мяч на стороне ТС'а. задача в принципе понятна и решаема. загвоздка там в том, что, как я понял, http запросы к ардуино делает веб сервер крутящийся на локальном ПК. ТС,у надо написать соответствующий php скрипт под openserver, который по его словам ему сделает веб-программист когда у него найдётся на это время.

sadman41
Offline
Зарегистрирован: 19.10.2016

Начинается пожар, электричество вырубается, ПК в дауне, свичи в дауне - что делает система оповещения? Спокойно себе догарает.

Просто отлично.

inspiritus
Offline
Зарегистрирован: 17.12.2012

И про вачдог не забывайте! На не «old bootloder” он прекрасно фунциклирует.

UW5EGA
Offline
Зарегистрирован: 16.09.2020

sadman41 пишет:
Начинается пожар, электричество вырубается, ПК в дауне, свичи в дауне - что делает система оповещения? Спокойно себе догарает.

Просто отлично.


Это не пожарная сигнализация, это сирена по типу авианалета или химической опасности. Она не такая значимая, но ее проверяют 1 раз в месяц.

UW5EGA
Offline
Зарегистрирован: 16.09.2020

Вот такая же https://youtu.be/T1SBljDADto

b707
Offline
Зарегистрирован: 26.05.2017

UW5EGA - вся эта идея с кучей веб-серверов, которые что-то передают друг другу - абсолютно неприемлема для любой ответственной системы. Я вам еще в самом начале обсуждения сказал,  что 7 вебсерверов для семи ардуино - это бредятина. Но вы же никого не слушаете...

Вот ведь удивительно - чтобы переписать простенький код без делеев - вы ищете исполнителя, чтобы сбацать какой-то там пхп-скрипт на сервер - просите веб-программиста, но по вопросам общего проектирования системы ничьих советов не слушаете и упорно строите какую-то городулю из гнилых палок и костылей...

то есть реально ни в чем конкретно не разбираетесь -но уверены что надо делать именно так...

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

 упорно строите какую-то городулю из гнилых палок и костылей...

UDP широковещательного тут бы видимо хватило:
 

#if defined(EthModule)
  const byte RemoteDevice = 's';
  const byte ThisDevice = 'r';
  bool EnableEthernet = 1;
  bool EnableDHCP     = 1;
  long GetNetIdTimer[2]{0,2000};
  //  #include <util.h>
  #include <Ethernet.h>
  #include <EthernetUdp.h>
  // #include <Dhcp.h>
  // #include <EthernetServer.h>
  #include <SPI.h>
  byte LastMac = 0x00 + NET_ID;

  byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, LastMac};
  IPAddress ip(192, 168, 1, 222);         // IP
  IPAddress gateway(192, 168, 1, 200);    // GATE
  IPAddress subnet(255, 255, 255, 0);     // MASK
  IPAddress myDns(8, 8, 8, 8);            // DNS (google pub)
  EthernetServer server(80);              // Web server PORT
  String HTTP_req;

  unsigned int UdpCommandPort = 88;       // local UDP port listen to command
  // #define UDP_TX_PACKET_MAX_SIZE 30       // MIN 30
  // unsigned char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet,
  unsigned char packetBuffer[30]; //buffer to hold incoming packet,
  int UDPpacketSize;
  EthernetUDP UdpCommand; // An EthernetUDP instance to let us send and receive packets over UDP
  IPAddress BroadcastIP(0, 0, 0, 0);        // Broadcast IP address
  int BroadcastPort       = 88;             // destination broadcast packet port
  IPAddress RemoteSwIP(0, 0, 0, 0);         // remote UDP IP switch - set from UDP DetectRemote array
  int RemoteSwPort         = 0;             // remote UDP IP switch port
  byte DetectedRemoteSw[16][5];             // detect by RX broadcast packet - storage by ID (ID=rows)
  int BandDecoderChange    = 0;             // If band change, send query packet to Remote IP switch
  long RemoteSwLatency[2];                  // start, stop mark
  byte RemoteSwLatencyAnsw = 0;             // answer (offline) detect
  byte TxUdpBuffer[10];
  long IpTimeout[1][2] = {0, 60000};          // UDP Broadcast packet [8][0-timer/1-timeout]

  bool EthLinkStatus = 0;
  long EthLinkStatusTimer[2]{1500,1000};
  uint8_t EthChar[8] = {0x0,0x0,0x1f,0x11,0x11,0x1b,0x1f,0x0};
#endif

 

imp
Offline
Зарегистрирован: 20.06.2020

Широковещательный UDP не хорош тем, что нужно смотреть за настройками сети. Вдруг на каком-то шлюзе или маршрутизаторе их прохождение не настроено?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

imp пишет:

Широковещательный UDP не хорош тем, что нужно смотреть за настройками сети. Вдруг на каком-то шлюзе или маршрутизаторе их прохождение не настроено?

это уже к сетевикам вопросы )))

sadman41
Offline
Зарегистрирован: 19.10.2016

Посоветовал UDP вместо TCP, чем ещё больше снизил надёжность системы и задействовал ещё пару человек в обслуживании. Это такой конкурс тут у радиогубителей - сделать так, чтобы ломалось не просто от пердежа, а ещё только при мысли о нем? Да тогда просто семь веревок натяните и к рубильникам привяжите. Эффективность даже выше будет.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

sadman41 пишет:
Посоветовал UDP вместо TCP, чем ещё больше снизил надёжность системы и задействовал ещё пару человек в обслуживании. Это такой конкурс тут у радиогубителей - сделать так, чтобы ломалось не просто от пердежа, а ещё только при мысли о нем? Да тогда просто семь веревок натяните и к рубильникам привяжите. Эффективность даже выше будет.

тогда всегда можно скинуть с себя в зону ответственности сетевиков )))

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Грустный, ваще то TCP не лучше UDP. У них просто разное назначение. Если все правильно делать и понимать что делаешь, то команды как раз удобнее передавать используя UDP.  Если шлешь большие куски и тебе важен порядок, то с TCP просто будет удобнее работать. Тут дело не в том на каком уровне отправляются данные, а в том как это делается. Кстати UDP пролезет в большее количество дыр. Кроме того, например если делать сетку например на ESP то используя TCP получишь ограничение в 5 нод (если у тебя держатель сети ESP). А с UDP этой траблы не будет. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

brokly пишет:

 А с UDP этой траблы не будет. 

он еще и внимательно код не смотрел, код не мой, нагло заимствован )))

sadman41
Offline
Зарегистрирован: 19.10.2016

Мне достаточно того факта, что UDP-пакет вполне "по стандарту" может похерить любой промежуточный хост и об этом никто даже и не узнает. В данном случае UDP тут ничего не улучшает - ни скорости не требуется, ни экономии трафика. А вот потенциальный геморрой в поиске проблем доставки и усложнение на прикладном уровне - извольте, прям на блюде.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Вполне по стандарту и любой TCP пакет так же может быть похерен. Если мы не знаем настройки шлюза, то мы об этом и говорить можем сколь угодно долго и бесполезно.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

sadman41 пишет:
Мне достаточно того факта, что UDP-пакет вполне "по стандарту" может похерить любой промежуточный хост и об этом никто даже и не узнает. В данном случае UDP тут ничего не улучшает - ни скорости не требуется, ни экономии трафика. А вот потенциальный геморрой в поиске проблем доставки и усложнение на прикладном уровне - извольте, прям на блюде.

я бы делал с обратным каналом, там датчик звуковой просится, и контроль прохождения пакетов, раз в пять минут - состояние канала, а на запрос включения (изменение состояния ) сразу и вэбформы тут вообще лишние

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Сообщение для Gri_Gori_Y:
Это раздел для размещения платных заказов ("Ищу исполнителя"). Не нужно писать в чужие темы свои вопросы, не касающиеся этих платных заказов. Да и вообще в чужие темы по совсем другим вопросам (оффтоп). Вам было ранее неоднократно сказано создать СВОЮ тему и вести обсуждение в ней. Если Вам не нужны платные услуги и Вы хотите чему-то научиться, спросить совета - создайте тему в разделе "Песочница". Для этого перейдите в главный раздел "Форумы" и справа вверху нажмите на надпись "Создать материал", затем "Тема форума". Укажите тему Вашего обращения и правильно выберите раздел (Песочница). 
Если всё таки понадобятся платные услуги - опять же, создайте СВОЮ тему в разделе "Ищу исполнителя". Не нужно писать в чужих.

Приложите некоторые усилия для правильного размещения ваших сообщений, а не где попало по всему форуму...

UW5EGA
Offline
Зарегистрирован: 16.09.2020

#include <SPI.h>
#include <Ethernet.h>
boolean newInfo = 0;
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 };     
byte gateway[] = { 192, 168, 4, 1 };
byte subnet[] = { 255, 255, 255, 0 }; 
IPAddress ip(192,168,4,70);
EthernetServer server(80);

void setup()
{
  pinMode(8, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(3, INPUT_PULLUP);
  digitalWrite(8,HIGH);
  digitalWrite(6,HIGH);
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.begin(9600);
}

void loop()
{
  EthernetClient client = server.available();
  if(client){ 
  boolean currentLineIsBlank = true;
  while (client.connected()) {             
    if (client.available()) {                       
      char c = client.read();                       
                                                  
      if(newInfo && c == ' '){                      
        newInfo = 0;                                
      }
      
      if(c == '$'){                                 
                                                    
        newInfo = 1;                                
      }
      
                                                     
          if(newInfo == 1){                              
          Serial.println(c);
          if(c == '1'){                              
          Serial.println("ON");
          digitalWrite(8, LOW);
          }
          
          if(c == '2'){                              
          Serial.println("OFF");
          digitalWrite(8, HIGH);
	      digitalWrite(6,HIGH);
          }
		  
          if(c == '3'){                              
          Serial.println("ON");
          digitalWrite(6, LOW);
          } 
      }
      
      if (c == '\n') {                              
        currentLineIsBlank = true;                  
      } 
      else if (c != '\r') {                         
        currentLineIsBlank = false;                 
      }
    
      if (c == '\n' && currentLineIsBlank) {        
        client.println("HTTP/1.1 200 OK");          
        client.println("Content-Type: text/html");
        client.println("Connection: close");  
        client.println("Refresh: 1");              
        client.println();
        client.println("<!DOCTYPE HTML>");         
        client.println("<html>");                   
        client.print("<title>Alarm</title>");                
        client.print("<H1>Block 1</H1>");                        
        if (digitalRead(3))
  {
    client.println("<h3>OFF</h3>");
  }
  else
  {
    client.println("<h3>ON</h3>");
  }      
        client.println("<br />");       
        client.println("</html>");                  
        break;                                     
      }
    
    }
    
  }
  delay(1);                                          
  client.stop();
}
}

 

После добавления еще одного реле и контроля состояния входа все это вешается при работе. Заменил все провода на экранированные и все равно вешается, такое ощущение, что он зависает не из за наводок, а сам по себе. Допустим я уже решил, что оно зависло, а оно за секунду может прощелкать всеми контактами и остановиться. Как ПК виснет, а потом открывает 10 окон сразу. Все я отказался от дальнейшего воплощения, но только для себя может с годами доведу все до ума. Заяву на расчет написал. 

smart_pic
Offline
Зарегистрирован: 17.04.2016

UW5EGA пишет:

Хорошо. Какие вы предлагаете изменения для получения стабильности?

Жаль что сдались. Решение могу предложить.