Полагаю, ваша проблема в том, что ваш цикл блокирует выполнение внешнего интерфейса.Во время выполнения цикла вы не можете получить доступ к другим интерфейсам.
Я хотел сделать аналогичную вещь - разрешить управление циклом Matlab внешней программой (либо Ruby, либо другим экземпляром Matlab).Наиболее гибким решением на сегодняшний день было использование UDP.Существует отличный набор инструментов под названием PNET для matlab, и я предполагаю, что VB также должен иметь библиотеку сокетов.Я просто открываю UDP-порт с обеих сторон и использую простые текстовые команды для управления и обратной связи.
obj.conn = pnet('udpsocket', 9999);
command = '';
while run ~= 0
nBytes = pnet(obj.conn, 'readpacket');
if nBytes > 0
command = pnet(obj.conn, 'read', nBytes, 'string');
end
switch command
case '--reset--'
doReset(); % Reset the parameters for the processing
reset = 0;
disp('I did a reset');
case '--abort--'
run = 0;
disp('Going to abort');
case '--echo--'
pnet(obj.conn, 'write', '--echo--');
pnet(obj.conn, 'writepacket', remoteAddress, remotePort);
end
doProcess();
end
Таким образом, я могу создать свой собственный расширяемый интерфейс управления, не беспокоясь о блокировке из цикла, он можетработать кроссплатформенный и кросс-языковой, может работать в машине или по сети.
ОБНОВЛЕНИЕ: Чтобы общаться между двумя клиентами UDP, вам нужно настроить два дополнительных порта UDP, оба являются клиентами (в этом примере все в Matlab, представьте, что obj здесь - это структура, в моем случае это класся оборачиваюсь вокруг функциональности pnet):
obj = struct();
obj.success = 0;
obj.client1Port = 9999;
obj.client2Port = 9998;
obj.client1Address = '127.0.0.1';
obj.client2Address = '127.0.0.1';
obj.conn1 = pnet('udpsocket', obj.client1Port);
obj.conn2 = pnet('udpsocket', obj.client2Port);
pnet(obj.conn1, 'write', '--echo--')
pnet(obj.conn1, 'writepacket', obj.client2Address, obj.client2Port);
nBytes = pnet(obj.conn2, 'readpacket');
if nBytes > 0
command = pnet(obj.conn2, 'read', nBytes, 'string');
if regexpi(command,'--echo--')
obj.success = obj.success+1;
fprintf('Client 2 recieved this message: %s\n',command);
pnet(obj.conn2, 'write', '--echo--')
pnet(obj.conn2, 'writepacket', obj.client1Address, obj.client1Port);
end
end
nBytes = pnet(obj.conn1, 'readpacket');
if nBytes > 0
command = pnet(obj.conn1, 'read', nBytes, 'string');
if regexpi(command,'--echo--')
obj.success = obj.success+1;
fprintf('Client 1 got this back: %s\n',command);
end
end
if obj.success == 2
fprintf('\nWe both sent and received messages!\n');
end