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

Regroupement de contrôleurs de communication réseau pour améliorer les capacités interactives d'équilibrage de charge, exemple de didacticiel

零下一度
零下一度original
2017-06-23 16:54:421623parcourir

20.1 Présentation

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.

20.2 Schéma du contrôleur 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.

20.3 Schéma du contrôleur de port série

À 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.

20.4 Exemple de code de regroupement du contrôleur réseau du pilote de périphérique

        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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn