Написание переменных через QuickOPC в C # (Visual Studio) - PullRequest
0 голосов
/ 08 июня 2018

Мой проект касается написания OPC UA-клиента для чтения и записи переменных на OPC UA-сервере Siemens PLC.Я использую Visual Studio 2017 Enterprise и установил Quick OPC Toolkit из OPClabs, чтобы начать работу и попытаться подключиться.Для программирования клиента я использую Windows Forms и C #.Соединение с сервером и чтение переменных работает просто отлично, но написание их вызывает у меня головную боль:

1.) Прежде чем приступить к программированию самостоятельно, я скачал образец клиента OPC UA из OPC Foundation (есликому-то нужна ссылка для скачивания, просто спросите, загрузку найти сложно).Я подключился к серверу и мог просматривать переменные, но функция записи была серой / недоступной.

2.) Я начал программировать очень простой клиент, но также не смог записать переменные.Чтение через Live Binding (http://opclabs.doc -that.com / files / onlinedocs / QuickOpc / 2018.2 / Пользователь% 27s% 20Guide% 20and% 20Reference-QuickOPC / webframe.html # Создание% 20a% 20first% 20OPC% 20UA%20application% 20using% 20Live% 20Binding.html ) работает, также читает их с помощью easyUAClient.Read ().Я пытался написать переменную с этим кодом:

namespace ErsteOPCUAVerbindung{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        var easyUAClient = new EasyUAClient();
        easyUAClient.WriteValue("opc.tcp://OpcUaClient:password@192.168.216.1:4840/", "nsu=SinumerikVarProvider;ns=2;s=/NC/_N_NC_TEA_ACX/$MN_PLC_CYCLIC_TIMEOUT", 1);

    }
}}

, но получаю исключение:

OpcLabs.EasyOpc.UA.OperationModel.UAException: «Ошибка операции OPC-UA спроизошел код ошибки -2144010240 (0x80350000), происходящий из «OpcLabs.EasyOpcUA». Внутренняя исключительная ситуация службы OPC-UA с результатом службы «BadAttributeIdInvalid» содержит сведения о проблеме. "

{" Результат службы OPC-UA- Произошла ошибка, специфичная для службы OPC-UA. \ R \ n ---- РЕЗУЛЬТАТ СЕРВИСА ---- \ r \ nStatusCode: {BadAttributeIdInvalid} = 0x80350000 (2150957056) \ r \ n "}

Я понятия не имею, что вызывает это.Я подозревал, что, возможно, причиной является какое-то ограничение доступа, но я не могу найти никаких намеков на это в документации, и, кроме того, я вошел в систему как администратор.

У кого-нибудь есть идея?Спасибо.

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Обновление: я нашел документацию, в которой объясняется, что администратор не имеет прав записи по умолчанию и как вы можете это изменить.Вам нужно вызвать метод GiveUserAccess и передать два аргумента: имя пользователя и «SinuWriteAll» (второй вид скрыт).Я попробую сейчас с C # и опубликую свое решение, если оно будет работать.

0 голосов
/ 08 июня 2018

У меня был еще один взгляд на ваш код, и то, как вы передаете имя пользователя и пароль (в самом URL), определенно не правильно.То, как оно дается сейчас, по сути игнорируется.Это может или не может быть причиной проблемы с записью, но это, безусловно, необходимо изменить.Правильный способ указать имя пользователя и пароль:

var client = new EasyUAClient();
var endpointDescriptor = new UAEndpointDescriptor("opc.tcp://192.168.216.1:4840/");
endpointDescriptor.UserIdentity = UserIdentity.CreateUserNameIdentity("OpcUaClient", "password");
client.WriteValue(endpointDescriptor, "nsu=SinumerikVarProvider;ns=2;s=/NC/_N_NC_TEA_ACX/$MN_PLC_CYCLIC_TIMEOUT", 1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...