📄 serial.c
字号:
#include <REG1210.H> /* special function register 1210 */
#include <stdio.h> /* standard I/O .h-file */
#include <rtx51tny.h> /* RTX-51 tiny functions & defines */
#include <stdlib.h>
#include <string.h>
#include <16b.h>
#include "motorcontrol.h"
void read_command(void)
{
uint xdata address;
uchar xdata temp1[2];
uchar xdata i,j;
uint xdata l,m;
if(h_cmd.buf[h_cmd.exe_p].n==ADDRESS) //如果站地址等于'z'
{
if(h_cmd.buf[h_cmd.exe_p].a==card_addr) //功能地址为板地址
{
switch(h_cmd.buf[h_cmd.exe_p].f) //功能地址
{
case cmdf_read: //读参数
{
if((h_cmd.buf[h_cmd.exe_p].da[0]>=0)&&(h_cmd.buf[h_cmd.exe_p].da[0]<137))
{
Uart0Send(card_addr,cmdf_read,h_cmd.buf[h_cmd.exe_p].da[0],data_buf,h_cmd.buf[h_cmd.exe_p].da[0],1);
}
}break;
case cmdf_write://写参数
{
if((h_cmd.buf[h_cmd.exe_p].da[0]>10)&&(h_cmd.buf[h_cmd.exe_p].da[0]<30))
{
switch(h_cmd.buf[h_cmd.exe_p].da[0]) //功能地址
{
case 11: //输出口高16位
{
data_buf[11]=h_cmd.buf[h_cmd.exe_p].da[1];
output[1]=h_cmd.buf[h_cmd.exe_p].da[1]>>8;
output[0]=h_cmd.buf[h_cmd.exe_p].da[1];
Uart0Send(card_addr,cmdf_write,h_cmd.buf[h_cmd.exe_p].da[0],h_cmd.buf[h_cmd.exe_p].da,1,1);
BUSDEV_BASE_IOOUTPUTC->MSB_32 = output[0];
BUSDEV_BASE_IOOUTPUTC->MSB_24 = output[1];
}break;
case 12: //输出口低16位
{
data_buf[12]=h_cmd.buf[h_cmd.exe_p].da[1];
output[3]=h_cmd.buf[h_cmd.exe_p].da[1]>>8;
output[2]=h_cmd.buf[h_cmd.exe_p].da[1];
Uart0Send(card_addr,cmdf_write,h_cmd.buf[h_cmd.exe_p].da[0],h_cmd.buf[h_cmd.exe_p].da,1,1);
BUSDEV_BASE_IOOUTPUTC->LSB_16 = output[2];
BUSDEV_BASE_IOOUTPUTC->LSB_8 = output[3];
}break;
case 13: //报警
{
data_buf[13]=h_cmd.buf[h_cmd.exe_p].da[1];
Uart0Send(card_addr,cmdf_write,h_cmd.buf[h_cmd.exe_p].da[0],h_cmd.buf[h_cmd.exe_p].da,1,1);
}break;
case 14: //软输入高16位
{
softinput[0]=h_cmd.buf[h_cmd.exe_p].da[1]>>8;
softinput[1]=h_cmd.buf[h_cmd.exe_p].da[1];
data_buf[14]=h_cmd.buf[h_cmd.exe_p].da[1];
Uart0Send(card_addr,cmdf_write,h_cmd.buf[h_cmd.exe_p].da[0],h_cmd.buf[h_cmd.exe_p].da,1,1);
if(0x2000==(data_buf[13]&0x2000))
{
if(!(softinput[0]&clearworkcount)) //清除工作次数
{
workCount=0;
eeprom_buf[0]=workCount>>8;
eeprom_buf[1]=workCount;
eprom_rw = 0;
rw_eeprom(42,eeprom_buf,2); //储存加工次数
data_buf[21]=workCount;
data_buf[13] &=(~(0x2000)); //取消洗盘报警
}
else if(softinput[0]&clearworkcount)
{
data_buf[13] &=(~(0x2000)); //取消洗盘报警
NowGy=9; //工艺
NowGx=1; //工序
data_buf[16]=660;
softinput[1] |= gearQuickUp;
}
}
}break;
case 15: //软输入低16位
{
softinput[2]=h_cmd.buf[h_cmd.exe_p].da[1]>>8;
softinput[3]=h_cmd.buf[h_cmd.exe_p].da[1];
data_buf[15]=h_cmd.buf[h_cmd.exe_p].da[1];
Uart0Send(card_addr,cmdf_write,h_cmd.buf[h_cmd.exe_p].da[0],h_cmd.buf[h_cmd.exe_p].da,1,1);
}break;
case 16: //工艺工序号
{
if((runFlag==0)&&(workCount<data_buf[71])) //工作次数到置工艺9 12。20
{
data_buf[16]=h_cmd.buf[h_cmd.exe_p].da[1];
NowGy=(data_buf[16]-500)/20+1;
NowGx=(data_buf[16]-500)%20+1;
}
Uart0Send(card_addr,cmdf_write,h_cmd.buf[h_cmd.exe_p].da[0],h_cmd.buf[h_cmd.exe_p].da,1,1);
}break;
default:
{
data_buf[h_cmd.buf[h_cmd.exe_p].da[0]]=h_cmd.buf[h_cmd.exe_p].da[1];
eeprom_buf[0]=h_cmd.buf[h_cmd.exe_p].da[1]>>8;
eeprom_buf[1]=h_cmd.buf[h_cmd.exe_p].da[1];
address=(h_cmd.buf[h_cmd.exe_p].da[0])*2;
eprom_rw = 0;
rw_eeprom(address,eeprom_buf,2);
Uart0Send(card_addr,cmdf_write,h_cmd.buf[h_cmd.exe_p].da[0],h_cmd.buf[h_cmd.exe_p].da,h_cmd.buf[h_cmd.exe_p].da[0],1);
}break;
}
}
if((h_cmd.buf[h_cmd.exe_p].da[0]>29)&&(h_cmd.buf[h_cmd.exe_p].da[0]<120))
{
data_buf[h_cmd.buf[h_cmd.exe_p].da[0]]=h_cmd.buf[h_cmd.exe_p].da[1];
EEPROM=1;
DAC8532 =1;
eprom_rw = 0;
eeprom_buf[0]=h_cmd.buf[h_cmd.exe_p].da[1]>>8;
eeprom_buf[1]=h_cmd.buf[h_cmd.exe_p].da[1];
address=(h_cmd.buf[h_cmd.exe_p].da[0])*2;
rw_eeprom(address,eeprom_buf,2);
Uart0Send(card_addr,cmdf_write,h_cmd.buf[h_cmd.exe_p].da[0],h_cmd.buf[h_cmd.exe_p].da,1,1);
if(h_cmd.buf[h_cmd.exe_p].da[0]==69)
{
daFlag=0;
}
}
}break;
case cmdf_write1: //写一个工序参数
{
if((h_cmd.buf[h_cmd.exe_p].da[0]>=500)&&(h_cmd.buf[h_cmd.exe_p].da[0]<=899))
{
DAC8532=1;
j=0;
for(i=0;i<10;i++)
{
eeprom_buf[j]=h_cmd.buf[h_cmd.exe_p].da[i+1]>>8;
eeprom_buf[j+1]=h_cmd.buf[h_cmd.exe_p].da[i+1];
j=j+2;
}
l=((h_cmd.buf[h_cmd.exe_p].da[0]-500)/20)+1; //工艺
m=((h_cmd.buf[h_cmd.exe_p].da[0]-500)%20)+1; //工序
address=l*1000+(m-1)*50;
eprom_rw = 0;
rw_eeprom(address,eeprom_buf,20); //储存一个工序参数
eeprom_buf[0]=h_cmd.buf[h_cmd.exe_p].da[1];
GX_SUM[l]=eeprom_buf[0];
address=500+l;
eprom_rw = 0;
rw_eeprom(address,eeprom_buf,1); //储存一个工艺的工序数
Uart0Send(card_addr,cmdf_write1,h_cmd.buf[h_cmd.exe_p].da[0],h_cmd.buf[h_cmd.exe_p].da,1,10);
}
}break;
case cmdf_read1: //读实时数据
{
if(h_cmd.buf[h_cmd.exe_p].da[0]==0)
{
Uart0Send(card_addr,cmdf_read1,0,data_buf,0,24);
}
}break;
case cmdf_read2: //读电机参数
{
if(h_cmd.buf[h_cmd.exe_p].da[0]==120)
{
Uart0Send(card_addr,cmdf_read2,120,data_buf,120,16);
}
}break;
case cmdf_read3://读工艺设置参数
{
if(h_cmd.buf[h_cmd.exe_p].da[0]==30)
{
Uart0Send(card_addr,cmdf_read3,30,data_buf,30,50);
}
}break;
case cmdf_read4: //读维护设置参数
{
if(h_cmd.buf[h_cmd.exe_p].da[0]==80)
{
Uart0Send(card_addr,cmdf_read4,80,data_buf,80,40);
}
}break;
case cmdf_read5://读工艺参数
{
if((h_cmd.buf[h_cmd.exe_p].da[0]>499)&&(h_cmd.buf[h_cmd.exe_p].da[0]<899))
{
testFlag=1;
r_gy=((h_cmd.buf[h_cmd.exe_p].da[0]-500)/20)+1; //工艺
rallgyFlag=0;
os_send_signal(READ_GY);
}
if(h_cmd.buf[h_cmd.exe_p].da[0]==1000)
{
rallgyFlag=1;
testFlag=1;
os_send_signal(READ_GY);
}
}break;
default:break;
}
}
else if(h_cmd.buf[h_cmd.exe_p].a>=sun_addr&&h_cmd.buf[h_cmd.exe_p].a<=down_tray_addr)//是电机地址
{
switch(h_cmd.buf[h_cmd.exe_p].f) //功能地址
{
case cmdf_read: //读参数
{
motorparameter[0]=0x02;
temp1[0]=h_cmd.buf[h_cmd.exe_p].a;temp1[1]=0;
address=atoi(temp1);
motorparameter[1]=address;
motorparameter[2]=0x86;motorparameter[3]=0x31;motorparameter[4]=0x00;
motorparameter[5]=h_cmd.buf[h_cmd.exe_p].da[0]>>8;
motorparameter[6]=h_cmd.buf[h_cmd.exe_p].da[0];
motorparameter[7]=0x00;motorparameter[8]=0x00;motorparameter[9]=0x00;motorparameter[10]=0x00;
motorparameter[11]=HexBcc(motorparameter, 11);
c_s=1;
}break;
case cmdf_write://写参数
{
if(h_cmd.buf[h_cmd.exe_p].da[0]==0) //写速度
{
switch(h_cmd.buf[h_cmd.exe_p].a)
{
case sun_addr:
{
switch(h_cmd.buf[h_cmd.exe_p].da[1])
{
case 0:
{
SetMotorSpeed(&sun, 0x00,0,1, time_space);
}break;
case 1:
{
SetMotorSpeed(&sun, 0x02,0, h_cmd.buf[h_cmd.exe_p].da[3],time_space);
}break;
case 2:
{
SetMotorSpeed(&sun, 0x06,h_cmd.buf[h_cmd.exe_p].da[2], h_cmd.buf[h_cmd.exe_p].da[3], time_space);
}break;
}
}break;
case radula_addr:
{
switch(h_cmd.buf[h_cmd.exe_p].da[1])
{
case 0:
{
SetMotorSpeed(&gear, 0x00,0, 1, time_space);
}break;
case 1:
{
SetMotorSpeed(&gear, 0x02,0, h_cmd.buf[h_cmd.exe_p].da[3],time_space);
}break;
case 2:
{
SetMotorSpeed(&gear, 0x06,h_cmd.buf[h_cmd.exe_p].da[2], h_cmd.buf[h_cmd.exe_p].da[3], time_space);
}break;
}
}break;
case up_tray_addr:
{
switch(h_cmd.buf[h_cmd.exe_p].da[1])
{
case 0:
{
SetMotorSpeed(&up, 0x00,0, 1, time_space);
}break;
case 1:
{
SetMotorSpeed(&up, 0x02,0, h_cmd.buf[h_cmd.exe_p].da[3], time_space);
}break;
case 2:
{
SetMotorSpeed(&up, 0x06,h_cmd.buf[h_cmd.exe_p].da[2], h_cmd.buf[h_cmd.exe_p].da[3],time_space);
}break;
}
}break;
case down_tray_addr:
{
switch(h_cmd.buf[h_cmd.exe_p].da[1])
{
case 0:
{
SetMotorSpeed(&down, 0x00,0, 1, time_space);
}break;
case 1:
{
SetMotorSpeed(&down, 0x02,0, h_cmd.buf[h_cmd.exe_p].da[3],time_space);
}break;
case 2:
{
SetMotorSpeed(&down, 0x06,h_cmd.buf[h_cmd.exe_p].da[2], h_cmd.buf[h_cmd.exe_p].da[3], time_space);
}break;
}
}break;
}
}
else
{
motorparameter[0]=0x02;
temp1[0]=h_cmd.buf[h_cmd.exe_p].a;temp1[1]=0;
address=atoi(temp1);
motorparameter[1]=address;
motorparameter[2]=0x86;motorparameter[3]=0x32;motorparameter[4]=0x00;
motorparameter[5]=h_cmd.buf[h_cmd.exe_p].da[0]>>8;
motorparameter[6]=h_cmd.buf[h_cmd.exe_p].da[0];
motorparameter[7]=h_cmd.buf[h_cmd.exe_p].da[1]>>8;
motorparameter[8]=h_cmd.buf[h_cmd.exe_p].da[1];
motorparameter[9]=h_cmd.buf[h_cmd.exe_p].da[2]>>8;
motorparameter[10]=h_cmd.buf[h_cmd.exe_p].da[2];
motorparameter[11]=HexBcc(motorparameter, 11);
c_s=1;
}
}break;
default:break;
}
}
}
h_cmd.cont--;
h_cmd.exe_p++;
h_cmd.exe_p=h_cmd.exe_p&3;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -