📄 scomservice.lst
字号:
205 2 UartRecBuf[nCount++]=3+_F_EXTRA_LEN;
206 2 UartRecBuf[nCount++]=ClkLcmBuf[_ID_HOUR];
207 2 UartRecBuf[nCount++]=ClkLcmBuf[_ID_MINUTE];
208 2 UartRecBuf[nCount++]=ClkLcmBuf[_ID_SECOND];
209 2 UartRecBuf[nCount++]=_F_SINGLE_NUM;
210 2 #else
UartRecBuf[nCount++]=_F_EXTRA_LEN; //表示数据长度0一个序号和Crc常数
UartRecBuf[nCount++]=_F_SINGLE_NUM; //It's a single frame
#endif
214 2 break;
215 2 case _CMD_WR_ALARM: //该命令目前保留没有使用
216 2 UartRecBuf[nCount++]=_F_EXTRA_LEN; //表示数据长度0一个序号和Crc常数
217 2 UartRecBuf[nCount++]=_F_SINGLE_NUM; //It's a single frame
218 2 break;
219 2 case _CMD_WR_DATE: //LENG == 3
220 2 #if _CLOCK_TASK>0
221 2 ReadClock(ClkLcmBuf);
222 2 UartRecBuf[nCount++]=3+_F_EXTRA_LEN;
223 2 UartRecBuf[nCount++]=ClkLcmBuf[_ID_YEAR];
224 2 UartRecBuf[nCount++]=ClkLcmBuf[_ID_MONTH];
225 2 UartRecBuf[nCount++]=ClkLcmBuf[_ID_DAY];
226 2 UartRecBuf[nCount++]=_F_SINGLE_NUM;
227 2 #else
UartRecBuf[nCount++]=_F_EXTRA_LEN; //表示数据长度0一个序号和Crc常数
UartRecBuf[nCount++]=_F_SINGLE_NUM; //It's a single frame
#endif
231 2 break;
232 2 case _CMD_WR_WEEK: //LENG == 1
233 2 #if _CLOCK_TASK>0
234 2 ReadClock(ClkLcmBuf);
235 2 UartRecBuf[nCount++]=1+_F_EXTRA_LEN;
236 2 UartRecBuf[nCount++]=ClkLcmBuf[_ID_WEEKLY];
237 2 UartRecBuf[nCount++]=_F_SINGLE_NUM;
238 2 #else
UartRecBuf[nCount++]=_F_EXTRA_LEN; //表示数据长度0一个序号和Crc常数
UartRecBuf[nCount++]=_F_SINGLE_NUM; //It's a single frame
C51 COMPILER V7.20 SCOMSERVICE 11/09/2002 21:11:16 PAGE 5
#endif
242 2 break;
243 2 case _CMD_WR_RECORD: //LENG == 10
244 2 #if ((_DETECT_TASK>0)&&(_E2PROM_TASK>0))
245 2 UartRecBuf[nCount++]=10+_F_EXTRA_LEN;
246 2 if(CurRecNum>_MIN_REC_NUM)
247 2 {
248 3 ReadOneRecord(ClkLcmBuf,CurRecNum); //从24c02中读一条记录
249 3 for(i=0;i<10;i++)
250 3 UartRecBuf[nCount++]=ClkLcmBuf[i];
251 3 UartRecBuf[nCount++]=CurRecNum--;
252 3 UartRecBuf[nCount++]=CurRecNum; //It's a single frame
253 3 }
254 2 else
255 2 {
256 3 for(i=0;i<10;i++)
257 3 UartRecBuf[nCount++]=_EMPTY_DATA;
258 3 UartRecBuf[nCount++]=_MIN_REC_NUM;
259 3 }
260 2 WriteOneChar(_CUR_REC_ADDR,CurRecNum); //同步更新计数器单元
261 2 #else
UartRecBuf[nCount++]=_F_EXTRA_LEN; //表示数据长度0一个序号和Crc常数
UartRecBuf[nCount++]=_F_SINGLE_NUM; //It's a single frame
#endif
265 2 break;
266 2 case _CMD_WR_RECNUM: //LENG == 10
267 2 #if ((_DETECT_TASK>0)&&(_E2PROM_TASK>0))
268 2 UartRecBuf[nCount++]=1+_F_EXTRA_LEN;
269 2 CurRecNum=ReadOneChar(_CUR_REC_ADDR);
270 2 UartRecBuf[nCount++]=CurRecNum;
271 2 UartRecBuf[nCount++]=_F_SINGLE_NUM; //It's a single frame
272 2 #else
UartRecBuf[nCount++]=_F_EXTRA_LEN; //表示数据长度0一个序号和Crc常数
UartRecBuf[nCount++]=_F_SINGLE_NUM; //It's a single frame
#endif
276 2 break;
277 2 case _CMD_WR_MCUID:
278 2 #if _SCOM_TASK>0
279 2 UartRecBuf[nCount++]=1+_F_EXTRA_LEN; //表示数据长度0一个序号和Crc常数
280 2 SlaveAddr=ReadOneChar(_LOCAL_ID);
281 2 UartRecBuf[nCount++]=SlaveAddr; //ReadOneChar(_LOCAL_ID)
282 2 UartRecBuf[nCount++]=_F_SINGLE_NUM; //It's a single frame
283 2 #else
UartRecBuf[nCount++]=_F_EXTRA_LEN; //表示数据长度0一个序号和Crc常数
UartRecBuf[nCount++]=_F_SINGLE_NUM; //It's a single frame
#endif
287 2 break;
288 2 case _CMD_WR_PCID:
289 2 #if _SCOM_TASK>0
290 2 UartRecBuf[nCount++]=1+_F_EXTRA_LEN; //表示数据长度0一个序号和Crc常数
291 2 MasterAddr=ReadOneChar(_REMOTE_ID);
292 2 UartRecBuf[nCount++]=MasterAddr; //ReadOneChar(_REMOTE_ID)
293 2 UartRecBuf[nCount++]=_F_SINGLE_NUM; //It's a single frame
294 2 #else
UartRecBuf[nCount++]=_F_EXTRA_LEN; //表示数据长度0一个序号和Crc常数
UartRecBuf[nCount++]=_F_SINGLE_NUM; //It's a single frame
#endif
298 2 break;
299 2 case _CMD_WR_PCUSER: //保留的命令
300 2 #if ((_SCOM_TASK>0)&&(_E2PROM_TASK>0))
301 2 UartRecBuf[nCount++]=1+_F_EXTRA_LEN; //表示数据长度0一个序号和Crc常数
302 2 //UartRecBuf[nCount++]=MasterUser;
C51 COMPILER V7.20 SCOMSERVICE 11/09/2002 21:11:16 PAGE 6
303 2 UartRecBuf[nCount++]=ReadOneChar(_REMOTE_USER);
304 2 UartRecBuf[nCount++]=_F_SINGLE_NUM; //It's a single frame
305 2 #else
UartRecBuf[nCount++]=_F_EXTRA_LEN; //表示数据长度0一个序号和Crc常数
UartRecBuf[nCount++]=_F_SINGLE_NUM; //It's a single frame
#endif
309 2 break;
310 2 default: //默认情况当作无参数命令处理
311 2 UartRecBuf[nCount++]=_F_EXTRA_LEN; //表示数据长度0一个序号和Crc常数
312 2 UartRecBuf[nCount++]=_F_SINGLE_NUM; //It's a single frame
313 2 break;
314 2 }
315 1 //SendFrame(UartRecBuf,UartRecBuf[_F_LENGTH_POS]+_F_SEND_ADD);
316 1 SendFrame(UartRecBuf,nCount);
317 1
318 1 OpenScom();
319 1 }
320
321 //##################################################
322 //#Function: ProcessFrameTask(void)
323 //#Description:51串行口数据帧处理服务函数
324 //#Input: 无
325 //#Output: 无
326 //#Return: 返回相关的帧命令
327 //#Others: 文件级公共函数
328 //##################################################
329 uchar ProcessFrameTask(void)
330 {
331 1 uchar cmd;
332 1 #if(_SCOM_TEST>0)
uchar i;
#endif
335 1 /*进行Crc校验4是(addr cmd len fh fl crh crl)此处应放置主机地址核对程序
336 1 经过验证是有一个合法帧收到了
337 1 */
338 1 if (RecReady)
339 1 {
340 2 RecReady=0;
341 2 CloseScom();
342 2 if(CRCverify(UartRecBuf,UartRecBuf[3]+_F_RECV_ADD)==0)
343 2 {
344 3 #if(_SCOM_TEST>0)
for(i=0;i<DataBlockCount;i++) //DataBlockCount
SendByte(UartRecBuf[i]);
#endif
348 3 SystemState=_CMD_CTRL_RUN; //表示收到一个命令进入命令响应模式
349 3 cmd= UartRecBuf[2];
350 3 /*此处放置实际的数据帧响应代码*/
351 3 switch(cmd)
352 3 {
353 4 case _CMD_END:
354 4 SystemState=_CMD_NORMAL_RUN; //返回正常的温湿度显示模式
355 4 break;
356 4 case _CMD_LOG_IN:
357 4 CallMaster(_CMD_LOG_IN);
358 4 WorkMode=_NET_MODE;
359 4 break;
360 4 case _CMD_LOG_OUT:
361 4 CallMaster(_CMD_LOG_OUT);
362 4 WorkMode=_SITE_MODE;
363 4 break;
364 4 case _CMD_ACK: //不动作
C51 COMPILER V7.20 SCOMSERVICE 11/09/2002 21:11:16 PAGE 7
365 4 //CallMaster(_CMD_ACK);
366 4 WorkMode=_NET_MODE;
367 4 break;
368 4 case _CMD_ERROR: //不动作
369 4 //CallMaster(_CMD_ERROR);
370 4 LcmMode=_ERROR_RUN;
371 4 break;
372 4 case _CMD_REAL_GET:
373 4 #if _DETECT_TASK>0
374 4 SensorTaskRun();
375 4 #endif
376 4 #if _CLOCK_TASK >0
377 4 ReadClock(ClkLcmBuf); //获取当前时钟
378 4 #endif
379 4 CloseScom();
380 4 UartRecBuf[0]=SlaveAddr;
381 4 UartRecBuf[1]=MasterAddr;
382 4 UartRecBuf[2]=_CMD_WR_RECORD;
383 4 UartRecBuf[3]=10+_F_EXTRA_LEN;
384 4 UartRecBuf[4]=TempInteger;
385 4 UartRecBuf[5]=TempDecimal;
386 4 UartRecBuf[6]=HumiInteger;
387 4 UartRecBuf[7]=HumiDecimal;
388 4 UartRecBuf[8]=ClkLcmBuf[_ID_YEAR];
389 4 UartRecBuf[9]=ClkLcmBuf[_ID_MONTH];
390 4 UartRecBuf[10]=ClkLcmBuf[_ID_DAY];
391 4 UartRecBuf[11]=ClkLcmBuf[_ID_HOUR];
392 4 UartRecBuf[12]=ClkLcmBuf[_ID_MINUTE];
393 4 UartRecBuf[13]=ClkLcmBuf[_ID_SECOND];
394 4 UartRecBuf[14]=_F_SINGLE_NUM; //It's a single frame
395 4 SendFrame(UartRecBuf,15);
396 4 OpenScom();
397 4 break;
398 4 case _CMD_RD_TEMP:
399 4 CallMaster(_CMD_WR_TEMP);
400 4 break;
401 4 case _CMD_RD_HUMI:
402 4 CallMaster(_CMD_WR_HUMI);
403 4 break;
404 4 case _CMD_RD_TIME:
405 4 CallMaster(_CMD_WR_TIME);
406 4 break;
407 4 case _CMD_RD_ALARM: //保留的命令
408 4 //CallMaster(_CMD_WR_ALARM);
409 4 break;
410 4 case _CMD_RD_DATE:
411 4 CallMaster(_CMD_WR_DATE);
412 4 break;
413 4 case _CMD_RD_WEEK:
414 4 CallMaster(_CMD_WR_WEEK);
415 4 break;
416 4 case _CMD_RD_RECORD:
417 4 CallMaster(_CMD_WR_RECORD);
418 4 break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -