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

DDD
Lepaskan: 2024-10-19 14:07:01
asal
800 orang telah melayarinya

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!

sumber:dev.to
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!