📄 main.c
字号:
/**************************************************************************
**
** 文件: Main.c
** 描述: 该文件完成一些初始化工作,发送设备声明报文,并不断查询以太网接收器的状态
**
**************************************************************************/
/**************************************************************************
**
** 备注: (1)规定时间内未收到正响应或收到负响应的出错处理函数未给出
(2)时间同步协议未实现
(3)以组态好后接收到的上位机非周期数据声明作为本地通信宏周期的开始
(4)只对常用的信息进行了组态,链接关系不清晰
(5)兼容了上位机程序,但要做部分修改
(6)对接收到的下位机的周期报文只作简单的存储(长度+数据)
(7)应用层只定义了常用的服务报文结构,其他服务报文的结构参见Readme文档
(8)由于单片机RAM严重不足,包的最大长度、单次域下载的最大数据长度、信息分发的最大数据长度都作了压缩
**
**************************************************************************/
//include library files
#include <stdio.h>
#include <macros.h>
#include <iom128v.h>
//include user defined files
#include "Define.h"
#include "Global_Variable.h"
#include "Extern_Function.h"
#include "RTL8019.h"
#include "IP_UDP.h"
//静态设定的地址标识
uchar Dest_IP[4]={192,168,140,100}; //上位机IP地址,填入管理信息库的链接对象
uchar Dest_MAC[6]; //上位机MAC地址,通过上位机的应答报文获取
uchar My_IP[4]={192,168,140,206}; //本地IP地址
uchar Mask[4]={255,255,255,0}; //子网掩码
uchar Gate[4]={58,198,109,254};
uchar My_MAC[6]={0,0,192,168,140,206}; //本地MAC地址,网卡初始化时,填入网卡的指定RAM
uchar Bro_IP[4]={192,168,140,255}; //广播IP地址
uchar Bro_MAC[6]={0xff,0xff,0xff,0xff,0xff,0xff}; //广播MAC地址
uchar My_DeviceID[24]={'3','1','5','1','C','D','P','4','G','P','9','A','2','2', //设备型号
'S','H','2','0','0','6','0','0','1','2'}; //出厂编号 //设备ID
//定义发送与接收缓冲区
uchar Send_Buf[Max_Size]; //发送缓冲区
uchar Rece_Buf[Max_Size]; //接收缓冲区
//定义域下载数据缓冲区
uchar DomainDownload_Buf[DomainDownload_Max_Size];
//定义信息分发数据的接收缓冲区
uchar Dis_Data[Dis_DataLen];
//本地设备是否已组态的标志
uchar Ready_Ed=FALSE;
//是否已经启动通信宏周期的标志
uchar Macro_Cycle_Ed=FALSE;
void main(void)
{
uint type,packetlen;
Delay(1); //延时5ms,函数见RTL8019.c
MCU_Init(); //MCU初始化,函数见AVR.c
//UART_Init(); //串口初始化
RTL8019_Init(); //网卡初始化,函数见RTL8019.c
Delay(2);
MIB_Init(); //EPA管理信息库的初始化
SEI(); //CPU开中断
writeRTL(CR,0x22); //启动网卡芯片工作
while(readRTL(CR)!=0x22);
//UART_Main();
//UART_CheckTimer(); //启动串口工作
Send_EM_DeviceAnnunciation(); //发送设备声明请求
T1_Flag=T1_Interval;
Timer1_Init(15000);//定时15s
while(1)
{
if((packetlen=Receive_Packet(Rece_Buf))>0)
{
Set_R_Pointer(); //函数见Pointer.c
type=ntohs(R_Ehe->Ether_Type);
if(type==Ether_Type_ARP)
Receive_ARP(packetlen);
else if(type==Ether_Type_IP)
Receive_IP(packetlen);
}
}
}
/******************* End Of File **********************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -