RS232/485通信方式 保存和加载时数据的处理
RS232/485通信方式
数据以RS232/485方式通信时,以0xA5作为开始码,以0xAE作为结束码。在开始码和结束码之间的0xA5, 0xAA, 0xAE数据需要进行转码。
PC端发送数据时将1个码变为2个码:
0xA5 -> 0xAA 0x05
0xAA -> 0xAA 0x0A
0xAE -> 0xAA 0x0E
PC端接收数据时将2个码变为1个码:
0xAA 0x05 -> 0xA5
0xAA 0x0A -> 0xAA
0xAA 0xAE -> 0xAE
如:
int CRs232::SendData(const BYTE *pBuffer, int nLength)
{
int i;
BYTE *pTemp;
BYTE szTemp[4096];
pTemp = szTemp;
*pTemp++ = 0xA5;
for(i=0; i<nLength; i++)
{
if(*pBuffer == 0xA5 || *pBuffer == 0xAA || *pBuffer == 0xAE)
{
*pTemp++ = 0xAA;
*pTemp++ = (BYTE)(*pBuffer & 0x0f);
}
else
{
*pTemp++ = *pBuffer;
}
pBuffer++;
}
*pTemp++ = 0xAE;
i = (int)(pTemp - szTemp);
return WriteData(szTemp, i);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////
int CRs232::ReceiveData(BYTE *pBuffer, int nBufSize)
{
int nRead;
int nLength;
int i, rep;
int cv;
BYTE ch;
BYTE szTemp[4096];
bool bRecvStarted;
#ifdef _DEBUG//测试缓冲区溢出
//BYTE buffer[ 5 ];
//pBuffer = buffer;
//nBufSize = sizeof( buffer );
#endif
cv = 0;
nLength = 0;
bRecvStarted = false;
for( rep = 1; rep > 0; )
{
nRead = ReadData( szTemp, sizeof( szTemp ) );
if( nRead > 0 )
{
for( i = 0; i < nRead; i++ )
{
ch = szTemp[ i ];
if( ch == 0xA5 )//开始接受数据
{
cv = 0;
nLength = 0;
bRecvStarted = true;
}
else if( ch == 0xAE )//结束接受数据
{
cv = 0;
rep = -1; //设置成功接受数据标记
bRecvStarted = false;
break;
}
else if( ch == 0xAA )//设置转码标记
{
cv = 1;
}
else if( nLength < nBufSize )
{
if( bRecvStarted )//已开始接受数据
{
if( cv )//需要转码
{
cv = 0;
pBuffer[ nLength++ ] = 0xA0 | ( 0x0F & ch );
}
else//不需转码
{
pBuffer[ nLength++ ] = ch;
}
}
}
else//缓冲区溢出
{
rep = 0; //设置主循环退出条件
break; //退出此内循环
}
}
}
else//接受不到数据,
{
rep = 0;//设置主循环退出条件
}
}
if( rep == -1 )//接受完整数据成功
{
return nLength;
}
else
{
return 0;
}
}
RS232/485通信方式 保存和加载时数据的处理的更多相关文章
- TensorFlow模型保存和加载方法
TensorFlow模型保存和加载方法 模型保存 import tensorflow as tf w1 = tf.Variable(tf.constant(2.0, shape=[1]), name= ...
- keras中的模型保存和加载
tensorflow中的模型常常是protobuf格式,这种格式既可以是二进制也可以是文本.keras模型保存和加载与tensorflow不同,keras中的模型保存和加载往往是保存成hdf5格式. ...
- 背水一战 Windows 10 (62) - 控件(媒体类): InkCanvas 保存和加载, 手写识别
[源码下载] 背水一战 Windows 10 (62) - 控件(媒体类): InkCanvas 保存和加载, 手写识别 作者:webabcd 介绍背水一战 Windows 10 之 控件(媒体类) ...
- 完美实现保存和加载easyui datagrid自定义调整列宽位置隐藏属性功能
需求&场景 例表查询是业务系统中使用最多也是最基础功能,但也是调整最平凡,不同的用户对数据的要求也不一样,所以在系统正式使用后,做为开发恨不得坐在业务边上,根据他们的要求进行调整,需要调整最多 ...
- 从头学pytorch(十二):模型保存和加载
模型读取和存储 总结下来,就是几个函数 torch.load()/torch.save() 通过python的pickle完成序列化与反序列化.完成内存<-->磁盘转换. Module.s ...
- 使用Pytorch在多GPU下保存和加载训练模型参数遇到的问题
最近使用Pytorch在学习一个深度学习项目,在模型保存和加载过程中遇到了问题,最终通过在网卡查找资料得已解决,故以此记之,以备忘却. 首先,是在使用多GPU进行模型训练的过程中,在保存模型参数时,应 ...
- 超详细的Tensorflow模型的保存和加载(理论与实战详解)
1.Tensorflow的模型到底是什么样的? Tensorflow模型主要包含网络的设计(图)和训练好的各参数的值等.所以,Tensorflow模型有两个主要的文件: a) Meta graph: ...
- MSIL实用指南-局部变量的声明、保存和加载
这一篇讲解方法内的局部变量是怎么声明.怎样保存.怎样加载的. 声明局部变量声明用ILGenerator的DeclareLocal方法,参数是局部变量的数据类型,得到一个局部变量对应的创建类LocalB ...
- tensorflow模型持久化保存和加载
模型文件的保存 tensorflow将模型保持到本地会生成4个文件: meta文件:保存了网络的图结构,包含变量.op.集合等信息 ckpt文件: 二进制文件,保存了网络中所有权重.偏置等变量数值,分 ...
随机推荐
- 收藏!如何有效实施devops?
当今IT行业的竞争日益激烈,各家公司都在寻找优化软件研发过程的方法,因为交付比对手更具竞争力的产品已经越发成为一件成本高昂的事情.这也是DevOps发挥作用的地方,因为它可以在工程管理的各个方面提供帮 ...
- ecilpse 纠错插件
在market里面搜索 Spot Bugs Unnecessary Code Detector
- Redis 入门到分布式 (六)常见的持久化开发运维问题
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.常见问题目录 fork操作 进程外开销 AOF追加阻塞 单机多实例部署 二. fork 1.Fork ...
- JavaScript (六) js的基本语法 - - - Math 及 Date对象、String对象、Array对象
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.Math 1.Math对象的案例 var result= Math.max(10,20,30,40) ...
- Java实现 LeetCode 594 最长和谐子序列(滑动窗口)
594. 最长和谐子序列 和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1. 现在,给定一个整数数组,你需要在所有可能的子序列中找到最长的和谐子序列的长度. 示例 1: 输入: [1,3, ...
- Java实现k个数乘(cheng)(自然数的k乘积问题)
k个数乘(cheng) 题目描述 桐桐想把一个自然数N分解成K个大于l的自然数相乘的形式,要求这K个数按从小到大排列,而且除了第K个数之外,前面(K-l)个数是N分解出来的最小自然数.例如:N=24, ...
- Java中BigDecimal类的常用方法
1.简介 BigDecimal类位于java.math.BigDecimal包下.使用此类可以完成大的小数操作,而且也可以使用此类进行精确的四舍五入,这一点在开发中经常使用. 对于不需要任何准确计算精 ...
- 第九届蓝桥杯JavaC组省赛真题
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.哪天返回 题目描述 小明被不明势力劫持.后被扔到x星站再无问津.小明得知每天都有飞船飞往地球,但需要108元的船票,而他却身无分文. ...
- java实现第七届蓝桥杯交换瓶子
交换瓶子 交换瓶子 有N个瓶子,编号 1 ~ N,放在架子上. 比如有5个瓶子: 2 1 3 5 4 要求每次拿起2个瓶子,交换它们的位置. 经过若干次后,使得瓶子的序号为: 1 2 3 4 5 对于 ...
- 浅谈js原型
前言 突发奇想,想写一篇原型的文章,也可能是因为对原型有更深的理解吧,在这里做个记录,来记录下自己的理解加深下记忆. 总之,希望本文的内容能够对您的学习或者工作有所帮助.另,如果有任何的错误或者不足请 ...