串口数据的传输(100分)

  • 主题发起人 主题发起人 RWXXX2000
  • 开始时间 开始时间
R

RWXXX2000

Unregistered / Unconfirmed
GUEST, unregistred user!
我用vb的控件mscomm做毕业设计,需传输二进制数据,但不知如何执行,望大家帮忙!!!!我的意思是按二进制数据格式传输数据按字节传输
我的邮箱是rwxxx@sohu.com!!
谢谢!
 
1.用"串口"作关键词查找一下!已经有很多解答了.
1.用"串口"作关键词查找一下!已经有很多解答了.

2.很久以前作的BCB代码:
MSComm控件的inputmode属性必须设置为1,二进制输入,其它视实际情况而定
2.1.发送二进制数据
OleVariant TROle;
int Bounds[2] = {0,Num}; //发送长度为Num字节的数据
TROle = VarArrayCreate(Bounds,1,varByte);
TROle.PutElement(0x55,0);//写入待发送的数据
TROle.PutElement(0xaa,1);
...
TROle.PutElement(0x55,Num-1);//从0~Num-1共Num字节
MSComm1->Output = TROle; //发送
2.2.接收二进制数据,在MSComm控件的OnComm事件中接收
unsigned char RecC[4]; //这个例子收到的数据为4个字节长
OleVariant TKOle;
TKOle = MSComm1->Input;
RecC[0] = TKOle.getelement[0];
RecC[1] = TKOle.getelement[1];
RecC[2] = TKOle.getelement[2];
RecC[3] = TKOle.getelement[3];
char TKStr[10];
sprintf(TKStr,"%2x%2x%2x%2x",ret[0],ret[1],ret[2],ret[3]);
Edit2->Text = TKStr; //这是调试时看收到的数据用的

3.建议采用VCL元件或者API函数进行串口通信

 
我查过了,但未找到有用的东西!我要找可以进行以二进制形式传输字符的函数,不知有没有,vb中有的!并且如何实现???
 
2.1.发送二进制数据
OleVariant TROle;
int Bounds[2] = {0,Num}; //发送长度为Num字节的数据
TROle = VarArrayCreate(Bounds,1,varByte);
//以上代码定义一个一维的长度为Num字节的变体数组
//以下代码依次把二进制字符/数据赋给这个变体数组,
//从0~Num-1共Num字节
TROle.PutElement(0x55,0);//第一个数据
TROle.PutElement(0xaa,1);//第二个数据
...
TROle.PutElement(0x55,Num-1);//第Num个数据,

MSComm1->Output = TROle; //发送数据
 
但这个程序无法传送实型数据,不知该如何做???
 
你可以自己定义传输数据的格式,例如定义实型数据为1位符号位+3位整数+1个小数点符号+3位小数
发送的时候把数据补零发送,如-19.34转换成为-,0,1,9,.,3,4,0的八位序列即可发送,
接收的时候再把数据转换回实型数据
unsigned char RecC[8]; //也可以用Byte类型
OleVariant TKOle;
TKOle = MSComm1->Input;
for (int i=0;i<8;i++0
RecC = TKOle.getelement;

double realdata=0.;
realdata = RecC[1]*100+RecC[2]*10+RecC[3]+RecC[5]*0.1+RecC[6]*0.01+RecC[7]*0.001;
if (RecC[0]==xx) //负数,自己定义的标志常数
realdata=-realdata;
 
用API函数READFILE,WRITEFILE,按字节发送应该可以实现。
比如说,要发送一个二进制文件,可以把文件按FILE OF BYTE方式打开,
再按字节的读,按字节发送。
 
接受答案了.
 
后退
顶部