英创信息技术C#使用COM组件接口进行串口操作介绍

网友投稿 326 2022-11-08

英创信息技术C#使用COM组件接口进行串口操作介绍

注:英创提供的可以供C#开发使用的串口COM组件与eVC开发使用的串口COM组件在成员数据类型上有显著区别,不能互换使用。

下面我们就以EM9000嵌入式主板为实例,在C#使用COM组件接口进行串口操作作一个说明:

1、在目标嵌入式主板上进行COM组件注册

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)使用对象的方法函数

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组件例程,进行实际的应用开发。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:爱奇艺技术沙龙——云架构及AI深度学习平台实践与应用
下一篇:爱奇艺个性化推荐排序实践
相关文章

 发表评论

暂时没有评论,来抢沙发吧~