1、buffer的数据类型是什么?——如果要我猜的话,它应该是char(?)
2、你的单片机中有double型吗?它在下位机中占几个字节?
3、Fmt (&value, "%f<%s", charmatched); 在这里就转换,只能得到错误结果!
4、PlotY(PANEL, PANEL_GRAPH, valuebuf, 2048, VAL_INTEGER, VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED); 这里编译就通不过:因为valuebuf和VAL_INTEGER类型不匹配!
回答: 1.没错,是char型。
2.没有double型,只是发送八位的二进制数,串口调试软件接收到的是2E 68 98之类的数。
3.我知道转换的结果是错误的,而且数据错得很离谱,但是就是不知道该怎么样修改,因为是初学者,很多都不会。
4.那是我写错而已。
#include "toolbox.h"
#include <rs232.h>
#include <formatio.h>
#include <cvirte.h>
#include <userint.h>
#include "test_win.h"
static int panelHandle;
int valuebuf[2048];
char buffer[2048];
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0)
return -1; /* out of memory */
if ((panelHandle = LoadPanel (0, "test_win.uir", PANEL)) < 0)
return -1;
DisplayPanel (panelHandle);
RunUserInterface ();
DiscardPanel (panelHandle);
return 0;
}
int CVICALLBACK Graph (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
PlotY (PANEL, PANEL_GRAPH, valuebuf, 2048, VAL_INTEGER, VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
break;
}
return 0;
}
int CVICALLBACK Receive (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
int inputqueuelength;
int bytesread;
char *matched=0 ;
int value;
int i;
switch (event)
{
case EVENT_COMMIT:
//获得指定端口输入队列字符数
inputqueuelength = GetInQLen (1);
//读取输入队列中字符串
bytesread = ComRd (1, buffer, inputqueuelength);
for (i = 0; i <= bytesread; i ++)
{
matched = buffer+1+i;
//将字符串格式数据转化为双精度格式
Fmt (&value, "%d<%s", matched);
valuebuf[i]=value;
}
break;
}
return 0;
}
/*int CVICALLBACK Clear (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
// ResetTextBox (PANEL, PANEL_RECEIVETEXT, "\0");
break;
}
return 0;
} */
int CVICALLBACK Reset (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
OpenComConfig (1, "COM1", 9600, 0, 8, 1, 2048, 2048);
SetCTSMode (1, LWRS_HWHANDSHAKE_OFF);
FlushInQ (1);
FlushOutQ (1);
break;
}
return 0;
}
int CVICALLBACK Quit (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
CloseCom (1);
QuitUserInterface (0);
break;
}
return 0;
} |