⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zhu1126_96.lst

📁 动力环境监控系统 动力环境监控系统
💻 LST
📖 第 1 页 / 共 5 页
字号:
 901   2      			ReceCheck = 4096 * toint(ReceSbuf2[27]) + 256 * toint(ReceSbuf2[28]) + 16 * toint(ReceSbuf2[29]) + toin
             -t(ReceSbuf2[30]);
 902   2      			switch( ReceCheck )	//是否是正确的波特率
 903   2      			{
 904   3      				case	1200:	NewBaud=1;break;
 905   3      				case	2400:	NewBaud=2;break;
 906   3      				case	4800:	NewBaud=3;break;
 907   3      				case	9600:	NewBaud=4;break;
 908   3      				case	19200:	NewBaud=5;break;
 909   3      				default	:
 910   3      					state = 06;
 911   3      					NewBaud = 0;
 912   3      					BaudAnsFlag = 0;
 913   3      					break;
 914   3      			}
C51 COMPILER V6.02  ZHU1126_96                                                             12/11/2003 11:17:47 PAGE 16  

 915   2      			portBaud = 2 ;		//要修改波特率的串口
 916   2      			break;
 917   2      		case RTdataCom:			//实时数据命令
 918   2      			if(DuanKaiTiao&&JiaoTiFlag)	//有断开历史记录,该发送断开历史记录
 919   2      			{
 920   3      				JiaoTiFlag = 0;		//实时历史记录交替发送标志位
 921   3      				AddLed=(DuanKaiZhi/64)+(AddLed&0xF0);//确定扇区
 922   3      				ledled = AddLed;	//选通扇区
 923   3      				kk0=DuanKaiZhi%64*0x400;	//第几条,哪k
 924   3      				if(DuanKaiZhi%64<8)
 925   3      				{
 926   4      					for(kk=0;kk<33+AIDIsum;kk++)//断开历史记录COPY到发送缓冲区
 927   4      					{
 928   5      						RamRom_Convert= 0;//切换为RAM628512操作
 929   5      						RamIO_Convert = 0;
 930   5      						data00=XBYTE[kk0+kk];//切换
 931   5      						RamRom_Convert= 1;//切换为RAM628128及IO口操作
 932   5      						RamIO_Convert = 1;
 933   5      						SendSbuf2[kk]=data00;	//
 934   5      					}
 935   4      				}
 936   3      				else
 937   3      				{
 938   4      					RamRom_Convert= 1;//切换为RAM628512操作
 939   4      					RamIO_Convert = 0;
 940   4      					for(kk=0;kk<33+AIDIsum;kk++)//断开历史记录COPY到发送缓冲区
 941   4      					{
 942   5      						SendSbuf2[kk]=XBYTE[kk0+kk];	//
 943   5      					}
 944   4      				}
 945   3      				RamRom_Convert= 1;//切换为RAM628512操作
 946   3      				RamIO_Convert = 1;
 947   3      				SendSbuf2[32+AIDIsum]='\n';	//字符结束符
 948   3      				DuanKaiTiao--;	//调整断开历史记录条数
 949   3      				if(DuanKaiZhi)	//调整断开历史记录存放位置
 950   3      				{
 951   4      					DuanKaiZhi--;//
 952   4      				}
 953   3      				else
 954   3      				{
 955   4      					DuanKaiZhi=DuanKaiRongL-1;	//断开历史记录条数容量
 956   4      				}
 957   3      				bNeedSend2 = 1;				//启动发送
 958   3      				ReceCount2 = 0;				//串口1接收计数器清零
 959   3      				memset( ReceSbuf2, 0, 10 );		//串口1接收缓冲区清零
 960   3      				return;
 961   3      			}
 962   2      			else	//没有断开历史记录,断开后第一次连上发送实时数据,一条实时,一条历史
 963   2      			{
 964   3      				JiaoTiFlag = 1;		//实时历史记录交替发送标志位
 965   3      				TemLen= 32+AIDIsum;	//数据包长度
 966   3      				typeCom = RTdataAns;
 967   3      				memcpy( SendSbuf2+27,RealTimeData,AIDIsum+12 );//读取实时数据(包括AIDI标志字符)
 968   3      			}
 969   2      			break;
 970   2      		case ControlCom:		//遥调遥控命令
 971   2      			typeCom = ControlAns;
 972   2      			ReceConFlag = 1;		//收到控制标志位(闪灯用)
 973   2      			TemLen = 20 + 22;	//
 974   2      			for( i = 27;i < 37;i++)	//保存参数
 975   2      			{
 976   3      				SendSbuf2[i] = ReceSbuf2[i];
C51 COMPILER V6.02  ZHU1126_96                                                             12/11/2003 11:17:47 PAGE 17  

 977   3      			}
 978   2      			DotType = 16 * toint(ReceSbuf2[27]) + toint(ReceSbuf2[28]);	//测点类型
 979   2      			DotChunnel = 16 * toint(ReceSbuf2[31]) + toint(ReceSbuf2[32]);	//接收测点号(测点号不大0xFF)
 980   2      			controlFlag = 1;		//要发控制标志位置一
 981   2      			if( DotType == TypeAO )		//测点量测试
 982   2      			{
 983   3      				if(DotChunnel>AOsum-1)	//?????????是否减1
 984   3      				{
 985   4      					state=0x08;	//参数出错
 986   4      					controlFlag = 0;
 987   4      				}
 988   3      				DotModule = 0x1F-B33ID;	//测点模块
 989   3      			}
 990   2      			else if( DotType == TypeDO )
 991   2      			{
 992   3      				if( DotChunnel>DOsum-1)	//?????????是否减1
 993   3      				{
 994   4      					state=0x08;	//参数出错
 995   4      					controlFlag = 0;
 996   4      				}
 997   3      				for( j = 0;j < Broadsum;j++ )
 998   3      				{
 999   4      					if( DotChunnel < DOarr[j] )
1000   4      					{
1001   5      						DotModule=j;	//查找到模块地址
1002   5      						break;
1003   5      					}
1004   4      					else
1005   4      					{	DotChunnel-=DOarr[j];}
1006   4      				}
1007   3      			}	//测点号错
1008   2      			else					//测点类型校验
1009   2      			{
1010   3      				state=0x07;			//测点类型出错
1011   3      				controlFlag = 0;
1012   3      			}
1013   2      			Dotparam = 4096 * toint(ReceSbuf2[33])+256 * toint(ReceSbuf2[34]) + 16 * toint(ReceSbuf2[35]) + toint(R
             -eceSbuf2[36]);
