首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用LibNoDave返回writeBytes -1025

使用LibNoDave返回writeBytes -1025
EN

Stack Overflow用户
提问于 2015-10-26 23:07:00
回答 3查看 1.3K关注 0票数 1

我从C#到我的Simatic S7-1200的连接出现了奇怪的问题。我正在使用LibNoDave进行连接,并且我想用C#程序设置我的SPS的位。它工作得很好,但它只工作了9次,然后writeBytes(..)函数返回-1025,而不是它应该返回的0,并且它不再设置字节。然后我必须重新启动应用程序,它将再次工作9次。

这是我的LibNoDave类。

代码语言:javascript
复制
static class LibNoDave
{

    static libnodave.daveConnection dc;
    static bool connection = false;

    public static bool CreateConnection()
    {
        const string IP = "192.168.1.250";
        const int Rack = 0;
        const int Slot = 0;
        libnodave.daveOSserialType fds;
        libnodave.daveInterface di;

        try
        {
            fds.rfd = libnodave.openSocket(102, IP);
            fds.wfd = fds.rfd;

            if (fds.rfd > 0)
            {
                di = new libnodave.daveInterface(fds, "IF1",
                              0, libnodave.daveProtoISOTCP,
                              libnodave.daveSpeed187k);

                di.setTimeout(1000000);
                int res = di.initAdapter();
                if (res == 0)
                {

                    dc = new libnodave.daveConnection(di, 0,
                                                       Rack, Slot);
                    res = dc.connectPLC();
                    if (res == 0)
                    {
                        connection = true;
                        return true;
                    }
             }
        }

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

        return false;
    }


    public static void DisconnectPLC()
    {
        if (connection)
        {
            dc.disconnectPLC();
            libnodave.closeSocket(102);
            connection = false;
        }

    }

    public static void WritePLC(int anfangswert, byte wert)
    {
        if (connection)
        {
            byte[] buf = new Byte[1];
            buf[0] = wert;
            int res = dc.writeBytes(libnodave.daveFlags, 0, anfangswert, 1, buf);
            MessageBox.Show(res.ToString());
        }

    }
}

我在这里调用这些函数:

代码语言:javascript
复制
private void frmAuslagerung_Load(object sender, EventArgs e)
    {
        if (!LibNoDave.CreateConnection())
        {
            finished = true;
            this.Close();
        }

        LibNoDave.WritePLC(1, Byte.Parse(auto.Position.Lade.ToString()));

    }

    private void frmAuslagerung_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (!finished)
        {
            //e.Cancel = true; //Not in code for testing
            LibNoDave.DisconnectPLC(); //Only for testing
        }            
        else
            LibNoDave.DisconnectPLC();
    }
EN

回答 3

Stack Overflow用户

发布于 2015-10-26 23:26:16

我在代码中看不到任何问题,我也不知道你的设备和LibNoDave,但问题可能与:

1-某些接收者是“一位数”(如0到9)的地址或容器吗?

2-我在WritePLC函数中看到的位置真的被重置了吗?

3- - "LibNoDave.WritePLC“正在递增它的指针?

祝好运。

票数 0
EN

Stack Overflow用户

发布于 2017-11-03 00:53:29

尝试使用以下命令关闭连接可能会出现问题:

代码语言:javascript
复制
    public static void DisconnectPLC()
    {
        if (connection)
        {
          dc.disconnectPLC();
          di.disconnectAdapter();
          libnodave.closePort(fds.rfd);
          connection = false;
         }
}
票数 0
EN

Stack Overflow用户

发布于 2019-03-19 16:14:20

它很旧,但其他人可以发现:在我的例子中,它是fds和di的声明:它们必须是类成员,并且不是connect方法的本地成员,否则超时值稍后就会丢失。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33349093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档