Changes for page 01 Program execution
Last modified by Leo Wei on 2024/12/24 22:42
Summary
-
Page properties (1 modified, 0 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -361,6 +361,7 @@ 361 361 * During the execution of the interrupt program, when an interrupt cause with a low priority or the same priority occurs. 362 362 ** The interruption cause that occurred is stored, and after the interrupt program in execution ends, the interrupt program corresponding to the stored interruption cause is executed. Even if the same interruption cause occurs multiple times, the interruption cause is stored only once. 363 363 364 + 364 364 (% style="text-align:center" %) 365 365 [[image:1652249673420-476.png||class="img-thumbnail"]] 366 366 ... ... @@ -418,17 +418,17 @@ 418 418 419 419 **Timer interrupt** 420 420 421 -Timer interrupt description 422 +1. Timer interrupt description 422 422 423 - *Timer interrupt is based on the set time, execute the interrupt program every this time, the minimum time interval can reach 100us.424 - *Up to 100 timer interrupt execution programs can be created.425 - *Each timer interrupt program is independent of each other and does not affect each other.426 - *Each timer interrupt program should be configured with priority. When triggered at the same time, it is executed in the order of priority, but when the priority is the same, it is executed in the order of the established program.427 - *The interrupt execution program is executed only after EI is used in the scanner to allow the interrupt424 +1. Timer interrupt is based on the set time, execute the interrupt program every this time, the minimum time interval can reach 100us. 425 +1. Up to 100 timer interrupt execution programs can be created. 426 +1. Each timer interrupt program is independent of each other and does not affect each other. 427 +1. Each timer interrupt program should be configured with priority. When triggered at the same time, it is executed in the order of priority, but when the priority is the same, it is executed in the order of the established program. 428 +1. The interrupt execution program is executed only after EI is used in the scanner to allow the interrupt 428 428 429 -Timer interrupt step 430 + 2. Timer interrupt step 430 430 431 - *Project managementðProgramðInterruptðRight click to create. Enter the program name. The program name only supports the combination of English letters, numbers, and underscores, and must start with an English letter. The default is INTx. Click Configure and select Timer Interrupt as the execution type, as shown in the figure below (it can also be configured in "program parameters" in "parameters" in project management).432 +Project managementðProgramðInterruptðRight click to create. Enter the program name. The program name only supports the combination of English letters, numbers, and underscores, and must start with an English letter. The default is INTx. Click Configure and select Timer Interrupt as the execution type, as shown in the figure below (it can also be configured in "program parameters" in "parameters" in project management). 432 432 433 433 (% style="text-align:center" %) 434 434 [[image:1-20.png||class="img-thumbnail"]] ... ... @@ -439,35 +439,34 @@ 439 439 |(% rowspan="2" %)Timer interrupt|Time|Set the interval time for interrupt triggering|1 to 2147483647 (100us unit)| 440 440 |priority|When multiple interrupts arrive at the same time, the order of priority execution, the smallest value is executed first|0 to 2|0 441 441 442 -Write interrupt execution program 443 +1. Write interrupt execution program 443 443 444 444 (% style="text-align:center" %) 445 445 [[image:1-21.png||class="img-thumbnail"]] 446 446 447 - *Double-click the newly created timer interrupt program in the project management to start writing the interrupt execution program. As shown in the figure above, a newly created timer interrupt program is INT0, and the trigger condition is configured to execute the interrupt program every 10ms. If the main program uses EI to enable interrupts, all instruction programs in INT0 will be executed every 10ms, namely D0 It will add 1 to 10ms.448 +Double-click the newly created timer interrupt program in the project management to start writing the interrupt execution program. As shown in the figure above, a newly created timer interrupt program is INT0, and the trigger condition is configured to execute the interrupt program every 10ms. If the main program uses EI to enable interrupts, all instruction programs in INT0 will be executed every 10ms, namely D0 It will add 1 to 10ms. 448 448 449 449 (% style="text-align:center" %) 450 450 [[image:1652250294005-455.png||class="img-thumbnail"]] 451 451 452 -**High-speed counter interrupt** 453 +**~ 3. High-speed counter interrupt** 453 453 454 -Description of high-speed counter interrupt 455 +1. Description of high-speed counter interrupt 455 455 456 - *The high-speed counter interrupt triggers an interrupt condition after the set value of the high-speed counter HSC0 to HSC7 provided by the PLC and executes the interrupt program.457 - *It can support up to 100 high-speed counter interrupt programs, but the number that can be supported by each channel does not need to be fixed.458 - *When using the high-speed counter interrupt, project must configure the high-speed counter and use the OUT HSC instruction to enable the corresponding counting channel to count before it can be used (see the high-speed counter description section for the specific configuration method).459 - *Each high-speed counter interrupt program should be configured with priority. When triggered at the same time, it will be executed in the order of priority. When the priority is the same, it will be executed in the order of channels HSC0-HSC7. When the channel is also the same, it is executed in order according to the creation promise.460 - *Project must use EI in the scan program to allow interrupts before the interrupt execution program will be executed.457 +1. The high-speed counter interrupt triggers an interrupt condition after the set value of the high-speed counter HSC0 to HSC7 provided by the PLC and executes the interrupt program. 458 +1. It can support up to 100 high-speed counter interrupt programs, but the number that can be supported by each channel does not need to be fixed. 459 +1. When using the high-speed counter interrupt, project must configure the high-speed counter and use the OUT HSC instruction to enable the corresponding counting channel to count before it can be used (see the high-speed counter description section for the specific configuration method). 460 +1. Each high-speed counter interrupt program should be configured with priority. When triggered at the same time, it will be executed in the order of priority. When the priority is the same, it will be executed in the order of channels HSC0-HSC7. When the channel is also the same, it is executed in order according to the creation promise. 461 +1. Project must use EI in the scan program to allow interrupts before the interrupt execution program will be executed. 461 461 462 -(% class="box infomessage" %) 463 -((( 464 -**✎Note: **Both the HSC channel and the external input interrupt channel must use the PLC input point X. It should be noted that it cannot be reused during configuration. For details, please refer to the configuration chapter of the high-speed counter. 465 -))) 463 +**✎Note: **Both the HSC channel and the external input interrupt channel must use the PLC input point X. It should be noted that it 466 466 467 - High-speed counter interrupt steps465 +cannot be reused during configuration. For details, please refer to the configuration chapter of the high-speed counter. 468 468 469 - * “Project management”ð“Programð“Interrupt”ðRight click to create.Enter the program name. The program name onlysupports thecombination of English letters, numbers, andunderscores, and must start with anEnglish letter.The defaultis INTx. Click Configure, selecthigh-speed interruptfor execution type, asshown inthefigure below (it can also be configured in "program parameters" in "parameters" in project management).467 +1. high-speed counter interrupt step 470 470 469 +“Project management”ð“Programð“Interrupt”ðRight click to create. Enter the program name. The program name only supports the combination of English letters, numbers, and underscores, and must start with an English letter. The default is INTx. Click Configure, select high-speed interrupt for execution type, as shown in the figure below (it can also be configured in "program parameters" in "parameters" in project management). 470 + 471 471 (% style="text-align:center" %) 472 472 [[image:1-23.png||class="img-thumbnail"]] 473 473 ... ... @@ -500,7 +500,7 @@ 500 500 |Priority|When multiple interrupts arrive at the same time, the order of priority execution, the smallest value is executed first|0 to 2|0 501 501 |Contact|It is available when selecting high-speed comparison set and high-speed comparison reset. The contact is set or reset immediately after the trigger condition is reached.|Y/M/D.b| 502 502 503 - Description of triggering rules 503 + 3. Description of triggering rules 504 504 505 505 (% class="table-bordered" %) 506 506 |(% style="width:135px" %)**Mode**|(% style="width:187px" %)**Configuration**|(% style="width:128px" %)**The current value**|(% style="width:324px" %)**Action** ... ... @@ -535,22 +535,21 @@ 535 535 The program in INT2 will not be executed 536 536 ))) 537 537 538 -(% class="box infomessage" %) 539 -((( 540 540 **✎Note: **Both HSC channel and external input interrupt channel need to use the INPUT point X, so it should be noted that it cannot be reused in configuration. For details, please refer to the configuration section of high-speed counter. 541 -))) 542 542 543 -Write interrupt execution program 540 +1. Write interrupt execution program 544 544 545 545 * New interrupt program 546 -** Create three new interrupt programs under the interrupt of project management, namely HSC0_20000, HSC0_30000, HSC0_40000. Configure the interrupt program in the "program parameters", as shown in the figure below. 547 547 544 +Create three new interrupt programs under the interrupt of project management, namely HSC0_20000, HSC0_30000, HSC0_40000. Configure the interrupt program in the "program parameters", as shown in the figure below. 545 + 548 548 (% style="text-align:center" %) 549 549 [[image:1-24.png||class="img-thumbnail"]] 550 550 551 551 * High-speed counter configuration 552 -** Configure HSC0 for use in the high-speed counter configuration. After selecting the working mode, click the "Check” button. After the correct configuration box pops up, click Enter. 553 553 551 +Configure HSC0 for use in the high-speed counter configuration. After selecting the working mode, click the "Check” button. After the correct configuration box pops up, click Enter. 552 + 554 554 (% style="text-align:center" %) 555 555 [[image:1-25.png||class="img-thumbnail"]] 556 556 ... ... @@ -560,123 +560,131 @@ 560 560 561 561 Program operation: 562 562 563 -* Assuming that the High-speed counter channel 0 has been receiving pulses: 564 -** When the count value of HSC0 accumulates from 0 to 20000, all procedures of HSC0_20000 are executed. 565 -** When the count value of HSC0 is accumulated from 20000 to 30000, all procedures of HSC0_30000 are executed. 566 -** When the count value of HSC0 is accumulated from 30000 to 40000, all procedures of HSC0_40000 are executed. 562 +Assuming that the High-speed counter channel 0 has been receiving pulses: 567 567 564 +When the count value of HSC0 accumulates from 0 to 20000, all procedures of HSC0_20000 are executed. 565 + 566 +When the count value of HSC0 is accumulated from 20000 to 30000, all procedures of HSC0_30000 are executed. 567 + 568 +When the count value of HSC0 is accumulated from 30000 to 40000, all procedures of HSC0_40000 are executed. 569 + 568 568 **Mask interrupt** 569 569 570 -Mask through application instructions 572 +**~ 1. Mask through application instructions** 571 571 572 -* The PLC interrupt is in the shielded state by default when it is powered on, and can only be used after the interrupt is allowed through the EI instruction. 573 -* The interrupt mask instruction DI masks all interrupts without parameters, and masks some priority interrupts with parameters (refer to the program flow instruction DI/EI for details). 574 +The PLC interrupt is in the shielded state by default when it is powered on, and can only be used after the interrupt is allowed through the EI instruction. 574 574 575 - Mask throughspecialregistersSMandSD576 +The interrupt mask instruction DI masks all interrupts without parameters, and masks some priority interrupts with parameters (refer to the program flow instruction DI/EI for details). 576 576 578 +**~ 2. Mask through special registers SM and SD** 579 + 580 +1.External input interrupt mask register 581 + 577 577 (% class="table-bordered" %) 578 -| =(% colspan="4" %)**External input interrupt mask register**579 -| =(% style="width: 266px;" %)**Special register number**|=(% style="width: 308px;" %)**Type of interrupt**|=(% style="width: 390px;" %)**Instruction**|=**Defaults**580 -| (% style="width:266px" %)SM352|(% style="width:308px" %)X0 rising edge interrupt|(% style="width:390px" %)ON: shieldinterrupts;OFF: interruptallowed|OFF581 -| (% style="width:266px" %)SM353|(% style="width:308px" %)X0 falling edge interrupt|(% style="width:390px" %)ON: shieldinterrupts;OFF: interruptallowed|OFF582 -| (% style="width:266px" %)SM354|(% style="width:308px" %)X1 rising edge interrupt|(% style="width:390px" %)ON: shieldinterrupts;OFF: interruptallowed|OFF583 -| (% style="width:266px" %)SM355|(% style="width:308px" %)X1 falling edge interrupt|(% style="width:390px" %)ON: shieldinterrupts;OFF: interruptallowed|OFF584 -| (% style="width:266px" %)SM356|(% style="width:308px" %)X2 rising edge interrupt|(% style="width:390px" %)ON: shieldinterrupts;OFF: interruptallowed|OFF585 -| (% style="width:266px" %)SM357|(% style="width:308px" %)X2 falling edge interrupt|(% style="width:390px" %)ON: shieldinterrupts;OFF: interruptallowed|OFF586 -| (% style="width:266px" %)SM358|(% style="width:308px" %)X3 rising edge interrupt|(% style="width:390px" %)ON: shieldinterrupts;OFF: interruptallowed|OFF587 -| (% style="width:266px" %)SM359|(% style="width:308px" %)X3 falling edge interrupt|(% style="width:390px" %)ON:Shieldinterrupts;OFF: interruptallowed|OFF588 -| (% style="width:266px" %)SM360|(% style="width:308px" %)X4 rising edge interrupt|(% style="width:390px" %)ON: shieldinterrupts;OFF: interruptallowed|OFF589 -| (% style="width:266px" %)SM361|(% style="width:308px" %)X4 falling edge interrupt|(% style="width:390px" %)ON: shieldinterrupts;OFF: interruptallowed|OFF590 -| (% style="width:266px" %)SM362|(% style="width:308px" %)X5 rising edge interrupt|(% style="width:390px" %)ON: shieldinterrupts;OFF: interruptallowed|OFF591 -| (% style="width:266px" %)SM363|(% style="width:308px" %)X5 falling edge interrupt|(% style="width:390px" %)ON:Shieldinterrupts;OFF: interruptallowed|OFF592 -| (% style="width:266px" %)SM364|(% style="width:308px" %)X6 rising edge interrupt|(% style="width:390px" %)ON: shieldinterrupts;OFF: interruptallowed|OFF593 -| (% style="width:266px" %)SM365|(% style="width:308px" %)X6 falling edge interrupt|(% style="width:390px" %)ON: shieldinterrupts;OFF: interruptallowed|OFF594 -| (% style="width:266px" %)SM366|(% style="width:308px" %)X7 rising edge interrupt|(% style="width:390px" %)ON: shieldinterrupts;OFF: interruptallowed|OFF595 -| (% style="width:266px" %)SM367|(% style="width:308px" %)X7 falling edge interrupt|(% style="width:390px" %)ON: shieldinterrupts;OFF: interruptallowed|OFF583 +|(% colspan="4" %)**External input interrupt mask register** 584 +|**Special register number**|**Type of interrupt**|**Instruction**|**Defaults** 585 +|SM352|X0 rising edge interrupt|ON: Mask interrupt OFF: Enable interrupt|OFF 586 +|SM353|X0 falling edge interrupt|ON: Mask interrupt OFF: Enable interrupt|OFF 587 +|SM354|X1 rising edge interrupt|ON: Mask interrupt OFF: Enable interrupt|OFF 588 +|SM355|X1 falling edge interrupt|ON: Mask interrupt OFF: Enable interrupt|OFF 589 +|SM356|X2 rising edge interrupt|ON: Mask interrupt OFF: Enable interrupt|OFF 590 +|SM357|X2 falling edge interrupt|ON: Mask interrupt OFF: Enable interrupt|OFF 591 +|SM358|X3 rising edge interrupt|ON: Mask interrupt OFF: Enable interrupt|OFF 592 +|SM359|X3 falling edge interrupt|ON: Mask interrupt OFF: Enable interrupt|OFF 593 +|SM360|X4 rising edge interrupt|ON: Mask interrupt OFF: Enable interrupt|OFF 594 +|SM361|X4 falling edge interrupt|ON: Mask interrupt OFF: Enable interrupt|OFF 595 +|SM362|X5 rising edge interrupt|ON: Mask interrupt OFF: Enable interrupt|OFF 596 +|SM363|X5 falling edge interrupt|ON: Mask interrupt OFF: Enable interrupt|OFF 597 +|SM364|X6 rising edge interrupt|ON: Mask interrupt OFF: Enable interrupt|OFF 598 +|SM365|X6 falling edge interrupt|ON: Mask interrupt OFF: Enable interrupt|OFF 599 +|SM366|X7 rising edge interrupt|ON: Mask interrupt OFF: Enable interrupt|OFF 600 +|SM367|X7 falling edge interrupt|ON: Mask interrupt OFF: Enable interrupt|OFF 596 596 602 +2. Timer interrupt mask register 603 + 597 597 (% class="table-bordered" %) 598 -| =(% colspan="4" %)**Timer interrupt mask register**599 -| =**Special register number**|=(% style="width: 311px;" %)**Type of interrupt**|=(% style="width: 391px;" %)**Instruction**|=(% style="width: 110px;" %)**Default**600 -|SD350| (% style="width:311px" %)1st to 16th timer interrupt|(% style="width:391px" %)(((605 +|(% colspan="4" %)**Timer interrupt mask register** 606 +|**Special register number**|**Type of interrupt**|**Instruction**|**Default** 607 +|SD350|1st to 16th timer interrupt|((( 601 601 Each bit can control the mask of an interrupt. 602 602 603 -ON: s hieldinterrupts;OFF: interruptallowed604 -)))| (% style="width:110px" %)0605 -|SD351| (% style="width:311px" %)17th to 32th timer interrupt|(% style="width:391px" %)(((610 +ON: Mask interrupt OFF: Enable interrupt 611 +)))|0 612 +|SD351|17th to 32th timer interrupt|((( 606 606 Each bit can control the mask of an interrupt. 607 607 608 -ON: s hieldinterrupts;OFF: interruptallowed609 -)))| (% style="width:110px" %)0610 -|SD352| (% style="width:311px" %)33th to 48th timer interrupt|(% style="width:391px" %)(((615 +ON: Mask interrupt OFF: Enable interrupt 616 +)))|0 617 +|SD352|33th to 48th timer interrupt|((( 611 611 Each bit can control the mask of an interrupt. 612 612 613 -ON: s hieldinterrupts;OFF: interruptallowed614 -)))| (% style="width:110px" %)0615 -|SD353| (% style="width:311px" %)49th to 64th timer interrupt|(% style="width:391px" %)(((620 +ON: Mask interrupt OFF: Enable interrupt 621 +)))|0 622 +|SD353|49th to 64th timer interrupt|((( 616 616 Each bit can control the mask of an interrupt. 617 617 618 -ON: s hieldinterrupts;OFF: interruptallowed619 -)))| (% style="width:110px" %)0620 -|SD354| (% style="width:311px" %)65th to 80th timer interrupt|(% style="width:391px" %)(((625 +ON: Mask interrupt OFF: Enable interrupt 626 +)))|0 627 +|SD354|65th to 80th timer interrupt|((( 621 621 Each bit can control the mask of an interrupt. 622 622 623 -ON: s hieldinterrupts;OFF: interruptallowed624 -)))| (% style="width:110px" %)0625 -|SD355| (% style="width:311px" %)81st to 96th timer interrupt|(% style="width:391px" %)(((630 +ON: Mask interrupt OFF: Enable interrupt 631 +)))|0 632 +|SD355|81st to 96th timer interrupt|((( 626 626 Each bit can control the mask of an interrupt. 627 627 628 -ON: s hieldinterrupts;OFF: interruptallowed629 -)))| (% style="width:110px" %)0630 -|SD356| (% style="width:311px" %)97th to 100th timer interrupt|(% style="width:391px" %)(((635 +ON: Mask interrupt OFF: Enable interrupt 636 +)))|0 637 +|SD356|97th to 100th timer interrupt|((( 631 631 Each bit can control the mask of an interrupt. 632 632 633 -ON: s hieldinterrupts;OFF: interruptallowed634 -)))| (% style="width:110px" %)0640 +ON: Mask interrupt OFF: Enable interrupt 641 +)))|0 635 635 636 636 1. high-speed counter interrupt mask register 637 637 638 638 (% class="table-bordered" %) 639 -| =(% colspan="4" %)**High-speed counter interrupt mask register**640 -| =(% style="width: 230px;" %)**Special register number**|=(% style="width: 348px;" %)**Type of interrupt**|=(% style="width: 387px;" %)**Instruction**|=(% style="width: 110px;" %)**Default**641 -| (% style="width:230px" %)SD382|(% style="width:348px" %)1st to 16th high-speed counter interrupt|(% style="width:387px" %)(((646 +|(% colspan="4" %)**High-speed counter interrupt mask register** 647 +|**Special register number**|**Type of interrupt**|**Instruction**|**Default** 648 +|SD382|1st to 16th high-speed counter interrupt|((( 642 642 Each bit can control the mask of an interrupt. 643 643 644 -ON: s hieldinterrupts;OFF: interruptallowed645 -)))| (% style="width:110px" %)0646 -| (% style="width:230px" %)SD383|(% style="width:348px" %)17th to 32nd high-speed counter interrupt|(% style="width:387px" %)(((651 +ON: Mask interrupt OFF: Enable interrupt 652 +)))|0 653 +|SD383|17th to 32nd high-speed counter interrupt|((( 647 647 Each bit can control the mask of an interrupt. 648 648 649 -ON: s hieldinterrupts;OFF: interruptallowed650 -)))| (% style="width:110px" %)0651 -| (% style="width:230px" %)SD384|(% style="width:348px" %)33th to 48th high-speed counter interrupt|(% style="width:387px" %)(((656 +ON: Mask interrupt OFF: Enable interrupt 657 +)))|0 658 +|SD384|33th to 48th high-speed counter interrupt|((( 652 652 Each bit can control the mask of an interrupt. 653 653 654 -ON: s hieldinterrupts;OFF: interruptallowed655 -)))| (% style="width:110px" %)0656 -| (% style="width:230px" %)SD385|(% style="width:348px" %)49th to 64th high-speed counter interrupt|(% style="width:387px" %)(((661 +ON: Mask interrupt OFF: Enable interrupt 662 +)))|0 663 +|SD385|49th to 64th high-speed counter interrupt|((( 657 657 Each bit can control the mask of an interrupt. 658 658 659 -ON: s hieldinterrupts;OFF: interruptallowed660 -)))| (% style="width:110px" %)0661 -| (% style="width:230px" %)SD386|(% style="width:348px" %)65th to 80th high-speed counter interrupt|(% style="width:387px" %)(((666 +ON: Mask interrupt OFF: Enable interrupt 667 +)))|0 668 +|SD386|65th to 80th high-speed counter interrupt|((( 662 662 Each bit can control the mask of an interrupt. 663 663 664 -ON: s hieldinterrupts;OFF: interruptallowed665 -)))| (% style="width:110px" %)0666 -| (% style="width:230px" %)SD387|(% style="width:348px" %)81st to 96th high-speed counter interrupt|(% style="width:387px" %)(((671 +ON: Mask interrupt OFF: Enable interrupt 672 +)))|0 673 +|SD387|81st to 96th high-speed counter interrupt|((( 667 667 Each bit can control the mask of an interrupt. 668 668 669 -ON: s hieldinterrupts;OFF: interruptallowed670 -)))| (% style="width:110px" %)0671 -| (% style="width:230px" %)SD388|(% style="width:348px" %)97th to 100th high-speed counter interrupt|(% style="width:387px" %)(((676 +ON: Mask interrupt OFF: Enable interrupt 677 +)))|0 678 +|SD388|97th to 100th high-speed counter interrupt|((( 672 672 Each bit can control the mask of an interrupt. 673 673 674 -ON: s hieldinterrupts;OFF: interruptallowed675 -)))| (% style="width:110px" %)0681 +ON: Mask interrupt OFF: Enable interrupt 682 +)))|0 676 676 677 677 == Subroutine == 678 678 679 -During the execution of the scan program, the executed program can be called by the CALL instruction. You can create up to 100 new subprograms.686 +During the execution of the scan program, the executed program can be called by the CALL instruction. 680 680 681 681 A subroutine is to split a certain module in the main program for the main program to call, which is conducive to the modularization of the program. Such as other high-level language functions, but this function has no parameters and no return value. 682 682 ... ... @@ -683,7 +683,7 @@ 683 683 (% style="text-align:center" %) 684 684 [[image:1652250926997-587.png||class="img-thumbnail"]] 685 685 686 - **Instructions for calling subroutines**693 +1. Instructions for calling subroutines 687 687 688 688 After a new subroutine is created, the content of the program is not executed. It is executed only when the CALL(P) instruction is used to call the subroutine in the scan, event, and interrupt programs, and the call is executed once. Three new subroutines SUB0, SUB1, SUB2 are created as shown in the figure below. In the main program MAIN, the subprogram can be called by using the CALL(P) subprogram program name. 689 689 ... ... @@ -692,15 +692,12 @@ 692 692 (% style="text-align:center" %) 693 693 [[image:1-28.png||class="img-thumbnail"]] 694 694 695 -(% class="box infomessage" %) 696 -((( 697 -**✎Note:** 702 +**~ 1.✎Note:** 698 698 699 699 1. When using the timer (OUT T), note that the output will not be reset when the subroutine is not called, and a specific subroutine register must be used. 700 700 1. It is not allowed to call recursively between subprograms, that is, call SUB1 in SUB0, and then call SUB0 in SUB1. This is not allowed. 701 701 1. The subroutine can be nested up to 32 levels. If the level exceeds 32 levels, a serious error will be reported and the Circuit program operation will be forcibly stopped. 702 702 1. Unlike the LX3V series mainframe, the subroutine in the LX5V series mainframe ends with the END instruction instead of SRET. 703 -))) 704 704 705 705 == Positioning instructions == 706 706