资源描述:
《改进的西门子PPI通讯协议程序,支持主和从!做主时,PLC不用写一行通讯程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、改进的西门子PPI通讯协议程序,支持主和从!做主时,PLC不用写一•行通讯程序//*******************木程序实现两个串行口可以同时异步通讯,在MEGA162,MEGA64上成功实现//^Purpose:当PPI本机为从时,接受到了主的命令,命令有两种,申请和确认//**uc.rec.len是长度,不是下标。先效验返冋为发送串长(下标),返冋Oxff为不发送UCHARppi_reqframe_an1ys_s1aver(UCHARuc_ch,UCHAR*puc_rec_buf,UCHARuc_
2、rec_len,UCHAR*puc_send_buf,ucharme_address){staticucharst_uc_ppi_var_type[MCU_UART_NUM]={2,2};//传输的数据类型staticucharst_uc_ppi_varnum[MCU_UART_?^UM];//传输的数据个数staticuintstui_ppimevaradd[MCU_UARTNUM];staticucharstucppiconnecttype[MCUUARTNUM]=(0,0};UCHARucp_send
3、_count,uc_count;U1NTul6;UCHARuc_midl,uc_mid2,uc_mid3;if((*puc_rec_buf)==Ox10)//确认命令{if((uc_rec_lcn!=6)
4、
5、(*(puc_rec_buf+5)!二0x16))//长度不对,或者结束符号不对{return(Oxfe);if(*(pucrecbuf+1)!=meaddress){return(Oxfe);}if(uc_ppi_addtest(puc_rec_buf+l,uc_rec_len-3)!=*(puc_r
6、ec_buf+uc_rec_len-2))//效验{return(Oxfe);}//1003025c6116//if(st_uc_ppi_connect_typc[uc_ch]==0)//还没连接//{//return(Oxfe);//}//以上是2008.6.24修改,因为如果上电或其他I大1素//首发DC命令,再发49命令,以上导致对49命令无响应(因为无连接),而PLC死循ucp_send_count=0;if(*(puc_rec_buf+3)!=0x49)//最多出现的是5C,而7C也见过uc_co
7、unt=st_uc_ppi_var_num[uc_ch];//此后的计算结果,uc_count将成为字节数uc_midl=st_ucjppi_var_type[uc_ch]:if(uc_midl==4)//如果是字{uc_count*二2;}elseif(ucmidi==6)//如果是双字{uccount*=4;}elseif(uc_midl==1)//位{return(Oxfe);}if((uc_count+26)>=conini_array_max_xb){return(Oxfe);}if(st_uc_
8、ppi_connect_type[uc_ch]==1)//连接的性质,主PLC读本机uc_midl=0x15+uc_count;uc_mid2二4+uc_count;uc_micI3=0x04;}else0x12;0x01;0x05;ucmidiucmid2uc_mid3*(puc_send*(puc_send_buf*(puc_send_buf*(pucsendbuf*(puc_scnd_buf*(puc_scnd_buf*(puc_send_buf*(puc_send_buf*(puc_send_buf
9、*(pucsendbuf*(pucsendbuf*(pucsendbufbufucp_send_count++)=0x68;ucp_send_count++)=uc_micll;ucp_send_count++)ucpsendcount++)ucp_scnd_count++)ucp_scnd_count++)ucp_send_count++)ucp_send_count++)ucp_send_count++)ucpsendcount++)ucpsendcount++)ucpsendcount++)==uc_
10、midl;=0x68;=*(puc_rec_buf+2);//对方地址=*(puc_rec_buf+1);//本机地址=0x08;=0x32;=0x03;=0x00;=0x00;ucppicommcount[ucch];//通讯次数*(puc_send_buf+ucp_send_count++)ucjppi_conmi_count[uc_ch];〃主机來是多少,返回就是多少*(puc_sendbuf*(pucse