一个特别的串口通讯

news2024/12/27 10:27:58

背景

设备是EPICS流式细胞仪,这个设备的控制系统是在DOS系统上的。数据存储在硬盘上,不带串口通讯功能。我们遇到了这个设备后,就开发了一个DOS下的执行程序通过串口,将最新的数据自动上传到服务器上。

编译工具 Turbo C++  

数据内容

代码


#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <dir.h>
#include <dos.h>
#include <ctype.h>
#include <string.h>
#include <GSerial.h>
#include <fcntl.h>

#include <io.h>


#define sendbuf_size 1024
char       searchp[255];
int        jkport     = COM1;
long        jkspeed    = 19200L;
int        jkparity   = LCR_NO_PARITY;
int        jkbits     = 8;
int        jkstopbits = 1;
serial jkcom (jkport, jkspeed, jkparity, jkbits, jkstopbits); ;
char sendbuf[sendbuf_size+1];
char sendbuf_2[sendbuf_size*3+3];


int  send(char *str,int size )
{
  int i;
  for (i=0;i<size;i++)
   {

   jkcom<<(str[i]);
   }
  delay(10);
  return(0);
}
int  send2(char *str,int size )
{

  int i;
  int i2;
  int k;
  int recount;
  i2=0;

  i=0;
  do
  {
     if( !str[i])
       {
	recount=0;
	for (k=i;k<size;k++)
	 {
	 if (str[k] == str[i])
		{
		recount=recount+1;
		}
		else
		 break;
	 }

	if (recount>255)
	 {
	recount=255;
	 }

	sendbuf_2[i2]=char(0);
	i2=i2+1;
	sendbuf_2[i2]=char(recount);
	i2=i2+1;
	sendbuf_2[i2]=str[i];
	i2=i2+1;
	i=i+recount;
       }
       else
       {
	recount=0;
	for (k=i;k<size;k++)
	 {
	 if (str[k] == str[i])
		  {
		 recount=recount+1;
		 }
		else
		 break;
	 }

	if (recount>255)
	 {
	recount=255;
	 }
       if( recount>2)
	 {
	 sendbuf_2[i2]=char(0);
	 i2=i2+1;
	 sendbuf_2[i2]=char(recount);
	 i2=i2+1;
	 sendbuf_2[i2]=str[i];
	 i2=i2+1;
	 i=i+recount;
	 }
	 else
	 {
	 for (k = 1 ;k<=recount;k++)
	   {
	    sendbuf_2[i2]=str[i];
	    i2=i2+1;
	   };

	 i=i+recount;


	 }


       }



  }
  while(i<size);


  for (i=0;i<i2;i++)
   {


   jkcom<<(sendbuf_2[i]);
   }


  return(0);
}
int rece()
{
 char  receivebuf;




 int i;
 int k;
 k=-1;
 i=0;
 do
 {
   delay(10);
   jkcom>>receivebuf;
   i=i+1;
   k=   receivebuf-char(0);

   if ( (k>=4) && (k<=7) )
   {
    break;
   }
 }
 while   (i<300);
 return(k);

}


int filesend(char *str)
{
   char fn[255];
   long fl;
   int handle;

   stpcpy(fn,searchp);
   strcat(fn,str);

   handle=open(fn,O_RDONLY);
   fl=filelength(handle);
   close(handle);
   gotoxy(1, 9);
   printf(" file    name: %s  ", fn);
   gotoxy(1, 11);
   printf(" file    size: %8ld  ", fl);


   FILE *fp;

   int nowread;
   long allread;



   allread=0;



   gotoxy(1,13);
   printf("      sending: %8ld", allread  );

   char tmp[20];
   jkcom<<(char(02));
   jkcom<<("headfromdos;");
   jkcom<<(str);
   jkcom<<(";");
   ltoa(fl,tmp,10);
   jkcom<<(tmp);
   jkcom<<(char(03));
   gotoxy(1,15);
   printf("    send head: %s;%s", str,tmp );

   int receivebuf;
   receivebuf=rece();


   gotoxy(1,17);
   printf("head   receive: #%-4d ",receivebuf);
   nowread=0;
   allread=0;
   if( receivebuf ==4)
      {
	fp=fopen(fn,"rb");
	nowread=0;
	gotoxy(1, 9);
	printf(" file    name: %s  ", fn);

	while(!feof(fp))
	  {
	     sendbuf[nowread]=fgetc(fp);
	     nowread=nowread+1;
	     if( nowread>=sendbuf_size)
		{
		     allread=allread+nowread;
		     gotoxy(1,13);
		     printf("      sending: %8ld", allread  );
		     send2(sendbuf,nowread);
		     nowread=0;
		 }

	  }

	if (nowread>1)
	  {
	   allread=allread+nowread-1;
	   gotoxy(1,13);
	   printf("      sending: %8ld", allread  );

	   send2(sendbuf,nowread-1);
	  }
	fclose(fp);




	receivebuf=rece();
	gotoxy(1,19);
	printf("data   receive: #%-4d ",receivebuf);

	if( receivebuf ==6)
	  {
	   return(1);
	  }
	 else
	 return(0);
   }
  else
    return(0);
}

void filesearch(char *str)
{

   struct ffblk ffblk;
   int done;
   int filecount;
   int failcount;
   struct date d;

   failcount=0;
   filecount=0;
   char fn[255];
   char backp[MAXPATH+8];
   char tmpdir[255];
   char tmp[255];
   char doscmd[255];
   int mord;
   getcwd(backp,MAXPATH);
   getdate(&d);
   itoa(d.da_year,tmp,10);
   stpcpy(tmpdir,tmp);

   mord=d.da_mon-char(0);
   itoa(mord,tmp,10);
   if (mord<10)
       strcat(tmpdir,"0");

   strcat(tmpdir,tmp);

   mord=d.da_day-char(0);
   itoa(mord,tmp,10);
   if (mord<10)
       strcat(tmpdir,"0");
   strcat(tmpdir,tmp);

   mkdir(tmpdir);
   strcat(backp,"\\");
   strcat(backp,tmpdir);
   strcat(backp,"\\");
   gotoxy(1,21);
   printf("   back  path: %s  ",backp);

   stpcpy(fn,str);
   strcat(fn,"*.*");
   gotoxy(1,1);

   printf(" search  file: %s  ",fn );



   done = findfirst(fn,&ffblk,0);
   while (!done)
   {
   filecount=filecount+1;
   done =findnext(&ffblk);
   }


   gotoxy(1,3);
   printf(" all    count: %d                      ",filecount);
   filecount=0;
   gotoxy(1,5);
   printf(" sended count: %d                      ",filecount);
   gotoxy(1,7);
   printf(" failed count: %d                      ",failcount);

   done = findfirst(fn,&ffblk,0);
   int acce;
   while (!done)
   {


   acce=filesend(ffblk.ff_name);
   if (acce==1 )
      {
       gotoxy(1,5);
       filecount=filecount+1;
       printf(" sended count: %d                      ",filecount);

       stpcpy(doscmd,"copy ");
       strcat(doscmd,str);
       strcat(doscmd,ffblk.ff_name);
       strcat(doscmd," ");
       strcat(doscmd,backp);
       strcat(doscmd,ffblk.ff_name);
       gotoxy(1,22);
       system(doscmd);

       gotoxy(1,22);
       printf("%40s","");
       stpcpy(doscmd,"del ");
       strcat(doscmd,str);
       strcat(doscmd,ffblk.ff_name);
       gotoxy(1,23);
       system(doscmd);




       //delay(10);

      }
      else
      {
       gotoxy(1,7);
       failcount=failcount+1;
       printf(" failed count: %d                      ",failcount);
       delay(2500);
      };


   done =findnext(&ffblk);
   }

}


