Что мне нужно для создания простого приложения на C #, которое использует OPC? - PullRequest
1 голос
/ 22 февраля 2011

Мне нужно написать простое приложение на c #, которое взаимодействует с Siemens S7 через OPC.Просто нужно запросить один вход и установить один выход.

Что мне нужно для этого?Нужны ли мне такие вещи, как Си от OPCFoundation?

Ответы [ 8 ]

3 голосов
/ 26 февраля 2014

Похоже, у вас уже есть OPC-сервер для Siemens S7. Kepware, Simatic Net и многие другие поддерживают OPC UA.

Вы можете создать простое приложение HMI в C # с помощью следующих бесплатных инструментов:

  1. Microsoft Visual Studio Express 2013 для Windows Desktop доступен по адресу: http://www.microsoft.com/visualstudio/eng/products/visual-studio-express-for-windows-desktop.

  2. Последний источник с этого сайта: http://web.archive.org/web/20140219181837/http://opcuaservicesforwpf.codeplex.com/

С помощью этого комплекта вы можете: Просматривайте серверы OPC UA непосредственно из среды разработки Visual Studio. Перетащите узлы переменных, чтобы создать подписку на данные. Используйте привязки для анимации свойств вашего элемента управления пользовательского интерфейса из значений данных подписки.

Ознакомьтесь с примером приложения «Рабочая станция».

3 голосов
/ 08 апреля 2011

Возможно, вы зашли бы на сайт www.quickopc.com, который обеспечивает идеальную оболочку между .NET и OPC-серверами. Также есть много информации для OPC-серверов от www.opcfoundation.com, о которой вы уже узнали сами.

Если вы не используете библиотеки, такие как QuickOPC, вам придется создавать собственные классы для преобразования двоичных данных в читаемые коды .NET (которые должны быть самими заданиями). Это вполне выполнимо, основным недостатком является то, что у каждого устройства / производителя есть свой собственный протокол, что означает, что вы можете получить одну упаковку для каждого уникального устройства.

3 голосов
/ 25 февраля 2011

В качестве более общего решения OPC, возможно, стоит взглянуть на http://www.codeproject.com/KB/COM/opcdotnet.aspx - это бесплатная OPC DLL в комплекте с исходным кодом. Несмотря на то, что он довольно простой, код есть, поэтому вы можете легко обновить его при необходимости, но, исходя из ваших требований, он может быть идеальным.

2 голосов
/ 24 февраля 2011

На сайте Siemens есть примеры с документацией и исходным кодом, которые могут быть вам полезны. Посмотрите на них:

1 голос
/ 10 февраля 2014

Используйте любые промежуточные dll, такие как opcdaauto.dll, clientAce, MXIO.NET.

Начало кодирования с использованием C # .C # обеспечивает гибкость в общении с OPC-сервером.

Пример с Siemens, использующим C #: В App.config:

    Tag1 value="SERVER:\DiagnosticsSummary\CumulatedSubscriptionCount"
    Tag2 value="SERVER:\Capabilities\MinSupportedUpdateRate"
    ServerId value="opcda://localhost/OPC.SimaticNET.1/{B6EACB30-42D5-11D0-9517-0020AFAA4B3C}"/>

- Наслаждайся кодированием-- См .: http://www.revanayya.blogspot.com

1 голос
/ 02 июля 2013

Я сейчас прохожу этот процесс, нашел его очень полезным: http://www.opcti.com/Download-OPC-Xi-source-code.aspx

1 голос
/ 05 августа 2011

Другой возможностью было бы использование интерфейса Siemens SAPI-S7 (который является родным протоколом Siemens и который также используется OPC). SoftwareOption GmbH имеет интерфейс программирования S7 .NET с примером C #. Вы можете скачать демонстрационную программу на C # с исходным кодом. Смотри http://www.softwareoption.de/siemens-produkte_e.htm.

0 голосов
/ 11 февраля 2014
#region Variable Declaration
 public static Kepware.ClientAce.OpcDaClient.DaServerMgt ObjDaServerMgt = new Kepware.ClientAce.OpcDaClient.DaServerMgt();
            public static Kepware.ClientAce.OpcDaClient.ConnectInfo ObjConnectInfo = new Kepware.ClientAce.OpcDaClient.ConnectInfo();
            public static Kepware.ClientAce.OpcDaClient.ReturnCode ObjReturnCode = new Kepware.ClientAce.OpcDaClient.ReturnCode();
            public static Kepware.ClientAce.OpcDaClient.ItemIdentifier[] ObjItemIdentifiers = new Kepware.ClientAce.OpcDaClient.ItemIdentifier[2];
#endregion


public void Connect()
{

            string OPC_url_Simatic = ConfigurationManager.AppSettings["ServerId"].ToString();


                ObjConnectInfo.LocalId = "en";
                ObjConnectInfo.KeepAliveTime = 5000;
                ObjConnectInfo.RetryAfterConnectionError = true;
                ObjConnectInfo.RetryInitialConnection = true;
                bool connectFailed = false;

                ///define a client handle
                int clientHandle = 1;

                //Try to connect with the API connect method:
                try
                {
                    ObjDaServerMgt.Connect(OPC_url_Simatic, clientHandle, ref ObjConnectInfo, out connectFailed);
                }
                catch (Exception ex)
                {
                   // MessageBox.Show("Handled Connect exception. Reason: " + ex.Message);.
                    log.Error(ex.ToString());
                    // Make sure following code knows connection failed:
                    connectFailed = true;
                }
                // Handle result:
                if (connectFailed)
                {
                    // Tell user connection attempt failed:
                    //MessageBox.Show("Connect failed");
                    log.Error("Connection Failed");
                }
}

Зарегистрируйтесь для получения некоторых обработчиков событий и получите работу.

...