20.1 概述 serversuperio原来在网络通讯模式下,只有一个网络控制器,在自控模式、并发模式和单例模式下时都是异步处理返回的数据,并不会出现性能问题。但是在轮询模式下,一个网络控制器要按顺序逐一操作设备驱动的发送和接收,这样就会出现轮询周期过长,达不到读取数据频率的情况。
为了解决上述问题,现在对设备驱动的参数增加了网络控制器分组功能,网络控制器会根据设备参数设置的分组名称控制设备驱动。例如轮询模式下,有1000个设备驱动,可以每10个设备驱动设置相同的分组名称,这10个设备驱动受控于同一个网络控制器,如果每间隔1s读取一次数据,那么每个设备驱动的轮询周期是10s钟,其他网络控制器类似。
20.2 网络控制器示意图
根据设置设备驱动网络参数的controllergroup,可以把设备驱动分配到不同的网络控制中运行,并且适用于轮询、自控、并发和单例控制模式。
20.3 串口控制器示意图
顺便提一下串口控制器,通过设置设备驱动的串口号决定被分配到不同的串口控制器,该控制器只能适用于轮询控制模式。
20.4 设备驱动网络控制器分组示例代码 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();
}
}
以上就是网络通讯控制器分组,提高交互的负载平衡能力实例教程的详细内容。