main()
{

      clrscr();
      stpcpy(searchp,"c:\\data\\");
      filesearch(searchp);


      delay(1500);
      gotoxy(1,15);
      printf("\n" );
      return(0);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2266331.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4.系统学习-集成学习

集成学习 前言Bias and Variance过拟合&#xff08;overfitting&#xff09;与欠拟合&#xff08;underfitting&#xff09;集成学习为什么有效&#xff1f;Blending 模型集成Stakcing 模型集成Bagging模型集成Bagging 模型集成算法流程&#xff1a;Boosting模型集成作业 前言 …

电商项目高级篇07-redisson分布式锁

redisson分布式锁 1、引入maven依赖2、config类3、可重入锁设计 1、引入maven依赖 <!--引入redisson--><dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.12.0</version></depend…

Nginx的性能分析与调优简介

Nginx的性能分析与调优简介 一、Nginx的用途二、Nginx负载均衡策略介绍与调优三、其他调优方式简介四、Nginx的性能监控 一、Nginx的用途 ‌Nginx是一种高性能的HTTP和反向代理服务器&#xff0c;最初作为HTTP服务器开发&#xff0c;主要用于服务静态内容如HTML文件、图像、视…

递归算法常见问题(Java)

问题&#xff1a;斐波那契数列,第1项和第2项都为1&#xff0c;后面每一项都为相邻的前俩项的和,求第n个数 解法&#xff1a;每一个数都为前俩个数之和&#xff0c;第1项和第2项都为1&#xff0c;所以写 方法f1(n)即为求第n个数&#xff0c;那么f1(n-1)为求第n-1个数&#xff0…

SpringBoot + HttpSession 自定义生成sessionId

SpringBoot HttpSession 自定义生成sessionId 业务场景实现方案 业务场景 最近在做用户登录过程中&#xff0c;由于默认ID是通过UUID创建的&#xff0c;缺乏足够的安全性&#xff0c;决定要自定义生成 sessionId。 实现方案 正常的获取session方法如下&#xff1a; HttpSe…

【流量、洪水数据下载】网站介绍和下载经验....不断更新!

EarthData 介绍 NASA:链接 数据下载 视频教程:Discover and Access Earth Science Data Using Earthdata Search 数据下载需要注册,已经被卡在邮箱验证上【2024-12-26】… Essential Climate Variables——【The Global Climate Observing System(GCOS) 介绍 其是支…

Pytorch | 利用SMI-FGRM针对CIFAR10上的ResNet分类器进行对抗攻击

Pytorch | 利用I-FGSSM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集SMI-FGRM介绍SMI-FGRM算法流程 SMI-FGRM代码实现SMI-FGRM算法实现攻击效果 代码汇总smifgrm.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器&#xff1a; Pytorch | 从零构建AlexNet对CI…

少儿编程在线培训系统:客户服务与学习支持

2.1 VUE技术 VUE它是由HTML代码&#xff0c;配上嵌入在HTML代码里面的Java代码组成的应用于服务器端的语言&#xff0c;使用VUE进行开发能够更加容易区分网页逻辑以及网页设计内容&#xff0c;让程序员开发思路更加清晰化&#xff0c;VUE在设计组件时&#xff0c;它是可以重用的…

流批一体向量化计算引擎 Flex 在蚂蚁的探索和实践

编者按&#xff1a;Flex是蚂蚁数据部自研的一款流批一体的向量化引擎&#xff0c;Flex是Fink和Velox的全称&#xff0c;也是Flexible的前缀&#xff0c;被赋予了灵活可插拔的寓意。本文将重点从向量化技术背景、Flex架构方案和未来规划三个方面展开论述。 作者介绍&#xff1a;…

upload-labs关卡记录11

先上传一个一句话木马试试&#xff0c;居然可以上传成功&#xff0c;复制图片链接&#xff0c;在另一个窗口打开&#xff1a; 会发现&#xff0c;我们明明上传的是shell.php&#xff0c;但是这里就是没有了php,这样我们在执行我们相关的语句的时候就无法执行了&#xff1a; 就…

WebRTC服务质量(08)- 重传机制(05) RTX机制

WebRTC服务质量&#xff08;01&#xff09;- Qos概述 WebRTC服务质量&#xff08;02&#xff09;- RTP协议 WebRTC服务质量&#xff08;03&#xff09;- RTCP协议 WebRTC服务质量&#xff08;04&#xff09;- 重传机制&#xff08;01) RTX NACK概述 WebRTC服务质量&#xff08;…

借助 obdiag,让 OceanBase 参数和变量的对比更简单

本文将介绍 obdiag 工具中参数对比和变量对比功能的适用场景和试用方法。​​​​​​​ obdiag 参数和变量对比功能的适用场景 参数对比功能适用场景 不同observer对于同一参数允许配置不同的值&#xff0c;实际生产环境中&#xff0c;用户可能因多种原因在不同observer上为同…

Net9解决Spire.Pdf替换文字后,文件格式乱掉解决方法

官方文档 https://www.e-iceblue.com/Tutorials/Spire.PDF/Program-Guide/Text/Find-and-replace-text-on-PDF-document-in-C.html C# 在 PDF 中查找替换文本 原文件如下图&#xff0c;替换第一行的新编码&#xff0c;把41230441044替换为41230441000 替换代码如下&#xff…

VBA技术资料MF246:将工作表中形状复制到WORD文档

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

一次医院RIS系统的升级

2020-03-11 目录 数据库升级... 1 数据结构升级... 1 系统配置... 2 WEB服务器准备... 3 启动ASP.NET State Service服务... 3 检查IIS. 4 发布站点... 4 添加应用程序池... 4 发布网站... 5 处理打印模板... 6 web.config的配置... 6 处理图片文件目录... 6 修改W…

显示 Windows 任务栏

显示 Windows 任务栏 1. 取消勾选自动隐藏任务栏2. 重启 Windows 资源管理器References 1. 取消勾选自动隐藏任务栏 Windows 任务栏具有自动隐藏功能&#xff0c;不使用时自动隐藏&#xff0c;使用时显示。 鼠标右键单击桌面上的空白区域&#xff0c;个性化 -> 任务栏。不…

【Unity3D】Jobs、Burst并行计算裁剪Texture3D物体

版本&#xff1a;Unity2019.4.0f1 PackageManager下载Burst插件(1.2.3版本) 利用如下代码&#xff0c;生成一个Texture3D资源&#xff0c;它只能脚本生成&#xff0c;是一个32*32*32的立方体&#xff0c;导出路径记得改下&#xff0c;不然报错。 using UnityEditor; using Uni…

轻量级安全云存储方案Hoodik

什么是 Hoodik &#xff1f; Hoodik 是一款轻量级、安全且自托管的云存储解决方案。它采用 Rust 和 Vue 设计和构建&#xff0c;专注于端到端加密&#xff0c;保护您的数据免受窥探和黑客的侵害。Hoodik 支持文件上传和下载&#xff0c;让您可以轻松地与其他用户共享文件。简单…

[WASAPI]音频API:从Qt MultipleMedia走到WASAPI,相似与不同

[WASAPI] 从Qt MultipleMedia 来看WASAPI 最近在学习有关Windows上的音频驱动相关的知识&#xff0c;在正式开始说WASAPI之前&#xff0c;我想先说一说Qt的Multiple Media&#xff0c;为什么呢&#xff1f;因为Qt的MultipleMedia实际上是WASAPI的一层封装&#xff0c;它在是线…

Linux 大文件管理与 Hugging Face 模型下载实践:解决磁盘空间与大文件传输的全攻略20241226

Linux 大文件管理与 Hugging Face 模型下载实践&#xff1a;解决磁盘空间与大文件传输的全攻略 引言 在 Linux 系统中管理大文件是一项常见但不容忽视的任务&#xff0c;尤其是在处理复杂场景时&#xff0c;比如磁盘空间不足、断点续传下载模型文件、管理日志文件等。通过实际…