生成的comtrade.dat文件问题,波形分析软件打开看点是乱的?

Thirty 2012-12-20 10:54:46
将连续的采样数据写成comtrade文件,数据类型是short int ,只有1个通道的数据,保证数据都没有问题(从波形看是正弦的),但是生成的dat文件用波形分析工具打开看是杂乱的,大家帮我看下。

先发一个生成的CFG文件内容:

STATION,TEST,1997
1,1A,0D
1,电流1,,1,A,1.000000,0.000000,0.000000,-32767,32767,1.00000,1.00000,p
50
1
4000,64991
14/12/2012,04:46:40.000000
14/12/2012,04:46:40.000000
BINARY
1

生成dat文件的代码:


char converInput[256];
int mycomtrade_build_dat(DATETYPE *date,char *channelName,short int data[][SVAEFILELEN],int id,int samplelen)
{
char datName[100]={0},datContex[100];
FILE *fp;
int i,writelen;
unsigned int iLoop, tmp_u32, bufferLength, dataLength;
unsigned short int tmp_u16,chlNum,chlIndex;

if(date==NULL || channelName==NULL || samplelen<0)
return 1;
sprintf(datName,"%s_%04d%02d%02d_%02d%02d%02d.dat",channelName,\
date->Year,date->Month,date->Date,date->Hour,date->Minute,date->Msecond);
fp=fopen(datName,"w");//这里的文件名均没有问题
if(fp==NULL)
{
zz("%s生成失败\n",datName);
return 1;
}
memset( converInput, 0, sizeof(converInput) );
bufferLength=0;
dataLength = samplelen;
for( iLoop=0; iLoop< dataLength; iLoop++ )
{
//写dat文件
// 序号4,时标微秒4,2字节数据
//4字节序号
tmp_u32 = iLoop;
memcpy(converInput+bufferLength, &tmp_u32, 4 ); bufferLength += 4;
//4字节时标(微秒单位)
tmp_u32 = iLoop * 250 ;
memcpy(converInput+bufferLength, &tmp_u32, 4 ); bufferLength += 4;
///写2字节数据:交换高低字节顺序
tmp_u16 = data[id][iLoop];
memcpy(converInput+bufferLength, &tmp_u16, 2 ); bufferLength += 2;

//每组写一次,还是固定长度写一次
if( bufferLength > 100 )
{
//写一组数据
fwrite( converInput, bufferLength, 1, fp );
bufferLength = 0;
memset( converInput, 0, sizeof(converInput) );
}
}
if( bufferLength > 100 )
{
fwrite( converInput, bufferLength, 1, fp );
bufferLength = 0;
}
fclose(fp);
}

...全文
470 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
东大坡居士 2012-12-20
  • 打赏
  • 举报
回复
congratulations!
Thirty 2012-12-20
  • 打赏
  • 举报
回复
找到问题了,创建文件 w->wb
Thirty 2012-12-20
  • 打赏
  • 举报
回复
大家帮我看一下生成dat的代码,指导一下,谢了。
prajna 2012-12-20
  • 打赏
  • 举报
回复
zz( 退出
Thirty 2012-12-20
  • 打赏
  • 举报
回复
谢谢,我了解一下,上面的代码为了实现胡乱写的,
赵4老师 2012-12-20
  • 打赏
  • 举报
回复
引用 2 楼 jackyid 的回复:
找到问题了,创建文件 w->wb
不要把 fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fread,fwrite,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待 弄混了 楼主不妨搜搜看我上面这句话在CSDN论坛出现过多少次。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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