1014   2      			break;
1015   2      		case HistoryNuCom:	//查询历史记录条数
1016   2      			typeCom = HistoryNuAns;
1017   2      			TemLen= 20 + 12 + 4;	//数据包长度
1018   2      			if(ZhengChTiao>ZhengChRongL)
1019   2      			{
1020   3      				memcpy(SendSbuf2+27,"0000",4);
1021   3      				state = 6;		//参数出错
1022   3      				ZhengChZhi=0;
1023   3      				ZhengChTiao=0;
1024   3      			}
1025   2      			else
1026   2      			{
1027   3      				hex2asc1( SendSbuf2+27,ZhengChTiao);	//曲线历史记录条数
1028   3      			}
1029   2      			break;
1030   2      		case HistoryNoCom:	//查询第n条曲线历史记录
1031   2      			kk = 0;
1032   2      			for(i=0;i<4;i++)//存放地址
1033   2      			{
1034   3      				kk=kk*16+toint(ReceSbuf2[27+i]);
1035   3      			}
1036   2      			if(kk>=ZhengChTiao)
1037   2      			{
C51 COMPILER V6.02  ZHU1126_96                                                             12/11/2003 11:17:47 PAGE 18  

1038   3      				TemLen= 36;	//数据包长度
1039   3      				typeCom=HistoryNoAns;
1040   3      				state=6;
1041   3      				break;
1042   3      			}
1043   2      			AddLed = (AddLed&0xF0)+kk/64+4;		//选通扇区
1044   2      			ledled = AddLed;	//选通扇区
1045   2      			kk0 = kk%64*0x400;	//第几条,哪k
1046   2      			if(kk%64<8)
1047   2      			{
1048   3      				for(kk=0;kk<AIDIsum+33;kk++)//断开历史记录COPY到发送缓冲区
1049   3      				{
1050   4      					RamRom_Convert= 0;//切换为RAM628512操作
1051   4      					RamIO_Convert = 0;
1052   4      					data00=XBYTE[kk0+kk];//切换
1053   4      					RamRom_Convert= 1;//切换为RAM628128及IO口操作
1054   4      					RamIO_Convert = 1;
1055   4      					SendSbuf2[kk]=data00;	//
1056   4      				}
1057   3      			}
1058   2      			else
1059   2      			{
1060   3      				RamRom_Convert= 1;//切换为RAM628128及IO口操作
1061   3      				RamIO_Convert = 0;
1062   3      				for(kk=0;kk<AIDIsum+33;kk++)//断开历史记录COPY到发送缓冲区
1063   3      				{
1064   4      					SendSbuf2[kk]=XBYTE[kk0+kk];	//
1065   4      				}
1066   3      			}
1067   2      			RamRom_Convert= 1;//切换为RAM628512操作
1068   2      			RamIO_Convert = 1;
1069   2      			SendSbuf2[AIDIsum+32]='\n';
1070   2      			bNeedSend2 = 1;				//启动发送
1071   2      			ReceCount2 = 0;				//串口1接收计数器清零
1072   2      			memset( ReceSbuf2, 0, 20 );		//串口1接收缓冲区清零
1073   2      			return;					//切换取出曲线历史记录送发送缓冲区
1074   2      		default :
1075   2      			state = 3;		//命令类型有错
1076   2      			break;
1077   2      	}
1078   1      	SendSbuf2[0] = 0x7E;			//起始符
1079   1      	SendSbuf2[1] = VERh;			//版本号
1080   1      	SendSbuf2[2] = VERl;			//版本号
1081   1      	SendSbuf2[3] = 0x30;			//扩展地址(随意)
1082   1      	SendSbuf2[4] = 0x30;
1083   1      	hex2asc0( SendSbuf2 + 5, Read_ID() );	//采集箱地址
1084   1      	hex2asc0( SendSbuf2 + 7, typeCom );	//命令类型
1085   1      	hex2asc0( SendSbuf2 + 9, state );	//返回状态
1086   1      	hex2asc1( SendSbuf2 + 11, TemLen-20 );	//数据块长度
1087   1      	memcpy( SendSbuf2+15, ReceSbuf2+15, 12);	//日期时间
1088   1      	SumCheck=CrcCheck(SendSbuf2+1,TemLen-6);//计算CRC
1089   1      	hex2asc1( SendSbuf2+TemLen-5,SumCheck);	//CRC校验
1090   1      	SendSbuf2[TemLen-1] = '\r';		//结束符
1091   1      	SendSbuf2[TemLen] = '\n';		//停止发送符
1092   1      	bNeedSend2 = 1;				//启动发送
1093   1      	ReceCount2 = 0;				//串口0接收计数器清零
1094   1      	memset( ReceSbuf2, 0, 20 );		//串口2接收缓冲区清零
1095   1      }
1096          
1097          
1098          void TurnOnCom(uchar call00)		//轮询点名,参数是板地址
1099          {
C51 COMPILER V6.02  ZHU1126_96                                                             12/11/2003 11:17:47 PAGE 19  

1100   1      	uchar leni=0;
1101   1      	uint  crci;
1102   1      	uchar xdata PreSbuf00[] = "04100000000\r\n";
1103   1      	PreSbuf00[0] = 0x1F - call00;	//从模块地址
1104   1      	crci = CrcCheck(PreSbuf00, 7);	//CRC校验
1105   1      	hex2asc1( PreSbuf00+7, crci);	//crc校验高八bits
1106   1      	memcpy( SendSbuf0, PreSbuf00, sizeof(PreSbuf00) );//送发送缓冲区
1107   1      	SendCount0 = 0;
1108   1      	ReceCount0 = 0;
1109   1      	TB8 = 1;			//发送地址
1110   1      	SBUF = SendSbuf0[SendCount0++];	//启动发送
1111   1      	lockFlagDn = 1;			//下发上锁
1112   1      }
1113          
1114          void ControlComm()		//下发遥控遥调命令
1115          {
1116   1      	uchar leni=0;
1117   1      	uint  crci;
1118   1      	uchar xdata PreSbuf00[]="0430008HHHHGGGG0000\r\n";
1119   1      	controlFlag = 0;
1120   1      	PreSbuf00[0]=0x1F-DotModule;		//从模块地址
1121   1      	hex2asc0( PreSbuf00 + 7, DotType );	//测点类型
1122   1      	hex2asc0( PreSbuf00 + 9, DotChunnel );	//测点通道
1123   1      	hex2asc1( PreSbuf00 + 11, Dotparam );	//测点参数
1124   1      	crci=CrcCheck( PreSbuf00, 15 );		//CRC校验
1125   1      	hex2asc1( PreSbuf00 + 15,crci );	//crc校验;
1126   1      	memcpy( SendSbuf0, PreSbuf00, sizeof(PreSbuf00) );//送发送缓冲区
1127   1      	ReceCount0 = 0;
1128   1      	SendCount0 = 0;
1129   1      	TB8 = 1;			//发送地址
1130   1      	SBUF = SendSbuf0[SendCount0++];	//启动发送
1131   1      	lockFlagDn = 1;			//下发上锁
1132   1      }
1133          
1134          void timeout0()	//超时,送FFFF无效数据
1135          {
1136   1      	FalseTime0=0;
1137   1      	memset(RealTimeData+6,0x46,B00AI*4);		//AI量
1138   1      	memset(RealTimeData+AIsum+12,0x46,B00DI/2);		//DI量
1139   1      }
1140          
1141          void timeout1()	//超时,送FFFF无效数据
1142          {
1143   1      	FalseTime1=0;
1144   1      	memset(RealTimeData+6+B00AI*4,0x46,B11AI*4);	//AI量
1145   1      }
1146          
1147          void timeout2()	//超时,送FFFF无效数据
1148          {
1149   1      	FalseTime2=0;
1150   1      	memset(RealTimeData+6+B00AI*4+B11AI*4,0x46,B22AI*4);	//AI量
1151   1      }
1152          void timeout3()	//超时,送FFFF无效数据
1153          {
1154   1      	FalseTime3=0;
1155   1      	memset(RealTimeData+6+AIsum-B33AI*4,0x46,B33AI*4);	//AI量
1156   1      	memset(RealTimeData+12+AIsum+B00DI/2,0x46,B33DI/2);	//DI量
1157   1      }
1158          
1159          void SendPermit1()
1160          {
1161   1      	#ifdef	OpenEn
C51 COMPILER V6.02  ZHU1126_96                                                             12/11/2003 11:17:47 PAGE 20  

1162   1      	SendEn |= 0x02;
1163   1      	#else
              	SendEn |= 0x06;
              	#endif
1166   1      	XBYTE[0xE000] = SendEn;	//允许发送进中断1
1167   1      	SendCount1 = 0;		//串口1发送计数器清零
1168   1      	SendingFlag1 = 1;
1169   1      	if( ResetAnsFlag )	//系统复位(死循环)
1170   1      	{
1171   2      		ResetAnsFlag=0;
1172   2      		while(1);
1173   2      	}
1174   1      }
1175          
1176          void SendPermit2()
1177          {
1178   1      	#ifdef	OpenEn
1179   1      	#else
              	uchar xdata i=0;
              	#endif
1182   1      	#ifdef	OpenEn
1183   1      	SendEn |= 0x20;
1184   1      	#else
              	SendEn |= 0x28;
              	#endif
1187   1      	XBYTE[0xE000] = SendEn;	//允许发送进中断1
1188   1      	#ifdef	OpenEn
1189   1      	#else
              	while(i++<100)	_nop_();	//延时
              	#endif
1192   1      	SendCount2 = 0;		//串口2发送计数器清零
1193   1      	SendingFlag2 = 1;
1194   1      	if( ResetAnsFlag )	//系统复位(死循环)
1195   1      	{
1196   2      		ResetAnsFlag=0;
1197   2      		while(1);
1198   2      	}
1199   1      }
1200          
1201          void testAODO()
1202          {
1203   1      	#ifdef TestDO

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -