Не удается подключиться к удаленному KepServer с помощью OPCAutomation.dll

Я подключился к местному KepServerEX и теперь я пытаюсь подключиться к удаленному KepServerEX используя C#.

Я настроил DCOM для моего компьютера, чтобы подключиться к удаленному серверу, но, к сожалению, я все еще не могу подключиться к удаленному KepServerEx,

Я использовал эту команду:

KepServer.Connect("KEPware.KEPServerEx.V4", remoteServerIP) 

и настроил DCOM для моего ПК.

Это мой код:

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

    OPCServer KepServer;
    OPCGroups KepGroups;
    OPCGroup KepGroup;
    OPCItems KepItems;
    OPCItem KepItem;
    string strHostIP = "";
    string strHostName = "";
    bool opc_connected = false;
    int itmHandleClient = 0;
    int itmHandleServer = 0;

    private void GetLocalServer()
    {

        IPHostEntry IPHost = Dns.Resolve(Environment.MachineName);
        if (IPHost.AddressList.Length > 0)
        {
            strHostIP = IPHost.AddressList[0].ToString();
        }
        else
        {
            return;
        }
        IPHostEntry ipHostEntry = Dns.GetHostByAddress(strHostIP);
        strHostName = ipHostEntry.HostName.ToString();

        try
        {

            KepServer = new OPCServer();
            object serverList = KepServer.GetOPCServers(strHostName);
            foreach (string turn in (Array)serverList)
            {
                bool bl = turn.Contains("KEPware");
                if (bl == true)
                    cmbServerName.Items.Add(turn);
            }
            cmbServerName.SelectedIndex = 0;
            btnConnLocalServer.Enabled = true;

        }
        catch (Exception)
        {
        }

    }

    private bool CreateGroup()
    {
        try
        {
            KepGroups = KepServer.OPCGroups;
            KepGroup = KepGroups.Add("OPCDOTNETGROUP");
            SetGroupProperty();
            KepGroup.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(KepGroup_DataChange);
            KepGroup.AsyncWriteComplete += new DIOPCGroupEvent_AsyncWriteCompleteEventHandler(KepGroup_AsyncWriteComplete);
            KepItems = KepGroup.OPCItems;

        }
        catch (Exception)
        {
            return false;

        }
        return true;
    }

    private void SetGroupProperty()
    {
        KepServer.OPCGroups.DefaultGroupIsActive = true;
        KepServer.OPCGroups.DefaultGroupDeadband = 0;
        KepGroup.UpdateRate = 1000;
        KepGroup.IsActive = true;
        KepGroup.IsSubscribed = true;
    }

    private void GetServerInfo()
    {
        tsslServerStartTime.Text = "Start time:" + KepServer.StartTime.ToString() + "      ";
        tsslversion.Text = "version:" + KepServer.MajorVersion.ToString() + "." + KepServer.MinorVersion.ToString() + "." + KepServer.BuildNumber.ToString();
    }

    private bool ConnectRemoteServer(string remoteServerIP, string remoteServerName)
    {
        try
        {
            KepServer.Connect(remoteServerName, remoteServerIP);
            if (KepServer.ServerState == (int)OPCServerState.OPCRunning)
            {
                tsslServerState.Text = "Is connected to the -" + KepServer.ServerName + " ";
            }
            else
            {
                tsslServerState.Text = "State: " + KepServer.ServerState.ToString() + "     ";

            }

        }
        catch (Exception ex)
        {
            return false;
        }

        return true;
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        GetLocalServer();
    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (!opc_connected)
        {
            return;
        }

        if (KepGroup != null)
        {
            KepGroup.DataChange -= new DIOPCGroupEvent_DataChangeEventHandler(KepGroup_DataChange);
        }

        if (KepServer != null)
        {
            KepServer.Disconnect();
            KepServer = null;
        }

        opc_connected = false;

    }

    private void btnSetGroupPro_Click(object sender, EventArgs e)
    {
        SetGroupProperty();

    }

    private void btnConnLocalServer_Click(object sender, EventArgs e)
    {
        try
        {
            if (!ConnectRemoteServer(txtRemoteServerIP.Text, "KEPware.KEPServerEx.V4"))
            {
                return;
            }

            btnSetGroupPro.Enabled = true;
            opc_connected = true;

            GetServerInfo();

            RecurBrowse(KepServer.CreateBrowser());

            if (!CreateGroup())
            {
                return;
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("" + ex);
        }
    }
}

1 ответ

Наконец я решил свою проблему. Я очень рад поделиться с вами своей проблемой.

Во-первых, вы используете KepServer.Connect(remoteServerName, remoteServerIP); способ подключения к удаленному серверу.

Вы должны настроить DCOM для своего клиентского и серверного компьютера. Вы можете сослаться на ссылку:http://support.sas.com/rnd/itech/doc9/admin_oma/sasserver/comdcom/xpsp2.html,

Важно, что вам нужно создать локального пользователя на моем клиентском компьютере с тем же именем пользователя и паролем, что и на сервере.

Вы можете сослаться на ссылку: http://www.elmajdal.net/win7/how_to_create_a_password_for_a_user_account_in_windows_7.aspx создать пароль для имени пользователя.

Я надеюсь, что это может помочь вам.

Другие вопросы по тегам