ServerSuperIO は元々、ネットワーク通信モードでネットワーク コントローラーを 1 つだけ備えていました。自動モード、同時モード、シングルトン モードでは、返されたデータは非同期で処理され、パフォーマンスの問題は発生しません。ただし、ポーリングモードでは、ネットワークコントローラがデバイスドライバの送受信を1つずつ順番に動作させる必要があるため、ポーリング周期が長すぎてデータの読み出し頻度に達しない場合があります。
上記の問題を解決するために、ネットワーク コントローラーのグループ化機能がデバイス ドライバーのパラメーターに追加され、ネットワーク コントローラーはデバイス パラメーターで設定されたグループ名に従ってデバイス ドライバーを制御します。たとえば、ポーリング モードでは、1000 個のデバイス ドライバがあり、10 個のデバイス ドライバごとに同じグループ名を設定できます。これらの 10 個のデバイス ドライバは、1 秒ごとにデータが読み取られる場合、各ポーリングが制御されます。デバイスドライバーの周期は10秒で、他のネットワークコントローラーと同様です。
デバイスドライバーのネットワークパラメーターを設定するControllerGroupに従って、デバイスドライバーはさまざまなネットワーク制御で実行するように割り当てることができ、ポーリング、自動制御、同時実行およびシングルトン制御モードに適しています。 。
ちなみに、シリアルポートコントローラーは、デバイスドライバーのシリアルポート番号を設定することで、別のシリアルポートコントローラーに割り当てられます。 このコントローラーは、ポーリング制御モードでのみ使用できます。
static void Main(string[] args) { string deviceID = "2"; DeviceDriver dev3 = new DeviceDriver(); dev3.DeviceParameter.DeviceName = "设备2"; dev3.DeviceParameter.DeviceAddr = 0; dev3.DeviceParameter.DeviceID = deviceID; dev3.DeviceParameter.DeviceCode = deviceID; dev3.DeviceDynamic.DeviceID = deviceID; dev3.DeviceParameter.NET.RemoteIP = "127.0.0.1"; dev3.DeviceParameter.NET.RemotePort = 9600; dev3.DeviceParameter.NET.ControllerGroup = "G2"; dev3.CommunicateType = CommunicateType.NET; dev3.DeviceParameter.NET.WorkMode = WorkMode.TcpServer; dev3.Initialize(deviceID); deviceID = "3"; DeviceDriver dev4 = new DeviceDriver(); dev4.DeviceParameter.DeviceName = "设备3"; dev4.DeviceParameter.DeviceAddr = 0; dev4.DeviceParameter.DeviceID = deviceID; dev4.DeviceParameter.DeviceCode = deviceID; dev4.DeviceDynamic.DeviceID = deviceID; dev4.DeviceParameter.NET.RemoteIP = "127.0.0.1"; dev4.DeviceParameter.NET.RemotePort = 9600; dev4.DeviceParameter.NET.ControllerGroup = "G3"; dev4.CommunicateType = CommunicateType.NET; dev4.Initialize(deviceID); IServer server = new ServerManager().CreateServer(new ServerConfig() { ServerName = "服务1", ComReadTimeout = 1000, ComWriteTimeout = 1000, NetReceiveTimeout = 1000, NetSendTimeout = 1000, ControlMode = ControlMode.Loop, SocketMode = SocketMode.Tcp, StartReceiveDataFliter = false, ClearSocketSession = true, StartCheckPackageLength = false, CheckSameSocketSession = false, }); server.AddDeviceCompleted += server_AddDeviceCompleted; server.DeleteDeviceCompleted += server_DeleteDeviceCompleted; server.SocketConnected+=server_SocketConnected; server.SocketClosed+=server_SocketClosed; server.Start(); server.AddDevice(dev3); server.AddDevice(dev4); while ("exit"==Console.ReadLine()) { server.Stop(); } }
以上がインタラクティブな負荷分散機能を向上させるためのネットワーク通信コントローラーのグループ化のサンプル チュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。