原创 C#环境下 串口转以太网NPORT使用笔记 2

2011-3-1 17:06 4352 7 7 分类: 通信

初始化NPORT之后就可以尝试打开NPORT了,NPORT的nsio_open有三个参数,在打开之前首先需要设定NPORT的IP地址,使得NPORT可以正常的连接到调试的PC机,说的简单点就需要在同一个局域网中,设定的工具就是摩莎的NPORT Administration,接着就是一个PortIndex参数,如果操作的是第一个串口设定为1,如果设定的第二个串口则设定2。以此类推,最后就是一个超时时间的设置,这个保留一个默认值就可以了,一般设定3000毫秒。调用nsio_open这个函数返回一个非常重要的参数,这个参数名为PortID,得到这个参数后应该保留,调用读写命令的时候还会用到PortID参数,所以我把它作为窗体类的字段,说的明白点就是一个“全局变量”。为了防止意外,使用try catch语句打开或者关闭NPORT。具体的代码如下:


private void buttonOpen_Click(object sender, EventArgs e)


{


string serverIP = textBoxServerIP.Text;


int portIndex = Convert.ToInt32(textBoxPortIndex.Text);


    try


    {


        //打开NPORT


        portID = NPORT.nsio_open(serverIP, portIndex, 3000);


        //若返回值不小于0,打开成功


        if (portID >= 0)


        {


            MessageBox.Show("NPORT打开成功" + Environment.NewLine


                             + "portID  = " + portID.ToString(), "NPOR操作提示");


           //禁能打开按钮


           buttonOpen.Enabled = false;


           //使能关闭按钮


           buttonClose.Enabled = true;


        }


        else


        {


            MessageBox.Show("NPORT打开失败" + Environment.NewLine


                             + "错误代码 " + portID.ToString(), "NPOR操作提示");       


}


}


catch (System.Exception ex)


{


MessageBox.Show(ex.Message, "NPOR操作提示");


}


}


       如果获得的PortID参数不小于0,那么NPORT打开正常,如果返回负数的话就说明打开存在问题,根据返回值对参照NPORT的说明书寻找答案。


       关闭NPORT的事件和上面的相似,为了更方便地编程,我在IPSeria命名空间下加入了错误代码,错误代码为C#的枚举类型,而这个C#的枚举型被定义为了int型,可以通过强制类型转换和C#的整数相比较,例如returnValue == (int)ReturnCode.NSIO_OK。IPSeria命名空间下加入如下代码:


       //枚举体,错误代码


    enum ReturnCode:int


    {


        NSIO_OK = 0,


        NSIO_BADPORT = -1,


        NSIO_BADPARM = -2,


        NSIO_THREAD_ERR = -3,


        NSIO_MEMALLOCERR = -4,


        NSIO_INVALID_PASSWORD = -100,


        NSIO_RESET_TIMEOUT = -101,


        NSIO_NOT_ALIVE = -102,


        NSIO_CONNECT_FAIL = -200,


        NSIO_SOCK_INIT_FAIL = -201,


        NSIO_SOCK_ERR = -202,


        NSIO_TIMEOUT = -203


}


    关闭按钮单击事件的函数代码如下:


private void buttonClose_Click(object sender, EventArgs e)


{


//调用close函数


    int returnValue = NPORT.nsio_close(portID);


    if (returnValue == (int)ReturnCode.NSIO_OK)


    {


        MessageBox.Show("NPORT关闭成功", "NPOR操作提示");


        //使能能打开按钮


        buttonOpen.Enabled = true;


        //禁能关闭按钮


        buttonClose.Enabled = false;


}


else


{


MessageBox.Show("NPORT关闭失败", "NPOR操作提示"


,MessageBoxButtons.OK,MessageBoxIcon.Error);


   }


}3c9cb8b8-03d3-4e83-b99e-c261706ae12b.jpg1d002fa4-7956-43fd-bf29-f9b262e4b969.jpg597a6881-233f-40f8-b7cf-a09237434ab5.jpg

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条