シンプルなプログラマブル コントローラーのソフトウェア システム アーキテクチャを設計する場合、主に次の点を考慮します。
(1) TCP サーバーと TCP クライアントの多重化を同時にサポートする必要があります。TCP サーバーの接続には、ブラウザが内蔵 Web ページをダウンロードしてその後の通信、サードパーティ製ソフトウェアの通信接続の 3 つのケースがあります。 Modbus-TCPプロトコルの接続用。
TCPクライアントはクラウドサーバー上のTCPサーバーに接続し、リモートアクセスを実現します。 ESP8266 のリソース状況を考慮して、同時実行性は、TCP サーバーが 4 つの TCP クライアント接続をサポートし、1 つの TCP クライアントがクラウド サーバーに接続するという仕様に従って設計されています。
(2) PLC 機能の信頼性の高いスケジューリングとリアルタイム応答を確保するには、最大 5 方向の TCP/IP データ通信のフローを制御し、PLC 関連タスクのスケジューリングに十分なタイム スライスを割り当てる必要があります。
3) メインタスクは LWIP タスクとメインタスクであり、LWIP タスクの優先度はメインタスクよりも低く、同時にメインタスクに時間のかかるタスクやブロックするタスクがないことを確認します。 、メインタスクは 10ms ティックでスケジュールされ、メインタスクの実行後に積極的にブロッキング状態に入り、他のタスクをスケジュールするために CPU を解放します。
これらを組み合わせて、近くのソフトウェア アーキテクチャを設計しました。
TCP サーバーまたは TCP クライアントがデータを受信すると、LWIP のタスクはデータ受信用のコールバック関数を実行します。
コールバック関数では、プログラムは受信データを受信バッファに格納するだけで、データの処理は行いません。
受信バッファは 5 つあり、それぞれが 5 つの同時接続に使用されます。これらのバッファに格納されると、TCP パケットのアンパックとスティッキー パケットの状況が同時に処理され、HTTP プロトコル データが rnrn 文字の終わりまでアンパックされます。
新しいデータを受信すると、LWIP のタスクはセマフォを通知してメイン タスクを起動して処理します。
メインタスクがこれら 5 つのバッファのステータスを検出するたびに、受信データがある場合は、関連するデータを処理して送信者に応答を生成します。
5 つの接続すべてが同じように処理されるようにするために、メイン タスクは順番にこれら 5 つのキャッシュの状態に優先順位を付けます。
たとえば、スケジューラが最初に接続 0 のキャッシュを決定した場合、次のスケジューラが接続 1 のキャッシュを決定します。
これは簡単なコードで実現できます;
署名付き short http_get_recvs(U32 *msg, U32 *addr, U16 *port){
U8 i;
符号付きショート解像度 = -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);}
以上がESPased プログラマブル コントローラの現在の TCP 接続を確保する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。