Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk memastikan sambungan TCP semasa untuk pengawal boleh atur cara ESPased

Bagaimana untuk memastikan sambungan TCP semasa untuk pengawal boleh atur cara ESPased

DDD
DDDasal
2024-10-19 14:07:01802semak imbas

Apabila mereka bentuk seni bina sistem perisian pengawal boleh atur cara mudah, saya mempunyai pertimbangan utama berikut:
(1) perlu menyokong pelayan TCP serta klien TCP dimultiplekskan secara serentak, pelayan TCP mempunyai tiga kes sambungan, pelayar memuat turun halaman web terbina dalam dan komunikasi selepas itu, untuk sambungan komunikasi perisian pihak ketiga, untuk sambungan protokol Modbus-TCP;
Pelanggan TCP digunakan untuk menyambung ke pelayan TCP pada pelayan awan untuk merealisasikan akses jauh. Memandangkan situasi sumber ESP8266, konkurensi direka bentuk mengikut spesifikasi bahawa pelayan TCP menyokong empat sambungan klien TCP manakala satu klien TCP menyambung ke pelayan awan;
(2) Adalah perlu untuk mengawal aliran komunikasi data TCP/IP 5 hala dan memperuntukkan kepingan masa yang mencukupi untuk penjadualan tugas berkaitan PLC untuk memastikan penjadualan fungsi PLC yang boleh dipercayai dan tindak balas masa nyata;
3) Tugas utama ialah tugas LWIP dan tugas utama, keutamaan tugas LWIP lebih rendah daripada tugas utama, dan pada masa yang sama memastikan tugas utama tidak mempunyai tugas yang memakan masa yang lama atau menyekat. , dan tugas utama dijadualkan dalam tick 10ms, dan ia secara aktif memasuki keadaan menyekat selepas pelaksanaan tugas utama, melepaskan CPU untuk menjadualkan tugas lain;
Menggabungkan ini, saya mereka bentuk seni bina perisian berdekatan;
Apabila pelayan TCP atau klien TCP menerima data, tugas LWIP melaksanakan fungsi panggil balik untuk penerimaan data;
Dalam fungsi panggil balik, program hanya menyimpan data yang diterima ke dalam penimbal terima, tetapi tidak memproses data;
Terdapat lima penimbal terima, setiap satu digunakan untuk lima sambungan serentak; apabila didepositkan ke dalam penimbal ini, pembongkaran paket TCP dan situasi paket melekit dikendalikan pada masa yang sama, data protokol HTTP dibongkar melalui penghujung aksara rnrn;
Apabila data baharu diterima, tugas LWIP membangkitkan tugas utama untuk memprosesnya dengan memberi isyarat kepada Semaphore.
Setiap kali tugas utama mengesan status 5 penimbal ini, dan jika terdapat data yang diterima, ia memproses data yang berkaitan dan menjana respons kembali kepada pengirim;
Untuk memastikan semua 5 sambungan mempunyai peluang yang sama untuk diproses, tugas utama bergilir-gilir untuk mengutamakan keadaan 5 cache ini.
Contohnya, jika penjadual menentukan cache untuk sambungan 0 dahulu, kemudian penjadual seterusnya menentukan cache untuk sambungan 1.
Ini boleh dicapai dengan kod mudah;

ditandatangani pendek http_get_recvs(U32 *msg, U32 *addr, U16 *port){
U8 i;
res pendek yang ditandatangani = -1;
untuk(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

Atas ialah kandungan terperinci Bagaimana untuk memastikan sambungan TCP semasa untuk pengawal boleh atur cara ESPased. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn