Maison > Article > développement back-end > Regroupement de contrôleurs de communication réseau pour améliorer les capacités interactives d'équilibrage de charge, exemple de didacticiel
ServerSuperIO n'avait à l'origine qu'un seul contrôleur réseau en mode de communication réseau. En mode automatique, en mode concurrent et en mode singleton, les données renvoyées sont traitées de manière asynchrone, et il n'y aura aucune question d'amélioration des performances. Cependant, en mode d'interrogation, un contrôleur de réseau doit exécuter l'envoi et la réception du pilote de périphérique un par un dans l'ordre, de sorte que le cycle d'interrogation peut être trop long et que la fréquence de lecture des données ne peut pas être atteinte.
Afin de résoudre les problèmes ci-dessus, la fonction de regroupement du contrôleur réseau est désormais ajoutée aux paramètres du pilote de périphérique. Le contrôleur réseau contrôlera le pilote de périphérique en fonction du nom de groupe défini par les paramètres du périphérique. Par exemple, en mode d'interrogation, il existe 1 000 pilotes de périphérique et le même nom de groupe peut être défini pour 10 pilotes de périphérique. Ces 10 pilotes de périphérique sont contrôlés par le même contrôleur réseau. Si les données sont lues toutes les 1 s, alors chacun est interrogé. Le cycle du pilote de périphérique est de 10 secondes, ce qui est similaire à celui des autres contrôleurs réseau.
Selon le ControllerGroup qui définit les paramètres réseau du pilote de périphérique, le pilote de périphérique peut être affecté pour s'exécuter dans différents contrôles réseau, et est applicable pour les modes d'interrogation, de contrôle automatique, de concurrence et de contrôle singleton.
À propos, le contrôleur de port série peut être attribué à différents contrôleurs de port série en définissant le numéro de port série du pilote de périphérique. Ce contrôleur ne peut être utilisé qu’en mode de contrôle d’interrogation.
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(); } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!