C#使用COM组件接口进行串口操作
2013-06-09 17:28
357 查看
C#使用COM组件接口进行串口操作
英创ARM9工控主板均提供了多个串口供客户进行通讯控制使用,包括标准的RS232和TTL电平的COM接口(经过简单的电平转换即可成为标准的RS232/RS485或者RS422)。由于英创ARM9嵌入式主板采用WinCE操作系统,很多客户都选择了界面友好、开发便利的C#语言(使用Visual Studio 2005.NET集成开发环境);在VS2005中,微软提供了一个标准的串口类SerialPort供客户使用,该串口类可以灵活方便地进行串口设置、收发等操作,英创也提供了基于该串口类的C#例程供客户参考。但是,微软所提供的串口类虽然方便灵活,但是没有提供RTS控制的功能,而客户在进行工业现场通讯的时候,往往是需要对RTS进行设置的。为了解决这个问题,英创公司现在提供了操作串口的COM组件接口;用户只需要在目标平台上进行组件注册,然后在C#程序开发的时候,对该COM组件添加引用,即可在程序里面自由地通过对象操作来使用函数。
注:英创提供的可以供C#开发使用的串口COM组件与eVC开发使用的串口COM组件在成员数据类型上有显著区别,不能互换使用。
下面我们就以EM9000嵌入式主板为实例,在C#使用COM组件接口进行串口操作作一个说明:
1、在目标嵌入式主板上进行COM组件注册
串口COM组件的核心文件就是英创提供的ComSerial.dll动态链接库文件,首先需要将它在目标嵌入式工控主板上注册。用户可以使用Visual Studio Remote Tools提供的“远程文件查看器”连接目标嵌入式工控主板,并将英创提供的ComSerial.dll和REGSVR32.exe这两个文件下载到目标主板的Flash存储器上去(这里假设下载到EM9000的Nor Flash)。然后在开发主机PC上使用Telnet连接目标工控主板(如图),进入放置刚才下载这两个文件的Flash存储器目录,运行:
REGSVR32 ComSerial.dll
即可完成COM组件注册。
2、在C#工程中添加COM组件引用
接下来可以进入C# COM组件开发。首先将ComSerial.dll文件复制到用户的C#工程目录下,然后在Visual Studio 2005.NET集成开发环境中打开用户工程。为了使用ISA总线COM组件,必须为该工程添加外部引用;用户可在集成开发环境的右侧的“解决方案资源管理器”中找到“引用”,对其单击鼠标右键,然后单击“添加引用”(如图)。
在弹出的“添加引用”对话框中,选择“浏览”选项卡,并在你的工程目录下找到你刚才复制过来的ComSerial.dll文件,选择它,并单击“确定”。
这时,你已经完成了添加工程中的COM组件的引用工作,这时,你可以在集成开发环境的右侧的“解决方案资源管理器”中看到了一个名称为COMSERIALLib的引用,同时,ComSerial.dll也加入到了你的工程中(如图)。
3、在应用程序开发中使用串口COM组件
首先,为了使应用程序能直接调用相关的类和函数,必须在程序的起始using语句中添加:
using COMSERIALLib;
程序中对于串口的操作完全围绕CoSerialClass这个类来进行的。用户需要首先定义这个类的对象实体,然后通过对对象里面的方法(函数)来进行所需要的操作。下面大致做一些讲解:
(1)定义类的对象
CoSerialClass COM_myserialPort = new CoSerialClass(); // 定义一个CoSerialClass串口类对象COM_myserialPort
(2)使用对象的方法函数
该串口类的对象实体主要包括四个函数和两个事件,下面我们着重就OpenPort、ClosePort、WritePort、ReadPort四个函数和OnRecieve事件进行举例说明(举例中所使用的类对象已经在上文中定义):
int OpenPort(uint portNo, uint baud, sbyte parity, uint dataBits, uint stopBits, uint rtsCtr);
打开串口函数,使用示例如下:
uint portNO = 1; // 串口1
uint myrate = 9600; // 波特率9600
COM_myserialPort.OpenPort(portNO, myrate, Convert.ToSByte('n'), 8, 1, RTS_CONTROL_TOGGLE);
// 参数依序:串口号、波特率、校验位(无)、数据位(8)、停止位(1)、RTS
注意RTS常数应该在程序开始就定义,我们一般做如下定义:
const uint RTS_CONTROL_DISABLE = 0x00;
const uint RTS_CONTROL_ENABLE = 0x01;
const uint RTS_CONTROL_HANDSHAKE = 0x02;
const uint RTS_CONTROL_TOGGLE = 0x03;
OnRecieve事件
我们可以利用COM组件提供的OnRecieve事件(当串口有数据收到的时候发生)来启动一个事件函数来读取串口数据。OnRecieve事件可以放在程序定义串口对象实例之后程序刚开始的某个地方:
COM_myserialPort.OnReceive + = new _ICoserialEvents_OnReceiveEventHandler (COM_myserialPort_OnReceive);
// 当串口有数据收到时,启动COM_myserialPort_OnReceive事件函数
byte ReadPort()
读取串口数据函数,往往在OnReceive事件函数里使用,注意该函数是一次读取一个byte,所以一次需要将数据读取完毕(结束标志为0xff)。使用示例如下:
private void COM_myserialPort_OnReceive() // 串口有数据收到
{
byte recieved_byte = 0;
byte[] RCV_bytes = new byte[1024];
int i=0;
for (i=0;i<1024;i++ )
{
recieved_byte = COM_myserialPort.ReadPort();
if (recieved_byte == 0xff) break;
RCV_bytes[i] = recieved_byte;
}
// 此处可对收到的数据进行进一步处理
}
int WritePort(int elems, byte[] buf);
发送串口数据函数,使用示例如下:
byte[] sendbytemessage = Encoding.Default.GetBytes(textBox1.Text); // 将某文本框数据转为byte数组
COM_myserialPort.WritePort(sendbytemessage.Length, sendbytemessage); // 发送
void ClosePort();
关闭串口函数,直接使用即可关闭串口。
用户还可以参考英创提供的C#串口COM组件例程,进行实际的应用开发。
英创ARM9工控主板均提供了多个串口供客户进行通讯控制使用,包括标准的RS232和TTL电平的COM接口(经过简单的电平转换即可成为标准的RS232/RS485或者RS422)。由于英创ARM9嵌入式主板采用WinCE操作系统,很多客户都选择了界面友好、开发便利的C#语言(使用Visual Studio 2005.NET集成开发环境);在VS2005中,微软提供了一个标准的串口类SerialPort供客户使用,该串口类可以灵活方便地进行串口设置、收发等操作,英创也提供了基于该串口类的C#例程供客户参考。但是,微软所提供的串口类虽然方便灵活,但是没有提供RTS控制的功能,而客户在进行工业现场通讯的时候,往往是需要对RTS进行设置的。为了解决这个问题,英创公司现在提供了操作串口的COM组件接口;用户只需要在目标平台上进行组件注册,然后在C#程序开发的时候,对该COM组件添加引用,即可在程序里面自由地通过对象操作来使用函数。
注:英创提供的可以供C#开发使用的串口COM组件与eVC开发使用的串口COM组件在成员数据类型上有显著区别,不能互换使用。
下面我们就以EM9000嵌入式主板为实例,在C#使用COM组件接口进行串口操作作一个说明:
1、在目标嵌入式主板上进行COM组件注册
串口COM组件的核心文件就是英创提供的ComSerial.dll动态链接库文件,首先需要将它在目标嵌入式工控主板上注册。用户可以使用Visual Studio Remote Tools提供的“远程文件查看器”连接目标嵌入式工控主板,并将英创提供的ComSerial.dll和REGSVR32.exe这两个文件下载到目标主板的Flash存储器上去(这里假设下载到EM9000的Nor Flash)。然后在开发主机PC上使用Telnet连接目标工控主板(如图),进入放置刚才下载这两个文件的Flash存储器目录,运行:
REGSVR32 ComSerial.dll
即可完成COM组件注册。
2、在C#工程中添加COM组件引用
接下来可以进入C# COM组件开发。首先将ComSerial.dll文件复制到用户的C#工程目录下,然后在Visual Studio 2005.NET集成开发环境中打开用户工程。为了使用ISA总线COM组件,必须为该工程添加外部引用;用户可在集成开发环境的右侧的“解决方案资源管理器”中找到“引用”,对其单击鼠标右键,然后单击“添加引用”(如图)。
在弹出的“添加引用”对话框中,选择“浏览”选项卡,并在你的工程目录下找到你刚才复制过来的ComSerial.dll文件,选择它,并单击“确定”。
这时,你已经完成了添加工程中的COM组件的引用工作,这时,你可以在集成开发环境的右侧的“解决方案资源管理器”中看到了一个名称为COMSERIALLib的引用,同时,ComSerial.dll也加入到了你的工程中(如图)。
3、在应用程序开发中使用串口COM组件
首先,为了使应用程序能直接调用相关的类和函数,必须在程序的起始using语句中添加:
using COMSERIALLib;
程序中对于串口的操作完全围绕CoSerialClass这个类来进行的。用户需要首先定义这个类的对象实体,然后通过对对象里面的方法(函数)来进行所需要的操作。下面大致做一些讲解:
(1)定义类的对象
CoSerialClass COM_myserialPort = new CoSerialClass(); // 定义一个CoSerialClass串口类对象COM_myserialPort
(2)使用对象的方法函数
该串口类的对象实体主要包括四个函数和两个事件,下面我们着重就OpenPort、ClosePort、WritePort、ReadPort四个函数和OnRecieve事件进行举例说明(举例中所使用的类对象已经在上文中定义):
int OpenPort(uint portNo, uint baud, sbyte parity, uint dataBits, uint stopBits, uint rtsCtr);
打开串口函数,使用示例如下:
uint portNO = 1; // 串口1
uint myrate = 9600; // 波特率9600
COM_myserialPort.OpenPort(portNO, myrate, Convert.ToSByte('n'), 8, 1, RTS_CONTROL_TOGGLE);
// 参数依序:串口号、波特率、校验位(无)、数据位(8)、停止位(1)、RTS
注意RTS常数应该在程序开始就定义,我们一般做如下定义:
const uint RTS_CONTROL_DISABLE = 0x00;
const uint RTS_CONTROL_ENABLE = 0x01;
const uint RTS_CONTROL_HANDSHAKE = 0x02;
const uint RTS_CONTROL_TOGGLE = 0x03;
OnRecieve事件
我们可以利用COM组件提供的OnRecieve事件(当串口有数据收到的时候发生)来启动一个事件函数来读取串口数据。OnRecieve事件可以放在程序定义串口对象实例之后程序刚开始的某个地方:
COM_myserialPort.OnReceive + = new _ICoserialEvents_OnReceiveEventHandler (COM_myserialPort_OnReceive);
// 当串口有数据收到时,启动COM_myserialPort_OnReceive事件函数
byte ReadPort()
读取串口数据函数,往往在OnReceive事件函数里使用,注意该函数是一次读取一个byte,所以一次需要将数据读取完毕(结束标志为0xff)。使用示例如下:
private void COM_myserialPort_OnReceive() // 串口有数据收到
{
byte recieved_byte = 0;
byte[] RCV_bytes = new byte[1024];
int i=0;
for (i=0;i<1024;i++ )
{
recieved_byte = COM_myserialPort.ReadPort();
if (recieved_byte == 0xff) break;
RCV_bytes[i] = recieved_byte;
}
// 此处可对收到的数据进行进一步处理
}
int WritePort(int elems, byte[] buf);
发送串口数据函数,使用示例如下:
byte[] sendbytemessage = Encoding.Default.GetBytes(textBox1.Text); // 将某文本框数据转为byte数组
COM_myserialPort.WritePort(sendbytemessage.Length, sendbytemessage); // 发送
void ClosePort();
关闭串口函数,直接使用即可关闭串口。
用户还可以参考英创提供的C#串口COM组件例程,进行实际的应用开发。
相关文章推荐
- Oracle 远程访问配置 在 Windows Forms 和 WPF 应用中使用 FontAwesome 图标 C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素” C#[Win32&WinCE&WM]应用程序只能运行一个实例:MutexHelper Decimal类型截取保留N位小数向上取, Decimal类型截取保留N位小数并且不进行四舍五入操作
- C# 中使用Word文档对图像进行操作
- 在使用C#调用COM组件操作Excel的时候阻止其他程序对此文件操作
- 从C#到Objective-C,循序渐进学习苹果开发(7)--使用FMDB对Sqlite数据库进行操作
- 如何使用C#对虚拟磁盘文件(VHD)进行操作
- 使用C#和Excel进行报表开发(二)-操作统计图(Chart)
- C#中使用API(SHFileOperation)进行文件操作,特别说明了回收站相关参数
- 使用C#对MongoDB中的数据进行查询,改动等操作
- C#中使用Char类中的方法对字符进行各种操作,判断是否为字母、数字、标点符号、分隔符或空白。
- 使用C#和Excel进行报表开发(二)-操作统计图(Chart)
- 使用C#对XML进行增删改查操作 收藏
- C#调用Geos的C函数接口进行空间拓扑操作
- C#中使用seriport和单片机进行串口长数据收发不全,解决办法
- 在C#中使用mysql进行插入操作的流程
- C#通过COM组件操作IE浏览器(二):使用IHTMLDocument3完成登录
- C#串口操作的使用浅析
- 使用VS(C#) 对Mysql 进行操作
- 使用C#和Excel进行报表开发(五)-操作单元格边框和颜色
- C# 中使用Word文档对图像进行操作
- 技术文档-使用C#进行E-Mail的收发操作