Heim > Backend-Entwicklung > C++ > Hauptteil

So stellen Sie eine aktuelle TCP-Verbindung für die speicherprogrammierbare ESPased-Steuerung sicher

DDD
Freigeben: 2024-10-19 14:07:01
Original
800 Leute haben es durchsucht

Beim Entwurf der Softwaresystemarchitektur der einfachen programmierbaren Steuerung habe ich die folgenden Hauptüberlegungen:
(1) Sie müssen sowohl den TCP-Server als auch den TCP-Client unterstützen, der gleichzeitig gemultiplext ist. Der TCP-Server verfügt über drei Verbindungsfälle. für den Anschluss des Modbus-TCP-Protokolls;
Der TCP-Client wird verwendet, um eine Verbindung zum TCP-Server auf dem Cloud-Server herzustellen, um den Fernzugriff zu realisieren. Unter Berücksichtigung der Ressourcensituation von ESP8266 ist die Parallelität gemäß der Spezifikation konzipiert, dass der TCP-Server vier TCP-Client-Verbindungen unterstützt, während ein TCP-Client eine Verbindung zum Cloud-Server herstellt;
(2) Es ist notwendig, den Fluss der bis zu 5-Wege-TCP/IP-Datenkommunikation zu steuern und genügend Zeitscheiben für die SPS-bezogene Aufgabenplanung zuzuweisen, um eine zuverlässige Planung von SPS-Funktionen und Echtzeitreaktionen sicherzustellen;
3) Die Hauptaufgaben sind die LWIP-Aufgabe und die Hauptaufgabe. Die Priorität der LWIP-Aufgabe ist niedriger als die der Hauptaufgabe und stellt gleichzeitig sicher, dass die Hauptaufgabe keine zeitraubende oder blockierende Aufgabe hat , und die Hauptaufgabe wird in 10-ms-Takten geplant und geht nach der Ausführung der Hauptaufgabe aktiv in den Blockierungszustand über, wodurch die CPU für die Planung anderer Aufgaben freigegeben wird;
Indem ich diese kombinierte, entwarf ich die angrenzende Softwarearchitektur;
Wenn der TCP-Server oder TCP-Client Daten empfängt, führt die LWIP-Aufgabe die Rückruffunktion für den Datenempfang aus.
In der Rückruffunktion speichert das Programm lediglich die empfangenen Daten im Empfangspuffer, verarbeitet die Daten jedoch nicht;
Es gibt fünf Empfangspuffer, die jeweils für fünf gleichzeitige Verbindungen verwendet werden. Bei der Ablage in diesen Puffern werden das Entpacken des TCP-Pakets und die Sticky-Packet-Situation gleichzeitig behandelt. HTTP-Protokolldaten werden bis zum Ende der rnrn-Zeichen entpackt.
Wenn neue Daten empfangen werden, aktiviert die LWIP-Aufgabe die Hauptaufgabe, um sie zu verarbeiten, indem sie Semaphore signalisiert.
Jedes Mal, wenn die Hauptaufgabe den Status dieser 5 Puffer erkennt und wenn Daten empfangen werden, verarbeitet sie die relevanten Daten und generiert eine Antwort zurück an den Absender;
Um sicherzustellen, dass alle 5 Verbindungen die gleiche Chance haben, verarbeitet zu werden, wechselt sich die Hauptaufgabe ab, den Zustand dieser 5 Caches zu priorisieren.
Wenn der Planer beispielsweise zuerst den Cache für Verbindung 0 bestimmt, bestimmt der nächste Planer den Cache für Verbindung 1.
Dies kann mit einem einfachen Code erreicht werden;

signiertes kurzes http_get_recvs(U32 *msg, U32 *addr, U16 *port){
U8 i;
signiertes Kurzres = -1;
for(i = 0; i< TCPSERVER_CLIENT_NUM; i )
{

    if(tcpclient_curquery_client >= TCPSERVER_CLIENT_NUM){
        tcpclient_curquery_client = 0;
    }
    if(tcpclient_info[tcpclient_curquery_client].used == TRUE){
        if(tcpclient_info[tcpclient_curquery_client].received){
            *msg = (U32)tcpclient_info[tcpclient_curquery_client].recvbuff;
            *addr = tcpclient_info[tcpclient_curquery_client].ipaddr;
            *port = tcpclient_info[tcpclient_curquery_client].port;
            res = (signed short)tcpclient_curquery_client;
            break;
        }
    }
    tcpclient_curquery_client++;
}
return(res);


}

How to ensure oncurrent TCP connection for ESPased programmable controller

How to ensure oncurrent TCP connection for ESPased programmable controller

Das obige ist der detaillierte Inhalt vonSo stellen Sie eine aktuelle TCP-Verbindung für die speicherprogrammierbare ESPased-Steuerung sicher. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!