Я пишу пользовательское приложение OPC-клиента на C#, позволяя считывать данные с сервера RSLinx.Удаленный OPC подключен, но не может читать
Во-первых, я не смог удаленно подключиться к RSLINX Opc Server. Исключение доступа Отказано в доступе.
Я тогда alteredthe DCOM Настройки MyComputer -> Com Security -> Права доступа и запуск и разрешение активации, включено все для пользователя «Everyone»
Это тогда позволило мне подключиться, но когда дело доходит до чтения сервер я получаю следующее исключение -
[System.Runtime.InteropServices.COMException] {"Exception from HRESULT: 0x80040202"} System.Runtime.InteropServices.COMException
Я рыскал в Интернете столько, сколько я, возможно, может, и все они сводятся к вопросам, связанным DCOM. Я просто попробовал все с настройками Dcom. Я убедился, что настройки включены как для MyComputer, так и для RSLinx-сервера.
Я использую два .dll файлы из OPCFoundation - opcNetApi.dll, opcNetApi.Com.dll
Вот мой код (это может быть удобно)
private void readplc()
{
Opc.URL url = new Opc.URL("opcda://48.5.0.05/RSLinx OPC Server");
Opc.Da.Server server = null;
OpcCom.Factory fact = new OpcCom.Factory();
server = new Opc.Da.Server(fact, null);
try
{
server.Connect(url, new Opc.ConnectData(new System.Net.NetworkCredential()));
}
catch (Exception exy)
{
MessageBox.Show(exy.Message);
}
// Create a group
Opc.Da.Subscription group;
Opc.Da.SubscriptionState groupState = new Opc.Da.SubscriptionState();
groupState.Name = "Group";
groupState.Active = true;
group = (Opc.Da.Subscription)server.CreateSubscription(groupState);
// add items to the group.
Opc.Da.Item[] items = new Opc.Da.Item[6];
items[0] = new Opc.Da.Item();
items[0].ItemName = "[ALARM]F20:9";
items[1] = new Opc.Da.Item();
items[1].ItemName = "[ALARM]F22:30";
items[2] = new Opc.Da.Item();
items[2].ItemName = "[ALARM]F22:6";
items[3] = new Opc.Da.Item();
items[3].ItemName = "[ALARM]F18:8";
items[4] = new Opc.Da.Item();
items[4].ItemName = "[ALARM]F22:32";
items[5] = new Opc.Da.Item();
items[5].ItemName = "[ALARM]F22:5";
items = group.AddItems(items);
try
{
group.DataChanged += new Opc.Da.DataChangedEventHandler(OnTransactionCompleted); // COM EXCEPTION THROWN HERE
Console.ReadLine();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
Console.ReadKey();
}
}
private void OnTransactionCompleted(object group, object hReq, Opc.Da.ItemValueResult[] items)
{
for (int i = 0; i < items.GetLength(0); i++)
{
}
}
I знаю, что код работает так, как я пытался создать приложение, подключающееся как локальный хост на ПК, к которому я пытаюсь подключиться к удаленному подключению, он с радостью читает данные.
Надеюсь, у кого-то будет представление о том, что происходит, я потратил более 12 часов в течение последних 4 рабочих дней, пытаясь разобраться в этом!
Существует возможный duplciate вопрос [здесь] (http://stackoverflow.com/a/6038417/3581917) и [здесь] (Http: // StackOverflow .com/д/2246525/3581917). –