我这边有个通信的流程图还有协议,找大侠帮忙教下程序代码怎么写,我是个初学者尽量写的详细些谢谢!!! 30
上位机:PC或PDA下位机:传感器通信过程注释:一,通信采用串口通信,设置串口号、波特率9600、数据位长度8位等。二,传输指令采用十六进制通信数据格式一、采集设置指令:...
上位机: PC 或PDA
下位机: 传感器
通信过程
注释:
一, 通信采用串口通信,设置串口号、波特率9600、数据位长度8位等。
二, 传输指令采用十六进制通信
数据格式
一、 采集设置指令:BIT3 BIT2 BIT1 BIT0(这4个字节均为十六进制表示法)
BIT3:BIT3又表示为D7D6D5D4D3D2D1D0
其中:
D7D6——是否连续测量
00——否
01——是 64
D5D4——要发送的数据类型
00——振值
11——频谱 48(0011000)
10——波形(只能测加速度的波形) 32
D3D2D1D0——参数及特征值类型
0000(即0H)——加速度A等效峰值 0
0001(即1H)——速度V有效值 1
0010(即2H)——位移D等效峰峰值 2
0011(即3H)——包络E有效值 3
BIT2:设置频程
01H——100
02H——200
03H——500
04H——1k
05H——2k
06H——5k
07H——7k
08H——10k
09H——20k
BIT1:D6,D5,D4——量程设置
000——2 0
001——5 16
010——10 32
011——20 48
100——40 64
101——80 80
D3,D2设置量程
00——自动量程 0
01——手动量程 4
D1,D0设置振值类型
00——测量单一振值 0
01——测量4振值 1
BIT0:设置采样点数
00H——不采集波形
01H——32采样点
02H——64采样点
03H——128采样点
04H——256采样点
05H——512采样点
06H——1024采样点
07H——2048采样点
08H——4096采样点
二、发送的数据结构及包格式:
1、振值数据结构:
struct SPE_TYPE//振值数据的结构体
{uchar parameter;//参数类型
uchar frequery_range;//频程
uchar data_type; //振值类型
float SINGLE; //单一振值
float ACCVALUE;//加速度振值
float VELVALUE;//速度振值
float DISVALUE;//位移振值
float ENPVALUE;//包络振值
}NEWF;
振值数据包格式:包标志(0xFF)+包号(1B)+有效数据(23B)+校验数据(1B)
2、频谱数据结构:
struct SPE_TYPE1
{uchar parameter;//参数
uchar frequery_range;//频程
uchar sample_point; //量程
float ad_coeffcient; //系数
wchar_t ad_fre[400];//频谱数据
}NEWF1;
数据包格式:包标志(0xFF)+包号(1B)+有效数据(807B)+校验数据(1B)
3、波形数据结构
struct SPE_TYPE2
{uchar sample_point;//量程
float ad_coeffcient;//系数
int ad[4096];//波形数据
} NEWF2;
数据包格式:
包标志(0xFF)+量程(1B)+波形系数(4B)+包号1(1B)+有效数据(波形数据)(64B)+校验数据(1B)+包号2(1B)+有效数据(波形数据)(64B)+校验数据(1B)+……
波形数据按32点数据(64B)为一个数据包发送
包校验的算法:除包号外的所有数据相加和的最低位字节
上位机对数据进行修正(乘系数),修正数据在“系数.txt”中
加速度振值:zhenzhia 速度振值:zhenzhiv 位移振值:zhenzhid 包络振值:zhenzhie
加速度频谱:pinpua 速度频谱:pinpuv 位移频谱:pinpud 包络频谱:pinpue
波形:boxing
单精度浮点数,vb和vc的字节顺序相反。如vb是 B1,B2,B3,B4 vc是B4,B3,B2,B1
实例检测加速度的指令
序号
测量类型
测量方式
指令
备注
1
加速度峰值
单次测量
53 00 04 00 00
2
连续测量
53 40 04 00 00 展开
下位机: 传感器
通信过程
注释:
一, 通信采用串口通信,设置串口号、波特率9600、数据位长度8位等。
二, 传输指令采用十六进制通信
数据格式
一、 采集设置指令:BIT3 BIT2 BIT1 BIT0(这4个字节均为十六进制表示法)
BIT3:BIT3又表示为D7D6D5D4D3D2D1D0
其中:
D7D6——是否连续测量
00——否
01——是 64
D5D4——要发送的数据类型
00——振值
11——频谱 48(0011000)
10——波形(只能测加速度的波形) 32
D3D2D1D0——参数及特征值类型
0000(即0H)——加速度A等效峰值 0
0001(即1H)——速度V有效值 1
0010(即2H)——位移D等效峰峰值 2
0011(即3H)——包络E有效值 3
BIT2:设置频程
01H——100
02H——200
03H——500
04H——1k
05H——2k
06H——5k
07H——7k
08H——10k
09H——20k
BIT1:D6,D5,D4——量程设置
000——2 0
001——5 16
010——10 32
011——20 48
100——40 64
101——80 80
D3,D2设置量程
00——自动量程 0
01——手动量程 4
D1,D0设置振值类型
00——测量单一振值 0
01——测量4振值 1
BIT0:设置采样点数
00H——不采集波形
01H——32采样点
02H——64采样点
03H——128采样点
04H——256采样点
05H——512采样点
06H——1024采样点
07H——2048采样点
08H——4096采样点
二、发送的数据结构及包格式:
1、振值数据结构:
struct SPE_TYPE//振值数据的结构体
{uchar parameter;//参数类型
uchar frequery_range;//频程
uchar data_type; //振值类型
float SINGLE; //单一振值
float ACCVALUE;//加速度振值
float VELVALUE;//速度振值
float DISVALUE;//位移振值
float ENPVALUE;//包络振值
}NEWF;
振值数据包格式:包标志(0xFF)+包号(1B)+有效数据(23B)+校验数据(1B)
2、频谱数据结构:
struct SPE_TYPE1
{uchar parameter;//参数
uchar frequery_range;//频程
uchar sample_point; //量程
float ad_coeffcient; //系数
wchar_t ad_fre[400];//频谱数据
}NEWF1;
数据包格式:包标志(0xFF)+包号(1B)+有效数据(807B)+校验数据(1B)
3、波形数据结构
struct SPE_TYPE2
{uchar sample_point;//量程
float ad_coeffcient;//系数
int ad[4096];//波形数据
} NEWF2;
数据包格式:
包标志(0xFF)+量程(1B)+波形系数(4B)+包号1(1B)+有效数据(波形数据)(64B)+校验数据(1B)+包号2(1B)+有效数据(波形数据)(64B)+校验数据(1B)+……
波形数据按32点数据(64B)为一个数据包发送
包校验的算法:除包号外的所有数据相加和的最低位字节
上位机对数据进行修正(乘系数),修正数据在“系数.txt”中
加速度振值:zhenzhia 速度振值:zhenzhiv 位移振值:zhenzhid 包络振值:zhenzhie
加速度频谱:pinpua 速度频谱:pinpuv 位移频谱:pinpud 包络频谱:pinpue
波形:boxing
单精度浮点数,vb和vc的字节顺序相反。如vb是 B1,B2,B3,B4 vc是B4,B3,B2,B1
实例检测加速度的指令
序号
测量类型
测量方式
指令
备注
1
加速度峰值
单次测量
53 00 04 00 00
2
连续测量
53 40 04 00 00 展开
- 你的回答被采纳后将获得:
- 系统奖励15(财富值+成长值)+难题奖励10(财富值+成长值)+提问者悬赏30(财富值+成长值)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询