初始化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);
}
}
文章评论(0条评论)
登录后参与讨论