急需解决在cvi使用中遇到的几个问题
1、CVI运行界面点击最大化按钮后,面板上的控件没有相应的变大感觉很不协调,怎么办呢?2、数组元素是用科学计数法表示的浮点数,无法画图用什么函数可以将其转化成一般形式的浮点数呢?
3、串口通信不稳定,数据有时可以收到有时不可以,确定硬件没有问题,软件也单步调试过,可问题究竟在那呢?
//串口发送数据
int CVICALLBACK SendCom (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
char data={0};
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal(rs232pc,RS232COMMU_SENDTEXTBOX,data);
FlushOutQ(comindex);
FlushInQ(comindex);
status=ComWrt(comindex,data,strlen(data));
if(status!=strlen(data))
MessagePopup("Error","Send data failed!");
break;
}
return 0;
}
//串口读取数据
int CVICALLBACK ReadData (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
char data={0};
int strLen;
switch (event)
{
case EVENT_COMMIT:
strLen=GetInQLen(comindex);
status=ComRd (comindex, data, strLen);
//读取数据是否成功
if(status<0)
{
//读取数据失败,显示出错信息并退出
MessagePopup ("Error", "Read data failed!");
break;
}
//将读取的数据显示在TEXTBOX控件中
ResetTextBox(rs232pc, RS232COMMU_RECEIVETEXTBOX , data);
SetActiveCtrl(rs232pc,RS232COMMU_RECEIVETEXTBOX);
FlushInQ(comindex);
break;
}
return 0;
} 1,如果这个必要性不是太大的话最好不要用,如果要做的话可以尝试一下这个,双击面板,然后从other attribute里面勾选上scale contents on resize,这样试试!
2,您试一下看这个画图控件的数据形式改一下,因为数组和它不匹配!
3,数组您这样接收相当于扫描,您尝试用事件,installcomevent(),名字大概是如此,自动用事件接收的!
祝您好运! 我也初学CVI,没看懂第二个问题,为什么数组元素和画图有关那,是用到Graph控件画曲线图么,
回复 #2 cpubbs 的帖子
1、FlushInQ(comindex);为什么无法清空输入队列呢;
2、有时不往串口发送数据也仍然能读回数据,不知为何? 1,是可以清除的,是不是清理后又有收到呢?建议用事件会比较好呢兄弟!这样它会自动接收的!
2,可能跟1这个问题有关系!
回复 #5 cpubbs 的帖子
第一个问题可能与我连接的仪器有关在第一次启动时总是不断的送数据
与技术支持交流过,他们说没遇到这样的问题. 有没有断线,比如地线有没有断呢?如果有其他地方破到的话,可能会收到一些乱七八糟的东西的!
回复 #7 cpubbs 的帖子
两台机子用串口连起来后可以正常通信所以断定没有断线
同时受到的数据不是乱七八糟的而是最后一次操作返回的正确数据 还是建议用事件函数会比较方便,您这种情况我没有试过,我一直用事件的! 原帖由 lyq 于 2007-2-7 17:55 发表
第一个问题可能与我连接的仪器有关
在第一次启动时总是不断的送数据
与技术支持交流过,他们说没遇到这样的问题.
给技术支持打电话时,我们的 CVI是正版6.0的,但是技术支持只对7.1以上提供咨询,要咨询则需要提供序列号,朋友可以共享下序列号吗,否则我们无法获取技术支持~~~~`
回复 #10 yufuwan 的帖子
我说的技术支持是设备方的不是CVI的
我用的CVI都是从网上下的呢非正版
回复 #9 cpubbs 的帖子
想实现的功能如下:1、按下某一按钮开始与串口连接进行,
同时InstallComCalback()(是这个函数吗?)
int InstallComCallback (int COMPort, int eventMask, int notifyCount, int eventCharacter, ComCallbackPtr callbackPtr, void *callbackData);
l2、然后用定时器每隔一秒发送一个命令(仪器收到命令会送出数据)
3、我想每次获取20个字符,所以变量的值如下:
eventMask=LWRS_RXFLAG;
notifyCount=20;
eventCharacter=20;
4、用void ComCallback(int COMport, int eventMask, void *callbackdata)
对接受的数据进行相应的处理
你看看有什么地方不对呢?
希望尽快得到您的答复,谢谢! InstallComCalback()这个是的!您可以尝试一下看对不对!在CVI中有相应的串口的例子,您可以搜索一下串口的例子,它里面有用到这个函数的!您上面是20字节,这样配置是对的!eventMask=LWRS_RXFLAG这个我一下子记不太清楚了,好像有一个接收的,在它的右击HELP里面有显示一个事件类型的! http://www.cpubbs.com/bbs/viewthread.php?tid=14148&highlight=%B9%D8%D3%DA%B4%AE%BF%DA%CD%A8%D0%C5%B5%C4%D2%BB%CE%CA%CC%E2
上面地址里的问题我今天也遇到了
怎么解决呢? 受教了!!!!!!!!!!!!!!!!!
页:
[1]
2