流程图
效果展示
拨片架往右移动然后拨片拨取货物
拨片架往左移动然后准备拨取货物
测试环境以及结果
所有应答命令关系如下
下图就是我的测试环境,其中与USB-HUB连接的3个USB-TTL分别代表了103与树莓派,丝杆驱动板,拨片驱动板的通信串口,因为测试环境下只是为了查看串口逻辑是否正确,即对应的串口能否正常收发数据,所以就用USB-TTL来查看串口,并没有将103的串口接到驱动板上。
首先是树莓派下行数据,103接收到数据后会发送一个数据确认帧‘*’,从下图中可以看到当COM5(PI)发送了数据之后,COM3(SCREW)准确接收到了命令,并且将命令通过USB-TTL发送给了PC机
当丝杆完成移动了之后,丝杆控制板发送动作完成确认帧‘!’,103接收到丝杆动作完成帧之后将拨片驱动命令发送到COM30(SERVO)
当拨片驱动板完成任务之后,发送命令完成帧‘#’给103,此时103会意识到整个动作已经完成了,会发送动作完成帧‘?’给树莓派,告诉树莓派移动丝杆并且拨取货物的动作已经完成,至此,整个拨取机构的控制就完成了
程序分析
首先是main函数里面的循环,在这个循环里面我们一直监视着103与树莓派通信的串口,等待树莓派下行的命令,其中,树莓派下行的命令将以‘|’字符开头
char pi_serial[7] = {'\0'};
char screw_serial[3] = {'\0'};
char servo_serial[4] = {'\0'};
char reply_pi;
char get_servo;
char get_screw;
while (1)
{
if(!HAL_UART_Receive(&PI_SERIAL,(uint8_t *)pi_serial,6,0XFFFF)){//接收到树莓派的消息
if(pi_serial[0] == '|'){
reply_pi = '*';
HAL_UART_Transmit(&PI_SERIAL,(uint8_t *)&reply_pi,1,0XFFFF);
screw_serial[0] = pi_serial[1];
screw_serial[1] = pi_serial[2];
servo_serial[0] = pi_serial[3];
servo_serial[1] = pi_serial[4];
servo_serial[2] = pi_serial[5];
SerialControl();
}
}else{
HAL_Delay(50);
}
当103接收到树莓派命令,并将命令分解之后,先将丝杆移动命令发送给丝杆控制板,当丝杆移动完毕之后再将拨片拨取命令发送给拨片驱动板
void SerialControl()
{
uint8_t rece_flag = 0;
HAL_UART_Transmit(&SCREW_SERIAL,(uint8_t *)(&screw_serial),sizeof(screw_serial),0XFFFF);
while(!rece_flag){
if(!HAL_UART_Receive(&SCREW_SERIAL,(uint8_t *)(&get_screw),sizeof(get_screw),0XFFFF)){
if(get_screw == '@'){
while(1){
if(!HAL_UART_Receive(&SCREW_SERIAL,(uint8_t *)(&get_screw),sizeof(get_screw),0XFFFF)){
if(get_screw == '!'){
rece_flag = 1;
break;
}
}else{
HAL_Delay(50);
}
}
}
}
}
rece_flag = 0;
HAL_UART_Transmit(&SERVO_SERIAL,(uint8_t *)(&servo_serial),sizeof(servo_serial),0XFFFF);
while(!rece_flag){
if(!HAL_UART_Receive(&SERVO_SERIAL,(uint8_t *)(&get_servo),sizeof(get_servo),0XFFFF)){
if(get_servo == '&'){
while(1){
if(!HAL_UART_Receive(&SERVO_SERIAL,(uint8_t *)(&get_servo),sizeof(get_servo),0XFFFF)){
if(get_servo == '#'){
rece_flag = 1;
break;
}
}else{
HAL_Delay(50);
}
}
}
}
}
reply_pi = '?';
HAL_UART_Transmit(&PI_SERIAL,(uint8_t *)&reply_pi,1,0XFFFF);
}
评论(0)
您还未登录,请登录后发表或查看评论