//*********************************************************
// Labwindows/cvi8.5 RS232发送文件
// szlihongtao
// 2010-06-12
// 参照 王建新的<Labwindows/cvi测试技术及工程应用> page180
// 稍有改写
//*********************************************************
#include <ansi_c.h>
#include <utility.h>
#include <rs232.h>
#include <cvirte.h>
#include <userint.h>
#include "232.h"
//*********************************************************
static int byteswritten;
static char filename[MAX_FILENAME_LEN];
static char pathname[MAX_PATHNAME_LEN];
static int panelHandle;
int COM_Port;
//*********************************************************
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0)
return -1; /* out of memory */
if ((panelHandle = LoadPanel (0, "232.uir", PANEL)) < 0)
return -1;
COM_Port=1;
OpenComConfig (COM_Port, "", 57600, 1, 8, 1, 32767, 32767); //打开并配置串口Com1
SetComTime (COM_Port, 5.0); //设置通信超时时间
SetXMode (COM_Port, 0); //禁止串口软件握手
SetCTSMode (COM_Port, LWRS_HWHANDSHAKE_OFF); //禁止硬件握手
DisplayPanel (panelHandle);
RunUserInterface ();
DiscardPanel (panelHandle);
return 0;
}
//*********************************************************
// 发送文件名字
//*********************************************************
int CVICALLBACK sendfilename (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
int i;
switch (event)
{
case EVENT_COMMIT:
{
// 因为接收端的程序是以回车符作为文件名的结尾, 所以要加这句话
i=strlen(filename);
if ((filename[i-1]=='\r')
&& (filename=='\0'))
;
else
strcat (filename, "\r");
i=strlen(filename);
byteswritten = ComWrt (COM_Port, filename, i); //向Com1写入文件名字符串
SetCtrlAttribute (panel, PANEL_OKBUTTON_2, ATTR_DIMMED, 0);
break;
}
}
return 0;
}
//*********************************************************
int CVICALLBACK QuitCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
{
CloseCom (COM_Port); //关闭串口Com1
QuitUserInterface (0);
break;
}
}
return 0;
}
//*********************************************************
// 选择文件
//*********************************************************
int CVICALLBACK filesel (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
int selstatus;
switch (event)
{
case EVENT_COMMIT:
{
filename[0] = '\0'; // 字符串的结束符
selstatus = FileSelectPopup ("", "*.*", "*.*", "打开文件", VAL_LOAD_BUTTON, 0, 0, 1, 1, pathname);
if (selstatus >= 0)
{
SetCtrlVal (panelHandle, PANEL_STRING, pathname); // 显示完整的带有路径的文件名
SplitPath (pathname, NULL, NULL, filename); //获得文件名
}
break;
}
}
return 0;
}
//*********************************************************
int CVICALLBACK sendfile (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
int outputqueuelen;
switch (event)
{
case EVENT_COMMIT:
{
XModemConfig (COM_Port, 3.0, 3, 4.0, 1024);//设置串口Com1调制解调器参数
XModemSend (COM_Port, pathname); //设置从串口Com1发送文件数据
outputqueuelen = GetOutQLen (COM_Port); //获得串口Com1输出队列的字符串数目
if (outputqueuelen == 0)
MessagePopup ("文件传输", "文件传输完毕!");
else
MessagePopup ("文件传输", "过程有问题!");
break;
}
}
return 0;
}
//*********************************************************
//*********************************************************
//*********************************************************
用户1724215 2014-1-9 15:57