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

📄 zhu19200.lst

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

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

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

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

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

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

⌨️ 快捷键说明

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