Передайте NET -объект параллельной функции (parfeval) в Matab - PullRequest
2 голосов
/ 10 апреля 2020

Я пытаюсь передать NET -объект в функцию, выполняющуюся в параллельном пуле в Matlab.

Хотя я думал, что "parallel.pool.Constant" - это способ сделать это - так как он отлично работает для других объектов (например, для соединения с базой данных) - в этом случае это не работает.

Поскольку я не получаю сообщение об ошибке, я не могу выяснить, почему это не будет работать.

Кроме того, функция отображения ничего не показывает.

Пример кода:

%% Import Ads.dll
AdsAssembly = NET.addAssembly('D:\TwinCat3\AdsApi\.NET\v4.0.30319\TwinCAT.Ads.dll');
import TwinCAT.Ads.*;

%Create TcAdsClient instance
tcClient = TcAdsClient;

tc = parallel.pool.Constant(tcClient); %Create pool constant to pass object

pool = gcp();
parfeval(pool,@pfcn,0,tc);

function pfcn(tc)

    disp(tc.Value);
    tcClient = tc.Value;
    tcClient.Connect(851); %Connect to ADS port 851 on the local machine

end

Пример, где он работает нормально для меня (OP C Клиент UA):

pool = gcp();

Q = parallel.pool.DataQueue;

serverList = opcuaserverinfo('192.168.60.200'); 
hsInfo = findDescription(serverList, 'K6');

uaClient = opcua(hsInfo);

opc_const = parallel.pool.Constant(uaClient);

parfeval(pool, @pfcn, 0, Q, opc_const);

listener = afterEach(Q, @disp);

function pfcn(Q, opc_const)

    par_uaClient = opc_const.Value;
    connect(par_uaClient);
    conn_state = isConnected(par_uaClient);
    send(Q, par_uaClient)

end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...