BCB 串口控件的使用 TComm
2024-08-29 14:47:23
昨天工作用到了串口通信,MMP的,昨天懵逼了一下午,今天终于整通了,身为菜鸟,大师们是不懂这些心痛的。
进入主题:使用BCB提供的控件TComm编程方便且简单,TComm位于System分类里面。 / /备注(网友说这种方式可以用,当要求高的时候还是不够用的。)
1、窗口拖入一个TComm控件
2、属性框参数设置。
/ /备注(常需设置的参数:CommName串口名 、BaudRate波特率、ByteSize、Parity校验、ReadIntervalTimeout读串口时两字符时间间隔)
3、接收数据并处理
BCB提供了 OnReceiveData()自动接收来自串口的数据
//备注(typedef void* Pointer;//标准定义的
void __fastcall cm1ReceiveData(TObject *Sender, Pointer Buffer, // Buffer存放着读取的数据
WORD BufferLength); //Bufferlength 存放着 读取的数据的长度
4、发送数据
用串口对象调用写数据函数
function TComm.WriteCommData( pDataToWrite: PChar; dwSizeofDataToWrite: Word ): Boolean; // 参数一:发送的数据;参数二:发送的数据的长度
5、具体使用串口
TComm * cm1;
//1、打开串口
try
{
cm1->StartComm(); //函数会让程序挂掉,不知道为什么 try catch可规避,不影响使用
CM1PortOpenSucccessFlag=true;
}
catch(...)
{
m_step = -;
//Application->MessageBoxA("OK","串口打开失败",MB_OK|MB_SYSTEMMODAL);
} //2、发送的数据
char * cmd;
cmd="MCH\r\n"; //注意:命令MCH末尾要跟着\r\n不然串口不回数据,至于为什么,各位开脑洞吧
bool rtn = cm1->WriteCommData(cmd,strlen(cmd)); //注意:第二个参数如果按照函数定义那样用sizeof函数是有问题的,sizeof求的是所占空间,而不是字符个数 //3、睡眠等待Sleep(500);
发送数据后,接着要使用cm1ReceiveData串口返回的数据,需要等待一些时间。如果不等待,一直不等的 writeCommData将会出错。 //4、接收函数(自动接收)
void __fastcall TparaForm::cm1ReceiveData(TObject *Sender, Pointer Buffer,
WORD BufferLength)
{
char recvData[100];
unsigned char revBuffer[100];
memset(recvData, 0, 100);
//AnsiString str;
for(int i=0; i<BufferLength; i++, ((BYTE *)Buffer)++)
{
revBuffer[i] = *(BYTE *)Buffer ;
recvData[i] = revBuffer[i];
}
//得到char* 的recvData接收数据之后,根据需要使用,下面是个例子
m_readData=recvData; //成员变量
m_readDataLength=BufferLength;
} //5、使用完,关闭串口
cm1->StopComm();
工作小助攻:AccessPort串口监视软件 易学易用
参考链接:http://www.myexception.cn/h/530898.html(串口各项参数解释)
https://bbs.csdn.net/topics/310121049(串口监视工具)
https://blog.csdn.net/Tercel99/article/details/46690921(这个详细)
http://ascii.911cha.com/(Ascii值对照表)
http://www.cnblogs.com/azbane/p/8710064.html(AnsiString与各种数据类型间的相互转换)
棒棒哒~~么么哒
最新文章
- 虚基类&;虚继承
- Java关键字this、super使用总结
- Codeforces Round #213 (Div. 2) A. Good Number
- COJ978 WZJ的数据结构(负二十二)
- Floating Action Button(漂浮按钮)
- FindMe
- apache开源项目--Derby
- 各种Adapter的用法
- Thinkphp入门 四 —布局、缓存、系统变量 (48)
- Trufun云端建模平台之云端UML工具发布
- testing and SQA_动态白盒測试
- Dubbo介绍和服务架构分析
- 理解Golang哈希表Map的元素
- [译]RabbitMQ教程C#版 - 主题
- Codeforces 986C AND Graph dfs
- [No0000DD]C# StringEx 扩展字符串类 类封装
- legend2---开发日志8(thinkphp和vue如何配合才能达到最优)
- 软件测试----H模型
- 日志收集之--将Kafka数据导入elasticsearch
- SetCommMask
热门文章
- C# 调用存储过程出错:String[3]: Size 属性具有无效大小值 0
- 题目1454:Piggy-Bank(完全背包问题)
- Word插入htm文件导致文本域动态增加的一个问题
- window7下 cocos2dx android交叉编译环境部署小结
- .net C#中页面之间传值传参的六种方法
- 23种设计模式之代理模式(Proxy)
- vim与终端的切换
- iOS - APP审核Guideline 2.5.1被拒,使用了私有API
- python之接口
- yii---进行增删改查