Victor串口控件的使用

qq_18214415 2018-07-30 09:35:02
我采用victor控件从驱动器(下位机)接收数据,然后把数据画成波形,因为数据返回的数据很快,现在victor不能接受到下位机的数据,前面有速度不快的指令,收发是正常的,但是后面的数据速度很快,一直收不到,我最开始是在一个线程里面接收的,但是不可以,后面我改成在一个定时器里面,每隔5ms从缓冲里面读取一次,但是仍然不可以,下位机每帧数据是十个字节的数据。
...全文
646 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
这样的数据利用控件自动解析数据包的方法不适用,需要自己按照通讯协议解析数据,换哪个控件都一样
hongss 2018-08-03
  • 打赏
  • 举报
回复
以前是这么用的,供参考


int buff[200];//声明一个存储接收数据的缓冲区,全局变量

int ByteNum;//收到的字节数
int BuffPtr;//接收缓冲区的指针,请声明为全局变量,
OleVariant RxBuff;//一个用于接收的OleVariant变量。

if(MSComm1-> InBuffCount>0)RxBuff=Communica1->Input;//如果缓冲区有多于一个字节的数据
ByteNum=RxBuff.ArrayHighBound(1);//将实际读的字节数取出
for(int i=0;i<=ByteNum;i++)
{
buff[BuffPtr++]=RxBuff.GetElement(i);//将接收数据读入自己的缓冲区。
}
qq_18214415 2018-07-31
  • 打赏
  • 举报
回复
引用 7 楼 hongss 的回复:
直接按字符串读进来,再解析

请问这么写有什么错误?
void __fastcall TForm3::Timer1Timer(TObject *Sender)
{
unsigned char buf[8] ={0};
AnsiString str;
int count=MSComm1->InBufferCount; //字节数;
OleVariant rec = MSComm1->Input; //取出接收缓冲器内容;
char m = rec.GetElement(count-1);//测试发现这一句不对
for(int j=0;j<count; j = j+8)
{

for(int m =0;m<8;m++)
{
if(8*j+m>=count)
break;
buf[m] = rec.GetElement(j*8+m); //转换成字节类型
}
}
}
测试的那一句发现有错,我在循环里面加一个static变量,也发现循环的次数小于字节数count
hongss 2018-07-31
  • 打赏
  • 举报
回复
直接按字符串读进来,再解析
titan_ysl 2018-07-30
  • 打赏
  • 举报
回复
1.接收数据建议在控件的1 OnPackage 事件里写。
2.对方发来的数据即使是一次发一帧、八个字节,但在接收时,也可能会出现接收到不完整的一帧的情况,所以你在处理时,要对剩余数据不足一帧的情况进行处理。
qq_18214415 2018-07-30
  • 打赏
  • 举报
回复
求帮助谢谢大家
qq_18214415 2018-07-30
  • 打赏
  • 举报
回复
我现在改用了TComm控件,请问八字节的16进制数据接收应该怎么写呢?
qq_18214415 2018-07-30
  • 打赏
  • 举报
回复
上面一个地方打错了,每帧数据是八个字节
qq_18214415 2018-07-30
  • 打赏
  • 举报
回复
qq_18214415 2018-07-30
  • 打赏
  • 举报
回复
引用 4 楼 titan_ysl 的回复:
1.接收数据建议在控件的1 OnPackage 事件里写。
2.对方发来的数据即使是一次发一帧、八个字节,但在接收时,也可能会出现接收到不完整的一帧的情况,所以你在处理时,要对剩余数据不足一帧的情况进行处理。
OnPackage 事件有时间间隔,我数据发的很快,OnPackage 基本是进不去的
Victor 串口 VCL 控件,版本 1.5.0.1 for C++ Builder 2010 / 2009 Victor 串口 VCL 控件,版本 1.3.3.5 for BCB 5 & BCB 6 简单实用, 功能强大的 C++ Builder 串口控件! 本控件是免费的, 不需要注册! 2010年1月20日发布 1.5.0.1 版本 (适用于C++ Builder 2010 / 2009) 这个版本是针对 C++ Builder 2010 / 2009 开发的版本,不能用在以往版本的 C++ Builder。 使用之前请先阅读下载压缩包里面的 readme.txt 【控件安装方法】 1.在 C++ Builder 2010 / 2009 里面打开 VictorComm.groupproj 工程组,编译所有工程, 即分别编译 VictorComm32.cbproj 和 VictorCommDesign.cbproj 工程 2.安装编译生成的 VictorCommDesign.bpl 设计期控件包 3.要注意操作系统的 PATH 环境变量,如果是 C++ Builder 2010,控件 *.bpl 不在操作系统 PATH 搜索路径里面,可能会无法安装控件 注意:默认情况下,在 Windows XP 里,C++ Builder 编译生成的控件放在了 C:\Documents and Settings\All Users\Documents\RAD Studio\x.0\BPL 和 C:\Documents and Settings\All Users\Documents\RAD Studio\x.0\DCP 这两个文件夹里面,如果是 Windows Vista / Windows 7 将放在 c:\Users\Public\Documents\RAD Studio\x.0\BPL 文件夹 在使用上,C++ Builder 菜单: Project->Options->Directories/Conditionals Include Path 和 Library Path 都要添上安装路径(包含*.h和*.lib的文件夹) ①Include Path 右面的“…”按钮,添加包含控件文件的文件夹 ②Library Path 右面的“…”按钮,添加包含控件文件的文件夹 【示例程序】 压缩包里面的 Examples 文件夹里面包含了9个常用的示例程序。

703

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder ActiveX/COM/DCOM
社区管理员
  • ActiveX/COM/DCOM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