创建新对象会覆盖现有会话(modbus)

时间:2014-08-28 07:22:59

标签: c# object modbus

我使用modbus-protocoll创建了一个C#DLL,用于从模块中读取模拟值。

在第二个c#项目中,我使用dll并使用" new ET18Z_A"创建一个对象。只要我只使用一个模块,一切都很好。当我创建第二个对象(ET18Z_B)时,第一个对象不再工作。

好像第二个"新"覆盖第一个会话。

这里是我用来读取一个值的代码。如果第二个"新"被跳过,它运行良好,函数ReadInputRegister读取正确的值。如果我让三条线路处于活动状态而第二条线路处于活动状态并且#34;也是活动的,然后函数ReadInputRegister不读取正确的值。也没有错误,但结果是错误的。

ET7018Z.ET7018Z ET18Z_A = new ET7018Z.ET7018Z();
string IP_ET7018Z = "192.168.100.110";
Res = ET18Z_A.Initialize(IP_ET7018Z, out Message);

//The next three lines open connection to a second module with different IP
//ET7018Z.ET7018Z ET18Z_B = new ET7018Z.ET7018Z();
//IP_ET7018Z = "192.168.100.210";
//Res = ET18Z_B.Initialize(IP_ET7018Z, out Message);

int AI_7018Z = 0
Res = ET18Z_A.ReadInputRegister(AI_7018Z, out Value, out Message);

Initialize函数如下所示:

public class ET7018Z
{
    static ModbusIpMaster master;

    public int Initialize(string IP, out string Message)
    {
        Message = "No Error";

        try
        {
            string ipAddress = IP;
            int tcpPort = 502;
            TcpClient tcpClient = new TcpClient(); 
            tcpClient.BeginConnect(ipAddress, tcpPort, null, null);
            master = ModbusIpMaster.CreateIp(tcpClient);
            Thread.Sleep(100); 

            string message = "";
            int Res = 0;
            Res = SetEngineeringFormat(CState.ON, out message);
            return 0;
        }
    }
}

这里有什么问题?

1 个答案:

答案 0 :(得分:0)

解决方法是删除此行中的“静态”:

静态ModbusIpMaster master;