非常好用的上位机软件(功能强大)——匿名四轴上位机「建议收藏」

非常好用的上位机软件(功能强大)——匿名四轴上位机「建议收藏」提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言随着单片机开发,调试工具就必不可少,本文就介绍匿名四轴上位机的基础知识。提示:以下是本篇文章正文内容,下面案例可供参考一、什么是上位机上位机是指可以直接发出操控命令的计算机,一般是PC/hostcomputer/mastercomputer/uppercomputer,屏幕上显示各种信号变化(.

大家好,又见面了,我是你们的朋友全栈君。

 目录

文章目录

前言

一、什么是上位机

二、匿名四轴上位机

1、功能

2、软件的一些简单协议

三、相关的接收发送代码

一、接收数据

2.发送数据

总结



前言

对于单片机开发者,调试工具就必不可少,有时需要显示波形、发送文本、数据和一些复杂的数据包。例如PID参数整定,然而四轴匿名上位都有这些功能。本文就介绍匿名四轴上位机怎么显示波形和调试,以及一些接收发送代码。
 

一、什么是上位机

上位机是指可以直接发出操控命令的计算机,一般是PC/host computer/master computer/upper computer,屏幕上显示各种信号变化(液压,水位,温度等)。下位机是直接控制设备获取设备状况的计算机,一般是PLC/单片机single chip microcomputer/slave computer/lower computer之类的。上位机发出的命令首先给下位机,下位机再根据此命令解释成相应时序信号直接控制相应设备。下位机不时读取设备状态数据(一般为模拟量),转换成数字信号反馈给上位机。简言之如此,实际情况千差万别,但万变不离其宗:上下位机都需要编程,都有专门的开发系统。

在概念上,控制者和提供服务者是上位机,被控制者和被服务者是下位机,也可以理解为主机和从机的关系,但上位机和下位机是可以转换的。

二、匿名四轴上位机

1、功能

这个上位机可以基本收发(类似于串口调试助手)、高级收发收码(实现比较复杂的自定义接收和发送)、同时显示20条波形图(用于调试pid等)、调试无人机可以监视无人机的各个状态以及调试pid。

四轴匿名上位机下载链接:

http://链接:https://pan.baidu.com/s/1l6kT-LQCMQRySXpp2lrh7w 提取码:c5lq

非常好用的上位机软件(功能强大)——匿名四轴上位机「建议收藏」

2、软件的一些简单协议

  一:基本收发
1:收码和发码格式均可设为HEX或者CHR。
2:定时发送功能可以精确到毫秒,但是不能太快(发送为独占式,数据不发送完函数不会返回),如果上一帧
      数据还没发送完毕就发送下一帧数据会出错。
3:请使用ft232串口芯片或支持高波特率的芯片,否则波特率无法设置过高。

    二:高级收码
1:收码显示为HEX格式。
2:下位机发送自定义数据,格式为:0x88+FUN+LEN+DATA+SUM
      FUN可以是 0xA1到0xAA,共10个;LEN为DATA的长度(不包括0x88、FUN、LEN、SUM)。
      SUM是0x88一直到DATA最后一字节的和,uint8格式。
    (记得打开需要使用帧的开关,更改设置后点击保存设置使设置生效)
3:数据可以是uint8、int16、uint16、int32、float这几个常用格式,多字节数据高位在前。
4:共有20个数据存储器,每个存储器的数据可以分别设置为来自10个自定义帧的30个数据。
5:高速通讯时(2ms一帧数据或者更快),请关闭高级收码页面的数据显示按钮和基本收码,否则更新过快有可
      能会造成程序卡死。
6:飞控显示对应的帧FUN为0xAF,(帧格式:0x88+0xAF+0x1C+ACC DATA+GYRO DATA+MAG DATA+ANGLE DATA
      + 0x00 0x00 + 0x00 0x00+SUM,共32字节,ACC/GYRO/MAG/ANGLE(roll/pitch/yaw)数据为int16格式,其
      中ANGLE的roll和pitch数据为实际值乘以100以后得到的整数值,yaw为乘以10以后得到的整数值,
      上位机在显示时再 除以100和10)。
7:遥控,电机pwm,电压显示对应的帧FUN为0xAE,(帧格式:0x88+0xAE+0x12+THROT YAW ROLL PITCH 
      +AUX1 2 3 4 5 + PWM:1 2 3 4 + VOTAGE + SUM,共28字节),数据为uint16格式,遥控数据最小在1000左右,
      最大在2000左右。数据都为uint16格式,其中pwm范围1-100,votage为实际值*100。
      小技巧:如果高速通讯时是为了画波形,就只开波形显示,并只保留需要观察的波形,如果是为了观察数
      据,就关闭波形显示,只保留收码显示,这样可以加快程序响应速度。
7:最快通讯速度测试过下位机用500K波特率,每1ms发送32字节的数据,上位机显示其中6条波形,OK!
    (有可能和电脑配置有关)

    三:波形显示
1:共有20条波形,对应20个数据存储器。
2:双击波形绘制区域,可以打开波形显示开关。
3:按住Ctrl用鼠标左键点击某一条波形,可以显示数据标签,再次点击隐藏。
4:按住鼠标左键,在绘图区域从一点向右下方拖动,然后松开,可以放大显示框住的波形区域,可以多次放
      大;
5:按住鼠标左键,在绘图区域从一点向左上方拖动,然后松开,可以将放大后的波形还原。
6:按住鼠标右键,在绘图区域上下左右拖动,可以移动波形。
7:显示波形时按F9键,可以打开波形高级设置。

    四:DEBUG功能
1:在调试过程中可以将某些标志位、寄存器、变量实时发回上位机,并在DEBUG页面显示。
2:通讯格式为:0x88 + 0xAD + len + num + DATA + SUM,  len为num与DATA的总长度,num表示要改变哪个显示
      状态,例如num=0x01即是要改变第一个LED,num=0x07即是改变第一个数字输出显示。当要改变LED时,
      DATA只需一字节,DATA=0x00表示关闭LED,大于0x00表示点亮LED;当要改变数字输出时,DATA需要两字
节,
      表示 一个uint16数字,高字节在前。SUM为从0x88开始到SUM前一字节的和校验,uint8格式。
      例如:发送 0x88 + 0xAD + 0x02 + 0x01 + 0x01 + 0x39    表示点亮第一个LED
                  发送 0x88 + 0xAD + 0x03 + 0x07 + 0x00 + 0x05 + 0x44   表示在第一个数字输出位置显示 5 。

    五:键鼠控制
1:控制数据发送格式为:0x8A + 0x8A + 0X1C + THROT YAW ROLL PITCH AUX1 AUX2 AUX3 AUX4 AUX5 + 0x00 0x00 
      0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 + SUM,遥控数据都为int16格式,中值1500,最小最大值为1000、
      2000。
2:发送频率 50Hz。
3:鼠标上下控制油门,左右控制YAW,键盘的WASD控制ROLL/PITCH,键盘12345控制AUX12345。共9通道。

    六:飞控参数
1:点击3D模型显示右下方的校正按钮,上位机会发送0X8A 0X8B 0X1C 0XAA 0XA3 +无用数据+SUM给下位机,
      其中0X8B表示飞控参数,0XAA表示零偏,0XA3表示ACC GYRO都要校正。
2:点击飞控参数界面传感器矫正功能里面的校正按钮,分别表示ACC 和GYRO的校正,不会同时校正两个传感
器,
      上位机校正ACC发送格式为:0X8A 0X8B 0X1C 0XAA 0XA1+无用数据+SUM
      上位机校正GYRO发送格式为:0X8A 0X8B 0X1C 0XAA 0XA2+无用数据+SUM(送有数据整个长度都为32字节)
3:上位机发送微调后的offset数据(仅为ACC的 X 和 Y ),格式为0X8A 0X8B 0X1C 0XAB + offset.x + offset.y
      +无用数据 +SUM,数据为int16格式。
4:上位机发送读offset的命令格式为:0X8A 0X8B 0X1C 0XAC + 无用数据 + SUM
5:上位机发送读PID数据的命令为:0X8A 0X8B 0X1C 0XAD + 无用数据 + SUM
6:下位机发送offset数据给上位机的格式为:0X88 0XAC 0X1C 0XAC + 传感器零偏数据ACC XYZ GYRO XYZ
      +无用数据+SUM,共六个int16型数据。
7:下位机发送PID数据给上位机的格式为:0X88 0XAC 0X1C 0XAD + PID数据 + 无用数据 + SUM
      PID数据为rol_p,rol_i,rol_d,pit_p..i..d,yaw_p,,i,,d,共9个uint16型数据。
8:上位机发送PID数据给下位机的格式为:0X8A 0X8B 0X1C 0XAE +PID数据+ 无用数据 + SUM
      PID数据格式和下位机发送给上位机的格式一样。
9:点击飞控解锁按钮,上位机会发送0X8A 0X8B 0X1C 0XA1+无用数据+SUM给下位机,如果下位机已经解锁,
      点击此按钮会发送0X8A 0X8B 0X1C 0XA0+无用数据+SUM给下位机,锁定飞控。

三、相关的接收发送代码

一、接收数据

1.接收数据流

若接收到的数据包是按协议发送的,则将数据存入RX_upcomputer数组中。

//数据的接收
#define E_START                    0   //准备成功
#define E_OK                       1   //成功
#define E_FRAME_HEADER_ERROR       2   //帧头错误
#define E_FRAME_RTAIL_ERROR        3   //帧尾错误
#define LINE_LIN_up                   32  //数据长度
uint8_t uart_flag_up;                     //接收标志

vu8 RX_upcomputer[33];
void get_upcomputer_data(uint8_t data)
{
	static uint8_t uart_num=0;
	vu8 sum=0;
    vu8 i=0;
    RX_upcomputer[uart_num++]=data;
    if(1==uart_num)
    {
        //接收到的第一个字节不为0X8A,帧头错误
        if(0X8A!=RX_upcomputer[0])
        {
            uart_num=0;
            uart_flag_up=E_FRAME_HEADER_ERROR;
        }
    }
		if(2==uart_num)
    {
        //接收到的第二个字节不为0x8B,帧头错误
        if(0X8B!=RX_upcomputer[1])
        {
            uart_num=0;
            uart_flag_up=E_FRAME_HEADER_ERROR;
        }
    }
		if(3==uart_num)
    {
        //接收到的第三个字节不为0X1C,帧头错误
        if(0X1C!=RX_upcomputer[2])
        {
            uart_num=0;
            uart_flag_up=E_FRAME_HEADER_ERROR;
        }
    }
		
    if(LINE_LIN_up==uart_num)
    {
        uart_flag_up=E_OK;
        //接收到的最后一个字节为校验位
			for(i=0;i<LINE_LIN_up-1;i++)
			sum += RX_upcomputer[i];        //校验位

        if(sum==RX_upcomputer[LINE_LIN_up-1])
            uart_flag_up=E_OK;
        else                                //接收的最后一个字节校验位错误,帧尾错误
            uart_flag_up=E_FRAME_RTAIL_ERROR;
        uart_num=0;
    }
	
}

2.解析数据

解析存在 RX_upcomputer数组中的数据。

extern float Out_XP,Out_XI,Out_XD,In_XP,In_XI,In_XD,Out_YP,Out_YI,Out_YD,In_YP,In_YI,In_YD,ZP,ZI,ZD;
extern float out_zp;
//解析上位机发送的pid数据
void upcomputer_receive1(void)
{
	
	In_XP=((int)RX_upcomputer[4]<<8)|RX_upcomputer[5];
	In_XP=In_XP/100;
	In_XI=((int)RX_upcomputer[6]<<8)|RX_upcomputer[7];
	In_XI=In_XI/100;
	In_XD=((int)RX_upcomputer[8]<<8)|RX_upcomputer[9];
	In_XD=In_XD/100;
	out_zp=((int)RX_upcomputer[10]<<8)|RX_upcomputer[11];
	out_zp=out_zp/100;
	In_YI=((int)RX_upcomputer[12]<<8)|RX_upcomputer[13];
	In_YI=In_YI/100;
	In_YD=((int)RX_upcomputer[14]<<8)|RX_upcomputer[15];
	In_YD=In_YD/100;
	ZP=((int)RX_upcomputer[16]<<8)|RX_upcomputer[17];
	ZP=ZP/100;
	ZI=((int)RX_upcomputer[18]<<8)|RX_upcomputer[19];
	ZI=ZI/100;
	ZD=((int)RX_upcomputer[20]<<8)|RX_upcomputer[21];
	ZD=ZD/100;
}


//解析上位机微调后的offset
int offset_x,offset_y;
void upcomputer_receive2(void)
{
	offset_x=((int)RX_upcomputer[4]<<8)|RX_upcomputer[5];
	
	offset_y=((int)RX_upcomputer[6]<<8)|RX_upcomputer[7];
	
}

2.发送数据

void usart1_SendByte(u8 data){    /* 发送字节数据到UART */    USART_SendData(USART1,data);    /*等待发送寄存器为空 */    while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);}/****************** 发送八位数组************************/void usart1_SendArray(vu8 *array, uint16_t num){    vu8 i;  for(i=0; i<num; i++)  {        /* ·发送一个字节数据到USART */     usart1_SendByte(array[i]);  }    /* 等待发送完成 */  while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);}vu8 testdatatosend[50];/*波形显示函数*/void Test_Send_User(uint16_t data1, uint16_t data2, uint16_t data3,uint16_t data4,uint16_t data5,uint16_t data6,uint16_t data7,uint16_t data8,uint16_t data9,uint16_t data10){    vu8 _cnt=0;    vu8 sum=0;    vu8 i=0;    testdatatosend[_cnt++]=0x88;    testdatatosend[_cnt++]=0xA1;    testdatatosend[_cnt++]=0;    testdatatosend[_cnt++]=data1>>8;         testdatatosend[_cnt++]=data1&0xff;       testdatatosend[_cnt++]=data2>>8;    testdatatosend[_cnt++]=data2&0xff;    testdatatosend[_cnt++]=data3>>8;    testdatatosend[_cnt++]=data3&0xff;    testdatatosend[_cnt++]=data4>>8;    testdatatosend[_cnt++]=data4&0xff;    testdatatosend[_cnt++]=data5>>8;    testdatatosend[_cnt++]=data5&0xff;    testdatatosend[_cnt++]=data6>>8;    testdatatosend[_cnt++]=data6&0xff;    testdatatosend[_cnt++]=data7>>8;    testdatatosend[_cnt++]=data7&0xff;    testdatatosend[_cnt++]=data8>>8;    testdatatosend[_cnt++]=data8&0xff;    testdatatosend[_cnt++]=data9>>8;    testdatatosend[_cnt++]=data9&0xff;    testdatatosend[_cnt++]=data10>>8;    testdatatosend[_cnt++]=data10&0xff;    testdatatosend[2] = _cnt-3;    for(i=0;i<_cnt;i++)        sum += testdatatosend[i];    testdatatosend[_cnt++]=sum;    usart1_SendArray(testdatatosend,_cnt);}/******************************************************************************************下面的函数主要用于无人机调试,也可用于其他pid调试****************************************************************************************//*发送陀螺仪数据给上位机*/void Test_Send_User1(int16_t acc_x_,int16_t acc_y_,int16_t acc_z_,int16_t gyro_x_,int16_t gyro_y_,int16_t gyro_z_,int16_t roll_,int16_t pitch_,int16_t yaw_){	 vu8 _cnt=0;    vu8 sum=0;    vu8 i=0;    testdatatosend[_cnt++]=0x88;    testdatatosend[_cnt++]=0xAF;    testdatatosend[_cnt++]=0x1C;    testdatatosend[_cnt++]=acc_x_>>8;     //    testdatatosend[_cnt++]=acc_x_&0xff;   //    testdatatosend[_cnt++]=acc_y_>>8;    testdatatosend[_cnt++]=acc_y_&0xff;    testdatatosend[_cnt++]=acc_z_>>8;    testdatatosend[_cnt++]=acc_z_&0xff;    testdatatosend[_cnt++]=gyro_x_>>8;    testdatatosend[_cnt++]=gyro_x_&0xff;    testdatatosend[_cnt++]=gyro_y_>>8;    testdatatosend[_cnt++]=gyro_y_&0xff;    testdatatosend[_cnt++]=gyro_z_>>8;    testdatatosend[_cnt++]=gyro_z_&0xff;				testdatatosend[_cnt++]=0;		testdatatosend[_cnt++]=0;				testdatatosend[_cnt++]=0;		testdatatosend[_cnt++]=0;				testdatatosend[_cnt++]=0;		testdatatosend[_cnt++]=0;    testdatatosend[_cnt++]=roll_>>8;    testdatatosend[_cnt++]=roll_&0xff;    testdatatosend[_cnt++]=pitch_>>8;    testdatatosend[_cnt++]=pitch_&0xff;    testdatatosend[_cnt++]=yaw_>>8;    testdatatosend[_cnt++]=yaw_&0xff;    testdatatosend[_cnt++]=0x00;    testdatatosend[_cnt++]=0x00;		testdatatosend[_cnt++]=0x00;    testdatatosend[_cnt++]=0x00;    testdatatosend[2] = _cnt-3;    for(i=0;i<_cnt;i++)        sum += testdatatosend[i];    testdatatosend[_cnt++]=sum;    usart1_SendArray(testdatatosend,_cnt);	}/*发送电机pwm和飞控电池电压给上位机*/void Test_Send_User2(uint16_t throt,uint16_t yaw_2,uint16_t roll_2,uint16_t pitch_2,uint16_t aux_1,uint16_t aux_2,uint16_t aux_3,uint16_t aux_4,uint16_t aux_5,uint16_t pwm1,uint16_t pwm2,uint16_t pwm3,uint16_t pwm4,uint16_t votage){		vu8 _cnt=0;    vu8 sum=0;    vu8 i=0;    testdatatosend[_cnt++]=0x88;    testdatatosend[_cnt++]=0xAE;    testdatatosend[_cnt++]=0x12;		  testdatatosend[_cnt++]=throt>>8;    testdatatosend[_cnt++]=throt&0xff;    testdatatosend[_cnt++]=yaw_2>>8;     //    testdatatosend[_cnt++]=yaw_2&0xff;   //    testdatatosend[_cnt++]=roll_2>>8;    testdatatosend[_cnt++]=roll_2&0xff;    testdatatosend[_cnt++]=pitch_2>>8;    testdatatosend[_cnt++]=pitch_2&0xff;    testdatatosend[_cnt++]=aux_1>>8;    testdatatosend[_cnt++]=aux_1&0xff;    testdatatosend[_cnt++]=aux_2>>8;    testdatatosend[_cnt++]=aux_2&0xff;    testdatatosend[_cnt++]=aux_3>>8;    testdatatosend[_cnt++]=aux_3&0xff;    testdatatosend[_cnt++]=aux_4>>8;    testdatatosend[_cnt++]=aux_4&0xff;    testdatatosend[_cnt++]=aux_5>>8;    testdatatosend[_cnt++]=aux_5&0xff;    testdatatosend[_cnt++]=pwm1>>8;		testdatatosend[_cnt++]=pwm1&0xff;    testdatatosend[_cnt++]=pwm2>>8;		testdatatosend[_cnt++]=pwm2&0xff;		    testdatatosend[_cnt++]=pwm3>>8;		testdatatosend[_cnt++]=pwm3&0xff;    testdatatosend[_cnt++]=pwm4>>8;		testdatatosend[_cnt++]=pwm4&0xff;				testdatatosend[_cnt++]=votage>>8;    testdatatosend[_cnt++]=votage&0xff;    testdatatosend[2] = _cnt-3;    for(i=0;i<_cnt;i++)        sum += testdatatosend[i];    testdatatosend[_cnt++]=sum;    usart1_SendArray(testdatatosend,_cnt);	}/*发送OFFSET给上位机*/void Test_Send_User3(int16_t acc_x_3,int16_t acc_y_3,int16_t acc_z_3,int16_t gyro_x_3,int16_t gyro_y_3,int16_t gyro_z_3){	vu8 _cnt=0;    vu8 sum=0;    vu8 i=0;    testdatatosend[_cnt++]=0x88;    testdatatosend[_cnt++]=0xAC;    testdatatosend[_cnt++]=0x1C;	  testdatatosend[_cnt++]=0xAC;		  testdatatosend[_cnt++]=acc_x_3>>8;    testdatatosend[_cnt++]=acc_x_3&0xff;    testdatatosend[_cnt++]=acc_y_3>>8;     //    testdatatosend[_cnt++]=acc_y_3&0xff;   //    testdatatosend[_cnt++]=acc_z_3>>8;    testdatatosend[_cnt++]=acc_z_3&0xff;    testdatatosend[_cnt++]=gyro_x_3>>8;    testdatatosend[_cnt++]=gyro_x_3&0xff;    testdatatosend[_cnt++]=gyro_y_3>>8;    testdatatosend[_cnt++]=gyro_y_3&0xff;    testdatatosend[_cnt++]=gyro_z_3>>8;    testdatatosend[_cnt++]=gyro_z_3&0xff;    //testdatatosend[2] = _cnt-3;    for(i=0;i<_cnt;i++)        sum += testdatatosend[i];    testdatatosend[31]=sum;    usart1_SendArray(testdatatosend,32);		}//给上位机发送PID参数*/void Test_Send_User4(uint16_t rol_p,uint16_t rol_i,uint16_t rol_d,uint16_t pit_p,uint16_t pit_i,uint16_t pit_d,uint16_t yaw_p,uint16_t yaw_i,uint16_t yaw_d){	vu8 _cnt=0;    vu8 sum=0;    vu8 i=0;    testdatatosend[_cnt++]=0x88;    testdatatosend[_cnt++]=0xAC;    testdatatosend[_cnt++]=0x1C;	  testdatatosend[_cnt++]=0xAD;		  testdatatosend[_cnt++]=rol_p>>8;    testdatatosend[_cnt++]=rol_p&0xff;    testdatatosend[_cnt++]=rol_i>>8;     //    testdatatosend[_cnt++]=rol_i&0xff;   //    testdatatosend[_cnt++]=rol_d>>8;    testdatatosend[_cnt++]=rol_d&0xff;    testdatatosend[_cnt++]=pit_p>>8;    testdatatosend[_cnt++]=pit_p&0xff;    testdatatosend[_cnt++]=pit_i>>8;    testdatatosend[_cnt++]=pit_i&0xff;    testdatatosend[_cnt++]=pit_d>>8;    testdatatosend[_cnt++]=pit_d&0xff;    testdatatosend[_cnt++]=yaw_p>>8;    testdatatosend[_cnt++]=yaw_p&0xff;    testdatatosend[_cnt++]=yaw_i>>8;    testdatatosend[_cnt++]=yaw_i&0xff;    testdatatosend[_cnt++]=yaw_d>>8;    testdatatosend[_cnt++]=yaw_d&0xff;   // testdatatosend[2] = _cnt-3;    for(i=0;i<_cnt;i++)        sum += testdatatosend[i];    testdatatosend[31]=sum;    usart1_SendArray(testdatatosend,32);		}

总结

以上就是今天讲的内容,四轴匿名上位机的使用、协议和一些接收发送代码。

这是我的学习总结,若有不当之处,欢迎指出。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/138282.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 常量指针,指针常量的区别是什么_指针常量与常量指针

    常量指针,指针常量的区别是什么_指针常量与常量指针**要有具备扎实指针知识……了解引用、指针的一些注意事项:引用并非对象引用必须初始化引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起类型要严格匹配一、常量指针定义:又叫常指针,可以理解为常量的指针,也即这个是指针,但指向的是个常量,这个常量是指针的值(地址),而不是地址指向的值。关键点:常量指针指向的对象不能通过这个指针来修改,可是仍然可以通过原来的声明修改;常量指针可以被赋值为变量的地址,之所以叫常量指针,是限制了通过这个指针修改变量的值;指针还可以指向别

  • java分页计算公式_java将list分页

    java分页计算公式_java将list分页1根据传入的参数计算1.1请求参数(currPage:当前页、pageSize:每页展示条数),根据这两个参数计算起始起始条数、截止条数 起始条数 firstIndex=(currPage-1)*pageSize 截止条数 lastIndex=currPage*pageSize1.2计算总页码(需获取总条数)pages=total%pageSize==0?total/pageSize:total/pageSize+1…

  • Hibernate中 hql多条件查询 mysql hql删除记录

    Hibernate中 hql多条件查询 mysql hql删除记录whereSql+=”andorderStatus=?”;hql删除记录//使用HQL语句删除数据publicvoiddelete(intid){Transactiontran=this.session.beginTransaction();Stringhql=”DeleteFROMMemberWhereid=?”;Queryq=this.session.createQ

  • jax-RPC和jax-WS比较

    jax-RPC和jax-WS比较1、JAX-RPC简介:JAX-RPC为基于SOAP(简单对象访问协议)的应用程序的开发提供了一个编程模型。JAX-RPC编程模型通过抽象SOAP协议层的运行机制与提供Java和Web服务描述语言(WSDL)间的映射服务来简化开发。通过使用JAX-RPC(JavaAPIforXML-basedRPC),已有的Java类或Java应用都能够被重新包装,并以WebServices

  • linux搭建php运行环境_docker部署php项目

    linux搭建php运行环境_docker部署php项目方案一、phpStudyforLinuxphpStudyforLinux支持Apache/Nginx/Tengine/Lighttpd,支持php5.2/5.3/5.4/5.5切换已经在centos-6.5,debian-7.4.,ubuntu-13.10测试成功使用说明:服务进程管理:phpstudy(start|stop|restart|uninstall)

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号