📄 yc.c
字号:
for(n=0;n<dc2_len;n++) *pt++=dc2_temp[n];
for(n=0;n<4;n++) *pt++=maohao[n];
value_temp=yc.DC[1];
value_temp=((value_temp*2.5)/4096)*4*mandu_dc2;
dc2_value=value_temp*100;
for(n=0;n<4;n++) *pt++=number[dc2_value/1000][n];
for(n=0;n<4;n++) *pt++=number[dc2_value%1000/100][n];
for(n=0;n<4;n++) *pt++=d_point[n];
for(n=0;n<4;n++) *pt++=number[dc2_value%1000%100/10][n];
for(n=0;n<4;n++) *pt++=number[dc2_value%1000%100%10][n];
//for(n=0;n<4;n++) *pt++=fu[n];
for(n=0;n<4;n++) *pt++=enter[n];
dc2_ptlen=dc2_len+28;
}
if(ps_leng!=0)
for(n=0;n<ps_leng;n++)*pt++=ps_name[n];
*pt=26; //^z 短信结束符
len=dc1_ptlen+dc2_ptlen+ps_leng+3;//发送缓冲区的长度
}
__disable_interrupt();
com_tx_point[1]=0;
com_tx_count[1]=30+len;
__enable_interrupt();
}
void MainTxdGsmhandle()
{
entry_time++;
if (sms_flag==SMS_CFG)
{
sms_flag=STEP_SMS_CFG;
GsmCfg();
return;
}
else if (sms_flag==SMS_CFG_OK)
{
GsmTxdHead();
sms_flag=STEP_CFG_OK;
return;
}
else if (sms_flag==SMS_SEND_INFO)
{
GsmSendInfo();
sms_flag=STEP_SEND_INFO;
return;
}
}
void gprs_tx_handle(INT8U i)
{
if(sms_at_flag==0x55)
{
sms_at_flag=0;
Gsmcheck();
return;
}
if(poweroff==0x55)
{
Gsmpoweroff();
poweroff=0;
poweroff_flag=0x55;
return;
}
if (MainTxdGsmProcc==0x55)
{
sms_repeat_flag=0x55; /*短信重发标志*/
MainTxdGsmhandle(); /** 主动发送短信处理过程**/
if (sms_flag==STEP_SEND_INFO)
{
sms_wait_begin=0x55; /*发送一个短信后,延时10S后,再发第二个短信*/
MainTxdGsmProcc=0;
sms_flag=0;
}
return;
}
}
void bpq_tx_handle(INT8U port)
{
INT8U *pr;
cmd_pnt++;
if (cmd_pnt>=5) cmd_pnt=0;
com_tx_time[port]=1000;
pr=&com0_tx_buf[0];
pr[0]=0x2a; //*
pr[1]=0x30;
pr[2]=0x31; //变频器编号 默认为01
pr[3]=bpq_cmd[cmd_pnt]; //指令代码
pr[4]=sum_check(&pr[0],4);
pr[5]=0x0d; //终止代码
pr[6]=0x0a; //终止代码
__disable_interrupt(); // Disable interrupts
com_tx_point[port]=0;
com_tx_count[port]=7;
__enable_interrupt(); // Enable interrupts
}
void bpq_rx_handle(INT8U port)
{
INT8U *pr;
INT8U cmd,sum;
INT16U a,b,c,d;
INT32U e;
INT16U len;
//pr=&com_rx_buf[port][0];
pr=&com0_rx_buf[0];
cmd=pr[3];
len=com_rx_count[port];
com_rx_count[port]=0;
if (len==0) return;
if ((pr[0]!=0x2a)) return;
sum=sum_check(&pr[0],len-3);
if(sum!=pr[len-3]) return;
if(!(bittst(&yx_now[0],0))) //在有交流电的情况下采集
{
if(cmd==0x4b) //输出电压
{
a=(pr[5]-0x30)*1000;
b=(pr[6]-0x30)*100;
c=(pr[7]-0x30)*10;
d=pr[8]-0x30;
bpq_v=a+b+c+d; //10倍的电压数值
}
else if(cmd==0x44) //输出电流
{
a=(pr[5]-0x30)*1000;
b=(pr[6]-0x30)*100;
c=(pr[7]-0x30)*10;
d=pr[8]-0x30;
bpq_i=a+b+c+d; //10倍的电流数值
}
else if(cmd==0x43) //输出频率
{
a=(pr[5]-0x30)*1000;
b=(pr[6]-0x30)*100;
c=(pr[7]-0x30)*10;
d=pr[8]-0x30;
bpq_f=a+b+c+d; //100倍的频率数值
}
else if(cmd==0x4c) //水压
{
a=(pr[5]-0x30)*1000;
b=(pr[6]-0x30)*100;
c=(pr[7]-0x30)*10;
d=pr[8]-0x30;
e=a+b+c+d;
e=(100*e)/1023;
e=(e*p_full)/100; //压力=(码值/1024 )*满度
e=e<<1;
bpq_p = e&0xffff; //100倍的压力数值
}
else if(cmd==0x41) //接收到变频器的报警信号报文
{
a=(pr[7]-0x30)*10;
b=(pr[8]-0x30)*1;
e=a+b;
if(e==0)
{
alarm_time=0; //没有报警信号
}
if(alarm_time<2)
{
if(e==5)
{
asp_buf[asp_wtp]=2;
asp_wtp=(asp_wtp+1) & MOD_SOE; //加速时过电流报警
}
else if(e==19)
{
asp_buf[asp_wtp]=3;
asp_wtp=(asp_wtp+1) & MOD_SOE; //散热片温度异常报警
}
else
{
if(e!=0)
{
asp_buf[asp_wtp]=4;
asp_wtp=(asp_wtp+1) & MOD_SOE; //其它代号为系统异常报警
}
}
}
}
}
else
{
bpq_v=0;
bpq_i=0;
bpq_f=0;
bpq_p=0;
}
}
void mmi_tx_handle(INT8U port,INT8U *p1,INT16U len)
{
INT8U i,*p2;
com_tx_time[port]=1000;
p2=&com1_tx_buf[0];
for(i=0;i<len;i++)
{
p2[i]=p1[i];
}
__disable_interrupt(); // Disable interrupts
com_tx_point[port]=0;
com_tx_count[port]=len;
__enable_interrupt(); // Enable interrupts
}
void mmi_rx_handle(INT8U port)
{
INT8U *pr,*pt;
INT8U cmd;
INT16U len,fcs;
INT16U tx_len,addr;
INT16S *p;
INT8U *p2;
len=com_rx_count[port];
com_rx_count[port]=0;
pr=&com1_rx_buf[0];
pt=&com1_tx_buf[0];
cmd=pr[2];
if (cmd==ALL_DATA_DOWN) //申请数据
{
pt[2]=ALL_DATA_UP; //cmd
pt[5]=0; // start_addrl
pt[6]=0;
memcpy(pt+9,&yc.DC[0],12);
pt[21]=bpq_v&0xff; //变频器输出电压
pt[22]=bpq_v>>8;
pt[23]=bpq_i&0xff; //变频器输出电流
pt[24]=bpq_i>>8;
pt[25]=bpq_f&0xff; //变频器输出频率
pt[26]=bpq_f>>8;
pt[27]=bpq_p&0xff; //变频器输出压力
pt[28]=bpq_p>>8;
pt[29]=0;
pt[30]=0;
pt[31]=0;
pt[32]=0;
memcpy(pt+33,&yx_tx[0],YX_BYTE_NUM);
pt[34]=0;
pt[35]=0;
pt[36]=0;
tx_len=28; //贞长
}
else if (cmd==WR_MEM_DOWN) //写内存
{
addr=((INT16U)pr[6]<<8)+pr[5];
len=len-12;
com_write_mem(addr,&pr[9],len);
pt[2]=WR_MEM_DOWN; //cmd
pt[5]=pr[5]; //start_addrl
pt[6]=pr[6];
pt[9]=wt_mem_err;
tx_len=1; //贞长
}
else if (cmd==RD_MEM_DOWN) //读内存
{
addr=((INT16U)pr[6]<<8)+pr[5];
len=pr[9];
if (len>128) len=128;
if (len<2) len=2;
if (addr>=0x200&&addr<=0x9ff)
{
p=(INT16S *)addr;
word_to_byte(p,&pt[9],len>>1);
pt[2]=RD_MEM_DOWN; //cmd
pt[5]=pr[5]; //start_addrl
pt[6]=pr[6];
tx_len=len; //贞长
}
else if (addr>=flash_addr_b&&addr<flash_addr_a)
{
p=(INT16S *)addr;
word_to_byte(p,&pt[9],len>>1);
pt[2]=RD_MEM_DOWN; //cmd
pt[5]=pr[5]; //start_addrl
pt[6]=pr[6];
tx_len=len; //贞长
}
else if (addr>=flash_addr_a&&addr<flash_addr_ab)
{
p2=(INT8U *)addr;
byte_to_byte(p2,&pt[9],len);//填充发送数据帧
pt[2]=RD_MEM_DOWN; //cmd
pt[5]=pr[5]; //start_addrl
pt[6]=pr[6];
tx_len=len; //贞长
}
else
{
pt[2]=RD_MEM_DOWN; //cmd
pt[5]=pr[5]; //start_addrl
pt[6]=pr[6];
tx_len=0; //贞长
}
}
else
{
com_rx_count[port]=0;
return;
}
tx_len+=12;
pt[0]=1; //id
pt[1]=0;
pt[3]=tx_len&0xff;
pt[4]=tx_len>>8;
pt[7]=0;
pt[8]=0; // sch
pt[tx_len-3]=sys_status & 0xff;
fcs=PPPfcs16(pt,tx_len-2);
pt[tx_len-2]=fcs &0xff;
pt[tx_len-1]=fcs>>8;
mmi_tx_handle(port, pt,tx_len);
}
void gprs_rx_handle(INT8U port)
{
INT8U tp,i,id;
INT16U len,fcs;
len=com_rx_count[port];
if (len<=1) return;
//id=com_rx_buf[port][0];
id=com1_rx_buf[0];
//fcs=PPPfcs16(&com_rx_buf[port][0],len-2);
fcs=PPPfcs16(&com1_rx_buf[0],len-2);
//if ( id==0x01&& (fcs ==((com_rx_buf[port][len-1]<<8)+com_rx_buf[port][len-2])))
if ( id==0x01&& (fcs ==((com1_rx_buf[len-1]<<8)+com1_rx_buf[len-2])))
{
mmi_rx_handle(port); /*与手持机通讯*/
mmi_work_flag=0x55;
mmi_wait_time=0;
com_rx_count[port]=0;
return;
}
else
{
mmi_work_flag=0;
//tp=GsmRxdHandle(&com_rx_buf[port][0],len);
tp=GsmRxdHandle(&com1_rx_buf[0],len);
if (tp==1)
{
//for (i=0;i<len;i++) com_rx_buf[port][0]=0;
for (i=0;i<len;i++) com1_rx_buf[0]=0;
com_rx_count[port]=0;
return;
}
else com_rx_count[port]=0;
}
com_rx_count[port]=0;
}
void com_rx_handle(INT8U port)
{
com_rx_ok[port]=0;
if (port==1) gprs_rx_handle(port);
else if (port==0) bpq_rx_handle(port);
}
void check_sms()
{
sms_check_time++;
if(sms_check_time>=10) //过一定时间检查模块运行情况
{
sms_check_time=0;
if((sms_flag!=SMS_CFG)&&(sms_flag!=SMS_CFG_OK)&&(sms_flag!=SMS_SEND_INFO))
{
sms_at_flag=0x55;
sms_check_flag=0x55;
}
}
}
void time_second_handle()
{
if((sms_start==0x55)&&(sms_wait_begin!=0x55)&&(mmi_work_flag!=0x55))
{
if(sms_check_flag==0x55)
{
check_wait_time++;
if(check_wait_time>=3)
{
check_wait_time=0;
sms_check_time=0;
sms_check_flag=0;
poweroff=0x55;
}
}
else check_sms();
}
if (poweroff_flag==0x55)
{
gsmint_cnt++;
if(gsmint_cnt>=5)
{
gsmint_cnt=0;
poweroff_flag=0;
gsmint_flag=0x55;
}
}
check_p_pnt++;
if(check_p_pnt>=12) //每12秒检查是否压力报警
{
check_p_pnt=0;
if(bpq_p>=p_alarm)
{
asp_buf[asp_wtp]=1;
asp_wtp=(asp_wtp+1) & MOD_SOE;
}
}
if(sms_start==0) //装置上电初始运行时GSM模块寻找网络大约需要15秒开始正常工作
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -