简单记录串口调试助手(SSCOM)-多条字符发送导入.ini文件

简单记录串口调试助手(SSCOM)-多条字符发送导入.ini文件


调试的时候需要发送七十多包数据。可以使用串口调试助手的多条字符发送。
参考链接: https://blog.csdn.net/qq_41585722/article/details/136582218
此链接是讲解字符串发送。

一、导入.ini文件效果

1、点击多字字符
2、导入写好的.ini文件
在这里插入图片描述
发送后直接勾选“接收数据到文件”,数据就能保存了。
在这里插入图片描述

二、.ini文件内容说明

自带的ini文件,下面是自带的ini文件部分内容

;删除本文件可以恢复默认值。
;这是SSCOM的设置保存文件,您在程序中设置好的串口参数和字符串数据都会自动保存,请最好不要用外部编辑器改动本文件!
;如果文件被修改后程序不能打开,请删除本文件,程序将会自动生成一个新的ini文件.
;靠行首的半角分号是注释符号
;每行都以回车结束

;"="后面的H表示这是个HEX数据串
;"="后面的A表示这是个ASC字符串
;Nx表示第几条定义的字符串(1<x<=N)
N101=1,十六进制数据串1,1000
N1=H,13 00 FF 88

N102=3,字符串1,1000
N2=A,output string

N103=2,欢迎语,1000
N3=A,欢迎您使用SSCOM!

N104=0,4无注释,1000
N4=A,
......

N101=1,1无注释,1000
N(X+100)=顺序(1:第一个发送),注释,延时(1000ms)
X(1<X<100):第几行
N1=H,13 00 FF 88
NX=十六进制数据(H),十六进制数据(13 00 FF 88)
X(1<X<100):第几行

三、程序-C语言

简单记录一下程序,仅供参考。

# include <stdio.h>
# include <stdlib.h>
# include <string.h>

#define LENGTH 10//length
#define NUMBER 75//length

#define SENDSIZE  10//发送个数比如:A5 07 23 08 00 01 00 00 DA 92  就有10个 
#define STRCOUNT   3*SENDSIZE // SENDSIZE*2+SENDSIZE-1+1  每个16进制数由2个字符串组成+空格+结束符号//字符串总个数包括空格和结束符号'\0' .str字符串 count 计数, 
#define SENDTIME  1000 //发送间隔时间 
//#define READCOUNT 75//3072

static const unsigned char aucCRCHi[] =
{
    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
    0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
    0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
    0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
    0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
    0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
    0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
    0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
    0x00, 0xC1, 0x81, 0x40
};
static const unsigned char  aucCRCLo[] =
{
    0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7,
    0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E,
    0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9,
    0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC,
    0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
    0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32,
    0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D,
    0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38,
    0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF,
    0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
    0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1,
    0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4,
    0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB,
    0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA,
    0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
    0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0,
    0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97,
    0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E,
    0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89,
    0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
    0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83,
    0x41, 0x81, 0x80, 0x40
};
 //校验码 
short int SingleByteCrc16( unsigned char * pucFrame, short int usLen )
{
    unsigned char ucCRCHi = 0xff;
    unsigned char ucCRCLo = 0xff;
    short int iIndex;

    while( usLen-- )
    {
        iIndex = ucCRCLo ^ *( pucFrame++ );
        ucCRCLo = ( unsigned char )( ucCRCHi ^ aucCRCHi[iIndex] );
        ucCRCHi = aucCRCLo[iIndex];
    }

    return ( short int )( ucCRCHi << 8 | ucCRCLo );
}
 //16进制命令转字符串 
void HexToAsciiStr(unsigned char hexData[], int len, char *output) 
{
    int i;
    for (i = 0; i < len; i++) {
        // 将每个字节转换为两位十六进制字符
        sprintf(output + (i * 3), "%02X ", hexData[i]);
    }
    output[len * 3 - 1] = '\0'; // 替换最后一个空格为字符串结束符
}
int main() 
{
   unsigned int i;
   short int cal_crc=0;
   short int  length=0,Hcrc,Lcrc;
   char outputhex[STRCOUNT]; // 16进制转字符串
   unsigned char sendbufhex[NUMBER][LENGTH];//16进制串口命令  某个数据需要75包才能发完 
   char n10xbuf[NUMBER][100],nxbuf[NUMBER][50];//ini文件需要的格式 
   // N102=1,,1000    
   // N2=H,A5 07 23 08 00 01 00 00 DA 92

   //需要的发的串口命令 
   for(i=0;i<NUMBER;i++)
   {
		memset(	sendbufhex[i],0,LENGTH);
		sendbufhex[i][0]=0xA5;  //头 
		sendbufhex[i][1]=0x07;	//数据个数 
		sendbufhex[i][2]=0x23;	//命令码 
		sendbufhex[i][3]=0x08;  //模式 
		sendbufhex[i][4]=0x00;  // 
		sendbufhex[i][5]=0x01; 	//第几组 
		sendbufhex[i][6]=(i&0xff00)>>8;	// 
		sendbufhex[i][7]= i&0xff; //第几包 
		length=sendbufhex[i][1];
		cal_crc=SingleByteCrc16(&sendbufhex[i][1],length); 
		Hcrc = cal_crc&0xFF ; 
		Lcrc = (cal_crc&0xFF00)>>8 ;
		sendbufhex[i][8]=Hcrc; //校验码
		sendbufhex[i][9]=Lcrc;	//校验码
   }
 
   for(i=0;i<NUMBER;i++)
   {
  	 	sprintf(n10xbuf[i],"N%d=%d,,%d\n", i+101,i+1,SENDTIME);  //ini格式 
  	 	HexToAsciiStr(sendbufhex[i], LENGTH, outputhex); //16进制转字符串 
  	 	sprintf(nxbuf[i],"N%d=H,%s\n\n", i+1,outputhex); //ini格式 
  	 	strcat(n10xbuf[i],nxbuf[i]); //ini总格式 
   }

    printf("Converted string: %s\n", outputhex); //打印结果  
    printf("%s\n", n10xbuf[1]); // 打印结果   
 
	FILE *destFile = fopen("D:/destination.ini", "w");  //创建.ini文件 
    if (destFile == NULL) 
    {
        perror("Error opening destination file");  //创建文件失败提示 
        return EXIT_FAILURE;
    }
    for(i=0;i<NUMBER;i++)
    {
		fprintf(destFile, "%s", n10xbuf[i]); // 将数据写入文件 
	}
    fclose(destFile); //关 
    
    printf("complete\n");
    }   
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值