> 백엔드 개발 > C++ > 본문

ESPased 프로그래밍 가능 컨트롤러에 대한 현재 TCP 연결을 보장하는 방법

DDD
풀어 주다: 2024-10-19 14:07:01
원래의
800명이 탐색했습니다.

간단한 프로그래머블 컨트롤러의 소프트웨어 시스템 아키텍처를 설계할 때 다음과 같은 주요 고려 사항이 있습니다.
(1) 동시에 다중화된 TCP 서버와 TCP 클라이언트를 지원해야 합니다. TCP 서버에는 세 가지 연결 사례가 있으며, 브라우저는 타사 소프트웨어의 통신 연결을 위해 내장 웹 페이지와 그 이후의 통신을 다운로드합니다. Modbus-TCP 프로토콜 연결용;
TCP 클라이언트는 원격 액세스를 실현하기 위해 클라우드 서버의 TCP 서버에 연결하는 데 사용됩니다. ESP8266의 리소스 상황을 고려하여 TCP 서버는 4개의 TCP 클라이언트 연결을 지원하고 하나의 TCP 클라이언트는 클라우드 서버에 연결한다는 사양에 따라 동시성을 설계했습니다.
(2) PLC 기능의 안정적인 스케줄링과 실시간 응답을 보장하려면 최대 5방향 TCP/IP 데이터 통신의 흐름을 제어하고 PLC 관련 작업 스케줄링에 충분한 시간 분할을 할당해야 합니다.
3) 주요 작업은 LWIP 작업과 메인 작업으로, LWIP 작업의 우선순위는 메인 작업보다 낮으며, 동시에 메인 작업에는 시간이 오래 걸리거나 방해가 되는 작업이 없는지 확인합니다. , 메인 작업은 10ms 틱으로 예약되며, 메인 작업 실행 후 적극적으로 차단 상태로 들어가고 다른 작업 예약을 위해 CPU를 해제합니다.
이를 결합하여 가까운 소프트웨어 아키텍처를 설계했습니다.
TCP 서버나 TCP 클라이언트가 데이터를 수신하면 LWIP의 태스크는 데이터 수신을 위한 콜백 함수를 실행합니다.
콜백 함수에서 프로그램은 수신된 데이터를 수신 버퍼에 저장하기만 하고 데이터를 처리하지는 않습니다.
5개의 수신 버퍼가 있으며 각각 5개의 동시 연결에 사용됩니다. 이러한 버퍼에 저장되면 TCP 패킷 압축 풀기 및 고정 패킷 상황이 동시에 처리되고 HTTP 프로토콜 데이터는 rnrn 문자의 끝을 통해 압축이 풀립니다.
새로운 데이터가 수신되면 LWIP의 작업은 Semaphore에 신호를 보내 이를 처리할 메인 작업을 깨웁니다.
메인 작업은 이 5개 버퍼의 상태를 감지할 때마다 수신된 데이터가 있으면 관련 데이터를 처리하고 보낸 사람에게 다시 응답을 생성합니다.
5개의 연결이 모두 동일한 처리 기회를 가지도록 하기 위해 기본 작업은 이 5개의 캐시 상태의 우선순위를 교대로 지정합니다.
예를 들어 스케줄러가 연결 0에 대한 캐시를 먼저 결정하면 다음 스케줄러가 연결 1에 대한 캐시를 결정합니다.
간단한 코드로 이를 달성할 수 있습니다.

서명된 짧은 http_get_recvs(U32 *msg, U32 *addr, U16 *port){
U8i;
서명된 짧은 입술 = -1;
for(i = 0; 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

위 내용은 ESPased 프로그래밍 가능 컨트롤러에 대한 현재 TCP 연결을 보장하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!