?? modbus.lst
字號:
291
292 if(receCount > 4)
293 {
294 switch(receBuf[1])
295 {
296 case 1://讀取線圈狀態(讀取點 16位以內)
297 case 3://讀取保持寄存器(一個或多個)
298 case 5://強制單個線圈
299 case 6://設置單個寄存器
300 if(receCount >= 8)
301 {//接收完成一組數據
C51 COMPILER V7.09 MODBUS 03/27/2007 15:48:08 PAGE 6
302 //應該關閉接收中斷
303
304 if(receBuf[0]==localAddr && checkoutError==0)
305 {
306 crcData = crc16(receBuf,6);
307 if(crcData == receBuf[7]+(receBuf[6]<<8))
308 {//校驗正確
309 if(receBuf[1] == 1)
310 {//讀取線圈狀態(讀取點 16位以內)
311 readCoil();
312 }
313 else if(receBuf[1] == 3)
314 {//讀取保持寄存器(一個或多個)
315 readRegisters();
316 }
317 else if(receBuf[1] == 5)
318 {//強制單個線圈
319 forceSingleCoil();
320 }
321 else if(receBuf[1] == 6)
322 {
323 //presetSingleRegister();
324 }
325
326 }
327 }
328 receCount = 0;
329 checkoutError = 0;
330 }
331 break;
332
333 case 15://設置多個線圈
334 tempData = receBuf[6];
335 tempData += 9; //數據個數
336 if(receCount >= tempData)
337 {
338 if(receBuf[0]==localAddr && checkoutError==0)
339 {
340 crcData = crc16(receBuf,tempData-2);
341 if(crcData == (receBuf[tempData-2]<<8)+ receBuf[tempData-1])
342 {
343 //forceMultipleCoils();
344 }
345 }
346 receCount = 0;
347 checkoutError = 0;
348 }
349 break;
350
351 case 16://設置多個寄存器
352 tempData = (receBuf[4]<<8) + receBuf[5];
353 tempData = tempData * 2; //數據個數
354 tempData += 9;
355 if(receCount >= tempData)
356 {
357 if(receBuf[0]==localAddr && checkoutError==0)
358 {
359 crcData = crc16(receBuf,tempData-2);
360 if(crcData == (receBuf[tempData-2]<<8)+ receBuf[tempData-1])
361 {
362 presetMultipleRegisters();
363 }
C51 COMPILER V7.09 MODBUS 03/27/2007 15:48:08 PAGE 7
364 }
365 receCount = 0;
366 checkoutError = 0;
367 }
368 break;
369
370 default:
371 break;
372 }
373 }
374 }//void checkComm0(void)
375
376 //取線圈狀態 返回0表示成功
377 uint16 getCoilVal(uint16 addr,uint16 *tempData)
378 {
379 uint16 result = 0;
380 uint16 tempAddr;
381
382 tempAddr = addr & 0xfff;
383 //只取低8位地址
384 switch(tempAddr & 0xff)
385 {
386 case 0:
387 break;
388 case 1:
389 *tempData = testCoil;
390 break;
391 case 2:
392 break;
393 case 3:
394 break;
395 case 4:
396 break;
397 case 5:
398 break;
399 case 6:
400 break;
401 case 7:
402 break;
403 case 8:
404 break;
405 case 9:
406 break;
407 case 10:
408 break;
409 case 11:
410 break;
411 case 12:
412 break;
413 case 13:
414 break;
415 case 14:
416 break;
417 case 15:
418 break;
419 case 16:
420 break;
421 default:
422 break;
423 }
424
425 return result;
C51 COMPILER V7.09 MODBUS 03/27/2007 15:48:08 PAGE 8
426 }//uint16 getCoilVal(uint16 addr,uint16 *data)
427
428
429 //設定線圈狀態 返回0表示成功
430 uint16 setCoilVal(uint16 addr,uint16 tempData)
431 {
432 uint16 result = 0;
433 uint16 tempAddr;
434
435 tempAddr = addr & 0xfff;
436
437
438 switch(tempAddr & 0xff)
439 {
440 case 0:
441 break;
442 case 1:
443 testCoil = tempData;
444 break;
445 case 2:
446 break;
447 case 3:
448 break;
449 case 4:
450 break;
451 case 5:
452 break;
453 case 6:
454 break;
455 case 7:
456 break;
457 case 8:
458 break;
459 case 9:
460 break;
461 case 10:
462 break;
463 case 11:
464 break;
465 case 12:
466 break;
467 case 13:
468 break;
469 case 14:
470 break;
471 case 15:
472 break;
473 case 16:
474 break;
475 default:
476 break;
477 }
478
479
480 return result;
481 }//uint16 setCoilVal(uint16 addr,uint16 data)
482
483 //取寄存器值 返回0表示成功
484 uint16 getRegisterVal(uint16 addr,uint16 *tempData)
485 {
486 uint16 result = 0;
487 uint16 tempAddr;
C51 COMPILER V7.09 MODBUS 03/27/2007 15:48:08 PAGE 9
488
489 tempAddr = addr & 0xfff;
490
491 switch(tempAddr & 0xff)
492 {
493 case 0:
494 break;
495 case 1:
496 break;
497 case 2:
498 break;
499 case 3:
500 break;
501 case 4:
502 break;
503 case 5:
504 break;
505 case 6:
506 break;
507 case 7:
508 break;
509 case 8:
510 break;
511 case 9:
512 break;
513 case 10:
514 break;
515 case 11:
516 break;
517 case 12:
518 break;
519 case 13:
520 break;
521 case 14:
522 break;
523 case 15:
524 break;
525 case 16:
526 *tempData = testRegister;
527 break;
528 default:
529 break;
530 }
531
532 return result;
533 }//uint16 getRegisterVal(uint16 addr,uint16 &data)
534
535 //設置寄存器值 返回0表示成功
536 uint16 setRegisterVal(uint16 addr,uint16 tempData)
537 {
538 uint16 result = 0;
539 uint16 tempAddr;
540
541 tempAddr = addr & 0xfff;
542
543 switch(tempAddr & 0xff)
544 {
545 case 0:
546 break;
547 case 1:
548 break;
549 case 2:
C51 COMPILER V7.09 MODBUS 03/27/2007 15:48:08 PAGE 10
550 break;
551 case 3:
552 break;
553 case 4:
554 break;
555 case 5:
556 break;
557 case 6:
558 break;
559 case 7:
560 break;
561 case 8:
562 break;
563 case 9:
564 break;
565 case 10:
566 break;
567 case 11:
568 break;
569 case 12:
570 break;
571 case 13:
572 break;
573 case 14:
574 break;
575 case 15:
576 break;
577 case 16:
578 testRegister = tempData;
579 break;
580 default:
581 break;
582 }
583
584 return result;
585 }//uint8 setRegisterVal(uint16 addr,uint16 data)
C51 COMPILATION COMPLETE. 1 WARNING(S), 1 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -