<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://softmc.servotronix.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lisa</id>
		<title>SoftMC-Wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://softmc.servotronix.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lisa"/>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/wiki/Special:Contributions/Lisa"/>
		<updated>2026-04-06T15:03:26Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=Program_Examples&amp;diff=132951</id>
		<title>Program Examples</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=Program_Examples&amp;diff=132951"/>
				<updated>2018-10-09T07:46:32Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: /* Motion Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
= Getting Started = &lt;br /&gt;
* [[Getting_Started_with_MC-Basic_and_ControlStudio|Getting Started with MC-Basic and ControlStudio]]&lt;br /&gt;
* [[Program Examples - Sending Hexadecimal Data Over RS232|Program Examples - Sending Hexadecimal Data Over RS232]]&lt;br /&gt;
&lt;br /&gt;
= Communication =&lt;br /&gt;
* [[Program Examples:Serial Com:Serial Com Example|Program Example - Serial COM]] - How to setup a serial connection&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Simple Server|Program Example - TCP/IP Simple Server]] - How to setup a simple TCP-IP server&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Simple Client|Program Example - TCP/IP Simple Client]] - How to setup a simple TCP-IP client&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Multi Server|Program Example - TCP/IP Multi Server]] - How to setup a TCP-IP server that opens connections with multiple clients&lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_TelNet_Server|Program Example - TCP/IP TelNet Server]] - How to setup a TCP-IP TelNet server with simple parser&lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_Winsock_Client|Program Example - TCP/IP windows socket client]] - An example written in C language, corresponds to the &lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_TelNet_Server|TCP/IP TelNet Server]] example.&lt;br /&gt;
&lt;br /&gt;
= File handling=&lt;br /&gt;
* [[Program Examples:File Handling:Open Read Write|Program Example - File Handling - Open Read Write]] - How to open a file with different permissions&lt;br /&gt;
* [[Virtual Entry Station (VES)|Program Example - Virtual Entry Station (VES)]]&lt;br /&gt;
* [[File Encryption|Program Example - File Encryption (VES)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Motion Bus =&lt;br /&gt;
* [[Program_Examples:CANOpen:DS402_CAN_Drive_Setup|Program Example - DS402 CAN Drive Setup]] - How to setup drive for cyclic synchronous position operation&lt;br /&gt;
&lt;br /&gt;
= HMI =&lt;br /&gt;
* [[Program_Examples:Operate_softMC_3_with_HMI| Program Examples - HMI]] - how to configure HMI with softMC 3&lt;br /&gt;
&lt;br /&gt;
= Caming Examples =&lt;br /&gt;
* [[Program_Examples:Create_Motion:CAM_Table|Program Examples - Create CAM table and move axes]]&lt;br /&gt;
* [[Program Examples:Camming by Virtual Master|Program Examples - Caming by Virtual Master]]&lt;br /&gt;
* [[Program_Examples:Reverse engineering for cam table|Program Examples - Reverse engineering for cam table]]&lt;br /&gt;
* [[Program_Examples:Cam table with shutdown and restart|Program Examples - Cam table with shutdown and restart]]&lt;br /&gt;
* [[Cut To Length (Punching) Application|Program Examples - Cut To Length (Punching) Application]]&lt;br /&gt;
* [[Flying Shear Application|Program Examples - Flying Shear Application]]&lt;br /&gt;
&lt;br /&gt;
= Motion Examples =&lt;br /&gt;
* [[Axis Setup Procedure|Program Example - Axis Setup]] - How to set up the basic configuration of an axis.&lt;br /&gt;
* [[Master and Slave configuration|Program Example - Master Slave]] - How to set up basic 2 axes master &amp;amp; slave configuration.&lt;br /&gt;
* [[Defining_Cartesian_Groups|Program Example - Defining Cartesian Groups]] - How to set up an XYZ system.&lt;br /&gt;
* [[Program Examples:Helical Interpolation|Program Examples - Helical Interpolation]] - Circle Demo&lt;br /&gt;
* [[Program_Examples:Backlash_Compensation|Program Examples - Backlash Compensation]] - Position Backlash Compensation&lt;br /&gt;
* [[Program_Examples:Backlash_Compensation_Table|Program Examples - Backlash Compensation using Compensation Tables]] - Position Backlash Compensation using compensation tables&lt;br /&gt;
* [[Program_Examples:Homing|Program Examples - Homing]] - How to set homing parameters and issue a homing procedure&lt;br /&gt;
* [[Program_Examples:Create_Motion:Position_Mode|Program Examples - Move Axis in Position Mode]]&lt;br /&gt;
* [[Program_Examples:Create_Motion:Velocity_Mode|Program Examples - Jog Axis in Velocity Mode]]&lt;br /&gt;
* [[Program_Examples:Create_Motion:Torque_Mode|Program Examples - Issue a Torque Command to an Axis in Torque Mode]]&lt;br /&gt;
* [[Program_Examples:Defining_a_Cartesian_Group|Program_Examples - Defining a Cartesian Group]]&lt;br /&gt;
* [[Program_Examples:Setting_Up_an_Axis|Program_Examples - Setting Up an Axis]]&lt;br /&gt;
* [[Program_Examples:Robot tool calibration|Program_Examples - Robot tool calibration]]&lt;br /&gt;
* [[Program_Examples:CT without buffer|Program_Examples - CT without buffer]]&lt;br /&gt;
* [[Program_Examples:Group Blending|Program_Examples - Group Blending]]&lt;br /&gt;
* [[Program_Examples:Robot Circle Command|Program_Examples - Robot Circle Command]]&lt;br /&gt;
* [[Program_Examples:Cartesian Gearing|Program_Examples - Cartesian Gearing]]&lt;br /&gt;
* [[Program_Examples_-_Robot_Pick_and_Place_(P%26P)|Program_Examples - Robot Pick and Place (P&amp;amp;P)]]&lt;br /&gt;
* [[Program_Examples_-_Robot_Helix_motion|Program_Examples - Robot Helix motion]]&lt;br /&gt;
&amp;lt;!--* [[Program_Examples:Cyclic_recording_of_one_Axis|Program_Examples - Cyclic recording of one Axis]]--&amp;gt;&lt;br /&gt;
* [[Program_Examples:Cyclic_recording_of_single_Axis|Program_Examples - Cyclic recording of single Axis]]&lt;br /&gt;
* [[Program Examples: PIPEMODE library and motion commands|Program_Examples -  PIPEMODE: Library and Motion Commands]]&lt;br /&gt;
* [[Program Examples: WorkSpace areas|Program_Examples - WorkSpace areas]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[PLS_SETUP_PROCEDURE|Program Example - Axis-PLS: PLS Setup]] - How to set up a PLS data table.&lt;br /&gt;
* Program Example - Path-PLS: Path Distances as Position Source&lt;br /&gt;
* Program Example - Path-PLS: Path Percentages as Position Source&lt;br /&gt;
* Program Example - Path-PLS: Setpoint1 as Position Source&lt;br /&gt;
* Program Example - Path-PLS: Non-Blended Motion Transitions as Position Source&lt;br /&gt;
* Program Example - Path-PLS: Blended Motion Transitions as Position Source &lt;br /&gt;
* Program Example - Path-PLS: Equidistant Points from Start/End as Position Source&lt;br /&gt;
* Program Example - Path-PLS: High Accuracy Concatenated Motions&lt;br /&gt;
* [[Program_Examples:Path-PLS|Program Example - Path-PLS: PUMA Robot Application with PLS]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Advanced (Expert)=&lt;br /&gt;
* [[Program_Examples:Visualization with RoboDK|Program_Example - Visualization with RoboDK]]&lt;br /&gt;
* [[Program_Examples:sys_log|Program Examples - sys.log]] - How to send log messages from MC-Basic context to Linux sys.log&lt;br /&gt;
* [[Program_Examples:Shared_Objects|Program Examples - Shared Objects]] - How to create, link and use shared objects with softMC&lt;br /&gt;
* [[Program_Examples:real time motion event tracer |Program Example - real time motion event tracer]] - How to trace internal motion events&lt;br /&gt;
* [[Program_Examples:Sci_Lab_interface| Program_Example - Sci Lab interface]] - Plotting softMC rec files in SciLab&lt;br /&gt;
* [[Program_Examples:Octave_interface| Program_Example - Octave interface]] - Plotting softMC rec files in Octave&lt;br /&gt;
* [[Program_Examples:User Kinematics|Program_Example - User Kinematics - '''Advanced!''']]&lt;br /&gt;
* [[Program_Examples:force sensor|Program_Example - Force Sensor]]&lt;br /&gt;
&lt;br /&gt;
=Undocumented=&lt;br /&gt;
* [[ Undocumented_User_Functions | Undocumented ]]&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=Program_Examples&amp;diff=132950</id>
		<title>Program Examples</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=Program_Examples&amp;diff=132950"/>
				<updated>2018-10-09T07:44:38Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: /* Motion Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
= Getting Started = &lt;br /&gt;
* [[Getting_Started_with_MC-Basic_and_ControlStudio|Getting Started with MC-Basic and ControlStudio]]&lt;br /&gt;
* [[Program Examples - Sending Hexadecimal Data Over RS232|Program Examples - Sending Hexadecimal Data Over RS232]]&lt;br /&gt;
&lt;br /&gt;
= Communication =&lt;br /&gt;
* [[Program Examples:Serial Com:Serial Com Example|Program Example - Serial COM]] - How to setup a serial connection&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Simple Server|Program Example - TCP/IP Simple Server]] - How to setup a simple TCP-IP server&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Simple Client|Program Example - TCP/IP Simple Client]] - How to setup a simple TCP-IP client&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Multi Server|Program Example - TCP/IP Multi Server]] - How to setup a TCP-IP server that opens connections with multiple clients&lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_TelNet_Server|Program Example - TCP/IP TelNet Server]] - How to setup a TCP-IP TelNet server with simple parser&lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_Winsock_Client|Program Example - TCP/IP windows socket client]] - An example written in C language, corresponds to the &lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_TelNet_Server|TCP/IP TelNet Server]] example.&lt;br /&gt;
&lt;br /&gt;
= File handling=&lt;br /&gt;
* [[Program Examples:File Handling:Open Read Write|Program Example - File Handling - Open Read Write]] - How to open a file with different permissions&lt;br /&gt;
* [[Virtual Entry Station (VES)|Program Example - Virtual Entry Station (VES)]]&lt;br /&gt;
* [[File Encryption|Program Example - File Encryption (VES)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Motion Bus =&lt;br /&gt;
* [[Program_Examples:CANOpen:DS402_CAN_Drive_Setup|Program Example - DS402 CAN Drive Setup]] - How to setup drive for cyclic synchronous position operation&lt;br /&gt;
&lt;br /&gt;
= HMI =&lt;br /&gt;
* [[Program_Examples:Operate_softMC_3_with_HMI| Program Examples - HMI]] - how to configure HMI with softMC 3&lt;br /&gt;
&lt;br /&gt;
= Caming Examples =&lt;br /&gt;
* [[Program_Examples:Create_Motion:CAM_Table|Program Examples - Create CAM table and move axes]]&lt;br /&gt;
* [[Program Examples:Camming by Virtual Master|Program Examples - Caming by Virtual Master]]&lt;br /&gt;
* [[Program_Examples:Reverse engineering for cam table|Program Examples - Reverse engineering for cam table]]&lt;br /&gt;
* [[Program_Examples:Cam table with shutdown and restart|Program Examples - Cam table with shutdown and restart]]&lt;br /&gt;
* [[Cut To Length (Punching) Application|Program Examples - Cut To Length (Punching) Application]]&lt;br /&gt;
* [[Flying Shear Application|Program Examples - Flying Shear Application]]&lt;br /&gt;
&lt;br /&gt;
= Motion Examples =&lt;br /&gt;
* [[Axis Setup Procedure|Program Example - Axis Setup]] - How to set up the basic configuration of an axis.&lt;br /&gt;
* [[Master and Slave configuration|Program Example - Master Slave]] - How to set up basic 2 axes master &amp;amp; slave configuration.&lt;br /&gt;
* [[Defining_Cartesian_Groups|Program Example - Defining Cartesian Groups]] - How to set up an XYZ system.&lt;br /&gt;
* [[Program Examples:Helical Interpolation|Program Examples - Helical Interpolation]] - Circle Demo&lt;br /&gt;
* [[Program_Examples:Backlash_Compensation|Program Examples - Backlash Compensation]] - Position Backlash Compensation&lt;br /&gt;
* [[Program_Examples:Backlash_Compensation_Table|Program Examples - Backlash Compensation using Compensation Tables]] - Position Backlash Compensation using compensation tables&lt;br /&gt;
* [[Program_Examples:Homing|Program Examples - Homing]] - How to set homing parameters and issue a homing procedure&lt;br /&gt;
* [[Program_Examples:Create_Motion:Position_Mode|Program Examples - Move Axis in Position Mode]]&lt;br /&gt;
* [[Program_Examples:Create_Motion:Velocity_Mode|Program Examples - Jog Axis in Velocity Mode]]&lt;br /&gt;
* [[Program_Examples:Create_Motion:Torque_Mode|Program Examples - Issue a Torque Command to an Axis in Torque Mode]]&lt;br /&gt;
* [[Program_Examples:Defining_a_Cartesian_Group|Program_Examples - Defining a Cartesian Group]]&lt;br /&gt;
* [[Program_Examples:Setting_Up_an_Axis|Program_Examples - Setting Up an Axis]]&lt;br /&gt;
* [[Program_Examples:Robot tool calibration|Program_Examples - Robot tool calibration]]&lt;br /&gt;
* [[Program_Examples:CT without buffer|Program_Examples - CT without buffer]]&lt;br /&gt;
* [[Program_Examples:Group Blending|Program_Examples - Group Blending]]&lt;br /&gt;
* [[Program_Examples:Robot Circle Command|Program_Examples - Robot Circle Command]]&lt;br /&gt;
* [[Program_Examples:Cartesian Gearing|Program_Examples - Cartesian Gearing]]&lt;br /&gt;
* [[Program_Examples_-_Robot_Pick_and_Place_(P%26P)|Program_Examples - Robot Pick and Place (P&amp;amp;P)]]&lt;br /&gt;
* [[Program_Examples_-_Robot_Helix_motion|Program_Examples - Robot Helix motion]]&lt;br /&gt;
&amp;lt;!--* [[Program_Examples:Cyclic_recording_of_one_Axis|Program_Examples - Cyclic recording of one Axis]]--&amp;gt;&lt;br /&gt;
* [[Program_Examples:Cyclic_recording_of_single_Axis|Program_Examples - Cyclic recording of single Axis]]&lt;br /&gt;
* [[Program Examples: PIPEMODE library and motion commands|Program_Examples -  PIPEMODE: Library and Motion Commands]]&lt;br /&gt;
* [[Program Examples: WorkSpace areas|Program_Examples - WorkSpace areas]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[PLS_SETUP_PROCEDURE|Program Example – Axis-PLS: PLS Setup]] - How to set up a PLS data table.&lt;br /&gt;
* Program Example – Path-PLS: Path Distances as Position Source&lt;br /&gt;
* Program Example – Path-PLS: Path Percentages as Position Source&lt;br /&gt;
* Program Example – Path-PLS: Setpoint1 as Position Source&lt;br /&gt;
* Program Example – Path-PLS: Non-Blended Motion Transitions as Position Source&lt;br /&gt;
* Program Example – Path-PLS: Blended Motion Transitions as Position Source &lt;br /&gt;
* Program Example – Path-PLS: Equidistant Points from Start/End as Position Source&lt;br /&gt;
* Program Example – Path-PLS: High Accuracy Concatenated Motions&lt;br /&gt;
* [[Program_Examples:Path-PLS|Program Example – Path-PLS: PUMA Robot Application with PLS]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Advanced (Expert)=&lt;br /&gt;
* [[Program_Examples:Visualization with RoboDK|Program_Example - Visualization with RoboDK]]&lt;br /&gt;
* [[Program_Examples:sys_log|Program Examples - sys.log]] - How to send log messages from MC-Basic context to Linux sys.log&lt;br /&gt;
* [[Program_Examples:Shared_Objects|Program Examples - Shared Objects]] - How to create, link and use shared objects with softMC&lt;br /&gt;
* [[Program_Examples:real time motion event tracer |Program Example - real time motion event tracer]] - How to trace internal motion events&lt;br /&gt;
* [[Program_Examples:Sci_Lab_interface| Program_Example - Sci Lab interface]] - Plotting softMC rec files in SciLab&lt;br /&gt;
* [[Program_Examples:Octave_interface| Program_Example - Octave interface]] - Plotting softMC rec files in Octave&lt;br /&gt;
* [[Program_Examples:User Kinematics|Program_Example - User Kinematics - '''Advanced!''']]&lt;br /&gt;
* [[Program_Examples:force sensor|Program_Example - Force Sensor]]&lt;br /&gt;
&lt;br /&gt;
=Undocumented=&lt;br /&gt;
* [[ Undocumented_User_Functions | Undocumented ]]&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=Program_Examples&amp;diff=132949</id>
		<title>Program Examples</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=Program_Examples&amp;diff=132949"/>
				<updated>2018-10-09T07:44:01Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: /* Motion Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
= Getting Started = &lt;br /&gt;
* [[Getting_Started_with_MC-Basic_and_ControlStudio|Getting Started with MC-Basic and ControlStudio]]&lt;br /&gt;
* [[Program Examples - Sending Hexadecimal Data Over RS232|Program Examples - Sending Hexadecimal Data Over RS232]]&lt;br /&gt;
&lt;br /&gt;
= Communication =&lt;br /&gt;
* [[Program Examples:Serial Com:Serial Com Example|Program Example - Serial COM]] - How to setup a serial connection&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Simple Server|Program Example - TCP/IP Simple Server]] - How to setup a simple TCP-IP server&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Simple Client|Program Example - TCP/IP Simple Client]] - How to setup a simple TCP-IP client&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Multi Server|Program Example - TCP/IP Multi Server]] - How to setup a TCP-IP server that opens connections with multiple clients&lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_TelNet_Server|Program Example - TCP/IP TelNet Server]] - How to setup a TCP-IP TelNet server with simple parser&lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_Winsock_Client|Program Example - TCP/IP windows socket client]] - An example written in C language, corresponds to the &lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_TelNet_Server|TCP/IP TelNet Server]] example.&lt;br /&gt;
&lt;br /&gt;
= File handling=&lt;br /&gt;
* [[Program Examples:File Handling:Open Read Write|Program Example - File Handling - Open Read Write]] - How to open a file with different permissions&lt;br /&gt;
* [[Virtual Entry Station (VES)|Program Example - Virtual Entry Station (VES)]]&lt;br /&gt;
* [[File Encryption|Program Example - File Encryption (VES)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Motion Bus =&lt;br /&gt;
* [[Program_Examples:CANOpen:DS402_CAN_Drive_Setup|Program Example - DS402 CAN Drive Setup]] - How to setup drive for cyclic synchronous position operation&lt;br /&gt;
&lt;br /&gt;
= HMI =&lt;br /&gt;
* [[Program_Examples:Operate_softMC_3_with_HMI| Program Examples - HMI]] - how to configure HMI with softMC 3&lt;br /&gt;
&lt;br /&gt;
= Caming Examples =&lt;br /&gt;
* [[Program_Examples:Create_Motion:CAM_Table|Program Examples - Create CAM table and move axes]]&lt;br /&gt;
* [[Program Examples:Camming by Virtual Master|Program Examples - Caming by Virtual Master]]&lt;br /&gt;
* [[Program_Examples:Reverse engineering for cam table|Program Examples - Reverse engineering for cam table]]&lt;br /&gt;
* [[Program_Examples:Cam table with shutdown and restart|Program Examples - Cam table with shutdown and restart]]&lt;br /&gt;
* [[Cut To Length (Punching) Application|Program Examples - Cut To Length (Punching) Application]]&lt;br /&gt;
* [[Flying Shear Application|Program Examples - Flying Shear Application]]&lt;br /&gt;
&lt;br /&gt;
= Motion Examples =&lt;br /&gt;
* [[Axis Setup Procedure|Program Example - Axis Setup]] - How to set up the basic configuration of an axis.&lt;br /&gt;
* [[Master and Slave configuration|Program Example - Master Slave]] - How to set up basic 2 axes master &amp;amp; slave configuration.&lt;br /&gt;
* [[Defining_Cartesian_Groups|Program Example - Defining Cartesian Groups]] - How to set up an XYZ system.&lt;br /&gt;
* [[Program Examples:Helical Interpolation|Program Examples - Helical Interpolation]] - Circle Demo&lt;br /&gt;
* [[Program_Examples:Backlash_Compensation|Program Examples - Backlash Compensation]] - Position Backlash Compensation&lt;br /&gt;
* [[Program_Examples:Backlash_Compensation_Table|Program Examples - Backlash Compensation using Compensation Tables]] - Position Backlash Compensation using compensation tables&lt;br /&gt;
* [[Program_Examples:Homing|Program Examples - Homing]] - How to set homing parameters and issue a homing procedure&lt;br /&gt;
* [[Program_Examples:Create_Motion:Position_Mode|Program Examples - Move Axis in Position Mode]]&lt;br /&gt;
* [[Program_Examples:Create_Motion:Velocity_Mode|Program Examples - Jog Axis in Velocity Mode]]&lt;br /&gt;
* [[Program_Examples:Create_Motion:Torque_Mode|Program Examples - Issue a Torque Command to an Axis in Torque Mode]]&lt;br /&gt;
* [[Program_Examples:Defining_a_Cartesian_Group|Program_Examples - Defining a Cartesian Group]]&lt;br /&gt;
* [[Program_Examples:Setting_Up_an_Axis|Program_Examples - Setting Up an Axis]]&lt;br /&gt;
* [[Program_Examples:Robot tool calibration|Program_Examples - Robot tool calibration]]&lt;br /&gt;
* [[Program_Examples:CT without buffer|Program_Examples - CT without buffer]]&lt;br /&gt;
* [[Program_Examples:Group Blending|Program_Examples - Group Blending]]&lt;br /&gt;
* [[Program_Examples:Robot Circle Command|Program_Examples - Robot Circle Command]]&lt;br /&gt;
* [[Program_Examples:Cartesian Gearing|Program_Examples - Cartesian Gearing]]&lt;br /&gt;
* [[Program_Examples_-_Robot_Pick_and_Place_(P%26P)|Program_Examples - Robot Pick and Place (P&amp;amp;P)]]&lt;br /&gt;
* [[Program_Examples_-_Robot_Helix_motion|Program_Examples - Robot Helix motion]]&lt;br /&gt;
&amp;lt;!--* [[Program_Examples:Cyclic_recording_of_one_Axis|Program_Examples - Cyclic recording of one Axis]]--&amp;gt;&lt;br /&gt;
* [[Program_Examples:Cyclic_recording_of_single_Axis|Program_Examples - Cyclic recording of single Axis]]&lt;br /&gt;
* [[Program Examples: PIPEMODE library and motion commands|Program_Examples -  PIPEMODE: Library and Motion Commands]]&lt;br /&gt;
* [[Program Examples: WorkSpace areas|Program_Examples - WorkSpace areas]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[PLS_SETUP_PROCEDURE|Program Example – Axis-PLS: PLS Setup]] - How to set up a PLS data table.&lt;br /&gt;
* [[Program_Examples:Path-PLS|Program Example – Path-PLS: PUMA Robot Application with PLS]]&lt;br /&gt;
Program Example – Path-PLS: Path Distances as Position Source&lt;br /&gt;
&lt;br /&gt;
Program Example – Path-PLS: Path Percentages as Position Source&lt;br /&gt;
&lt;br /&gt;
Program Example – Path-PLS: Setpoint1 as Position Source&lt;br /&gt;
&lt;br /&gt;
Program Example – Path-PLS: Non-Blended Motion Transitions as Position Source&lt;br /&gt;
&lt;br /&gt;
Program Example – Path-PLS: Blended Motion Transitions as Position Source &lt;br /&gt;
&lt;br /&gt;
Program Example – Path-PLS: Equidistant Points from Start/End as Position Source&lt;br /&gt;
&lt;br /&gt;
Program Example – Path-PLS: High Accuracy Concatenated Motions&lt;br /&gt;
&lt;br /&gt;
Program Example – Path-PLS: PUMA Robot Application with PLS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Advanced (Expert)=&lt;br /&gt;
* [[Program_Examples:Visualization with RoboDK|Program_Example - Visualization with RoboDK]]&lt;br /&gt;
* [[Program_Examples:sys_log|Program Examples - sys.log]] - How to send log messages from MC-Basic context to Linux sys.log&lt;br /&gt;
* [[Program_Examples:Shared_Objects|Program Examples - Shared Objects]] - How to create, link and use shared objects with softMC&lt;br /&gt;
* [[Program_Examples:real time motion event tracer |Program Example - real time motion event tracer]] - How to trace internal motion events&lt;br /&gt;
* [[Program_Examples:Sci_Lab_interface| Program_Example - Sci Lab interface]] - Plotting softMC rec files in SciLab&lt;br /&gt;
* [[Program_Examples:Octave_interface| Program_Example - Octave interface]] - Plotting softMC rec files in Octave&lt;br /&gt;
* [[Program_Examples:User Kinematics|Program_Example - User Kinematics - '''Advanced!''']]&lt;br /&gt;
* [[Program_Examples:force sensor|Program_Example - Force Sensor]]&lt;br /&gt;
&lt;br /&gt;
=Undocumented=&lt;br /&gt;
* [[ Undocumented_User_Functions | Undocumented ]]&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=Program_Examples&amp;diff=132948</id>
		<title>Program Examples</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=Program_Examples&amp;diff=132948"/>
				<updated>2018-10-09T07:42:37Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: /* Motion Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
= Getting Started = &lt;br /&gt;
* [[Getting_Started_with_MC-Basic_and_ControlStudio|Getting Started with MC-Basic and ControlStudio]]&lt;br /&gt;
* [[Program Examples - Sending Hexadecimal Data Over RS232|Program Examples - Sending Hexadecimal Data Over RS232]]&lt;br /&gt;
&lt;br /&gt;
= Communication =&lt;br /&gt;
* [[Program Examples:Serial Com:Serial Com Example|Program Example - Serial COM]] - How to setup a serial connection&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Simple Server|Program Example - TCP/IP Simple Server]] - How to setup a simple TCP-IP server&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Simple Client|Program Example - TCP/IP Simple Client]] - How to setup a simple TCP-IP client&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Multi Server|Program Example - TCP/IP Multi Server]] - How to setup a TCP-IP server that opens connections with multiple clients&lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_TelNet_Server|Program Example - TCP/IP TelNet Server]] - How to setup a TCP-IP TelNet server with simple parser&lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_Winsock_Client|Program Example - TCP/IP windows socket client]] - An example written in C language, corresponds to the &lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_TelNet_Server|TCP/IP TelNet Server]] example.&lt;br /&gt;
&lt;br /&gt;
= File handling=&lt;br /&gt;
* [[Program Examples:File Handling:Open Read Write|Program Example - File Handling - Open Read Write]] - How to open a file with different permissions&lt;br /&gt;
* [[Virtual Entry Station (VES)|Program Example - Virtual Entry Station (VES)]]&lt;br /&gt;
* [[File Encryption|Program Example - File Encryption (VES)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Motion Bus =&lt;br /&gt;
* [[Program_Examples:CANOpen:DS402_CAN_Drive_Setup|Program Example - DS402 CAN Drive Setup]] - How to setup drive for cyclic synchronous position operation&lt;br /&gt;
&lt;br /&gt;
= HMI =&lt;br /&gt;
* [[Program_Examples:Operate_softMC_3_with_HMI| Program Examples - HMI]] - how to configure HMI with softMC 3&lt;br /&gt;
&lt;br /&gt;
= Caming Examples =&lt;br /&gt;
* [[Program_Examples:Create_Motion:CAM_Table|Program Examples - Create CAM table and move axes]]&lt;br /&gt;
* [[Program Examples:Camming by Virtual Master|Program Examples - Caming by Virtual Master]]&lt;br /&gt;
* [[Program_Examples:Reverse engineering for cam table|Program Examples - Reverse engineering for cam table]]&lt;br /&gt;
* [[Program_Examples:Cam table with shutdown and restart|Program Examples - Cam table with shutdown and restart]]&lt;br /&gt;
* [[Cut To Length (Punching) Application|Program Examples - Cut To Length (Punching) Application]]&lt;br /&gt;
* [[Flying Shear Application|Program Examples - Flying Shear Application]]&lt;br /&gt;
&lt;br /&gt;
= Motion Examples =&lt;br /&gt;
* [[Axis Setup Procedure|Program Example - Axis Setup]] - How to set up the basic configuration of an axis.&lt;br /&gt;
* [[Master and Slave configuration|Program Example - Master Slave]] - How to set up basic 2 axes master &amp;amp; slave configuration.&lt;br /&gt;
* [[Defining_Cartesian_Groups|Program Example - Defining Cartesian Groups]] - How to set up an XYZ system.&lt;br /&gt;
* [[Program Examples:Helical Interpolation|Program Examples - Helical Interpolation]] - Circle Demo&lt;br /&gt;
* [[Program_Examples:Backlash_Compensation|Program Examples - Backlash Compensation]] - Position Backlash Compensation&lt;br /&gt;
* [[Program_Examples:Backlash_Compensation_Table|Program Examples - Backlash Compensation using Compensation Tables]] - Position Backlash Compensation using compensation tables&lt;br /&gt;
* [[Program_Examples:Homing|Program Examples - Homing]] - How to set homing parameters and issue a homing procedure&lt;br /&gt;
* [[Program_Examples:Create_Motion:Position_Mode|Program Examples - Move Axis in Position Mode]]&lt;br /&gt;
* [[Program_Examples:Create_Motion:Velocity_Mode|Program Examples - Jog Axis in Velocity Mode]]&lt;br /&gt;
* [[Program_Examples:Create_Motion:Torque_Mode|Program Examples - Issue a Torque Command to an Axis in Torque Mode]]&lt;br /&gt;
* [[Program_Examples:Defining_a_Cartesian_Group|Program_Examples - Defining a Cartesian Group]]&lt;br /&gt;
* [[Program_Examples:Setting_Up_an_Axis|Program_Examples - Setting Up an Axis]]&lt;br /&gt;
* [[Program_Examples:Robot tool calibration|Program_Examples - Robot tool calibration]]&lt;br /&gt;
* [[Program_Examples:CT without buffer|Program_Examples - CT without buffer]]&lt;br /&gt;
* [[Program_Examples:Group Blending|Program_Examples - Group Blending]]&lt;br /&gt;
* [[Program_Examples:Robot Circle Command|Program_Examples - Robot Circle Command]]&lt;br /&gt;
* [[Program_Examples:Cartesian Gearing|Program_Examples - Cartesian Gearing]]&lt;br /&gt;
* [[Program_Examples_-_Robot_Pick_and_Place_(P%26P)|Program_Examples - Robot Pick and Place (P&amp;amp;P)]]&lt;br /&gt;
* [[Program_Examples_-_Robot_Helix_motion|Program_Examples - Robot Helix motion]]&lt;br /&gt;
&amp;lt;!--* [[Program_Examples:Cyclic_recording_of_one_Axis|Program_Examples - Cyclic recording of one Axis]]--&amp;gt;&lt;br /&gt;
* [[Program_Examples:Cyclic_recording_of_single_Axis|Program_Examples - Cyclic recording of single Axis]]&lt;br /&gt;
* [[Program Examples: PIPEMODE library and motion commands|Program_Examples -  PIPEMODE: Library and Motion Commands]]&lt;br /&gt;
* [[Program Examples: WorkSpace areas|Program_Examples - WorkSpace areas]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[PLS_SETUP_PROCEDURE|Program Example – Axis-PLS: PLS Setup]] - How to set up a PLS data table.&lt;br /&gt;
* [[Program_Examples:Path-PLS|Program Example – Path-PLS: PUMA Robot Application with PLS]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Advanced (Expert)=&lt;br /&gt;
* [[Program_Examples:Visualization with RoboDK|Program_Example - Visualization with RoboDK]]&lt;br /&gt;
* [[Program_Examples:sys_log|Program Examples - sys.log]] - How to send log messages from MC-Basic context to Linux sys.log&lt;br /&gt;
* [[Program_Examples:Shared_Objects|Program Examples - Shared Objects]] - How to create, link and use shared objects with softMC&lt;br /&gt;
* [[Program_Examples:real time motion event tracer |Program Example - real time motion event tracer]] - How to trace internal motion events&lt;br /&gt;
* [[Program_Examples:Sci_Lab_interface| Program_Example - Sci Lab interface]] - Plotting softMC rec files in SciLab&lt;br /&gt;
* [[Program_Examples:Octave_interface| Program_Example - Octave interface]] - Plotting softMC rec files in Octave&lt;br /&gt;
* [[Program_Examples:User Kinematics|Program_Example - User Kinematics - '''Advanced!''']]&lt;br /&gt;
* [[Program_Examples:force sensor|Program_Example - Force Sensor]]&lt;br /&gt;
&lt;br /&gt;
=Undocumented=&lt;br /&gt;
* [[ Undocumented_User_Functions | Undocumented ]]&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=Program_Examples&amp;diff=132947</id>
		<title>Program Examples</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=Program_Examples&amp;diff=132947"/>
				<updated>2018-10-09T07:42:15Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: /* Motion Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
= Getting Started = &lt;br /&gt;
* [[Getting_Started_with_MC-Basic_and_ControlStudio|Getting Started with MC-Basic and ControlStudio]]&lt;br /&gt;
* [[Program Examples - Sending Hexadecimal Data Over RS232|Program Examples - Sending Hexadecimal Data Over RS232]]&lt;br /&gt;
&lt;br /&gt;
= Communication =&lt;br /&gt;
* [[Program Examples:Serial Com:Serial Com Example|Program Example - Serial COM]] - How to setup a serial connection&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Simple Server|Program Example - TCP/IP Simple Server]] - How to setup a simple TCP-IP server&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Simple Client|Program Example - TCP/IP Simple Client]] - How to setup a simple TCP-IP client&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Multi Server|Program Example - TCP/IP Multi Server]] - How to setup a TCP-IP server that opens connections with multiple clients&lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_TelNet_Server|Program Example - TCP/IP TelNet Server]] - How to setup a TCP-IP TelNet server with simple parser&lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_Winsock_Client|Program Example - TCP/IP windows socket client]] - An example written in C language, corresponds to the &lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_TelNet_Server|TCP/IP TelNet Server]] example.&lt;br /&gt;
&lt;br /&gt;
= File handling=&lt;br /&gt;
* [[Program Examples:File Handling:Open Read Write|Program Example - File Handling - Open Read Write]] - How to open a file with different permissions&lt;br /&gt;
* [[Virtual Entry Station (VES)|Program Example - Virtual Entry Station (VES)]]&lt;br /&gt;
* [[File Encryption|Program Example - File Encryption (VES)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Motion Bus =&lt;br /&gt;
* [[Program_Examples:CANOpen:DS402_CAN_Drive_Setup|Program Example - DS402 CAN Drive Setup]] - How to setup drive for cyclic synchronous position operation&lt;br /&gt;
&lt;br /&gt;
= HMI =&lt;br /&gt;
* [[Program_Examples:Operate_softMC_3_with_HMI| Program Examples - HMI]] - how to configure HMI with softMC 3&lt;br /&gt;
&lt;br /&gt;
= Caming Examples =&lt;br /&gt;
* [[Program_Examples:Create_Motion:CAM_Table|Program Examples - Create CAM table and move axes]]&lt;br /&gt;
* [[Program Examples:Camming by Virtual Master|Program Examples - Caming by Virtual Master]]&lt;br /&gt;
* [[Program_Examples:Reverse engineering for cam table|Program Examples - Reverse engineering for cam table]]&lt;br /&gt;
* [[Program_Examples:Cam table with shutdown and restart|Program Examples - Cam table with shutdown and restart]]&lt;br /&gt;
* [[Cut To Length (Punching) Application|Program Examples - Cut To Length (Punching) Application]]&lt;br /&gt;
* [[Flying Shear Application|Program Examples - Flying Shear Application]]&lt;br /&gt;
&lt;br /&gt;
= Motion Examples =&lt;br /&gt;
* [[Axis Setup Procedure|Program Example - Axis Setup]] - How to set up the basic configuration of an axis.&lt;br /&gt;
* [[Master and Slave configuration|Program Example - Master Slave]] - How to set up basic 2 axes master &amp;amp; slave configuration.&lt;br /&gt;
* [[Defining_Cartesian_Groups|Program Example - Defining Cartesian Groups]] - How to set up an XYZ system.&lt;br /&gt;
* [[Program Examples:Helical Interpolation|Program Examples - Helical Interpolation]] - Circle Demo&lt;br /&gt;
* [[Program_Examples:Backlash_Compensation|Program Examples - Backlash Compensation]] - Position Backlash Compensation&lt;br /&gt;
* [[Program_Examples:Backlash_Compensation_Table|Program Examples - Backlash Compensation using Compensation Tables]] - Position Backlash Compensation using compensation tables&lt;br /&gt;
* [[Program_Examples:Homing|Program Examples - Homing]] - How to set homing parameters and issue a homing procedure&lt;br /&gt;
* [[Program_Examples:Create_Motion:Position_Mode|Program Examples - Move Axis in Position Mode]]&lt;br /&gt;
* [[Program_Examples:Create_Motion:Velocity_Mode|Program Examples - Jog Axis in Velocity Mode]]&lt;br /&gt;
* [[Program_Examples:Create_Motion:Torque_Mode|Program Examples - Issue a Torque Command to an Axis in Torque Mode]]&lt;br /&gt;
* [[Program_Examples:Defining_a_Cartesian_Group|Program_Examples - Defining a Cartesian Group]]&lt;br /&gt;
* [[Program_Examples:Setting_Up_an_Axis|Program_Examples - Setting Up an Axis]]&lt;br /&gt;
* [[Program_Examples:Robot tool calibration|Program_Examples - Robot tool calibration]]&lt;br /&gt;
* [[Program_Examples:CT without buffer|Program_Examples - CT without buffer]]&lt;br /&gt;
* [[Program_Examples:Group Blending|Program_Examples - Group Blending]]&lt;br /&gt;
* [[Program_Examples:Robot Circle Command|Program_Examples - Robot Circle Command]]&lt;br /&gt;
* [[Program_Examples:Cartesian Gearing|Program_Examples - Cartesian Gearing]]&lt;br /&gt;
* [[Program_Examples_-_Robot_Pick_and_Place_(P%26P)|Program_Examples - Robot Pick and Place (P&amp;amp;P)]]&lt;br /&gt;
* [[Program_Examples_-_Robot_Helix_motion|Program_Examples - Robot Helix motion]]&lt;br /&gt;
&amp;lt;!--* [[Program_Examples:Cyclic_recording_of_one_Axis|Program_Examples - Cyclic recording of one Axis]]--&amp;gt;&lt;br /&gt;
* [[Program_Examples:Cyclic_recording_of_single_Axis|Program_Examples - Cyclic recording of single Axis]]&lt;br /&gt;
* [[Program Examples: PIPEMODE library and motion commands|Program_Examples -  PIPEMODE: Library and Motion Commands]]&lt;br /&gt;
* [[Program Examples: WorkSpace areas|Program_Examples - WorkSpace areas]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[PLS_SETUP_PROCEDURE|Program Example – Axis-PLS: PLS Setup]] - How to set up a PLS data table.&lt;br /&gt;
* [[Program_Examples:Path-PLS|Path-PLS: PUMA Robot Application with PLS]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Advanced (Expert)=&lt;br /&gt;
* [[Program_Examples:Visualization with RoboDK|Program_Example - Visualization with RoboDK]]&lt;br /&gt;
* [[Program_Examples:sys_log|Program Examples - sys.log]] - How to send log messages from MC-Basic context to Linux sys.log&lt;br /&gt;
* [[Program_Examples:Shared_Objects|Program Examples - Shared Objects]] - How to create, link and use shared objects with softMC&lt;br /&gt;
* [[Program_Examples:real time motion event tracer |Program Example - real time motion event tracer]] - How to trace internal motion events&lt;br /&gt;
* [[Program_Examples:Sci_Lab_interface| Program_Example - Sci Lab interface]] - Plotting softMC rec files in SciLab&lt;br /&gt;
* [[Program_Examples:Octave_interface| Program_Example - Octave interface]] - Plotting softMC rec files in Octave&lt;br /&gt;
* [[Program_Examples:User Kinematics|Program_Example - User Kinematics - '''Advanced!''']]&lt;br /&gt;
* [[Program_Examples:force sensor|Program_Example - Force Sensor]]&lt;br /&gt;
&lt;br /&gt;
=Undocumented=&lt;br /&gt;
* [[ Undocumented_User_Functions | Undocumented ]]&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=Program_Examples&amp;diff=132946</id>
		<title>Program Examples</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=Program_Examples&amp;diff=132946"/>
				<updated>2018-10-09T07:41:48Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: /* Motion Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
= Getting Started = &lt;br /&gt;
* [[Getting_Started_with_MC-Basic_and_ControlStudio|Getting Started with MC-Basic and ControlStudio]]&lt;br /&gt;
* [[Program Examples - Sending Hexadecimal Data Over RS232|Program Examples - Sending Hexadecimal Data Over RS232]]&lt;br /&gt;
&lt;br /&gt;
= Communication =&lt;br /&gt;
* [[Program Examples:Serial Com:Serial Com Example|Program Example - Serial COM]] - How to setup a serial connection&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Simple Server|Program Example - TCP/IP Simple Server]] - How to setup a simple TCP-IP server&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Simple Client|Program Example - TCP/IP Simple Client]] - How to setup a simple TCP-IP client&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Multi Server|Program Example - TCP/IP Multi Server]] - How to setup a TCP-IP server that opens connections with multiple clients&lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_TelNet_Server|Program Example - TCP/IP TelNet Server]] - How to setup a TCP-IP TelNet server with simple parser&lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_Winsock_Client|Program Example - TCP/IP windows socket client]] - An example written in C language, corresponds to the &lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_TelNet_Server|TCP/IP TelNet Server]] example.&lt;br /&gt;
&lt;br /&gt;
= File handling=&lt;br /&gt;
* [[Program Examples:File Handling:Open Read Write|Program Example - File Handling - Open Read Write]] - How to open a file with different permissions&lt;br /&gt;
* [[Virtual Entry Station (VES)|Program Example - Virtual Entry Station (VES)]]&lt;br /&gt;
* [[File Encryption|Program Example - File Encryption (VES)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Motion Bus =&lt;br /&gt;
* [[Program_Examples:CANOpen:DS402_CAN_Drive_Setup|Program Example - DS402 CAN Drive Setup]] - How to setup drive for cyclic synchronous position operation&lt;br /&gt;
&lt;br /&gt;
= HMI =&lt;br /&gt;
* [[Program_Examples:Operate_softMC_3_with_HMI| Program Examples - HMI]] - how to configure HMI with softMC 3&lt;br /&gt;
&lt;br /&gt;
= Caming Examples =&lt;br /&gt;
* [[Program_Examples:Create_Motion:CAM_Table|Program Examples - Create CAM table and move axes]]&lt;br /&gt;
* [[Program Examples:Camming by Virtual Master|Program Examples - Caming by Virtual Master]]&lt;br /&gt;
* [[Program_Examples:Reverse engineering for cam table|Program Examples - Reverse engineering for cam table]]&lt;br /&gt;
* [[Program_Examples:Cam table with shutdown and restart|Program Examples - Cam table with shutdown and restart]]&lt;br /&gt;
* [[Cut To Length (Punching) Application|Program Examples - Cut To Length (Punching) Application]]&lt;br /&gt;
* [[Flying Shear Application|Program Examples - Flying Shear Application]]&lt;br /&gt;
&lt;br /&gt;
= Motion Examples =&lt;br /&gt;
* [[Axis Setup Procedure|Program Example - Axis Setup]] - How to set up the basic configuration of an axis.&lt;br /&gt;
* [[Master and Slave configuration|Program Example - Master Slave]] - How to set up basic 2 axes master &amp;amp; slave configuration.&lt;br /&gt;
* [[Defining_Cartesian_Groups|Program Example - Defining Cartesian Groups]] - How to set up an XYZ system.&lt;br /&gt;
* [[Program Examples:Helical Interpolation|Program Examples - Helical Interpolation]] - Circle Demo&lt;br /&gt;
* [[Program_Examples:Backlash_Compensation|Program Examples - Backlash Compensation]] - Position Backlash Compensation&lt;br /&gt;
* [[Program_Examples:Backlash_Compensation_Table|Program Examples - Backlash Compensation using Compensation Tables]] - Position Backlash Compensation using compensation tables&lt;br /&gt;
* [[Program_Examples:Homing|Program Examples - Homing]] - How to set homing parameters and issue a homing procedure&lt;br /&gt;
* [[Program_Examples:Create_Motion:Position_Mode|Program Examples - Move Axis in Position Mode]]&lt;br /&gt;
* [[Program_Examples:Create_Motion:Velocity_Mode|Program Examples - Jog Axis in Velocity Mode]]&lt;br /&gt;
* [[Program_Examples:Create_Motion:Torque_Mode|Program Examples - Issue a Torque Command to an Axis in Torque Mode]]&lt;br /&gt;
* [[Program_Examples:Defining_a_Cartesian_Group|Program_Examples - Defining a Cartesian Group]]&lt;br /&gt;
* [[Program_Examples:Setting_Up_an_Axis|Program_Examples - Setting Up an Axis]]&lt;br /&gt;
* [[Program_Examples:Robot tool calibration|Program_Examples - Robot tool calibration]]&lt;br /&gt;
* [[Program_Examples:CT without buffer|Program_Examples - CT without buffer]]&lt;br /&gt;
* [[Program_Examples:Group Blending|Program_Examples - Group Blending]]&lt;br /&gt;
* [[Program_Examples:Robot Circle Command|Program_Examples - Robot Circle Command]]&lt;br /&gt;
* [[Program_Examples:Cartesian Gearing|Program_Examples - Cartesian Gearing]]&lt;br /&gt;
* [[Program_Examples_-_Robot_Pick_and_Place_(P%26P)|Program_Examples - Robot Pick and Place (P&amp;amp;P)]]&lt;br /&gt;
* [[Program_Examples_-_Robot_Helix_motion|Program_Examples - Robot Helix motion]]&lt;br /&gt;
&amp;lt;!--* [[Program_Examples:Cyclic_recording_of_one_Axis|Program_Examples - Cyclic recording of one Axis]]--&amp;gt;&lt;br /&gt;
* [[Program_Examples:Cyclic_recording_of_single_Axis|Program_Examples - Cyclic recording of single Axis]]&lt;br /&gt;
* [[Program Examples: PIPEMODE library and motion commands|Program_Examples -  PIPEMODE: Library and Motion Commands]]&lt;br /&gt;
* [[Program Examples: WorkSpace areas|Program_Examples - WorkSpace areas]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[PLS_SETUP_PROCEDURE|Program Example – Axis-PLS: PLS Setup]] - How to set up a PLS data table.&lt;br /&gt;
* [[Program_Examples:Path-PLS|Program_Examples - Path-PLS]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Advanced (Expert)=&lt;br /&gt;
* [[Program_Examples:Visualization with RoboDK|Program_Example - Visualization with RoboDK]]&lt;br /&gt;
* [[Program_Examples:sys_log|Program Examples - sys.log]] - How to send log messages from MC-Basic context to Linux sys.log&lt;br /&gt;
* [[Program_Examples:Shared_Objects|Program Examples - Shared Objects]] - How to create, link and use shared objects with softMC&lt;br /&gt;
* [[Program_Examples:real time motion event tracer |Program Example - real time motion event tracer]] - How to trace internal motion events&lt;br /&gt;
* [[Program_Examples:Sci_Lab_interface| Program_Example - Sci Lab interface]] - Plotting softMC rec files in SciLab&lt;br /&gt;
* [[Program_Examples:Octave_interface| Program_Example - Octave interface]] - Plotting softMC rec files in Octave&lt;br /&gt;
* [[Program_Examples:User Kinematics|Program_Example - User Kinematics - '''Advanced!''']]&lt;br /&gt;
* [[Program_Examples:force sensor|Program_Example - Force Sensor]]&lt;br /&gt;
&lt;br /&gt;
=Undocumented=&lt;br /&gt;
* [[ Undocumented_User_Functions | Undocumented ]]&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=Program_Examples&amp;diff=132945</id>
		<title>Program Examples</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=Program_Examples&amp;diff=132945"/>
				<updated>2018-10-09T07:40:18Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: /* Motion Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
= Getting Started = &lt;br /&gt;
* [[Getting_Started_with_MC-Basic_and_ControlStudio|Getting Started with MC-Basic and ControlStudio]]&lt;br /&gt;
* [[Program Examples - Sending Hexadecimal Data Over RS232|Program Examples - Sending Hexadecimal Data Over RS232]]&lt;br /&gt;
&lt;br /&gt;
= Communication =&lt;br /&gt;
* [[Program Examples:Serial Com:Serial Com Example|Program Example - Serial COM]] - How to setup a serial connection&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Simple Server|Program Example - TCP/IP Simple Server]] - How to setup a simple TCP-IP server&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Simple Client|Program Example - TCP/IP Simple Client]] - How to setup a simple TCP-IP client&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Multi Server|Program Example - TCP/IP Multi Server]] - How to setup a TCP-IP server that opens connections with multiple clients&lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_TelNet_Server|Program Example - TCP/IP TelNet Server]] - How to setup a TCP-IP TelNet server with simple parser&lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_Winsock_Client|Program Example - TCP/IP windows socket client]] - An example written in C language, corresponds to the &lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_TelNet_Server|TCP/IP TelNet Server]] example.&lt;br /&gt;
&lt;br /&gt;
= File handling=&lt;br /&gt;
* [[Program Examples:File Handling:Open Read Write|Program Example - File Handling - Open Read Write]] - How to open a file with different permissions&lt;br /&gt;
* [[Virtual Entry Station (VES)|Program Example - Virtual Entry Station (VES)]]&lt;br /&gt;
* [[File Encryption|Program Example - File Encryption (VES)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Motion Bus =&lt;br /&gt;
* [[Program_Examples:CANOpen:DS402_CAN_Drive_Setup|Program Example - DS402 CAN Drive Setup]] - How to setup drive for cyclic synchronous position operation&lt;br /&gt;
&lt;br /&gt;
= HMI =&lt;br /&gt;
* [[Program_Examples:Operate_softMC_3_with_HMI| Program Examples - HMI]] - how to configure HMI with softMC 3&lt;br /&gt;
&lt;br /&gt;
= Caming Examples =&lt;br /&gt;
* [[Program_Examples:Create_Motion:CAM_Table|Program Examples - Create CAM table and move axes]]&lt;br /&gt;
* [[Program Examples:Camming by Virtual Master|Program Examples - Caming by Virtual Master]]&lt;br /&gt;
* [[Program_Examples:Reverse engineering for cam table|Program Examples - Reverse engineering for cam table]]&lt;br /&gt;
* [[Program_Examples:Cam table with shutdown and restart|Program Examples - Cam table with shutdown and restart]]&lt;br /&gt;
* [[Cut To Length (Punching) Application|Program Examples - Cut To Length (Punching) Application]]&lt;br /&gt;
* [[Flying Shear Application|Program Examples - Flying Shear Application]]&lt;br /&gt;
&lt;br /&gt;
= Motion Examples =&lt;br /&gt;
* [[Axis Setup Procedure|Program Example - Axis Setup]] - How to set up the basic configuration of an axis.&lt;br /&gt;
* [[Master and Slave configuration|Program Example - Master Slave]] - How to set up basic 2 axes master &amp;amp; slave configuration.&lt;br /&gt;
* [[Defining_Cartesian_Groups|Program Example - Defining Cartesian Groups]] - How to set up an XYZ system.&lt;br /&gt;
* [[Program Examples:Helical Interpolation|Program Examples - Helical Interpolation]] - Circle Demo&lt;br /&gt;
* [[Program_Examples:Backlash_Compensation|Program Examples - Backlash Compensation]] - Position Backlash Compensation&lt;br /&gt;
* [[Program_Examples:Backlash_Compensation_Table|Program Examples - Backlash Compensation using Compensation Tables]] - Position Backlash Compensation using compensation tables&lt;br /&gt;
* [[Program_Examples:Homing|Program Examples - Homing]] - How to set homing parameters and issue a homing procedure&lt;br /&gt;
* [[Program_Examples:Create_Motion:Position_Mode|Program Examples - Move Axis in Position Mode]]&lt;br /&gt;
* [[Program_Examples:Create_Motion:Velocity_Mode|Program Examples - Jog Axis in Velocity Mode]]&lt;br /&gt;
* [[Program_Examples:Create_Motion:Torque_Mode|Program Examples - Issue a Torque Command to an Axis in Torque Mode]]&lt;br /&gt;
* [[Program_Examples:Defining_a_Cartesian_Group|Program_Examples - Defining a Cartesian Group]]&lt;br /&gt;
* [[Program_Examples:Setting_Up_an_Axis|Program_Examples - Setting Up an Axis]]&lt;br /&gt;
* [[Program_Examples:Robot tool calibration|Program_Examples - Robot tool calibration]]&lt;br /&gt;
* [[Program_Examples:CT without buffer|Program_Examples - CT without buffer]]&lt;br /&gt;
* [[Program_Examples:Group Blending|Program_Examples - Group Blending]]&lt;br /&gt;
* [[Program_Examples:Robot Circle Command|Program_Examples - Robot Circle Command]]&lt;br /&gt;
* [[Program_Examples:Cartesian Gearing|Program_Examples - Cartesian Gearing]]&lt;br /&gt;
* [[Program_Examples_-_Robot_Pick_and_Place_(P%26P)|Program_Examples - Robot Pick and Place (P&amp;amp;P)]]&lt;br /&gt;
* [[Program_Examples_-_Robot_Helix_motion|Program_Examples - Robot Helix motion]]&lt;br /&gt;
&amp;lt;!--* [[Program_Examples:Cyclic_recording_of_one_Axis|Program_Examples - Cyclic recording of one Axis]]--&amp;gt;&lt;br /&gt;
* [[Program_Examples:Cyclic_recording_of_single_Axis|Program_Examples - Cyclic recording of single Axis]]&lt;br /&gt;
* [[Program Examples: PIPEMODE library and motion commands|Program_Examples -  PIPEMODE: Library and Motion Commands]]&lt;br /&gt;
* [[Program Examples: WorkSpace areas|Program_Examples - WorkSpace areas]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[PLS_SETUP_PROCEDURE|Program Example – Axis-PLS Program Example – PLS Setup]] - How to set up a PLS data structure.&lt;br /&gt;
* [[Program_Examples:Path-PLS|Program_Examples - Path-PLS]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Advanced (Expert)=&lt;br /&gt;
* [[Program_Examples:Visualization with RoboDK|Program_Example - Visualization with RoboDK]]&lt;br /&gt;
* [[Program_Examples:sys_log|Program Examples - sys.log]] - How to send log messages from MC-Basic context to Linux sys.log&lt;br /&gt;
* [[Program_Examples:Shared_Objects|Program Examples - Shared Objects]] - How to create, link and use shared objects with softMC&lt;br /&gt;
* [[Program_Examples:real time motion event tracer |Program Example - real time motion event tracer]] - How to trace internal motion events&lt;br /&gt;
* [[Program_Examples:Sci_Lab_interface| Program_Example - Sci Lab interface]] - Plotting softMC rec files in SciLab&lt;br /&gt;
* [[Program_Examples:Octave_interface| Program_Example - Octave interface]] - Plotting softMC rec files in Octave&lt;br /&gt;
* [[Program_Examples:User Kinematics|Program_Example - User Kinematics - '''Advanced!''']]&lt;br /&gt;
* [[Program_Examples:force sensor|Program_Example - Force Sensor]]&lt;br /&gt;
&lt;br /&gt;
=Undocumented=&lt;br /&gt;
* [[ Undocumented_User_Functions | Undocumented ]]&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=Program_Examples&amp;diff=132944</id>
		<title>Program Examples</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=Program_Examples&amp;diff=132944"/>
				<updated>2018-10-09T07:39:39Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: /* Motion Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
= Getting Started = &lt;br /&gt;
* [[Getting_Started_with_MC-Basic_and_ControlStudio|Getting Started with MC-Basic and ControlStudio]]&lt;br /&gt;
* [[Program Examples - Sending Hexadecimal Data Over RS232|Program Examples - Sending Hexadecimal Data Over RS232]]&lt;br /&gt;
&lt;br /&gt;
= Communication =&lt;br /&gt;
* [[Program Examples:Serial Com:Serial Com Example|Program Example - Serial COM]] - How to setup a serial connection&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Simple Server|Program Example - TCP/IP Simple Server]] - How to setup a simple TCP-IP server&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Simple Client|Program Example - TCP/IP Simple Client]] - How to setup a simple TCP-IP client&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Multi Server|Program Example - TCP/IP Multi Server]] - How to setup a TCP-IP server that opens connections with multiple clients&lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_TelNet_Server|Program Example - TCP/IP TelNet Server]] - How to setup a TCP-IP TelNet server with simple parser&lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_Winsock_Client|Program Example - TCP/IP windows socket client]] - An example written in C language, corresponds to the &lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_TelNet_Server|TCP/IP TelNet Server]] example.&lt;br /&gt;
&lt;br /&gt;
= File handling=&lt;br /&gt;
* [[Program Examples:File Handling:Open Read Write|Program Example - File Handling - Open Read Write]] - How to open a file with different permissions&lt;br /&gt;
* [[Virtual Entry Station (VES)|Program Example - Virtual Entry Station (VES)]]&lt;br /&gt;
* [[File Encryption|Program Example - File Encryption (VES)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Motion Bus =&lt;br /&gt;
* [[Program_Examples:CANOpen:DS402_CAN_Drive_Setup|Program Example - DS402 CAN Drive Setup]] - How to setup drive for cyclic synchronous position operation&lt;br /&gt;
&lt;br /&gt;
= HMI =&lt;br /&gt;
* [[Program_Examples:Operate_softMC_3_with_HMI| Program Examples - HMI]] - how to configure HMI with softMC 3&lt;br /&gt;
&lt;br /&gt;
= Caming Examples =&lt;br /&gt;
* [[Program_Examples:Create_Motion:CAM_Table|Program Examples - Create CAM table and move axes]]&lt;br /&gt;
* [[Program Examples:Camming by Virtual Master|Program Examples - Caming by Virtual Master]]&lt;br /&gt;
* [[Program_Examples:Reverse engineering for cam table|Program Examples - Reverse engineering for cam table]]&lt;br /&gt;
* [[Program_Examples:Cam table with shutdown and restart|Program Examples - Cam table with shutdown and restart]]&lt;br /&gt;
* [[Cut To Length (Punching) Application|Program Examples - Cut To Length (Punching) Application]]&lt;br /&gt;
* [[Flying Shear Application|Program Examples - Flying Shear Application]]&lt;br /&gt;
&lt;br /&gt;
= Motion Examples =&lt;br /&gt;
* [[Axis Setup Procedure|Program Example - Axis Setup]] - How to set up the basic configuration of an axis.&lt;br /&gt;
* [[Master and Slave configuration|Program Example - Master Slave]] - How to set up basic 2 axes master &amp;amp; slave configuration.&lt;br /&gt;
* [[Defining_Cartesian_Groups|Program Example - Defining Cartesian Groups]] - How to set up an XYZ system.&lt;br /&gt;
* [[Program Examples:Helical Interpolation|Program Examples - Helical Interpolation]] - Circle Demo&lt;br /&gt;
* [[Program_Examples:Backlash_Compensation|Program Examples - Backlash Compensation]] - Position Backlash Compensation&lt;br /&gt;
* [[Program_Examples:Backlash_Compensation_Table|Program Examples - Backlash Compensation using Compensation Tables]] - Position Backlash Compensation using compensation tables&lt;br /&gt;
* [[Program_Examples:Homing|Program Examples - Homing]] - How to set homing parameters and issue a homing procedure&lt;br /&gt;
* [[Program_Examples:Create_Motion:Position_Mode|Program Examples - Move Axis in Position Mode]]&lt;br /&gt;
* [[Program_Examples:Create_Motion:Velocity_Mode|Program Examples - Jog Axis in Velocity Mode]]&lt;br /&gt;
* [[Program_Examples:Create_Motion:Torque_Mode|Program Examples - Issue a Torque Command to an Axis in Torque Mode]]&lt;br /&gt;
* [[Program_Examples:Defining_a_Cartesian_Group|Program_Examples - Defining a Cartesian Group]]&lt;br /&gt;
* [[Program_Examples:Setting_Up_an_Axis|Program_Examples - Setting Up an Axis]]&lt;br /&gt;
* [[Program_Examples:Robot tool calibration|Program_Examples - Robot tool calibration]]&lt;br /&gt;
* [[Program_Examples:CT without buffer|Program_Examples - CT without buffer]]&lt;br /&gt;
* [[Program_Examples:Group Blending|Program_Examples - Group Blending]]&lt;br /&gt;
* [[Program_Examples:Robot Circle Command|Program_Examples - Robot Circle Command]]&lt;br /&gt;
* [[Program_Examples:Cartesian Gearing|Program_Examples - Cartesian Gearing]]&lt;br /&gt;
* [[Program_Examples_-_Robot_Pick_and_Place_(P%26P)|Program_Examples - Robot Pick and Place (P&amp;amp;P)]]&lt;br /&gt;
* [[Program_Examples_-_Robot_Helix_motion|Program_Examples - Robot Helix motion]]&lt;br /&gt;
&amp;lt;!--* [[Program_Examples:Cyclic_recording_of_one_Axis|Program_Examples - Cyclic recording of one Axis]]--&amp;gt;&lt;br /&gt;
* [[Program_Examples:Cyclic_recording_of_single_Axis|Program_Examples - Cyclic recording of single Axis]]&lt;br /&gt;
* [[Program Examples: PIPEMODE library and motion commands|Program_Examples -  PIPEMODE: Library and Motion Commands]]&lt;br /&gt;
* [[Program Examples: WorkSpace areas|Program_Examples - WorkSpace areas]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[PLS_SETUP_PROCEDURE|Axis-PLS Program Example – PLS Setup]] - How to set up a PLS data structure.&lt;br /&gt;
* [[Program_Examples:Path-PLS|Program_Examples - Path-PLS]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Advanced (Expert)=&lt;br /&gt;
* [[Program_Examples:Visualization with RoboDK|Program_Example - Visualization with RoboDK]]&lt;br /&gt;
* [[Program_Examples:sys_log|Program Examples - sys.log]] - How to send log messages from MC-Basic context to Linux sys.log&lt;br /&gt;
* [[Program_Examples:Shared_Objects|Program Examples - Shared Objects]] - How to create, link and use shared objects with softMC&lt;br /&gt;
* [[Program_Examples:real time motion event tracer |Program Example - real time motion event tracer]] - How to trace internal motion events&lt;br /&gt;
* [[Program_Examples:Sci_Lab_interface| Program_Example - Sci Lab interface]] - Plotting softMC rec files in SciLab&lt;br /&gt;
* [[Program_Examples:Octave_interface| Program_Example - Octave interface]] - Plotting softMC rec files in Octave&lt;br /&gt;
* [[Program_Examples:User Kinematics|Program_Example - User Kinematics - '''Advanced!''']]&lt;br /&gt;
* [[Program_Examples:force sensor|Program_Example - Force Sensor]]&lt;br /&gt;
&lt;br /&gt;
=Undocumented=&lt;br /&gt;
* [[ Undocumented_User_Functions | Undocumented ]]&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=Program_Examples&amp;diff=132943</id>
		<title>Program Examples</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=Program_Examples&amp;diff=132943"/>
				<updated>2018-10-09T07:33:23Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: /* Motion Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
= Getting Started = &lt;br /&gt;
* [[Getting_Started_with_MC-Basic_and_ControlStudio|Getting Started with MC-Basic and ControlStudio]]&lt;br /&gt;
* [[Program Examples - Sending Hexadecimal Data Over RS232|Program Examples - Sending Hexadecimal Data Over RS232]]&lt;br /&gt;
&lt;br /&gt;
= Communication =&lt;br /&gt;
* [[Program Examples:Serial Com:Serial Com Example|Program Example - Serial COM]] - How to setup a serial connection&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Simple Server|Program Example - TCP/IP Simple Server]] - How to setup a simple TCP-IP server&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Simple Client|Program Example - TCP/IP Simple Client]] - How to setup a simple TCP-IP client&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Multi Server|Program Example - TCP/IP Multi Server]] - How to setup a TCP-IP server that opens connections with multiple clients&lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_TelNet_Server|Program Example - TCP/IP TelNet Server]] - How to setup a TCP-IP TelNet server with simple parser&lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_Winsock_Client|Program Example - TCP/IP windows socket client]] - An example written in C language, corresponds to the &lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_TelNet_Server|TCP/IP TelNet Server]] example.&lt;br /&gt;
&lt;br /&gt;
= File handling=&lt;br /&gt;
* [[Program Examples:File Handling:Open Read Write|Program Example - File Handling - Open Read Write]] - How to open a file with different permissions&lt;br /&gt;
* [[Virtual Entry Station (VES)|Program Example - Virtual Entry Station (VES)]]&lt;br /&gt;
* [[File Encryption|Program Example - File Encryption (VES)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Motion Bus =&lt;br /&gt;
* [[Program_Examples:CANOpen:DS402_CAN_Drive_Setup|Program Example - DS402 CAN Drive Setup]] - How to setup drive for cyclic synchronous position operation&lt;br /&gt;
&lt;br /&gt;
= HMI =&lt;br /&gt;
* [[Program_Examples:Operate_softMC_3_with_HMI| Program Examples - HMI]] - how to configure HMI with softMC 3&lt;br /&gt;
&lt;br /&gt;
= Caming Examples =&lt;br /&gt;
* [[Program_Examples:Create_Motion:CAM_Table|Program Examples - Create CAM table and move axes]]&lt;br /&gt;
* [[Program Examples:Camming by Virtual Master|Program Examples - Caming by Virtual Master]]&lt;br /&gt;
* [[Program_Examples:Reverse engineering for cam table|Program Examples - Reverse engineering for cam table]]&lt;br /&gt;
* [[Program_Examples:Cam table with shutdown and restart|Program Examples - Cam table with shutdown and restart]]&lt;br /&gt;
* [[Cut To Length (Punching) Application|Program Examples - Cut To Length (Punching) Application]]&lt;br /&gt;
* [[Flying Shear Application|Program Examples - Flying Shear Application]]&lt;br /&gt;
&lt;br /&gt;
= Motion Examples =&lt;br /&gt;
* [[Axis Setup Procedure|Program Example - Axis Setup]] - How to set up the basic configuration of an axis.&lt;br /&gt;
* [[Master and Slave configuration|Program Example - Master Slave]] - How to set up basic 2 axes master &amp;amp; slave configuration.&lt;br /&gt;
* [[Defining_Cartesian_Groups|Program Example - Defining Cartesian Groups]] - How to set up an XYZ system.&lt;br /&gt;
* [[Program Examples:Helical Interpolation|Program Examples - Helical Interpolation]] - Circle Demo&lt;br /&gt;
* [[Program_Examples:Backlash_Compensation|Program Examples - Backlash Compensation]] - Position Backlash Compensation&lt;br /&gt;
* [[Program_Examples:Backlash_Compensation_Table|Program Examples - Backlash Compensation using Compensation Tables]] - Position Backlash Compensation using compensation tables&lt;br /&gt;
* [[Program_Examples:Homing|Program Examples - Homing]] - How to set homing parameters and issue a homing procedure&lt;br /&gt;
* [[Program_Examples:Create_Motion:Position_Mode|Program Examples - Move Axis in Position Mode]]&lt;br /&gt;
* [[Program_Examples:Create_Motion:Velocity_Mode|Program Examples - Jog Axis in Velocity Mode]]&lt;br /&gt;
* [[Program_Examples:Create_Motion:Torque_Mode|Program Examples - Issue a Torque Command to an Axis in Torque Mode]]&lt;br /&gt;
* [[Program_Examples:Defining_a_Cartesian_Group|Program_Examples - Defining a Cartesian Group]]&lt;br /&gt;
* [[Program_Examples:Setting_Up_an_Axis|Program_Examples - Setting Up an Axis]]&lt;br /&gt;
* [[Program_Examples:Robot tool calibration|Program_Examples - Robot tool calibration]]&lt;br /&gt;
* [[Program_Examples:CT without buffer|Program_Examples - CT without buffer]]&lt;br /&gt;
* [[Program_Examples:Group Blending|Program_Examples - Group Blending]]&lt;br /&gt;
* [[Program_Examples:Robot Circle Command|Program_Examples - Robot Circle Command]]&lt;br /&gt;
* [[Program_Examples:Cartesian Gearing|Program_Examples - Cartesian Gearing]]&lt;br /&gt;
* [[Program_Examples_-_Robot_Pick_and_Place_(P%26P)|Program_Examples - Robot Pick and Place (P&amp;amp;P)]]&lt;br /&gt;
* [[Program_Examples_-_Robot_Helix_motion|Program_Examples - Robot Helix motion]]&lt;br /&gt;
&amp;lt;!--* [[Program_Examples:Cyclic_recording_of_one_Axis|Program_Examples - Cyclic recording of one Axis]]--&amp;gt;&lt;br /&gt;
* [[Program_Examples:Cyclic_recording_of_single_Axis|Program_Examples - Cyclic recording of single Axis]]&lt;br /&gt;
* [[Program Examples: PIPEMODE library and motion commands|Program_Examples -  PIPEMODE: Library and Motion Commands]]&lt;br /&gt;
* [[Program Examples: WorkSpace areas|Program_Examples - WorkSpace areas]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[PLS_SETUP_PROCEDURE|Program Example - PLS Setup Procedure]] - How to set up a PLS data structure.&lt;br /&gt;
* [[Program_Examples:Path-PLS|Program_Examples - Path-PLS]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Advanced (Expert)=&lt;br /&gt;
* [[Program_Examples:Visualization with RoboDK|Program_Example - Visualization with RoboDK]]&lt;br /&gt;
* [[Program_Examples:sys_log|Program Examples - sys.log]] - How to send log messages from MC-Basic context to Linux sys.log&lt;br /&gt;
* [[Program_Examples:Shared_Objects|Program Examples - Shared Objects]] - How to create, link and use shared objects with softMC&lt;br /&gt;
* [[Program_Examples:real time motion event tracer |Program Example - real time motion event tracer]] - How to trace internal motion events&lt;br /&gt;
* [[Program_Examples:Sci_Lab_interface| Program_Example - Sci Lab interface]] - Plotting softMC rec files in SciLab&lt;br /&gt;
* [[Program_Examples:Octave_interface| Program_Example - Octave interface]] - Plotting softMC rec files in Octave&lt;br /&gt;
* [[Program_Examples:User Kinematics|Program_Example - User Kinematics - '''Advanced!''']]&lt;br /&gt;
* [[Program_Examples:force sensor|Program_Example - Force Sensor]]&lt;br /&gt;
&lt;br /&gt;
=Undocumented=&lt;br /&gt;
* [[ Undocumented_User_Functions | Undocumented ]]&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=Program_Examples&amp;diff=132942</id>
		<title>Program Examples</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=Program_Examples&amp;diff=132942"/>
				<updated>2018-10-09T07:33:05Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: /* Motion Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
= Getting Started = &lt;br /&gt;
* [[Getting_Started_with_MC-Basic_and_ControlStudio|Getting Started with MC-Basic and ControlStudio]]&lt;br /&gt;
* [[Program Examples - Sending Hexadecimal Data Over RS232|Program Examples - Sending Hexadecimal Data Over RS232]]&lt;br /&gt;
&lt;br /&gt;
= Communication =&lt;br /&gt;
* [[Program Examples:Serial Com:Serial Com Example|Program Example - Serial COM]] - How to setup a serial connection&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Simple Server|Program Example - TCP/IP Simple Server]] - How to setup a simple TCP-IP server&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Simple Client|Program Example - TCP/IP Simple Client]] - How to setup a simple TCP-IP client&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Multi Server|Program Example - TCP/IP Multi Server]] - How to setup a TCP-IP server that opens connections with multiple clients&lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_TelNet_Server|Program Example - TCP/IP TelNet Server]] - How to setup a TCP-IP TelNet server with simple parser&lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_Winsock_Client|Program Example - TCP/IP windows socket client]] - An example written in C language, corresponds to the &lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_TelNet_Server|TCP/IP TelNet Server]] example.&lt;br /&gt;
&lt;br /&gt;
= File handling=&lt;br /&gt;
* [[Program Examples:File Handling:Open Read Write|Program Example - File Handling - Open Read Write]] - How to open a file with different permissions&lt;br /&gt;
* [[Virtual Entry Station (VES)|Program Example - Virtual Entry Station (VES)]]&lt;br /&gt;
* [[File Encryption|Program Example - File Encryption (VES)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Motion Bus =&lt;br /&gt;
* [[Program_Examples:CANOpen:DS402_CAN_Drive_Setup|Program Example - DS402 CAN Drive Setup]] - How to setup drive for cyclic synchronous position operation&lt;br /&gt;
&lt;br /&gt;
= HMI =&lt;br /&gt;
* [[Program_Examples:Operate_softMC_3_with_HMI| Program Examples - HMI]] - how to configure HMI with softMC 3&lt;br /&gt;
&lt;br /&gt;
= Caming Examples =&lt;br /&gt;
* [[Program_Examples:Create_Motion:CAM_Table|Program Examples - Create CAM table and move axes]]&lt;br /&gt;
* [[Program Examples:Camming by Virtual Master|Program Examples - Caming by Virtual Master]]&lt;br /&gt;
* [[Program_Examples:Reverse engineering for cam table|Program Examples - Reverse engineering for cam table]]&lt;br /&gt;
* [[Program_Examples:Cam table with shutdown and restart|Program Examples - Cam table with shutdown and restart]]&lt;br /&gt;
* [[Cut To Length (Punching) Application|Program Examples - Cut To Length (Punching) Application]]&lt;br /&gt;
* [[Flying Shear Application|Program Examples - Flying Shear Application]]&lt;br /&gt;
&lt;br /&gt;
= Motion Examples =&lt;br /&gt;
* [[Axis Setup Procedure|Program Example - Axis Setup]] - How to set up the basic configuration of an axis.&lt;br /&gt;
* [[Master and Slave configuration|Program Example - Master Slave]] - How to set up basic 2 axes master &amp;amp; slave configuration.&lt;br /&gt;
* [[Defining_Cartesian_Groups|Program Example - Defining Cartesian Groups]] - How to set up an XYZ system.&lt;br /&gt;
* [[Program Examples:Helical Interpolation|Program Examples - Helical Interpolation]] - Circle Demo&lt;br /&gt;
* [[Program_Examples:Backlash_Compensation|Program Examples - Backlash Compensation]] - Position Backlash Compensation&lt;br /&gt;
* [[Program_Examples:Backlash_Compensation_Table|Program Examples - Backlash Compensation using Compensation Tables]] - Position Backlash Compensation using compensation tables&lt;br /&gt;
* [[Program_Examples:Homing|Program Examples - Homing]] - How to set homing parameters and issue a homing procedure&lt;br /&gt;
* [[Program_Examples:Create_Motion:Position_Mode|Program Examples - Move Axis in Position Mode]]&lt;br /&gt;
* [[Program_Examples:Create_Motion:Velocity_Mode|Program Examples - Jog Axis in Velocity Mode]]&lt;br /&gt;
* [[Program_Examples:Create_Motion:Torque_Mode|Program Examples - Issue a Torque Command to an Axis in Torque Mode]]&lt;br /&gt;
* [[Program_Examples:Defining_a_Cartesian_Group|Program_Examples - Defining a Cartesian Group]]&lt;br /&gt;
* [[Program_Examples:Setting_Up_an_Axis|Program_Examples - Setting Up an Axis]]&lt;br /&gt;
* [[Program_Examples:Robot tool calibration|Program_Examples - Robot tool calibration]]&lt;br /&gt;
* [[Program_Examples:CT without buffer|Program_Examples - CT without buffer]]&lt;br /&gt;
* [[Program_Examples:Group Blending|Program_Examples - Group Blending]]&lt;br /&gt;
* [[Program_Examples:Robot Circle Command|Program_Examples - Robot Circle Command]]&lt;br /&gt;
* [[Program_Examples:Cartesian Gearing|Program_Examples - Cartesian Gearing]]&lt;br /&gt;
* [[Program_Examples_-_Robot_Pick_and_Place_(P%26P)|Program_Examples - Robot Pick and Place (P&amp;amp;P)]]&lt;br /&gt;
* [[Program_Examples_-_Robot_Helix_motion|Program_Examples - Robot Helix motion]]&lt;br /&gt;
&amp;lt;!--* [[Program_Examples:Cyclic_recording_of_one_Axis|Program_Examples - Cyclic recording of one Axis]]--&amp;gt;&lt;br /&gt;
* [[Program_Examples:Cyclic_recording_of_single_Axis|Program_Examples - Cyclic recording of single Axis]]&lt;br /&gt;
* [[Program Examples: PIPEMODE library and motion commands|Program_Examples -  PIPEMODE: Library and Motion Commands]]&lt;br /&gt;
* [[Program Examples: WorkSpace areas|Program_Examples - WorkSpace areas]]&lt;br /&gt;
&lt;br /&gt;
* [[PLS_SETUP_PROCEDURE|Program Example - PLS Setup Procedure]] - How to set up a PLS data structure.&lt;br /&gt;
* [[Program_Examples:Path-PLS|Program_Examples - Path-PLS]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Advanced (Expert)=&lt;br /&gt;
* [[Program_Examples:Visualization with RoboDK|Program_Example - Visualization with RoboDK]]&lt;br /&gt;
* [[Program_Examples:sys_log|Program Examples - sys.log]] - How to send log messages from MC-Basic context to Linux sys.log&lt;br /&gt;
* [[Program_Examples:Shared_Objects|Program Examples - Shared Objects]] - How to create, link and use shared objects with softMC&lt;br /&gt;
* [[Program_Examples:real time motion event tracer |Program Example - real time motion event tracer]] - How to trace internal motion events&lt;br /&gt;
* [[Program_Examples:Sci_Lab_interface| Program_Example - Sci Lab interface]] - Plotting softMC rec files in SciLab&lt;br /&gt;
* [[Program_Examples:Octave_interface| Program_Example - Octave interface]] - Plotting softMC rec files in Octave&lt;br /&gt;
* [[Program_Examples:User Kinematics|Program_Example - User Kinematics - '''Advanced!''']]&lt;br /&gt;
* [[Program_Examples:force sensor|Program_Example - Force Sensor]]&lt;br /&gt;
&lt;br /&gt;
=Undocumented=&lt;br /&gt;
* [[ Undocumented_User_Functions | Undocumented ]]&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=Program_Examples&amp;diff=132941</id>
		<title>Program Examples</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=Program_Examples&amp;diff=132941"/>
				<updated>2018-10-09T07:32:26Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: /* Motion Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
= Getting Started = &lt;br /&gt;
* [[Getting_Started_with_MC-Basic_and_ControlStudio|Getting Started with MC-Basic and ControlStudio]]&lt;br /&gt;
* [[Program Examples - Sending Hexadecimal Data Over RS232|Program Examples - Sending Hexadecimal Data Over RS232]]&lt;br /&gt;
&lt;br /&gt;
= Communication =&lt;br /&gt;
* [[Program Examples:Serial Com:Serial Com Example|Program Example - Serial COM]] - How to setup a serial connection&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Simple Server|Program Example - TCP/IP Simple Server]] - How to setup a simple TCP-IP server&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Simple Client|Program Example - TCP/IP Simple Client]] - How to setup a simple TCP-IP client&lt;br /&gt;
* [[Program Examples:TCP IP:TCPIP Multi Server|Program Example - TCP/IP Multi Server]] - How to setup a TCP-IP server that opens connections with multiple clients&lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_TelNet_Server|Program Example - TCP/IP TelNet Server]] - How to setup a TCP-IP TelNet server with simple parser&lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_Winsock_Client|Program Example - TCP/IP windows socket client]] - An example written in C language, corresponds to the &lt;br /&gt;
* [[Program_Examples:TCP_IP:TCPIP_TelNet_Server|TCP/IP TelNet Server]] example.&lt;br /&gt;
&lt;br /&gt;
= File handling=&lt;br /&gt;
* [[Program Examples:File Handling:Open Read Write|Program Example - File Handling - Open Read Write]] - How to open a file with different permissions&lt;br /&gt;
* [[Virtual Entry Station (VES)|Program Example - Virtual Entry Station (VES)]]&lt;br /&gt;
* [[File Encryption|Program Example - File Encryption (VES)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Motion Bus =&lt;br /&gt;
* [[Program_Examples:CANOpen:DS402_CAN_Drive_Setup|Program Example - DS402 CAN Drive Setup]] - How to setup drive for cyclic synchronous position operation&lt;br /&gt;
&lt;br /&gt;
= HMI =&lt;br /&gt;
* [[Program_Examples:Operate_softMC_3_with_HMI| Program Examples - HMI]] - how to configure HMI with softMC 3&lt;br /&gt;
&lt;br /&gt;
= Caming Examples =&lt;br /&gt;
* [[Program_Examples:Create_Motion:CAM_Table|Program Examples - Create CAM table and move axes]]&lt;br /&gt;
* [[Program Examples:Camming by Virtual Master|Program Examples - Caming by Virtual Master]]&lt;br /&gt;
* [[Program_Examples:Reverse engineering for cam table|Program Examples - Reverse engineering for cam table]]&lt;br /&gt;
* [[Program_Examples:Cam table with shutdown and restart|Program Examples - Cam table with shutdown and restart]]&lt;br /&gt;
* [[Cut To Length (Punching) Application|Program Examples - Cut To Length (Punching) Application]]&lt;br /&gt;
* [[Flying Shear Application|Program Examples - Flying Shear Application]]&lt;br /&gt;
&lt;br /&gt;
= Motion Examples =&lt;br /&gt;
* [[Axis Setup Procedure|Program Example - Axis Setup]] - How to set up the basic configuration of an axis.&lt;br /&gt;
* [[Master and Slave configuration|Program Example - Master Slave]] - How to set up basic 2 axes master &amp;amp; slave configuration.&lt;br /&gt;
* [[Defining_Cartesian_Groups|Program Example - Defining Cartesian Groups]] - How to set up an XYZ system.&lt;br /&gt;
* [[Program Examples:Helical Interpolation|Program Examples - Helical Interpolation]] - Circle Demo&lt;br /&gt;
* [[Program_Examples:Backlash_Compensation|Program Examples - Backlash Compensation]] - Position Backlash Compensation&lt;br /&gt;
* [[Program_Examples:Backlash_Compensation_Table|Program Examples - Backlash Compensation using Compensation Tables]] - Position Backlash Compensation using compensation tables&lt;br /&gt;
* [[Program_Examples:Homing|Program Examples - Homing]] - How to set homing parameters and issue a homing procedure&lt;br /&gt;
* [[Program_Examples:Create_Motion:Position_Mode|Program Examples - Move Axis in Position Mode]]&lt;br /&gt;
* [[Program_Examples:Create_Motion:Velocity_Mode|Program Examples - Jog Axis in Velocity Mode]]&lt;br /&gt;
* [[Program_Examples:Create_Motion:Torque_Mode|Program Examples - Issue a Torque Command to an Axis in Torque Mode]]&lt;br /&gt;
* [[Program_Examples:Defining_a_Cartesian_Group|Program_Examples - Defining a Cartesian Group]]&lt;br /&gt;
* [[Program_Examples:Setting_Up_an_Axis|Program_Examples - Setting Up an Axis]]&lt;br /&gt;
* [[Program_Examples:Robot tool calibration|Program_Examples - Robot tool calibration]]&lt;br /&gt;
* [[Program_Examples:CT without buffer|Program_Examples - CT without buffer]]&lt;br /&gt;
* [[Program_Examples:Group Blending|Program_Examples - Group Blending]]&lt;br /&gt;
* [[Program_Examples:Robot Circle Command|Program_Examples - Robot Circle Command]]&lt;br /&gt;
* [[Program_Examples:Cartesian Gearing|Program_Examples - Cartesian Gearing]]&lt;br /&gt;
* [[Program_Examples_-_Robot_Pick_and_Place_(P%26P)|Program_Examples - Robot Pick and Place (P&amp;amp;P)]]&lt;br /&gt;
* [[Program_Examples_-_Robot_Helix_motion|Program_Examples - Robot Helix motion]]&lt;br /&gt;
&amp;lt;!--* [[Program_Examples:Cyclic_recording_of_one_Axis|Program_Examples - Cyclic recording of one Axis]]--&amp;gt;&lt;br /&gt;
* [[Program_Examples:Cyclic_recording_of_single_Axis|Program_Examples - Cyclic recording of single Axis]]&lt;br /&gt;
* [[Program Examples: PIPEMODE library and motion commands|Program_Examples -  PIPEMODE: Library and Motion Commands]]&lt;br /&gt;
* [[Program Examples: WorkSpace areas|Program_Examples - WorkSpace areas]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[PLS_SETUP_PROCEDURE|Program Example - PLS Setup Procedure]] - How to set up a PLS data structure.&lt;br /&gt;
* [[Program_Examples:Path-PLS|Program_Examples - Path-PLS]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Advanced (Expert)=&lt;br /&gt;
* [[Program_Examples:Visualization with RoboDK|Program_Example - Visualization with RoboDK]]&lt;br /&gt;
* [[Program_Examples:sys_log|Program Examples - sys.log]] - How to send log messages from MC-Basic context to Linux sys.log&lt;br /&gt;
* [[Program_Examples:Shared_Objects|Program Examples - Shared Objects]] - How to create, link and use shared objects with softMC&lt;br /&gt;
* [[Program_Examples:real time motion event tracer |Program Example - real time motion event tracer]] - How to trace internal motion events&lt;br /&gt;
* [[Program_Examples:Sci_Lab_interface| Program_Example - Sci Lab interface]] - Plotting softMC rec files in SciLab&lt;br /&gt;
* [[Program_Examples:Octave_interface| Program_Example - Octave interface]] - Plotting softMC rec files in Octave&lt;br /&gt;
* [[Program_Examples:User Kinematics|Program_Example - User Kinematics - '''Advanced!''']]&lt;br /&gt;
* [[Program_Examples:force sensor|Program_Example - Force Sensor]]&lt;br /&gt;
&lt;br /&gt;
=Undocumented=&lt;br /&gt;
* [[ Undocumented_User_Functions | Undocumented ]]&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132940</id>
		<title>MC-Basic:COMMON SHARED ... AS PLS</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132940"/>
				<updated>2018-10-08T14:58:39Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|MC-Basic:COMMON_SHARED_..._AS_PLS}}&lt;br /&gt;
{{MC-Basic&lt;br /&gt;
&lt;br /&gt;
|DESCRIPTION=&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Updated 2018-10&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command declares a programmable limit switch (PLS) variable. &lt;br /&gt;
&lt;br /&gt;
The declaration specifies the name of the axis and the output associated with the PLS. &lt;br /&gt;
&lt;br /&gt;
The PLS output may be a digital output (SYSTEM.DOUT.x) or a virtual output (SYSTEM.VOUT.x).&lt;br /&gt;
&lt;br /&gt;
After this command is issued, the PLS exists but is disabled. The PLS property &amp;lt;pls&amp;gt;.PLSENABLE is used to enable the PLS.&lt;br /&gt;
&lt;br /&gt;
After PLS is declared, the following default PLS properties are in effect:&lt;br /&gt;
* The initial output polarity is 0.&lt;br /&gt;
* The repetition interval is 0.&lt;br /&gt;
* The hysteresis is 0.&lt;br /&gt;
* A single PLS position set as 0.&lt;br /&gt;
These properties can be set explicitly only when the PLS is disabled. &lt;br /&gt;
&lt;br /&gt;
|SYNTAX=&lt;br /&gt;
COMMON SHARED &amp;lt;''pls''&amp;gt; As PLS &amp;lt;''axis name''&amp;gt; &amp;lt;''output''&amp;gt; {HWAssistance = 1/0 }&lt;br /&gt;
&lt;br /&gt;
|AVAILABILITY=&lt;br /&gt;
Version 4.1.11 and later&lt;br /&gt;
&lt;br /&gt;
|TYPE=&lt;br /&gt;
&amp;lt;''pls''&amp;gt;: string&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: string&lt;br /&gt;
&lt;br /&gt;
|RANGE=&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: a valid axis name&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''output''&amp;gt;: the name of a system output. System outputs are specified by&amp;lt;br&amp;gt;&lt;br /&gt;
::System.DOut.''x'', for digital outputs, or&amp;lt;br&amp;gt;&lt;br /&gt;
::System.VOut.''x'', for virtual outputs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HWAssistance&amp;gt;: 1 activates the PLS high accuracy mode&lt;br /&gt;
&lt;br /&gt;
The value ''x'' identifies the specific output to be used. It may be explicitly given or it may be an expression. The expression must evaluate to an integer ranging from 1 to 20 for digital outputs or from 1 to 32 for virtual outputs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|UNITS=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|DEFAULT=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SCOPE=&lt;br /&gt;
Configuration or Terminal&lt;br /&gt;
&lt;br /&gt;
In version 4.5.17 and later, the global (common shared) declaration can also be issued from library or task contexts. In those contexts all three parameters of PLS (axis name, system output and HWassistance flag) can be reassigned while reloading the declaring task or library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|LIMITATIONS=&lt;br /&gt;
Write only&lt;br /&gt;
&lt;br /&gt;
PLS high accuracy (HWAssistance) is limited to System.DOut from 1 to 8.&lt;br /&gt;
&lt;br /&gt;
HWAssistance requires Digital Logic Pentium III CPU with Altera version 8.7.1 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|EXAMPLE=&lt;br /&gt;
Common Shared Pls1 as PLS x_axis SYSTEM.Dout.4&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls2 as PLS x_axis SYS.Dout.8 HWAssistance = 1&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls3 as PLS x_axis SYS.Dout.3 HWAssistance = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SEE ALSO=&lt;br /&gt;
* [[MC-Basic:CREATEPLSDATA|CREATEDATA]]&lt;br /&gt;
* [[MC-Basic:DELETEPLS|DELETEPLS]]&lt;br /&gt;
* [[MC-Basic:PLSLIST|PLSLIST]]&lt;br /&gt;
* [[MC-Basic:WITHPLS|WITHPLS]]&lt;br /&gt;
* [[MC-Basic:pls.HWASSISTANCE|pls.HWASSISTANCE]]&lt;br /&gt;
* [[MC-Basic:pls.HWIOtime|pls.HWIOTIME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSdelaytime|pls.DELAYTIME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSEMENTNAME|pls.PLSEMENTNAME]] / [[MC-Basic:pls.PLSAXISNAME|pls.PLSAXISNAME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSENABLE|pls.PLSENABLE]]&lt;br /&gt;
* [[MC-Basic:pls.PLSHYSTERESIS|pls.PLSHYSTERESIS]]&lt;br /&gt;
* [[MC-Basic:pls.PLSOUTPUT|pls.PLSOUTPUT]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOLARITY|pls.PLSPOLARITY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOSITION|pls.PLSPOSITION]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationDelay|pls.PLSPropagationDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationDisableDelay|pls.PLSPropagationDisableDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationEnableDelay|pls.PLSPropagationEnableDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSRELATEDTO|pls.PLSRELATEDTO]]&lt;br /&gt;
* [[MC-Basic:pls.PLSREPEAT|pls.PLSREPEAT]]&lt;br /&gt;
* [[MC-Basic:element.PLSSOURCE|element.PLSSOURCE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MC-Basic:Declarations|COMMON SHARED ... AS PLS]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132939</id>
		<title>MC-Basic:COMMON SHARED ... AS PLS</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132939"/>
				<updated>2018-10-08T14:57:55Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
{{MC-Basic&lt;br /&gt;
&lt;br /&gt;
|DESCRIPTION=&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Updated 2018-10&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command declares a programmable limit switch (PLS) variable. &lt;br /&gt;
&lt;br /&gt;
The declaration specifies the name of the axis and the output associated with the PLS. &lt;br /&gt;
&lt;br /&gt;
The PLS output may be a digital output (SYSTEM.DOUT.x) or a virtual output (SYSTEM.VOUT.x).&lt;br /&gt;
&lt;br /&gt;
After this command is issued, the PLS exists but is disabled. The PLS property &amp;lt;pls&amp;gt;.PLSENABLE is used to enable the PLS.&lt;br /&gt;
&lt;br /&gt;
After PLS is declared, the following default PLS properties are in effect:&lt;br /&gt;
* The initial output polarity is 0.&lt;br /&gt;
* The repetition interval is 0.&lt;br /&gt;
* The hysteresis is 0.&lt;br /&gt;
* A single PLS position set as 0.&lt;br /&gt;
These properties can be set explicitly only when the PLS is disabled. &lt;br /&gt;
&lt;br /&gt;
|SYNTAX=&lt;br /&gt;
COMMON SHARED &amp;lt;''pls''&amp;gt; As PLS &amp;lt;''axis name''&amp;gt; &amp;lt;''output''&amp;gt; {HWAssistance = 1/0 }&lt;br /&gt;
&lt;br /&gt;
|AVAILABILITY=&lt;br /&gt;
Version 4.1.11 and later&lt;br /&gt;
&lt;br /&gt;
|TYPE=&lt;br /&gt;
&amp;lt;''pls''&amp;gt;: string&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: string&lt;br /&gt;
&lt;br /&gt;
|RANGE=&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: a valid axis name&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''output''&amp;gt;: the name of a system output. System outputs are specified by&amp;lt;br&amp;gt;&lt;br /&gt;
::System.DOut.''x'', for digital outputs, or&amp;lt;br&amp;gt;&lt;br /&gt;
::System.VOut.''x'', for virtual outputs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HWAssistance&amp;gt;: 1 activates the PLS high accuracy mode&lt;br /&gt;
&lt;br /&gt;
The value ''x'' identifies the specific output to be used. It may be explicitly given or it may be an expression. The expression must evaluate to an integer ranging from 1 to 20 for digital outputs or from 1 to 32 for virtual outputs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|UNITS=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|DEFAULT=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SCOPE=&lt;br /&gt;
Configuration or Terminal&lt;br /&gt;
&lt;br /&gt;
In version 4.5.17 and later, the global (common shared) declaration can also be issued from library or task contexts. In those contexts all three parameters of PLS (axis name, system output and HWassistance flag) can be reassigned while reloading the declaring task or library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|LIMITATIONS=&lt;br /&gt;
Write only&lt;br /&gt;
&lt;br /&gt;
PLS high accuracy (HWAssistance) is limited to System.DOut from 1 to 8.&lt;br /&gt;
&lt;br /&gt;
HWAssistance requires Digital Logic Pentium III CPU with Altera version 8.7.1 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|EXAMPLE=&lt;br /&gt;
Common Shared Pls1 as PLS x_axis SYSTEM.Dout.4&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls2 as PLS x_axis SYS.Dout.8 HWAssistance = 1&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls3 as PLS x_axis SYS.Dout.3 HWAssistance = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SEE ALSO=&lt;br /&gt;
* [[MC-Basic:CREATEPLSDATA|CREATEDATA]]&lt;br /&gt;
* [[MC-Basic:DELETEPLS|DELETEPLS]]&lt;br /&gt;
* [[MC-Basic:PLSLIST|PLSLIST]]&lt;br /&gt;
* [[MC-Basic:WITHPLS|WITHPLS]]&lt;br /&gt;
* [[MC-Basic:pls.PLSdelaytime|pls.DELAYTIME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSEMENTNAME|pls.PLSEMENTNAME]] / [[MC-Basic:pls.PLSAXISNAME|pls.PLSAXISNAME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSENABLE|pls.PLSENABLE]]&lt;br /&gt;
* [[MC-Basic:pls.HWASSISTANCE|pls.HWASSISTANCE]]&lt;br /&gt;
* [[MC-Basic:pls.HWIOtime|pls.HWIOTIME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSHYSTERESIS|pls.PLSHYSTERESIS]]&lt;br /&gt;
* [[MC-Basic:pls.PLSOUTPUT|pls.PLSOUTPUT]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOLARITY|pls.PLSPOLARITY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOSITION|pls.PLSPOSITION]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationDelay|pls.PLSPropagationDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationDisableDelay|pls.PLSPropagationDisableDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationEnableDelay|pls.PLSPropagationEnableDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSRELATEDTO|pls.PLSRELATEDTO]]&lt;br /&gt;
* [[MC-Basic:pls.PLSREPEAT|pls.PLSREPEAT]]&lt;br /&gt;
* [[MC-Basic:element.PLSSOURCE|element.PLSSOURCE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MC-Basic:Declarations|COMMON SHARED ... AS PLS]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132938</id>
		<title>MC-Basic:COMMON SHARED ... AS PLS</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132938"/>
				<updated>2018-10-08T14:57:15Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
{{MC-Basic&lt;br /&gt;
&lt;br /&gt;
|DESCRIPTION=&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Updated 2018-10&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command declares a programmable limit switch (PLS) variable. &lt;br /&gt;
&lt;br /&gt;
The declaration specifies the name of the axis and the output associated with the PLS. &lt;br /&gt;
&lt;br /&gt;
The PLS output may be a digital output (SYSTEM.DOUT.x) or a virtual output (SYSTEM.VOUT.x).&lt;br /&gt;
&lt;br /&gt;
After this command is issued, the PLS exists but is disabled. The PLS property &amp;lt;pls&amp;gt;.PLSENABLE is used to enable the PLS.&lt;br /&gt;
&lt;br /&gt;
After PLS is declared, the following default PLS properties are in effect:&lt;br /&gt;
* The initial output polarity is 0.&lt;br /&gt;
* The repetition interval is 0.&lt;br /&gt;
* The hysteresis is 0.&lt;br /&gt;
* A single PLS position set as 0.&lt;br /&gt;
These properties can be set explicitly only when the PLS is disabled. &lt;br /&gt;
&lt;br /&gt;
|SYNTAX=&lt;br /&gt;
COMMON SHARED &amp;lt;''pls''&amp;gt; As PLS &amp;lt;''axis name''&amp;gt; &amp;lt;''output''&amp;gt; {HWAssistance = 1/0 }&lt;br /&gt;
&lt;br /&gt;
|AVAILABILITY=&lt;br /&gt;
Version 4.1.11 and later&lt;br /&gt;
&lt;br /&gt;
|TYPE=&lt;br /&gt;
&amp;lt;''pls''&amp;gt;: string&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: string&lt;br /&gt;
&lt;br /&gt;
|RANGE=&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: a valid axis name&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''output''&amp;gt;: the name of a system output. System outputs are specified by&amp;lt;br&amp;gt;&lt;br /&gt;
::System.DOut.''x'', for digital outputs, or&amp;lt;br&amp;gt;&lt;br /&gt;
::System.VOut.''x'', for virtual outputs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HWAssistance&amp;gt;: 1 activates the PLS high accuracy mode&lt;br /&gt;
&lt;br /&gt;
The value ''x'' identifies the specific output to be used. It may be explicitly given or it may be an expression. The expression must evaluate to an integer ranging from 1 to 20 for digital outputs or from 1 to 32 for virtual outputs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|UNITS=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|DEFAULT=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SCOPE=&lt;br /&gt;
Configuration or Terminal&lt;br /&gt;
&lt;br /&gt;
In version 4.5.17 and later, the global (common shared) declaration can also be issued from library or task contexts. In those contexts all three parameters of PLS (axis name, system output and HWassistance flag) can be reassigned while reloading the declaring task or library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|LIMITATIONS=&lt;br /&gt;
Write only&lt;br /&gt;
&lt;br /&gt;
PLS high accuracy (HWAssistance) is limited to System.DOut from 1 to 8.&lt;br /&gt;
&lt;br /&gt;
HWAssistance requires Digital Logic Pentium III CPU with Altera version 8.7.1 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|EXAMPLE=&lt;br /&gt;
Common Shared Pls1 as PLS x_axis SYSTEM.Dout.4&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls2 as PLS x_axis SYS.Dout.8 HWAssistance = 1&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls3 as PLS x_axis SYS.Dout.3 HWAssistance = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SEE ALSO=&lt;br /&gt;
* [[MC-Basic:CREATEPLSDATA|CREATEDATA]]&lt;br /&gt;
* [[MC-Basic:DELETEPLS|DELETEPLS]]&lt;br /&gt;
* [[MC-Basic:PLSLIST|PLSLIST]]&lt;br /&gt;
* [[MC-Basic:WITHPLS|WITHPLS]]&lt;br /&gt;
* [[MC-Basic:pls.HWASSISTANCE|pls.HWASSISTANCE]]&lt;br /&gt;
* [[MC-Basic:pls.HWIOtime|pls.HWIOTIME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSdelaytime|pls.DELAYTIME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSEMENTNAME|pls.PLSEMENTNAME]] / [[MC-Basic:pls.PLSAXISNAME|pls.PLSAXISNAME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSENABLE|pls.PLSENABLE]]&lt;br /&gt;
* [[MC-Basic:pls.PLSHYSTERESIS|pls.PLSHYSTERESIS]]&lt;br /&gt;
* [[MC-Basic:pls.PLSOUTPUT|pls.PLSOUTPUT]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOLARITY|pls.PLSPOLARITY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOSITION|pls.PLSPOSITION]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationDelay|pls.PLSPropagationDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationDisableDelay|pls.PLSPropagationDisableDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationEnableDelay|pls.PLSPropagationEnableDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSRELATEDTO|pls.PLSRELATEDTO]]&lt;br /&gt;
* [[MC-Basic:pls.PLSREPEAT|pls.PLSREPEAT]]&lt;br /&gt;
* [[MC-Basic:element.PLSSOURCE|element.PLSSOURCE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MC-Basic:Declarations|COMMON SHARED ... AS PLS]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132937</id>
		<title>MC-Basic:COMMON SHARED ... AS PLS</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132937"/>
				<updated>2018-10-08T14:53:59Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
{{MC-Basic&lt;br /&gt;
&lt;br /&gt;
|DESCRIPTION=&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Updated 2018-10&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command declares a programmable limit switch (PLS) variable. &lt;br /&gt;
&lt;br /&gt;
The declaration specifies the name of the axis and the output associated with the PLS. &lt;br /&gt;
&lt;br /&gt;
The PLS output may be a digital output (SYSTEM.DOUT.x) or a virtual output (SYSTEM.VOUT.x).&lt;br /&gt;
&lt;br /&gt;
After this command is issued, the PLS exists but is disabled. The PLS property &amp;lt;pls&amp;gt;.PLSENABLE is used to enable the PLS.&lt;br /&gt;
&lt;br /&gt;
After PLS is declared, the following default PLS properties are in effect:&lt;br /&gt;
* The initial output polarity is 0.&lt;br /&gt;
* The repetition interval is 0.&lt;br /&gt;
* The hysteresis is 0.&lt;br /&gt;
* A single PLS position set as 0.&lt;br /&gt;
These properties can be set explicitly only when the PLS is disabled. &lt;br /&gt;
&lt;br /&gt;
|SYNTAX=&lt;br /&gt;
COMMON SHARED &amp;lt;''pls''&amp;gt; As PLS &amp;lt;''axis name''&amp;gt; &amp;lt;''output''&amp;gt; {HWAssistance = 1/0 }&lt;br /&gt;
&lt;br /&gt;
|AVAILABILITY=&lt;br /&gt;
Version 4.1.11 and later&lt;br /&gt;
&lt;br /&gt;
|TYPE=&lt;br /&gt;
&amp;lt;''pls''&amp;gt;: string&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: string&lt;br /&gt;
&lt;br /&gt;
|RANGE=&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: a valid axis name&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''output''&amp;gt;: the name of a system output. System outputs are specified by&amp;lt;br&amp;gt;&lt;br /&gt;
::System.DOut.''x'', for digital outputs, or&amp;lt;br&amp;gt;&lt;br /&gt;
::System.VOut.''x'', for virtual outputs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HWAssistance&amp;gt;: 1 activates the PLS high accuracy mode&lt;br /&gt;
&lt;br /&gt;
The value ''x'' identifies the specific output to be used. It may be explicitly given or it may be an expression. The expression must evaluate to an integer ranging from 1 to 20 for digital outputs or from 1 to 32 for virtual outputs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|UNITS=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|DEFAULT=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SCOPE=&lt;br /&gt;
Configuration or Terminal&lt;br /&gt;
&lt;br /&gt;
In version 4.5.17 and later, the global (common shared) declaration can also be issued from library or task contexts. In those contexts all three parameters of PLS (axis name, system output and HWassistance flag) can be reassigned while reloading the declaring task or library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|LIMITATIONS=&lt;br /&gt;
Write only&lt;br /&gt;
&lt;br /&gt;
PLS high accuracy (HWAssistance) is limited to System.DOut from 1 to 8.&lt;br /&gt;
&lt;br /&gt;
HWAssistance requires Digital Logic Pentium III CPU with Altera version 8.7.1 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|EXAMPLE=&lt;br /&gt;
Common Shared Pls1 as PLS x_axis SYSTEM.Dout.4&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls2 as PLS x_axis SYS.Dout.8 HWAssistance = 1&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls3 as PLS x_axis SYS.Dout.3 HWAssistance = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SEE ALSO=&lt;br /&gt;
* [[MC-Basic:CREATEPLSDATA|CREATEDATA]]&lt;br /&gt;
* [[MC-Basic:DELETEPLS|DELETEPLS]]&lt;br /&gt;
* [[MC-Basic:PLSLIST|PLSLIST]]&lt;br /&gt;
* [[MC-Basic:WITHPLS|WITHPLS]]&lt;br /&gt;
* [[MC-Basic:pls.HWASSISTANCE|pls.HWASSISTANCE]]&lt;br /&gt;
* [[MC-Basic:pls.PLSEMENTNAME|pls.PLSEMENTNAME]] / [[MC-Basic:pls.PLSAXISNAME|pls.PLSAXISNAME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSENABLE|pls.PLSENABLE]]&lt;br /&gt;
* [[MC-Basic:pls.PLSHYSTERESIS|pls.PLSHYSTERESIS]]&lt;br /&gt;
* [[MC-Basic:pls.PLSOUTPUT|pls.PLSOUTPUT]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOLARITY|pls.PLSPOLARITY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOSITION|pls.PLSPOSITION]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationDelay|pls.PLSPropagationDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationDisableDelay|pls.PLSPropagationDisableDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationEnableDelay|pls.PLSPropagationEnableDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSRELATEDTO|pls.PLSRELATEDTO]]&lt;br /&gt;
* [[MC-Basic:pls.PLSREPEAT|pls.PLSREPEAT]]&lt;br /&gt;
* [[MC-Basic:element.PLSSOURCE|element.PLSSOURCE]]&lt;br /&gt;
* [[MC-Basic:pls.PLSdelaytime|pls.DELAYTIME]]&lt;br /&gt;
* [[MC-Basic:pls.HWIOtime|pls.HWIOTIME]]&lt;br /&gt;
&lt;br /&gt;
[[Category:MC-Basic:Declarations|COMMON SHARED ... AS PLS]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132936</id>
		<title>MC-Basic:COMMON SHARED ... AS PLS</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132936"/>
				<updated>2018-10-08T14:52:44Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
{{MC-Basic&lt;br /&gt;
&lt;br /&gt;
|DESCRIPTION=&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Updated 2018-10&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command declares a programmable limit switch (PLS) variable. &lt;br /&gt;
&lt;br /&gt;
The declaration specifies the name of the axis and the output associated with the PLS. &lt;br /&gt;
&lt;br /&gt;
The PLS output may be a digital output (SYSTEM.DOUT.x) or a virtual output (SYSTEM.VOUT.x).&lt;br /&gt;
&lt;br /&gt;
After this command is issued, the PLS exists but is disabled. The PLS property &amp;lt;pls&amp;gt;.PLSENABLE is used to enable the PLS.&lt;br /&gt;
&lt;br /&gt;
After PLS is declared, the following default PLS properties are in effect:&lt;br /&gt;
* The initial output polarity is 0.&lt;br /&gt;
* The repetition interval is 0.&lt;br /&gt;
* The hysteresis is 0.&lt;br /&gt;
* A single PLS position set as 0.&lt;br /&gt;
These properties can be set explicitly only when the PLS is disabled. &lt;br /&gt;
&lt;br /&gt;
|SYNTAX=&lt;br /&gt;
COMMON SHARED &amp;lt;''pls''&amp;gt; As PLS &amp;lt;''axis name''&amp;gt; &amp;lt;''output''&amp;gt; {HWAssistance = 1/0 }&lt;br /&gt;
&lt;br /&gt;
|AVAILABILITY=&lt;br /&gt;
Version 4.1.11 and later&lt;br /&gt;
&lt;br /&gt;
|TYPE=&lt;br /&gt;
&amp;lt;''pls''&amp;gt;: string&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: string&lt;br /&gt;
&lt;br /&gt;
|RANGE=&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: a valid axis name&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''output''&amp;gt;: the name of a system output. System outputs are specified by&amp;lt;br&amp;gt;&lt;br /&gt;
::System.DOut.''x'', for digital outputs, or&amp;lt;br&amp;gt;&lt;br /&gt;
::System.VOut.''x'', for virtual outputs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HWAssistance&amp;gt;: 1 activates the PLS high accuracy mode&lt;br /&gt;
&lt;br /&gt;
The value ''x'' identifies the specific output to be used. It may be explicitly given or it may be an expression. The expression must evaluate to an integer ranging from 1 to 20 for digital outputs or from 1 to 32 for virtual outputs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|UNITS=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|DEFAULT=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SCOPE=&lt;br /&gt;
Configuration or Terminal&lt;br /&gt;
&lt;br /&gt;
In version 4.5.17 and later, the global (common shared) declaration can also be issued from library or task contexts. In those contexts all three parameters of PLS (axis name, system output and HWassistance flag) can be reassigned while reloading the declaring task or library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|LIMITATIONS=&lt;br /&gt;
Write only&lt;br /&gt;
&lt;br /&gt;
PLS high accuracy (HWAssistance) is limited to System.DOut from 1 to 8.&lt;br /&gt;
&lt;br /&gt;
HWAssistance requires Digital Logic Pentium III CPU with Altera version 8.7.1 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|EXAMPLE=&lt;br /&gt;
Common Shared Pls1 as PLS x_axis SYSTEM.Dout.4&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls2 as PLS x_axis SYS.Dout.8 HWAssistance = 1&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls3 as PLS x_axis SYS.Dout.3 HWAssistance = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SEE ALSO=&lt;br /&gt;
* [[MC-Basic:CREATEPLSDATA|CREATEDATA]]&lt;br /&gt;
* [[MC-Basic:DELETEPLS|DELETEPLS]]&lt;br /&gt;
* [[MC-Basic:PLSLIST|PLSLIST]]&lt;br /&gt;
* [[MC-Basic:WITHPLS|WITHPLS]]&lt;br /&gt;
* [[MC-Basic:pls.HWASSISTANCE|pls.HWASSISTANCE]]&lt;br /&gt;
* [[MC-Basic:pls.PLSEMENTNAME|pls.PLSEMENTNAME]] / [[MC-Basic:pls.PLSAXISNAME|pls.PLSAXISNAME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSENABLE|pls.PLSENABLE]]&lt;br /&gt;
* [[MC-Basic:pls.PLSHYSTERESIS|pls.PLSHYSTERESIS]]&lt;br /&gt;
* [[MC-Basic:pls.PLSOUTPUT|pls.PLSOUTPUT]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOLARITY|pls.PLSPOLARITY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOSITION|pls.PLSPOSITION]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationDelay|pls.PLSPropagationDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationDisableDelay|pls.PLSPropagationDisableDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationEnableDelay|pls.PLSPropagationEnableDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSRELATEDTO|pls.PLSRELATEDTO]]&lt;br /&gt;
* [[MC-Basic:pls.PLSREPEAT|pls.PLSREPEAT]]&lt;br /&gt;
* [[MC-Basic:element.PLSSOURCE|element.PLSSOURCE]]&lt;br /&gt;
* [[MC-Basic:pls.DELAYTIME|pls.DELAYTIME]]&lt;br /&gt;
* [[MC-Basic:pls.HWIOtime|pls.HWIOtime]]&lt;br /&gt;
&lt;br /&gt;
[[Category:MC-Basic:Declarations|COMMON SHARED ... AS PLS]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132935</id>
		<title>MC-Basic:COMMON SHARED ... AS PLS</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132935"/>
				<updated>2018-10-08T14:39:18Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
{{MC-Basic&lt;br /&gt;
&lt;br /&gt;
|DESCRIPTION=&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Updated 2018-10&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command declares a programmable limit switch (PLS) variable. &lt;br /&gt;
&lt;br /&gt;
The declaration specifies the name of the axis and the output associated with the PLS. &lt;br /&gt;
&lt;br /&gt;
The PLS output may be a digital output (SYSTEM.DOUT.x) or a virtual output (SYSTEM.VOUT.x).&lt;br /&gt;
&lt;br /&gt;
After this command is issued, the PLS exists but is disabled. The PLS property &amp;lt;pls&amp;gt;.PLSENABLE is used to enable the PLS.&lt;br /&gt;
&lt;br /&gt;
After PLS is declared, the following default PLS properties are in effect:&lt;br /&gt;
* The initial output polarity is 0.&lt;br /&gt;
* The repetition interval is 0.&lt;br /&gt;
* The hysteresis is 0.&lt;br /&gt;
* A single PLS position set as 0.&lt;br /&gt;
These properties can be set explicitly only when the PLS is disabled. &lt;br /&gt;
&lt;br /&gt;
|SYNTAX=&lt;br /&gt;
COMMON SHARED &amp;lt;''pls''&amp;gt; As PLS &amp;lt;''axis name''&amp;gt; &amp;lt;''output''&amp;gt; {HWAssistance = 1/0 }&lt;br /&gt;
&lt;br /&gt;
|AVAILABILITY=&lt;br /&gt;
Version 4.1.11 and later&lt;br /&gt;
&lt;br /&gt;
|TYPE=&lt;br /&gt;
&amp;lt;''pls''&amp;gt;: string&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: string&lt;br /&gt;
&lt;br /&gt;
|RANGE=&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: a valid axis name&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''output''&amp;gt;: the name of a system output. System outputs are specified by&amp;lt;br&amp;gt;&lt;br /&gt;
::System.DOut.''x'', for digital outputs, or&amp;lt;br&amp;gt;&lt;br /&gt;
::System.VOut.''x'', for virtual outputs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HWAssistance&amp;gt;: 1 activates the PLS high accuracy mode&lt;br /&gt;
&lt;br /&gt;
The value ''x'' identifies the specific output to be used. It may be explicitly given or it may be an expression. The expression must evaluate to an integer ranging from 1 to 20 for digital outputs or from 1 to 32 for virtual outputs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|UNITS=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|DEFAULT=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SCOPE=&lt;br /&gt;
Configuration or Terminal&lt;br /&gt;
&lt;br /&gt;
In version 4.5.17 and later, the global (common shared) declaration can also be issued from library or task contexts. In those contexts all three parameters of PLS (axis name, system output and HWassistance flag) can be reassigned while reloading the declaring task or library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|LIMITATIONS=&lt;br /&gt;
Write only&lt;br /&gt;
&lt;br /&gt;
PLS high accuracy (HWAssistance) is limited to System.DOut from 1 to 8.&lt;br /&gt;
&lt;br /&gt;
HWAssistance requires Digital Logic Pentium III CPU with Altera version 8.7.1 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|EXAMPLE=&lt;br /&gt;
Common Shared Pls1 as PLS x_axis SYSTEM.Dout.4&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls2 as PLS x_axis SYS.Dout.8 HWAssistance = 1&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls3 as PLS x_axis SYS.Dout.3 HWAssistance = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SEE ALSO=&lt;br /&gt;
* [[MC-Basic:CREATEPLSDATA|CREATEDATA]]&lt;br /&gt;
* [[MC-Basic:DELETEPLS|DELETEPLS]]&lt;br /&gt;
* [[MC-Basic:PLSLIST|PLSLIST]]&lt;br /&gt;
* [[MC-Basic:WITHPLS|WITHPLS]]&lt;br /&gt;
* [[MC-Basic:pls.HWASSISTANCE|pls.HWASSISTANCE]]&lt;br /&gt;
* [[MC-Basic:pls.HWIOtime|pls.HWIOtime]]&lt;br /&gt;
* [[MC-Basic:pls.PLSEMENTNAME|pls.PLSEMENTNAME]] / [[MC-Basic:pls.PLSAXISNAME|pls.PLSAXISNAME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSENABLE|pls.PLSENABLE]]&lt;br /&gt;
* [[MC-Basic:pls.PLSHYSTERESIS|pls.PLSHYSTERESIS]]&lt;br /&gt;
* [[MC-Basic:pls.PLSOUTPUT|pls.PLSOUTPUT]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOLARITY|pls.PLSPOLARITY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOSITION|pls.PLSPOSITION]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationDelay|pls.PLSPropagationDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationDisableDelay|pls.PLSPropagationDisableDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationEnableDelay|pls.PLSPropagationEnableDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSRELATEDTO|pls.PLSRELATEDTO]]&lt;br /&gt;
* [[MC-Basic:pls.PLSREPEAT|pls.PLSREPEAT]]&lt;br /&gt;
* [[MC-Basic:element.PLSSOURCE|element.PLSSOURCE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MC-Basic:Declarations|COMMON SHARED ... AS PLS]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132934</id>
		<title>MC-Basic:COMMON SHARED ... AS PLS</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132934"/>
				<updated>2018-10-08T14:38:19Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
{{MC-Basic&lt;br /&gt;
&lt;br /&gt;
|DESCRIPTION=&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Updated 2018-10&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command declares a programmable limit switch (PLS) variable. &lt;br /&gt;
&lt;br /&gt;
The declaration specifies the name of the axis and the output associated with the PLS. &lt;br /&gt;
&lt;br /&gt;
The PLS output may be a digital output (SYSTEM.DOUT.x) or a virtual output (SYSTEM.VOUT.x).&lt;br /&gt;
&lt;br /&gt;
After this command is issued, the PLS exists but is disabled. The PLS property &amp;lt;pls&amp;gt;.PLSENABLE is used to enable the PLS.&lt;br /&gt;
&lt;br /&gt;
After PLS is declared, the following default PLS properties are in effect:&lt;br /&gt;
* The initial output polarity is 0.&lt;br /&gt;
* The repetition interval is 0.&lt;br /&gt;
* The hysteresis is 0.&lt;br /&gt;
* A single PLS position set as 0.&lt;br /&gt;
These properties can be set explicitly only when the PLS is disabled. &lt;br /&gt;
&lt;br /&gt;
|SYNTAX=&lt;br /&gt;
COMMON SHARED &amp;lt;''pls''&amp;gt; As PLS '&amp;lt;''axis name''&amp;gt; &amp;lt;''output''&amp;gt; {HWAssistance = 1/0 }&lt;br /&gt;
&lt;br /&gt;
|AVAILABILITY=&lt;br /&gt;
Version 4.1.11 and later&lt;br /&gt;
&lt;br /&gt;
|TYPE=&lt;br /&gt;
&amp;lt;''pls''&amp;gt;: string&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: string&lt;br /&gt;
&lt;br /&gt;
|RANGE=&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: a valid axis name&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''output''&amp;gt;: the name of a system output. System outputs are specified by&amp;lt;br&amp;gt;&lt;br /&gt;
::System.DOut.''x'', for digital outputs, or&amp;lt;br&amp;gt;&lt;br /&gt;
::System.VOut.''x'', for virtual outputs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HWAssistance&amp;gt;: 1 activates the PLS high accuracy mode&lt;br /&gt;
&lt;br /&gt;
The value ''x'' identifies the specific output to be used. It may be explicitly given or it may be an expression. The expression must evaluate to an integer ranging from 1 to 20 for digital outputs or from 1 to 32 for virtual outputs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|UNITS=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|DEFAULT=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SCOPE=&lt;br /&gt;
Configuration or Terminal&lt;br /&gt;
&lt;br /&gt;
In version 4.5.17 and later, the global (common shared) declaration can also be issued from library or task contexts. In those contexts all three parameters of PLS (axis name, system output and HWassistance flag) can be reassigned while reloading the declaring task or library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|LIMITATIONS=&lt;br /&gt;
Write only&lt;br /&gt;
&lt;br /&gt;
PLS high accuracy (HWAssistance) is limited to System.DOut from 1 to 8.&lt;br /&gt;
&lt;br /&gt;
HWAssistance requires Digital Logic Pentium III CPU with Altera version 8.7.1 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|EXAMPLE=&lt;br /&gt;
Common Shared Pls1 as PLS x_axis SYSTEM.Dout.4&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls2 as PLS x_axis SYS.Dout.8 HWAssistance = 1&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls3 as PLS x_axis SYS.Dout.3 HWAssistance = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SEE ALSO=&lt;br /&gt;
* [[MC-Basic:CREATEPLSDATA|CREATEDATA]]&lt;br /&gt;
* [[MC-Basic:DELETEPLS|DELETEPLS]]&lt;br /&gt;
* [[MC-Basic:PLSLIST|PLSLIST]]&lt;br /&gt;
* [[MC-Basic:WITHPLS|WITHPLS]]&lt;br /&gt;
* [[MC-Basic:pls.HWASSISTANCE|pls.HWASSISTANCE]]&lt;br /&gt;
* [[MC-Basic:pls.HWIOtime|pls.HWIOtime]]&lt;br /&gt;
* [[MC-Basic:pls.PLSEMENTNAME|pls.PLSEMENTNAME]] / [[MC-Basic:pls.PLSAXISNAME|pls.PLSAXISNAME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSENABLE|pls.PLSENABLE]]&lt;br /&gt;
* [[MC-Basic:pls.PLSHYSTERESIS|pls.PLSHYSTERESIS]]&lt;br /&gt;
* [[MC-Basic:pls.PLSOUTPUT|pls.PLSOUTPUT]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOLARITY|pls.PLSPOLARITY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOSITION|pls.PLSPOSITION]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationDelay|pls.PLSPropagationDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationDisableDelay|pls.PLSPropagationDisableDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationEnableDelay|pls.PLSPropagationEnableDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSRELATEDTO|pls.PLSRELATEDTO]]&lt;br /&gt;
* [[MC-Basic:pls.PLSREPEAT|pls.PLSREPEAT]]&lt;br /&gt;
* [[MC-Basic:element.PLSSOURCE|element.PLSSOURCE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MC-Basic:Declarations|COMMON SHARED ... AS PLS]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132933</id>
		<title>MC-Basic:COMMON SHARED ... AS PLS</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132933"/>
				<updated>2018-10-08T14:37:59Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
{{MC-Basic&lt;br /&gt;
&lt;br /&gt;
|DESCRIPTION=&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Updated 2018-10&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command declares a programmable limit switch (PLS) variable. &lt;br /&gt;
&lt;br /&gt;
The declaration specifies the name of the axis and the output associated with the PLS. &lt;br /&gt;
&lt;br /&gt;
The PLS output may be a digital output (SYSTEM.DOUT.x) or a virtual output (SYSTEM.VOUT.x).&lt;br /&gt;
&lt;br /&gt;
After this command is issued, the PLS exists but is disabled. The PLS property &amp;lt;pls&amp;gt;.PLSENABLE is used to enable the PLS.&lt;br /&gt;
&lt;br /&gt;
After PLS is declared, the following default PLS properties are in effect:&lt;br /&gt;
* The initial output polarity is 0.&lt;br /&gt;
* The repetition interval is 0.&lt;br /&gt;
* The hysteresis is 0.&lt;br /&gt;
* A single PLS position set as 0.&lt;br /&gt;
These properties can be set explicitly only when the PLS is disabled. &lt;br /&gt;
&lt;br /&gt;
|SYNTAX=&lt;br /&gt;
COMMON SHARED &amp;lt;''pls''&amp;gt; As PLS '&amp;lt;''axis name''&amp;gt; &amp;lt;''output''&amp;gt; {HWAssistance = 1/0 }&lt;br /&gt;
&lt;br /&gt;
|AVAILABILITY=&lt;br /&gt;
Version 4.1.11 and later&lt;br /&gt;
&lt;br /&gt;
|TYPE=&lt;br /&gt;
&amp;lt;''pls''&amp;gt;: string&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: string&lt;br /&gt;
&lt;br /&gt;
|RANGE=&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: a valid axis name&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''output''&amp;gt;: the name of a system output. System outputs are specified by&amp;lt;br&amp;gt;&lt;br /&gt;
::System.DOut.''x'', for digital outputs, or&amp;lt;br&amp;gt;&lt;br /&gt;
::System.VOut.''x'', for virtual outputs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HWAssistance&amp;gt;: 1 activates the PLS high accuracy mode&lt;br /&gt;
&lt;br /&gt;
The value ''x'' identifies the specific output to be used. It may be explicitly given or it may be an expression. The expression must evaluate to an integer ranging from 1 to 20 for digital outputs or from 1 to 32 for virtual outputs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|UNITS=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|DEFAULT=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SCOPE=&lt;br /&gt;
Configuration or Terminal&lt;br /&gt;
&lt;br /&gt;
In version 4.5.17 and later, the global (common shared) declaration can also be issued from library or task contexts. In those contexts all three parameters of PLS (axis name, system output and HWassistance flag) can be reassigned while reloading the declaring task or library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|LIMITATIONS=&lt;br /&gt;
Write only&lt;br /&gt;
&lt;br /&gt;
PLS high accuracy (HWAssistance) is limited to System.DOut from 1 to 8.&lt;br /&gt;
&lt;br /&gt;
HWAssistance requires Digital Logic Pentium III CPU with Altera version 8.7.1 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|EXAMPLE=&lt;br /&gt;
Common Shared Pls1 as PLS x_axis SYSTEM.Dout.4&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls2 as PLS x_axis SYS.Dout.8 HWAssistance = 1&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls3 as PLS x_axis SYS.Dout.3 HWAssistance = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SEE ALSO=&lt;br /&gt;
* [[MC-Basic:CREATEPLSDATA|CREATEDATA]]&lt;br /&gt;
* [[MC-Basic:DELETEPLS|DELETEPLS]]&lt;br /&gt;
* [[MC-Basic:PLSLIST|PLSLIST]]&lt;br /&gt;
* [[MC-Basic:WITHPLS|WITHPLS]]&lt;br /&gt;
* [[MC-Basic:pls.HWASSISTANCE|pls.HWASSISTANCE]]&lt;br /&gt;
* [[MC-Basic:pls.HWIOTIME|pls.HWIOtime]]&lt;br /&gt;
* [[MC-Basic:pls.PLSEMENTNAME|pls.PLSEMENTNAME]] / [[MC-Basic:pls.PLSAXISNAME|pls.PLSAXISNAME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSENABLE|pls.PLSENABLE]]&lt;br /&gt;
* [[MC-Basic:pls.PLSHYSTERESIS|pls.PLSHYSTERESIS]]&lt;br /&gt;
* [[MC-Basic:pls.PLSOUTPUT|pls.PLSOUTPUT]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOLARITY|pls.PLSPOLARITY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOSITION|pls.PLSPOSITION]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationDelay|pls.PLSPropagationDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationDisableDelay|pls.PLSPropagationDisableDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationEnableDelay|pls.PLSPropagationEnableDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSRELATEDTO|pls.PLSRELATEDTO]]&lt;br /&gt;
* [[MC-Basic:pls.PLSREPEAT|pls.PLSREPEAT]]&lt;br /&gt;
* [[MC-Basic:element.PLSSOURCE|element.PLSSOURCE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MC-Basic:Declarations|COMMON SHARED ... AS PLS]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132932</id>
		<title>MC-Basic:COMMON SHARED ... AS PLS</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132932"/>
				<updated>2018-10-08T14:37:21Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
{{MC-Basic&lt;br /&gt;
&lt;br /&gt;
|DESCRIPTION=&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Updated 2018-10&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command declares a programmable limit switch (PLS) variable. &lt;br /&gt;
&lt;br /&gt;
The declaration specifies the name of the axis and the output associated with the PLS. &lt;br /&gt;
&lt;br /&gt;
The PLS output may be a digital output (SYSTEM.DOUT.x) or a virtual output (SYSTEM.VOUT.x).&lt;br /&gt;
&lt;br /&gt;
After this command is issued, the PLS exists but is disabled. The PLS property &amp;lt;pls&amp;gt;.PLSENABLE is used to enable the PLS.&lt;br /&gt;
&lt;br /&gt;
After PLS is declared, the following default PLS properties are in effect:&lt;br /&gt;
* The initial output polarity is 0.&lt;br /&gt;
* The repetition interval is 0.&lt;br /&gt;
* The hysteresis is 0.&lt;br /&gt;
* A single PLS position set as 0.&lt;br /&gt;
These properties can be set explicitly only when the PLS is disabled. &lt;br /&gt;
&lt;br /&gt;
|SYNTAX=&lt;br /&gt;
COMMON SHARED &amp;lt;''pls''&amp;gt; As PLS '&amp;lt;''axis name''&amp;gt; &amp;lt;''output''&amp;gt; {HWAssistance = 1/0 }&lt;br /&gt;
&lt;br /&gt;
|AVAILABILITY=&lt;br /&gt;
Version 4.1.11 and later&lt;br /&gt;
&lt;br /&gt;
|TYPE=&lt;br /&gt;
&amp;lt;''pls''&amp;gt;: string&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: string&lt;br /&gt;
&lt;br /&gt;
|RANGE=&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: a valid axis name&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''output''&amp;gt;: the name of a system output. System outputs are specified by&amp;lt;br&amp;gt;&lt;br /&gt;
::System.DOut.''x'', for digital outputs, or&amp;lt;br&amp;gt;&lt;br /&gt;
::System.VOut.''x'', for virtual outputs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HWAssistance&amp;gt;: 1 activates the PLS high accuracy mode&lt;br /&gt;
&lt;br /&gt;
The value ''x'' identifies the specific output to be used. It may be explicitly given or it may be an expression. The expression must evaluate to an integer ranging from 1 to 20 for digital outputs or from 1 to 32 for virtual outputs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|UNITS=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|DEFAULT=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SCOPE=&lt;br /&gt;
Configuration or Terminal&lt;br /&gt;
&lt;br /&gt;
In version 4.5.17 and later, the global (common shared) declaration can also be issued from library or task contexts. In those contexts all three parameters of PLS (axis name, system output and HWassistance flag) can be reassigned while reloading the declaring task or library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|LIMITATIONS=&lt;br /&gt;
Write only&lt;br /&gt;
&lt;br /&gt;
PLS high accuracy (HWAssistance) is limited to System.DOut from 1 to 8.&lt;br /&gt;
&lt;br /&gt;
HWAssistance requires Digital Logic Pentium III CPU with Altera version 8.7.1 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|EXAMPLE=&lt;br /&gt;
Common Shared Pls1 as PLS x_axis SYSTEM.Dout.4&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls2 as PLS x_axis SYS.Dout.8 HWAssistance = 1&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls3 as PLS x_axis SYS.Dout.3 HWAssistance = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SEE ALSO=&lt;br /&gt;
* [[MC-Basic:CREATEPLSDATA|CREATEDATA]]&lt;br /&gt;
* [[MC-Basic:DELETEPLS|DELETEPLS]]&lt;br /&gt;
* [[MC-Basic:PLSLIST|PLSLIST]]&lt;br /&gt;
* [[MC-Basic:WITHPLS|WITHPLS]]&lt;br /&gt;
* [[MC-Basic:pls.HWASSISTANCE|pls.HWASSISTANCE]]&lt;br /&gt;
* [[MC-Basic:pls.HWIOtime|pls.HWIOtime]]&lt;br /&gt;
* [[MC-Basic:pls.PLSEMENTNAME|pls.PLSEMENTNAME]] / [[MC-Basic:pls.PLSAXISNAME|pls.PLSAXISNAME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSENABLE|pls.PLSENABLE]]&lt;br /&gt;
* [[MC-Basic:pls.PLSHYSTERESIS|pls.PLSHYSTERESIS]]&lt;br /&gt;
* [[MC-Basic:pls.PLSOUTPUT|pls.PLSOUTPUT]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOLARITY|pls.PLSPOLARITY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOSITION|pls.PLSPOSITION]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationDelay|pls.PLSPropagationDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationDisableDelay|pls.PLSPropagationDisableDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationEnableDelay|pls.PLSPropagationEnableDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSRELATEDTO|pls.PLSRELATEDTO]]&lt;br /&gt;
* [[MC-Basic:pls.PLSREPEAT|pls.PLSREPEAT]]&lt;br /&gt;
* [[MC-Basic:element.PLSSOURCE|element.PLSSOURCE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MC-Basic:Declarations|COMMON SHARED ... AS PLS]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132931</id>
		<title>MC-Basic:COMMON SHARED ... AS PLS</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132931"/>
				<updated>2018-10-08T14:29:57Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
{{MC-Basic&lt;br /&gt;
&lt;br /&gt;
|DESCRIPTION=&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Updated 2018-10&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command declares a programmable limit switch (PLS) variable. &lt;br /&gt;
&lt;br /&gt;
The declaration specifies the name of the axis and the output associated with the PLS. &lt;br /&gt;
&lt;br /&gt;
The PLS output may be a digital output (SYSTEM.DOUT.x) or a virtual output (SYSTEM.VOUT.x).&lt;br /&gt;
&lt;br /&gt;
After this command is issued, the PLS exists but is disabled. The PLS property &amp;lt;pls&amp;gt;.PLSENABLE is used to enable the PLS.&lt;br /&gt;
&lt;br /&gt;
After PLS is declared, the following default PLS properties are in effect:&lt;br /&gt;
* The initial output polarity is 0.&lt;br /&gt;
* The repetition interval is 0.&lt;br /&gt;
* The hysteresis is 0.&lt;br /&gt;
* A single PLS position set as 0.&lt;br /&gt;
These properties can be set explicitly only when the PLS is disabled. &lt;br /&gt;
&lt;br /&gt;
|SYNTAX=&lt;br /&gt;
COMMON SHARED &amp;lt;''pls''&amp;gt; As PLS '&amp;lt;''axis name''&amp;gt; &amp;lt;''output''&amp;gt; {HWAssistance = 1/0 }&lt;br /&gt;
&lt;br /&gt;
|AVAILABILITY=&lt;br /&gt;
Version 4.1.11 and later&lt;br /&gt;
&lt;br /&gt;
|TYPE=&lt;br /&gt;
&amp;lt;''pls''&amp;gt;: string&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: string&lt;br /&gt;
&lt;br /&gt;
|RANGE=&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: a valid axis name&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''output''&amp;gt;: the name of a system output. System outputs are specified by&amp;lt;br&amp;gt;&lt;br /&gt;
::System.DOut.''x'', for digital outputs, or&amp;lt;br&amp;gt;&lt;br /&gt;
::System.VOut.''x'', for virtual outputs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HWAssistance&amp;gt;: 1 activates the PLS high accuracy mode&lt;br /&gt;
&lt;br /&gt;
The value ''x'' identifies the specific output to be used. It may be explicitly given or it may be an expression. The expression must evaluate to an integer ranging from 1 to 20 for digital outputs or from 1 to 32 for virtual outputs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|UNITS=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|DEFAULT=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SCOPE=&lt;br /&gt;
Configuration or Terminal&lt;br /&gt;
&lt;br /&gt;
In version 4.5.17 and later, the global (common shared) declaration can also be issued from library or task contexts. In those contexts all three parameters of PLS (axis name, system output and HWassistance flag) can be reassigned while reloading the declaring task or library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|LIMITATIONS=&lt;br /&gt;
Write only&lt;br /&gt;
&lt;br /&gt;
PLS high accuracy (HWAssistance) is limited to System.DOut from 1 to 8.&lt;br /&gt;
&lt;br /&gt;
HWAssistance requires Digital Logic Pentium III CPU with Altera version 8.7.1 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|EXAMPLE=&lt;br /&gt;
Common Shared Pls1 as PLS x_axis SYSTEM.Dout.4&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls2 as PLS x_axis SYS.Dout.8 HWAssistance = 1&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls3 as PLS x_axis SYS.Dout.3 HWAssistance = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SEE ALSO=&lt;br /&gt;
* [[MC-Basic:CREATEPLSDATA|CREATEDATA]]&lt;br /&gt;
* [[MC-Basic:DELETEPLS|DELETEPLS]]&lt;br /&gt;
* [[MC-Basic:PLSLIST|PLSLIST]]&lt;br /&gt;
* [[MC-Basic:WITHPLS|WITHPLS]]&lt;br /&gt;
* [[MC-Basic:pls.HWASSISTANCE|pls.HWASSISTANCE]]&lt;br /&gt;
* [[MC-Basic:pls.HWIOtime|pls.HWIOtime]]&lt;br /&gt;
* [[MC-Basic:pls.PLSEMENTNAME|pls.PLSEMENTNAME]] / [[MC-Basic:pls.PLSAXISNAME|pls.PLSAXISNAME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSENABLE|pls.PLSENABLE]]&lt;br /&gt;
* [[MC-Basic:pls.PLSHYSTERESIS|pls.PLSHYSTERESIS]]&lt;br /&gt;
* [[MC-Basic:pls.PLSOUTPUT|pls.PLSOUTPUT]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOLARITY|pls.PLSPOLARITY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOSITION|pls.PLSPOSITION]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationDelay|pls.PLSPropagationDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationDisableDelay|PLSPropagationDisableDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationEnableDelay|pls.PropagationEnableDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSRELATEDTO|pls.PLSRELATEDTO]]&lt;br /&gt;
* [[MC-Basic:pls.PLSREPEAT|pls.PLSREPEAT]]&lt;br /&gt;
* [[MC-Basic:element.PLSSOURCE|element.PLSSOURCE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MC-Basic:Declarations|COMMON SHARED ... AS PLS]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132930</id>
		<title>MC-Basic:COMMON SHARED ... AS PLS</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132930"/>
				<updated>2018-10-08T14:23:08Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
{{MC-Basic&lt;br /&gt;
&lt;br /&gt;
|DESCRIPTION=&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Updated 2018-10&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command declares a programmable limit switch (PLS) variable. &lt;br /&gt;
&lt;br /&gt;
The declaration specifies the name of the axis and the output associated with the PLS. &lt;br /&gt;
&lt;br /&gt;
The PLS output may be a digital output (SYSTEM.DOUT.x) or a virtual output (SYSTEM.VOUT.x).&lt;br /&gt;
&lt;br /&gt;
After this command is issued, the PLS exists but is disabled. The PLS property &amp;lt;pls&amp;gt;.PLSENABLE is used to enable the PLS.&lt;br /&gt;
&lt;br /&gt;
After PLS is declared, the following default PLS properties are in effect:&lt;br /&gt;
* The initial output polarity is 0.&lt;br /&gt;
* The repetition interval is 0.&lt;br /&gt;
* The hysteresis is 0.&lt;br /&gt;
* A single PLS position set as 0.&lt;br /&gt;
These properties can be set explicitly only when the PLS is disabled. &lt;br /&gt;
&lt;br /&gt;
|SYNTAX=&lt;br /&gt;
COMMON SHARED &amp;lt;''pls''&amp;gt; As PLS '&amp;lt;''axis name''&amp;gt; &amp;lt;''output''&amp;gt; {HWAssistance = 1/0 }&lt;br /&gt;
&lt;br /&gt;
|AVAILABILITY=&lt;br /&gt;
Version 4.1.11 and later&lt;br /&gt;
&lt;br /&gt;
|TYPE=&lt;br /&gt;
&amp;lt;''pls''&amp;gt;: string&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: string&lt;br /&gt;
&lt;br /&gt;
|RANGE=&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: a valid axis name&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''output''&amp;gt;: the name of a system output. System outputs are specified by&amp;lt;br&amp;gt;&lt;br /&gt;
::System.DOut.''x'', for digital outputs, or&amp;lt;br&amp;gt;&lt;br /&gt;
::System.VOut.''x'', for virtual outputs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HWAssistance&amp;gt;: 1 activates the PLS high accuracy mode&lt;br /&gt;
&lt;br /&gt;
The value ''x'' identifies the specific output to be used. It may be explicitly given or it may be an expression. The expression must evaluate to an integer ranging from 1 to 20 for digital outputs or from 1 to 32 for virtual outputs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|UNITS=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|DEFAULT=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SCOPE=&lt;br /&gt;
Configuration or Terminal&lt;br /&gt;
&lt;br /&gt;
In version 4.5.17 and later, the global (common shared) declaration can also be issued from library or task contexts. In those contexts all three parameters of PLS (axis name, system output and HWassistance flag) can be reassigned while reloading the declaring task or library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|LIMITATIONS=&lt;br /&gt;
Write only&lt;br /&gt;
&lt;br /&gt;
PLS high accuracy (HWAssistance) is limited to System.DOut from 1 to 8.&lt;br /&gt;
&lt;br /&gt;
HWAssistance requires Digital Logic Pentium III CPU with Altera version 8.7.1 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|EXAMPLE=&lt;br /&gt;
Common Shared Pls1 as PLS x_axis SYSTEM.Dout.4&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls2 as PLS x_axis SYS.Dout.8 HWAssistance = 1&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls3 as PLS x_axis SYS.Dout.3 HWAssistance = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SEE ALSO=&lt;br /&gt;
* [[MC-Basic:CREATEPLSDATA|CREATEDATA]]&lt;br /&gt;
* [[MC-Basic:DELETEPLS|DELETEPLS]]&lt;br /&gt;
* [[MC-Basic:PLSLIST|PLSLIST]]&lt;br /&gt;
* [[MC-Basic:WITHPLS|WITHPLS]]&lt;br /&gt;
* [[MC-Basic:pls.HWASSISTANCE|pls.HWASSISTANCE]]&lt;br /&gt;
* [[MC-Basic:pls.HWIOtime|pls.HWIOtime]]&lt;br /&gt;
* [[MC-Basic:pls.PLSELEMENTNAME|pls.PLSELEMENTNAME]] / [[MC-Basic:pls.PLSAXISNAME|pls.PLSAXISNAME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSDELAYTIME|pls.DELAYTIME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSENABLE|pls.PLSENABLE]]&lt;br /&gt;
* [[MC-Basic:pls.PLSHYSTERESIS|pls.PLSHYSTERESIS]]&lt;br /&gt;
* [[MC-Basic:pls.PLSOUTPUT|pls.PLSOUTPUT]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOLARITY|pls.PLSPOLARITY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOSITION|pls.PLSPOSITION]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPROPAGATIONDELAY|pls.PLSPROPAGATIONDELAY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationDisableDelay|PLSPropagationDisableDelay]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPROPAGATIONENABLEDELAY|pls.PROPAGATIONENABLEDELAY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSRELATEDTO|pls.PLSRELATEDTO]]&lt;br /&gt;
* [[MC-Basic:pls.PLSREPEAT|pls.PLSREPEAT]]&lt;br /&gt;
* [[MC-Basic:element.PLSSOURCE|element.PLSSOURCE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MC-Basic:Declarations|COMMON SHARED ... AS PLS]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132929</id>
		<title>MC-Basic:COMMON SHARED ... AS PLS</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132929"/>
				<updated>2018-10-08T14:22:14Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
{{MC-Basic&lt;br /&gt;
&lt;br /&gt;
|DESCRIPTION=&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Updated 2018-10&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command declares a programmable limit switch (PLS) variable. &lt;br /&gt;
&lt;br /&gt;
The declaration specifies the name of the axis and the output associated with the PLS. &lt;br /&gt;
&lt;br /&gt;
The PLS output may be a digital output (SYSTEM.DOUT.x) or a virtual output (SYSTEM.VOUT.x).&lt;br /&gt;
&lt;br /&gt;
After this command is issued, the PLS exists but is disabled. The PLS property &amp;lt;pls&amp;gt;.PLSENABLE is used to enable the PLS.&lt;br /&gt;
&lt;br /&gt;
After PLS is declared, the following default PLS properties are in effect:&lt;br /&gt;
* The initial output polarity is 0.&lt;br /&gt;
* The repetition interval is 0.&lt;br /&gt;
* The hysteresis is 0.&lt;br /&gt;
* A single PLS position set as 0.&lt;br /&gt;
These properties can be set explicitly only when the PLS is disabled. &lt;br /&gt;
&lt;br /&gt;
|SYNTAX=&lt;br /&gt;
COMMON SHARED &amp;lt;''pls''&amp;gt; As PLS '&amp;lt;''axis name''&amp;gt; &amp;lt;''output''&amp;gt; {HWAssistance = 1/0 }&lt;br /&gt;
&lt;br /&gt;
|AVAILABILITY=&lt;br /&gt;
Version 4.1.11 and later&lt;br /&gt;
&lt;br /&gt;
|TYPE=&lt;br /&gt;
&amp;lt;''pls''&amp;gt;: string&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: string&lt;br /&gt;
&lt;br /&gt;
|RANGE=&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: a valid axis name&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''output''&amp;gt;: the name of a system output. System outputs are specified by&amp;lt;br&amp;gt;&lt;br /&gt;
::System.DOut.''x'', for digital outputs, or&amp;lt;br&amp;gt;&lt;br /&gt;
::System.VOut.''x'', for virtual outputs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HWAssistance&amp;gt;: 1 activates the PLS high accuracy mode&lt;br /&gt;
&lt;br /&gt;
The value ''x'' identifies the specific output to be used. It may be explicitly given or it may be an expression. The expression must evaluate to an integer ranging from 1 to 20 for digital outputs or from 1 to 32 for virtual outputs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|UNITS=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|DEFAULT=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SCOPE=&lt;br /&gt;
Configuration or Terminal&lt;br /&gt;
&lt;br /&gt;
In version 4.5.17 and later, the global (common shared) declaration can also be issued from library or task contexts. In those contexts all three parameters of PLS (axis name, system output and HWassistance flag) can be reassigned while reloading the declaring task or library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|LIMITATIONS=&lt;br /&gt;
Write only&lt;br /&gt;
&lt;br /&gt;
PLS high accuracy (HWAssistance) is limited to System.DOut from 1 to 8.&lt;br /&gt;
&lt;br /&gt;
HWAssistance requires Digital Logic Pentium III CPU with Altera version 8.7.1 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|EXAMPLE=&lt;br /&gt;
Common Shared Pls1 as PLS x_axis SYSTEM.Dout.4&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls2 as PLS x_axis SYS.Dout.8 HWAssistance = 1&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls3 as PLS x_axis SYS.Dout.3 HWAssistance = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SEE ALSO=&lt;br /&gt;
* [[MC-Basic:CREATEPLSDATA|CREATEDATA]]&lt;br /&gt;
* [[MC-Basic:DELETEPLS|DELETEPLS]]&lt;br /&gt;
* [[MC-Basic:PLSLIST|PLSLIST]]&lt;br /&gt;
* [[MC-Basic:WITHPLS|WITHPLS]]&lt;br /&gt;
* [[MC-Basic:pls.HWASSISTANCE|pls.HWASSISTANCE]]&lt;br /&gt;
* [[MC-Basic:pls.HWIOTIME|pls.HWIOTIME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSELEMENTNAME|pls.PLSELEMENTNAME]] / [[MC-Basic:pls.PLSAXISNAME|pls.PLSAXISNAME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSDELAYTIME|pls.DELAYTIME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSENABLE|pls.PLSENABLE]]&lt;br /&gt;
* [[MC-Basic:pls.PLSHYSTERESIS|pls.PLSHYSTERESIS]]&lt;br /&gt;
* [[MC-Basic:pls.PLSOUTPUT|pls.PLSOUTPUT]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOLARITY|pls.PLSPOLARITY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOSITION|pls.PLSPOSITION]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPROPAGATIONDELAY|pls.PLSPROPAGATIONDELAY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPROPAGATIONDISABLEDELAY|pls.PROPAGATIONDISABLEDELAY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPROPAGATIONENABLEDELAY|pls.PROPAGATIONENABLEDELAY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSRELATEDTO|pls.PLSRELATEDTO]]&lt;br /&gt;
* [[MC-Basic:pls.PLSREPEAT|pls.PLSREPEAT]]&lt;br /&gt;
* [[MC-Basic:element.PLSSOURCE|element.PLSSOURCE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MC-Basic:Declarations|COMMON SHARED ... AS PLS]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132928</id>
		<title>MC-Basic:COMMON SHARED ... AS PLS</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132928"/>
				<updated>2018-10-08T14:21:42Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
{{MC-Basic&lt;br /&gt;
&lt;br /&gt;
|DESCRIPTION=&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Updated 2018-10&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command declares a programmable limit switch (PLS) variable. &lt;br /&gt;
&lt;br /&gt;
The declaration specifies the name of the axis and the output associated with the PLS. &lt;br /&gt;
&lt;br /&gt;
The PLS output may be a digital output (SYSTEM.DOUT.x) or a virtual output (SYSTEM.VOUT.x).&lt;br /&gt;
&lt;br /&gt;
After this command is issued, the PLS exists but is disabled. The PLS property &amp;lt;pls&amp;gt;.PLSENABLE is used to enable the PLS.&lt;br /&gt;
&lt;br /&gt;
After PLS is declared, the following default PLS properties are in effect:&lt;br /&gt;
* The initial output polarity is 0.&lt;br /&gt;
* The repetition interval is 0.&lt;br /&gt;
* The hysteresis is 0.&lt;br /&gt;
* A single PLS position set as 0.&lt;br /&gt;
These properties can be set explicitly only when the PLS is disabled. &lt;br /&gt;
&lt;br /&gt;
|SYNTAX=&lt;br /&gt;
COMMON SHARED &amp;lt;''pls''&amp;gt; As PLS '&amp;lt;''axis name''&amp;gt; &amp;lt;''output''&amp;gt; {HWAssistance = 1/0 }&lt;br /&gt;
&lt;br /&gt;
|AVAILABILITY=&lt;br /&gt;
Version 4.1.11 and later&lt;br /&gt;
&lt;br /&gt;
|TYPE=&lt;br /&gt;
&amp;lt;''pls''&amp;gt;: string&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: string&lt;br /&gt;
&lt;br /&gt;
|RANGE=&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: a valid axis name&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''output''&amp;gt;: the name of a system output. System outputs are specified by&amp;lt;br&amp;gt;&lt;br /&gt;
::System.DOut.''x'', for digital outputs, or&amp;lt;br&amp;gt;&lt;br /&gt;
::System.VOut.''x'', for virtual outputs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HWAssistance&amp;gt;: 1 activates the PLS high accuracy mode&lt;br /&gt;
&lt;br /&gt;
The value ''x'' identifies the specific output to be used. It may be explicitly given or it may be an expression. The expression must evaluate to an integer ranging from 1 to 20 for digital outputs or from 1 to 32 for virtual outputs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|UNITS=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|DEFAULT=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SCOPE=&lt;br /&gt;
Configuration or Terminal&lt;br /&gt;
&lt;br /&gt;
In version 4.5.17 and later, the global (common shared) declaration can also be issued from library or task contexts. In those contexts all three parameters of PLS (axis name, system output and HWassistance flag) can be reassigned while reloading the declaring task or library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|LIMITATIONS=&lt;br /&gt;
Write only&lt;br /&gt;
&lt;br /&gt;
PLS high accuracy (HWAssistance) is limited to System.DOut from 1 to 8.&lt;br /&gt;
&lt;br /&gt;
HWAssistance requires Digital Logic Pentium III CPU with Altera version 8.7.1 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|EXAMPLE=&lt;br /&gt;
Common Shared Pls1 as PLS x_axis SYSTEM.Dout.4&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls2 as PLS x_axis SYS.Dout.8 HWAssistance = 1&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls3 as PLS x_axis SYS.Dout.3 HWAssistance = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SEE ALSO=&lt;br /&gt;
* [[MC-Basic:CREATEPLSDATA|CREATEDATA]]&lt;br /&gt;
* [[MC-Basic:DELETEPLS|DELETEPLS]]&lt;br /&gt;
* [[MC-Basic:PLSLIST|PLSLIST]]&lt;br /&gt;
* [[MC-Basic:WITHPLS|WITHPLS]]&lt;br /&gt;
* [[MC-Basic:pls.HWASSISTANCE|pls.HWASSISTANCE]]&lt;br /&gt;
* [[MC-Basic:pls.HWIOtime|pls.HWIOtime]]&lt;br /&gt;
* [[MC-Basic:pls.PLSELEMENTNAME|pls.PLSELEMENTNAME]] / [[MC-Basic:pls.PLSAXISNAME|pls.PLSAXISNAME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSDELAYTIME|pls.DELAYTIME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSENABLE|pls.PLSENABLE]]&lt;br /&gt;
* [[MC-Basic:pls.PLSHYSTERESIS|pls.PLSHYSTERESIS]]&lt;br /&gt;
* [[MC-Basic:pls.PLSOUTPUT|pls.PLSOUTPUT]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOLARITY|pls.PLSPOLARITY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOSITION|pls.PLSPOSITION]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPROPAGATIONDELAY|pls.PLSPROPAGATIONDELAY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPROPAGATIONDISABLEDELAY|pls.PROPAGATIONDISABLEDELAY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPROPAGATIONENABLEDELAY|pls.PROPAGATIONENABLEDELAY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSRELATEDTO|pls.PLSRELATEDTO]]&lt;br /&gt;
* [[MC-Basic:pls.PLSREPEAT|pls.PLSREPEAT]]&lt;br /&gt;
* [[MC-Basic:element.PLSSOURCE|element.PLSSOURCE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MC-Basic:Declarations|COMMON SHARED ... AS PLS]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132927</id>
		<title>MC-Basic:COMMON SHARED ... AS PLS</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132927"/>
				<updated>2018-10-08T14:21:01Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
{{MC-Basic&lt;br /&gt;
&lt;br /&gt;
|DESCRIPTION=&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Updated 2018-10&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command declares a programmable limit switch (PLS) variable. &lt;br /&gt;
&lt;br /&gt;
The declaration specifies the name of the axis and the output associated with the PLS. &lt;br /&gt;
&lt;br /&gt;
The PLS output may be a digital output (SYSTEM.DOUT.x) or a virtual output (SYSTEM.VOUT.x).&lt;br /&gt;
&lt;br /&gt;
After this command is issued, the PLS exists but is disabled. The PLS property &amp;lt;pls&amp;gt;.PLSENABLE is used to enable the PLS.&lt;br /&gt;
&lt;br /&gt;
After PLS is declared, the following default PLS properties are in effect:&lt;br /&gt;
* The initial output polarity is 0.&lt;br /&gt;
* The repetition interval is 0.&lt;br /&gt;
* The hysteresis is 0.&lt;br /&gt;
* A single PLS position set as 0.&lt;br /&gt;
These properties can be set explicitly only when the PLS is disabled. &lt;br /&gt;
&lt;br /&gt;
|SYNTAX=&lt;br /&gt;
COMMON SHARED &amp;lt;''pls''&amp;gt; As PLS '&amp;lt;''axis name''&amp;gt; &amp;lt;''output''&amp;gt; {HWAssistance = 1/0 }&lt;br /&gt;
&lt;br /&gt;
|AVAILABILITY=&lt;br /&gt;
Version 4.1.11 and later&lt;br /&gt;
&lt;br /&gt;
|TYPE=&lt;br /&gt;
&amp;lt;''pls''&amp;gt;: string&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: string&lt;br /&gt;
&lt;br /&gt;
|RANGE=&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: a valid axis name&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''output''&amp;gt;: the name of a system output. System outputs are specified by&amp;lt;br&amp;gt;&lt;br /&gt;
::System.DOut.''x'', for digital outputs, or&amp;lt;br&amp;gt;&lt;br /&gt;
::System.VOut.''x'', for virtual outputs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HWAssistance&amp;gt;: 1 activates the PLS high accuracy mode&lt;br /&gt;
&lt;br /&gt;
The value ''x'' identifies the specific output to be used. It may be explicitly given or it may be an expression. The expression must evaluate to an integer ranging from 1 to 20 for digital outputs or from 1 to 32 for virtual outputs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|UNITS=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|DEFAULT=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SCOPE=&lt;br /&gt;
Configuration or Terminal&lt;br /&gt;
&lt;br /&gt;
In version 4.5.17 and later, the global (common shared) declaration can also be issued from library or task contexts. In those contexts all three parameters of PLS (axis name, system output and HWassistance flag) can be reassigned while reloading the declaring task or library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|LIMITATIONS=&lt;br /&gt;
Write only&lt;br /&gt;
&lt;br /&gt;
PLS high accuracy (HWAssistance) is limited to System.DOut from 1 to 8.&lt;br /&gt;
&lt;br /&gt;
HWAssistance requires Digital Logic Pentium III CPU with Altera version 8.7.1 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|EXAMPLE=&lt;br /&gt;
Common Shared Pls1 as PLS x_axis SYSTEM.Dout.4&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls2 as PLS x_axis SYS.Dout.8 HWAssistance = 1&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls3 as PLS x_axis SYS.Dout.3 HWAssistance = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SEE ALSO=&lt;br /&gt;
* [[MC-Basic:CREATEPLSDATA|CREATEDATA]]&lt;br /&gt;
* [[MC-Basic:DELETEPLS|DELETEPLS]]&lt;br /&gt;
* [[MC-Basic:PLSLIST|PLSLIST]]&lt;br /&gt;
* [[MC-Basic:WITHPLS|WITHPLS]]&lt;br /&gt;
* [[MC-Basic:pls.HWASSISTANCE|pls.HWASSISTANCE]]&lt;br /&gt;
* [[MC-Basic:HWIOTIME|HWIOTIME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSELEMENTNAME|pls.PLSELEMENTNAME]] / [[MC-Basic:pls.PLSAXISNAME|pls.PLSAXISNAME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSDELAYTIME|pls.DELAYTIME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSENABLE|pls.PLSENABLE]]&lt;br /&gt;
* [[MC-Basic:pls.PLSHYSTERESIS|pls.PLSHYSTERESIS]]&lt;br /&gt;
* [[MC-Basic:pls.PLSOUTPUT|pls.PLSOUTPUT]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOLARITY|pls.PLSPOLARITY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOSITION|pls.PLSPOSITION]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPROPAGATIONDELAY|pls.PLSPROPAGATIONDELAY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPROPAGATIONDISABLEDELAY|pls.PROPAGATIONDISABLEDELAY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPROPAGATIONENABLEDELAY|pls.PROPAGATIONENABLEDELAY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSRELATEDTO|pls.PLSRELATEDTO]]&lt;br /&gt;
* [[MC-Basic:pls.PLSREPEAT|pls.PLSREPEAT]]&lt;br /&gt;
* [[MC-Basic:element.PLSSOURCE|element.PLSSOURCE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MC-Basic:Declarations|COMMON SHARED ... AS PLS]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132926</id>
		<title>MC-Basic:COMMON SHARED ... AS PLS</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132926"/>
				<updated>2018-10-08T14:20:45Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
{{MC-Basic&lt;br /&gt;
&lt;br /&gt;
|DESCRIPTION=&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Updated 2018-10&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command declares a programmable limit switch (PLS) variable. &lt;br /&gt;
&lt;br /&gt;
The declaration specifies the name of the axis and the output associated with the PLS. &lt;br /&gt;
&lt;br /&gt;
The PLS output may be a digital output (SYSTEM.DOUT.x) or a virtual output (SYSTEM.VOUT.x).&lt;br /&gt;
&lt;br /&gt;
After this command is issued, the PLS exists but is disabled. The PLS property &amp;lt;pls&amp;gt;.PLSENABLE is used to enable the PLS.&lt;br /&gt;
&lt;br /&gt;
After PLS is declared, the following default PLS properties are in effect:&lt;br /&gt;
* The initial output polarity is 0.&lt;br /&gt;
* The repetition interval is 0.&lt;br /&gt;
* The hysteresis is 0.&lt;br /&gt;
* A single PLS position set as 0.&lt;br /&gt;
These properties can be set explicitly only when the PLS is disabled. &lt;br /&gt;
&lt;br /&gt;
|SYNTAX=&lt;br /&gt;
COMMON SHARED &amp;lt;''pls''&amp;gt; As PLS '&amp;lt;''axis name''&amp;gt; &amp;lt;''output''&amp;gt; {HWAssistance = 1/0 }&lt;br /&gt;
&lt;br /&gt;
|AVAILABILITY=&lt;br /&gt;
Version 4.1.11 and later&lt;br /&gt;
&lt;br /&gt;
|TYPE=&lt;br /&gt;
&amp;lt;''pls''&amp;gt;: string&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: string&lt;br /&gt;
&lt;br /&gt;
|RANGE=&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: a valid axis name&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''output''&amp;gt;: the name of a system output. System outputs are specified by&amp;lt;br&amp;gt;&lt;br /&gt;
::System.DOut.''x'', for digital outputs, or&amp;lt;br&amp;gt;&lt;br /&gt;
::System.VOut.''x'', for virtual outputs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HWAssistance&amp;gt;: 1 activates the PLS high accuracy mode&lt;br /&gt;
&lt;br /&gt;
The value ''x'' identifies the specific output to be used. It may be explicitly given or it may be an expression. The expression must evaluate to an integer ranging from 1 to 20 for digital outputs or from 1 to 32 for virtual outputs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|UNITS=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|DEFAULT=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SCOPE=&lt;br /&gt;
Configuration or Terminal&lt;br /&gt;
&lt;br /&gt;
In version 4.5.17 and later, the global (common shared) declaration can also be issued from library or task contexts. In those contexts all three parameters of PLS (axis name, system output and HWassistance flag) can be reassigned while reloading the declaring task or library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|LIMITATIONS=&lt;br /&gt;
Write only&lt;br /&gt;
&lt;br /&gt;
PLS high accuracy (HWAssistance) is limited to System.DOut from 1 to 8.&lt;br /&gt;
&lt;br /&gt;
HWAssistance requires Digital Logic Pentium III CPU with Altera version 8.7.1 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|EXAMPLE=&lt;br /&gt;
Common Shared Pls1 as PLS x_axis SYSTEM.Dout.4&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls2 as PLS x_axis SYS.Dout.8 HWAssistance = 1&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls3 as PLS x_axis SYS.Dout.3 HWAssistance = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SEE ALSO=&lt;br /&gt;
* [[MC-Basic:CREATEPLSDATA|CREATEDATA]]&lt;br /&gt;
* [[MC-Basic:DELETEPLS|DELETEPLS]]&lt;br /&gt;
* [[MC-Basic:PLSLIST|PLSLIST]]&lt;br /&gt;
* [[MC-Basic:WITHPLS|WITHPLS]]&lt;br /&gt;
* [[MC-Basic:pls.HWASSISTANCE|pls.HWASSISTANCE]]&lt;br /&gt;
* [[MC-Basic:HWIOTIME|pls.HWIOTIME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSELEMENTNAME|pls.PLSELEMENTNAME]] / [[MC-Basic:pls.PLSAXISNAME|pls.PLSAXISNAME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSDELAYTIME|pls.DELAYTIME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSENABLE|pls.PLSENABLE]]&lt;br /&gt;
* [[MC-Basic:pls.PLSHYSTERESIS|pls.PLSHYSTERESIS]]&lt;br /&gt;
* [[MC-Basic:pls.PLSOUTPUT|pls.PLSOUTPUT]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOLARITY|pls.PLSPOLARITY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOSITION|pls.PLSPOSITION]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPROPAGATIONDELAY|pls.PLSPROPAGATIONDELAY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPROPAGATIONDISABLEDELAY|pls.PROPAGATIONDISABLEDELAY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPROPAGATIONENABLEDELAY|pls.PROPAGATIONENABLEDELAY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSRELATEDTO|pls.PLSRELATEDTO]]&lt;br /&gt;
* [[MC-Basic:pls.PLSREPEAT|pls.PLSREPEAT]]&lt;br /&gt;
* [[MC-Basic:element.PLSSOURCE|element.PLSSOURCE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MC-Basic:Declarations|COMMON SHARED ... AS PLS]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132925</id>
		<title>MC-Basic:COMMON SHARED ... AS PLS</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132925"/>
				<updated>2018-10-08T14:17:54Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
{{MC-Basic&lt;br /&gt;
&lt;br /&gt;
|DESCRIPTION=&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Updated 2018-10&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command declares a programmable limit switch (PLS) variable. &lt;br /&gt;
&lt;br /&gt;
The declaration specifies the name of the axis and the output associated with the PLS. &lt;br /&gt;
&lt;br /&gt;
The PLS output may be a digital output (SYSTEM.DOUT.x) or a virtual output (SYSTEM.VOUT.x).&lt;br /&gt;
&lt;br /&gt;
After this command is issued, the PLS exists but is disabled. The PLS property &amp;lt;pls&amp;gt;.PLSENABLE is used to enable the PLS.&lt;br /&gt;
&lt;br /&gt;
After PLS is declared, the following default PLS properties are in effect:&lt;br /&gt;
* The initial output polarity is 0.&lt;br /&gt;
* The repetition interval is 0.&lt;br /&gt;
* The hysteresis is 0.&lt;br /&gt;
* A single PLS position set as 0.&lt;br /&gt;
These properties can be set explicitly only when the PLS is disabled. &lt;br /&gt;
&lt;br /&gt;
|SYNTAX=&lt;br /&gt;
COMMON SHARED &amp;lt;''pls''&amp;gt; As PLS '&amp;lt;''axis name''&amp;gt; &amp;lt;''output''&amp;gt; {HWAssistance = 1/0 }&lt;br /&gt;
&lt;br /&gt;
|AVAILABILITY=&lt;br /&gt;
Version 4.1.11 and later&lt;br /&gt;
&lt;br /&gt;
|TYPE=&lt;br /&gt;
&amp;lt;''pls''&amp;gt;: string&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: string&lt;br /&gt;
&lt;br /&gt;
|RANGE=&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: a valid axis name&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''output''&amp;gt;: the name of a system output. System outputs are specified by&amp;lt;br&amp;gt;&lt;br /&gt;
::System.DOut.''x'', for digital outputs, or&amp;lt;br&amp;gt;&lt;br /&gt;
::System.VOut.''x'', for virtual outputs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HWAssistance&amp;gt;: 1 activates the PLS high accuracy mode&lt;br /&gt;
&lt;br /&gt;
The value ''x'' identifies the specific output to be used. It may be explicitly given or it may be an expression. The expression must evaluate to an integer ranging from 1 to 20 for digital outputs or from 1 to 32 for virtual outputs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|UNITS=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|DEFAULT=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SCOPE=&lt;br /&gt;
Configuration or Terminal&lt;br /&gt;
&lt;br /&gt;
In version 4.5.17 and later, the global (common shared) declaration can also be issued from library or task contexts. In those contexts all three parameters of PLS (axis name, system output and HWassistance flag) can be reassigned while reloading the declaring task or library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|LIMITATIONS=&lt;br /&gt;
Write only&lt;br /&gt;
&lt;br /&gt;
PLS high accuracy (HWAssistance) is limited to System.DOut from 1 to 8.&lt;br /&gt;
&lt;br /&gt;
HWAssistance requires Digital Logic Pentium III CPU with Altera version 8.7.1 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|EXAMPLE=&lt;br /&gt;
Common Shared Pls1 as PLS x_axis SYSTEM.Dout.4&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls2 as PLS x_axis SYS.Dout.8 HWAssistance = 1&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls3 as PLS x_axis SYS.Dout.3 HWAssistance = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SEE ALSO=&lt;br /&gt;
* [[MC-Basic:CREATEPLSDATA|CREATEDATA]]&lt;br /&gt;
* [[MC-Basic:DELETEPLS|DELETEPLS]]&lt;br /&gt;
* [[MC-Basic:PLSLIST|PLSLIST]]&lt;br /&gt;
* [[MC-Basic:WITHPLS|WITHPLS]]&lt;br /&gt;
* [[MC-Basic:pls.HWASSISTANCE|pls.HWASSISTANCE]]&lt;br /&gt;
* [[MC-Basic:pls.HWIOTIME|pls.HWIOTIME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSELEMENTNAME\pls.PLSELEMENTNAME]] / [[MC-Basic:pls.PLSAXISNAME|pls.PLSAXISNAME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSDELAYTIME|pls.DELAYTIME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSENABLE|pls.PLSENABLE]]&lt;br /&gt;
* [[MC-Basic:pls.PLSHYSTERESIS|pls.PLSHYSTERESIS]]&lt;br /&gt;
* [[MC-Basic:pls.PLSOUTPUT|pls.PLSOUTPUT]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOLARITY|pls.PLSPOLARITY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOSITION|pls.PLSPOSITION]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPROPAGATIONDELAY|pls.PLSPROPAGATIONDELAY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPROPAGATIONDISABLEDELAY|pls.PROPAGATIONDISABLEDELAY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPROPAGATIONENABLEDELAY||pls.PROPAGATIONENABLEDELAY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSRELATEDTO|pls.PLSRELATEDTO]]&lt;br /&gt;
* [[MC-Basic:pls.PLSREPEAT|pls.PLSREPEAT]]&lt;br /&gt;
* [[MC-Basic:element.PLSSOURCE|element.PLSSOURCE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MC-Basic:Declarations|COMMON SHARED ... AS PLS]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132924</id>
		<title>MC-Basic:COMMON SHARED ... AS PLS</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132924"/>
				<updated>2018-10-08T14:12:08Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
{{MC-Basic&lt;br /&gt;
&lt;br /&gt;
|DESCRIPTION=&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Updated 2018-10&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command declares a programmable limit switch (PLS) variable. &lt;br /&gt;
&lt;br /&gt;
The declaration specifies the name of the axis and the output associated with the PLS. &lt;br /&gt;
&lt;br /&gt;
The PLS output may be a digital output (SYSTEM.DOUT.x) or a virtual output (SYSTEM.VOUT.x).&lt;br /&gt;
&lt;br /&gt;
After this command is issued, the PLS exists but is disabled. The PLS property &amp;lt;pls&amp;gt;.PLSENABLE is used to enable the PLS.&lt;br /&gt;
&lt;br /&gt;
After PLS is declared, the following default PLS properties are in effect:&lt;br /&gt;
* The initial output polarity is 0.&lt;br /&gt;
* The repetition interval is 0.&lt;br /&gt;
* The hysteresis is 0.&lt;br /&gt;
* A single PLS position set as 0.&lt;br /&gt;
These properties can be set explicitly only when the PLS is disabled. &lt;br /&gt;
&lt;br /&gt;
|SYNTAX=&lt;br /&gt;
COMMON SHARED &amp;lt;''pls''&amp;gt; As Pls '&amp;lt;''axis name''&amp;gt; &amp;lt;''output''&amp;gt; {HWAssistance = 1/0 }&lt;br /&gt;
&lt;br /&gt;
|AVAILABILITY=&lt;br /&gt;
Version 4.1.11 and later&lt;br /&gt;
&lt;br /&gt;
|TYPE=&lt;br /&gt;
&amp;lt;''pls''&amp;gt;: string&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: string&lt;br /&gt;
&lt;br /&gt;
|RANGE=&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: a valid axis name&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''output''&amp;gt;: the name of a system output. System outputs are specified by&amp;lt;br&amp;gt;&lt;br /&gt;
::System.DOut.''x'', for digital outputs, or&amp;lt;br&amp;gt;&lt;br /&gt;
::System.VOut.''x'', for virtual outputs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HWAssistance&amp;gt;: 1 activates the PLS high accuracy mode&lt;br /&gt;
&lt;br /&gt;
The value ''x'' identifies the specific output to be used. It may be explicitly given or it may be an expression. The expression must evaluate to an integer ranging from 1 to 20 for digital outputs or from 1 to 32 for virtual outputs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|UNITS=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|DEFAULT=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SCOPE=&lt;br /&gt;
Configuration or Terminal&lt;br /&gt;
&lt;br /&gt;
In version 4.5.17 and later, the global (common shared) declaration can also be issued from library or task contexts. In those contexts all three parameters of PLS (axis name, system output and HWassistance flag) can be reassigned while reloading the declaring task or library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|LIMITATIONS=&lt;br /&gt;
Write only&lt;br /&gt;
&lt;br /&gt;
PLS high accuracy (HWAssistance) is limited to System.DOut from 1 to 8.&lt;br /&gt;
&lt;br /&gt;
HWAssistance requires Digital Logic Pentium III CPU with Altera version 8.7.1 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|EXAMPLE=&lt;br /&gt;
Common Shared Pls1 as PLS x_axis SYSTEM.Dout.4&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls2 as PLS x_axis SYS.Dout.8 HWAssistance = 1&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls3 as PLS x_axis SYS.Dout.3 HWAssistance = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SEE ALSO=&lt;br /&gt;
* CREATEPLSDATA&lt;br /&gt;
* DELETEPLS&lt;br /&gt;
* [[MC-Basic:PLSLIST|PLSLIST]]&lt;br /&gt;
* WITHPLS&lt;br /&gt;
* [[MC-Basic:pls.HWASSISTANCE|pls.HWASSISTANCE]]&lt;br /&gt;
* HWIOTIME&lt;br /&gt;
* PLSELEMENTNAME / [[MC-Basic:pls.PLSAXISNAME|pls.PLSAXISNAME]]&lt;br /&gt;
* PLSDELAYTIME&lt;br /&gt;
* [[MC-Basic:pls.PLSENABLE|pls.PLSENABLE]]&lt;br /&gt;
* [[MC-Basic:pls.PLSHYSTERESIS|pls.PLSHYSTERESIS]]&lt;br /&gt;
* [[MC-Basic:pls.PLSOUTPUT|pls.PLSOUTPUT]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOLARITY|pls.PLSPOLARITY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOSITION|pls.PLSPOSITION]]&lt;br /&gt;
* PLSPROPAGATIONDELAY&lt;br /&gt;
* PLSPROPAGATIONDISABLEDELAY&lt;br /&gt;
* PLSPROPAGATIONENABLEDELAY&lt;br /&gt;
* PLSRELATEDTO&lt;br /&gt;
* [[MC-Basic:pls.PLSREPEAT|pls.PLSREPEAT]]&lt;br /&gt;
* PLSSOURCE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MC-Basic:Declarations|COMMON SHARED ... AS PLS]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132923</id>
		<title>MC-Basic:COMMON SHARED ... AS PLS</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132923"/>
				<updated>2018-10-08T14:11:17Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
{{MC-Basic&lt;br /&gt;
&lt;br /&gt;
|DESCRIPTION=&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color: purple&amp;quot;&amp;gt;'''Updated 2018-10'''&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command declares a programmable limit switch (PLS) variable. &lt;br /&gt;
&lt;br /&gt;
The declaration specifies the name of the axis and the output associated with the PLS. &lt;br /&gt;
&lt;br /&gt;
The PLS output may be a digital output (SYSTEM.DOUT.x) or a virtual output (SYSTEM.VOUT.x).&lt;br /&gt;
&lt;br /&gt;
After this command is issued, the PLS exists but is disabled. The PLS property &amp;lt;pls&amp;gt;.PLSENABLE is used to enable the PLS.&lt;br /&gt;
&lt;br /&gt;
After PLS is declared, the following default PLS properties are in effect:&lt;br /&gt;
* The initial output polarity is 0.&lt;br /&gt;
* The repetition interval is 0.&lt;br /&gt;
* The hysteresis is 0.&lt;br /&gt;
* A single PLS position set as 0.&lt;br /&gt;
These properties can be set explicitly only when the PLS is disabled. &lt;br /&gt;
&lt;br /&gt;
|SYNTAX=&lt;br /&gt;
COMMON SHARED &amp;lt;''pls''&amp;gt; As Pls '&amp;lt;''axis name''&amp;gt; &amp;lt;''output''&amp;gt; {HWAssistance = 1/0 }&lt;br /&gt;
&lt;br /&gt;
|AVAILABILITY=&lt;br /&gt;
Version 4.1.11 and later&lt;br /&gt;
&lt;br /&gt;
|TYPE=&lt;br /&gt;
&amp;lt;''pls''&amp;gt;: string&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: string&lt;br /&gt;
&lt;br /&gt;
|RANGE=&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: a valid axis name&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''output''&amp;gt;: the name of a system output. System outputs are specified by&amp;lt;br&amp;gt;&lt;br /&gt;
::System.DOut.''x'', for digital outputs, or&amp;lt;br&amp;gt;&lt;br /&gt;
::System.VOut.''x'', for virtual outputs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HWAssistance&amp;gt;: 1 activates the PLS high accuracy mode&lt;br /&gt;
&lt;br /&gt;
The value ''x'' identifies the specific output to be used. It may be explicitly given or it may be an expression. The expression must evaluate to an integer ranging from 1 to 20 for digital outputs or from 1 to 32 for virtual outputs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|UNITS=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|DEFAULT=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SCOPE=&lt;br /&gt;
Configuration or Terminal&lt;br /&gt;
&lt;br /&gt;
In version 4.5.17 and later, the global (common shared) declaration can also be issued from library or task contexts. In those contexts all three parameters of PLS (axis name, system output and HWassistance flag) can be reassigned while reloading the declaring task or library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|LIMITATIONS=&lt;br /&gt;
Write only&lt;br /&gt;
&lt;br /&gt;
PLS high accuracy (HWAssistance) is limited to System.DOut from 1 to 8.&lt;br /&gt;
&lt;br /&gt;
HWAssistance requires Digital Logic Pentium III CPU with Altera version 8.7.1 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|EXAMPLE=&lt;br /&gt;
Common Shared Pls1 as PLS x_axis SYSTEM.Dout.4&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls2 as PLS x_axis SYS.Dout.8 HWAssistance = 1&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls3 as PLS x_axis SYS.Dout.3 HWAssistance = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SEE ALSO=&lt;br /&gt;
* CREATEPLSDATA&lt;br /&gt;
* DELETEPLS&lt;br /&gt;
* [[MC-Basic:PLSLIST|PLSLIST]]&lt;br /&gt;
* WITHPLS&lt;br /&gt;
* [[MC-Basic:pls.HWASSISTANCE|pls.HWASSISTANCE]]&lt;br /&gt;
* HWIOTIME&lt;br /&gt;
* PLSELEMENTNAME / [[MC-Basic:pls.PLSAXISNAME|pls.PLSAXISNAME]]&lt;br /&gt;
* PLSDELAYTIME&lt;br /&gt;
* [[MC-Basic:pls.PLSENABLE|pls.PLSENABLE]]&lt;br /&gt;
* [[MC-Basic:pls.PLSHYSTERESIS|pls.PLSHYSTERESIS]]&lt;br /&gt;
* [[MC-Basic:pls.PLSOUTPUT|pls.PLSOUTPUT]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOLARITY|pls.PLSPOLARITY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOSITION|pls.PLSPOSITION]]&lt;br /&gt;
* PLSPROPAGATIONDELAY&lt;br /&gt;
* PLSPROPAGATIONDISABLEDELAY&lt;br /&gt;
* PLSPROPAGATIONENABLEDELAY&lt;br /&gt;
* PLSRELATEDTO&lt;br /&gt;
* [[MC-Basic:pls.PLSREPEAT|pls.PLSREPEAT]]&lt;br /&gt;
* PLSSOURCE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MC-Basic:Declarations|COMMON SHARED ... AS PLS]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132922</id>
		<title>MC-Basic:COMMON SHARED ... AS PLS</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132922"/>
				<updated>2018-10-08T14:10:36Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
{{MC-Basic&lt;br /&gt;
&lt;br /&gt;
|DESCRIPTION=&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color: purple&amp;quot;&amp;gt;Updated 2018-10&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command declares a programmable limit switch (PLS) variable. &lt;br /&gt;
&lt;br /&gt;
The declaration specifies the name of the axis and the output associated with the PLS. &lt;br /&gt;
&lt;br /&gt;
The PLS output may be a digital output (SYSTEM.DOUT.x) or a virtual output (SYSTEM.VOUT.x).&lt;br /&gt;
&lt;br /&gt;
After this command is issued, the PLS exists but is disabled. The PLS property &amp;lt;pls&amp;gt;.PLSENABLE is used to enable the PLS.&lt;br /&gt;
&lt;br /&gt;
After PLS is declared, the following default PLS properties are in effect:&lt;br /&gt;
* The initial output polarity is 0.&lt;br /&gt;
* The repetition interval is 0.&lt;br /&gt;
* The hysteresis is 0.&lt;br /&gt;
* A single PLS position set as 0.&lt;br /&gt;
These properties can be set explicitly only when the PLS is disabled. &lt;br /&gt;
&lt;br /&gt;
|SYNTAX=&lt;br /&gt;
COMMON SHARED &amp;lt;''pls''&amp;gt; As Pls '&amp;lt;''axis name''&amp;gt; &amp;lt;''output''&amp;gt; {HWAssistance = 1/0 }&lt;br /&gt;
&lt;br /&gt;
|AVAILABILITY=&lt;br /&gt;
Version 4.1.11 and later&lt;br /&gt;
&lt;br /&gt;
|TYPE=&lt;br /&gt;
&amp;lt;''pls''&amp;gt;: string&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: string&lt;br /&gt;
&lt;br /&gt;
|RANGE=&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: a valid axis name&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''output''&amp;gt;: the name of a system output. System outputs are specified by&amp;lt;br&amp;gt;&lt;br /&gt;
::System.DOut.''x'', for digital outputs, or&amp;lt;br&amp;gt;&lt;br /&gt;
::System.VOut.''x'', for virtual outputs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HWAssistance&amp;gt;: 1 activates the PLS high accuracy mode&lt;br /&gt;
&lt;br /&gt;
The value ''x'' identifies the specific output to be used. It may be explicitly given or it may be an expression. The expression must evaluate to an integer ranging from 1 to 20 for digital outputs or from 1 to 32 for virtual outputs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|UNITS=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|DEFAULT=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SCOPE=&lt;br /&gt;
Configuration or Terminal&lt;br /&gt;
&lt;br /&gt;
In version 4.5.17 and later, the global (common shared) declaration can also be issued from library or task contexts. In those contexts all three parameters of PLS (axis name, system output and HWassistance flag) can be reassigned while reloading the declaring task or library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|LIMITATIONS=&lt;br /&gt;
Write only&lt;br /&gt;
&lt;br /&gt;
PLS high accuracy (HWAssistance) is limited to System.DOut from 1 to 8.&lt;br /&gt;
&lt;br /&gt;
HWAssistance requires Digital Logic Pentium III CPU with Altera version 8.7.1 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|EXAMPLE=&lt;br /&gt;
Common Shared Pls1 as PLS x_axis SYSTEM.Dout.4&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls2 as PLS x_axis SYS.Dout.8 HWAssistance = 1&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls3 as PLS x_axis SYS.Dout.3 HWAssistance = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SEE ALSO=&lt;br /&gt;
* CREATEPLSDATA&lt;br /&gt;
* DELETEPLS&lt;br /&gt;
* [[MC-Basic:PLSLIST|PLSLIST]]&lt;br /&gt;
* WITHPLS&lt;br /&gt;
* [[MC-Basic:pls.HWASSISTANCE|pls.HWASSISTANCE]]&lt;br /&gt;
* HWIOTIME&lt;br /&gt;
* PLSELEMENTNAME / [[MC-Basic:pls.PLSAXISNAME|pls.PLSAXISNAME]]&lt;br /&gt;
* PLSDELAYTIME&lt;br /&gt;
* [[MC-Basic:pls.PLSENABLE|pls.PLSENABLE]]&lt;br /&gt;
* [[MC-Basic:pls.PLSHYSTERESIS|pls.PLSHYSTERESIS]]&lt;br /&gt;
* [[MC-Basic:pls.PLSOUTPUT|pls.PLSOUTPUT]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOLARITY|pls.PLSPOLARITY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOSITION|pls.PLSPOSITION]]&lt;br /&gt;
* PLSPROPAGATIONDELAY&lt;br /&gt;
* PLSPROPAGATIONDISABLEDELAY&lt;br /&gt;
* PLSPROPAGATIONENABLEDELAY&lt;br /&gt;
* PLSRELATEDTO&lt;br /&gt;
* [[MC-Basic:pls.PLSREPEAT|pls.PLSREPEAT]]&lt;br /&gt;
* PLSSOURCE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MC-Basic:Declarations|COMMON SHARED ... AS PLS]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132921</id>
		<title>MC-Basic:COMMON SHARED ... AS PLS</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132921"/>
				<updated>2018-10-08T13:57:20Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
{{MC-Basic&lt;br /&gt;
&lt;br /&gt;
|DESCRIPTION=&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color: purple&amp;quot;&amp;gt;Updated 2018-10&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command declares a programmable limit switch (PLS) variable. &lt;br /&gt;
&lt;br /&gt;
The declaration specifies the name of the axis and the output associated with the PLS. &lt;br /&gt;
&lt;br /&gt;
The PLS output may be a digital output (SYSTEM.DOUT.x) or a virtual output (SYSTEM.VOUT.x).&lt;br /&gt;
&lt;br /&gt;
After this command is issued, the PLS exists but is disabled. The PLS property &amp;lt;pls&amp;gt;.PLSENABLE is used to enable the PLS.&lt;br /&gt;
&lt;br /&gt;
After PLS is declared, the following default PLS properties are in effect:&lt;br /&gt;
* The initial output polarity is 0.&lt;br /&gt;
* The repetition interval is 0.&lt;br /&gt;
* The hysteresis is 0.&lt;br /&gt;
* A single PLS position set as 0.&lt;br /&gt;
These properties can be set explicitly only when the PLS is disabled. &lt;br /&gt;
&lt;br /&gt;
|SYNTAX=&lt;br /&gt;
COMMON SHARED &amp;lt;''pls''&amp;gt; As Pls '&amp;lt;''axis name''&amp;gt; &amp;lt;''output''&amp;gt; {HWAssistance = 1/0 }&lt;br /&gt;
&lt;br /&gt;
|AVAILABILITY=&lt;br /&gt;
Version 4.1.11 and later&lt;br /&gt;
&lt;br /&gt;
|TYPE=&lt;br /&gt;
&amp;lt;''pls''&amp;gt;: string&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''axis name''&amp;gt;: string&lt;br /&gt;
&lt;br /&gt;
|RANGE=&lt;br /&gt;
&amp;lt;''axis''&amp;gt;: a valid axis name&amp;lt;br&amp;gt;&lt;br /&gt;
''&amp;lt;output&amp;gt;'': the name of a system output. System outputs are specified by&amp;lt;br&amp;gt;&lt;br /&gt;
::System.DOut.''x'', for digital outputs, or&amp;lt;br&amp;gt;&lt;br /&gt;
::System.VOut.''x'', for virtual outputs.&lt;br /&gt;
&lt;br /&gt;
The hardware assisted PLS works with System.DOut from 1 to 8&lt;br /&gt;
&lt;br /&gt;
''&amp;lt;HWAssistance&amp;gt;'': TRUE  - starts the hardware assisted PLS  mode&lt;br /&gt;
&lt;br /&gt;
FALSE&lt;br /&gt;
&lt;br /&gt;
The value ''x''identifies the specific output to be used. It may be explicitly given or it may be an expression. The expression must evaluate to an integer ranging from 1 to 20 for digital outputs or from 1 to 32 for virtual outputs.&lt;br /&gt;
&lt;br /&gt;
|UNITS=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|DEFAULT=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SCOPE=&lt;br /&gt;
Configuration or Terminal .&lt;br /&gt;
&lt;br /&gt;
Since Version 4.5.17 the global (common shared) declaration is also possible from the Library or Task contexts. In those contexts all three parameters of PLS (axis name, system output and HWassistance flag) can be reassigned during the reloading the declaring task or library.&lt;br /&gt;
&lt;br /&gt;
|LIMITATIONS=&lt;br /&gt;
Write only&lt;br /&gt;
&lt;br /&gt;
HWAssistance feature works for Digital Logic Pentium III CPU  with 8.7.1 Altera version  only !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|EXAMPLE=&lt;br /&gt;
Common Shared Pls1 as PLS x_axis SYSTEM.Dout.4&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls2 as PLS x_axis SYS.Dout.8 HWAssistance = TRUE&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls3 as PLS x_axis SYS.Dout.3 HWAssistance = FALSE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SEE ALSO=&lt;br /&gt;
* [[MC-Basic:pls.PLSAXISNAME|pls.PLSAXISNAME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSENABLE|pls.PLSENABLE]]&lt;br /&gt;
* [[MC-Basic:pls.PLSHYSTERESIS|pls.PLSHYSTERESIS]]&lt;br /&gt;
* [[MC-Basic:pls.PLSOUTPUT|pls.PLSOUTPUT]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOLARITY|pls.PLSPOLARITY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOSITION|pls.PLSPOSITION]]&lt;br /&gt;
* [[MC-Basic:pls.PLSREPEAT|pls.PLSREPEAT]]&lt;br /&gt;
* [[MC-Basic:PLSLIST|PLSLIST]]&lt;br /&gt;
* [[MC-Basic:pls.HWASSISTANCE|pls.HWASSISTANCE]]&lt;br /&gt;
&lt;br /&gt;
[[Category:MC-Basic:Declarations|COMMON SHARED ... AS PLS]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132920</id>
		<title>MC-Basic:COMMON SHARED ... AS PLS</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132920"/>
				<updated>2018-10-08T13:54:34Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
{{MC-Basic&lt;br /&gt;
&lt;br /&gt;
|DESCRIPTION=&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color: purple&amp;quot;&amp;gt;Updated 2018-10&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command declares a programmable limit switch (PLS) variable. &lt;br /&gt;
&lt;br /&gt;
The declaration specifies the name of the axis and the output associated with the PLS. &lt;br /&gt;
&lt;br /&gt;
The PLS output may be a digital output (SYSTEM.DOUT.x) or a virtual output (SYSTEM.VOUT.x).&lt;br /&gt;
&lt;br /&gt;
After this command is issued, the PLS exists but is disabled. The PLS property &amp;lt;pls&amp;gt;.PLSENABLE is used to enable the PLS.&lt;br /&gt;
&lt;br /&gt;
After PLS is declared, the following default PLS properties are in effect:&lt;br /&gt;
* The initial output polarity is 0.&lt;br /&gt;
* The repetition interval is 0.&lt;br /&gt;
* The hysteresis is 0.&lt;br /&gt;
* A single PLS position set as 0.&lt;br /&gt;
These properties can be set explicitly only when the PLS is disabled. &lt;br /&gt;
&lt;br /&gt;
|SYNTAX=&lt;br /&gt;
COMMON SHARED ''&amp;lt;pls&amp;gt;''As Pls ''&amp;lt;''axis''&amp;gt; &amp;lt;output&amp;gt; {HWAssistance = TRUE/FALSE }''&lt;br /&gt;
&lt;br /&gt;
|AVAILABILITY=&lt;br /&gt;
&lt;br /&gt;
HWAssistance: Since Version 4.1.11 / 4.2.16  firmware with 8.7.1 Altera version&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|TYPE=&lt;br /&gt;
''&amp;lt;pls&amp;gt;'':string&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''axis''&amp;gt;: string&lt;br /&gt;
&lt;br /&gt;
|RANGE=&lt;br /&gt;
&amp;lt;''axis''&amp;gt;: a valid axis name&amp;lt;br&amp;gt;&lt;br /&gt;
''&amp;lt;output&amp;gt;'': the name of a system output. System outputs are specified by&amp;lt;br&amp;gt;&lt;br /&gt;
::System.DOut.''x'', for digital outputs, or&amp;lt;br&amp;gt;&lt;br /&gt;
::System.VOut.''x'', for virtual outputs.&lt;br /&gt;
&lt;br /&gt;
The hardware assisted PLS works with System.DOut from 1 to 8&lt;br /&gt;
&lt;br /&gt;
''&amp;lt;HWAssistance&amp;gt;'': TRUE  - starts the hardware assisted PLS  mode&lt;br /&gt;
&lt;br /&gt;
FALSE&lt;br /&gt;
&lt;br /&gt;
The value ''x''identifies the specific output to be used. It may be explicitly given or it may be an expression. The expression must evaluate to an integer ranging from 1 to 20 for digital outputs or from 1 to 32 for virtual outputs.&lt;br /&gt;
&lt;br /&gt;
|UNITS=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|DEFAULT=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SCOPE=&lt;br /&gt;
Configuration or Terminal .&lt;br /&gt;
&lt;br /&gt;
Since Version 4.5.17 the global (common shared) declaration is also possible from the Library or Task contexts. In those contexts all three parameters of PLS (axis name, system output and HWassistance flag) can be reassigned during the reloading the declaring task or library.&lt;br /&gt;
&lt;br /&gt;
|LIMITATIONS=&lt;br /&gt;
Write only&lt;br /&gt;
&lt;br /&gt;
HWAssistance feature works for Digital Logic Pentium III CPU  with 8.7.1 Altera version  only !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|EXAMPLE=&lt;br /&gt;
Common Shared Pls1 as PLS x_axis SYSTEM.Dout.4&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls2 as PLS x_axis SYS.Dout.8 HWAssistance = TRUE&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls3 as PLS x_axis SYS.Dout.3 HWAssistance = FALSE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SEE ALSO=&lt;br /&gt;
* [[MC-Basic:pls.PLSAXISNAME|pls.PLSAXISNAME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSENABLE|pls.PLSENABLE]]&lt;br /&gt;
* [[MC-Basic:pls.PLSHYSTERESIS|pls.PLSHYSTERESIS]]&lt;br /&gt;
* [[MC-Basic:pls.PLSOUTPUT|pls.PLSOUTPUT]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOLARITY|pls.PLSPOLARITY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOSITION|pls.PLSPOSITION]]&lt;br /&gt;
* [[MC-Basic:pls.PLSREPEAT|pls.PLSREPEAT]]&lt;br /&gt;
* [[MC-Basic:PLSLIST|PLSLIST]]&lt;br /&gt;
* [[MC-Basic:pls.HWASSISTANCE|pls.HWASSISTANCE]]&lt;br /&gt;
&lt;br /&gt;
[[Category:MC-Basic:Declarations|COMMON SHARED ... AS PLS]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132919</id>
		<title>MC-Basic:COMMON SHARED ... AS PLS</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=MC-Basic:COMMON_SHARED_..._AS_PLS&amp;diff=132919"/>
				<updated>2018-10-08T13:51:08Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
{{MC-Basic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|DESCRIPTION=&lt;br /&gt;
This command declares a programmable limit switch (PLS) variable. In the declaration, the name of the axis and the output associated with the PLS are specified. The PLS output pattern is generated for the position of that axis. The output associated with a PLS may be a digital output (specified using SYSTEM.DOUT.''x'') or a virtual output (specified using SYSTEM.VOUT.''x'').&lt;br /&gt;
&lt;br /&gt;
After this command is processed, the following default PLS properties are in effect:&lt;br /&gt;
*The initial output polarity is 1.&amp;lt;br&amp;gt;&lt;br /&gt;
*The repetition interval is set to 0.&amp;lt;br&amp;gt;&lt;br /&gt;
*The hysteresis is set to 0.&amp;lt;br&amp;gt;&lt;br /&gt;
*A single PLS position exists at 0&lt;br /&gt;
&lt;br /&gt;
The hardware assisted PLS is proposed in order to overcome a limitation of scan time. Having current position, speed and acceleration software can predict (extrapolate) exact time when axis will reach desired position. The output operation must be performed at the extrapolated point of time.&lt;br /&gt;
&lt;br /&gt;
These properties may be set explicitly when the PLS is disabled. The PLS exists, but is disabled after it is declared. The PLS property &amp;lt;''pls''&amp;gt;.PLSENABLE is used to enable the PLS.\&lt;br /&gt;
&lt;br /&gt;
|SYNTAX=&lt;br /&gt;
COMMON SHARED ''&amp;lt;pls&amp;gt;''As Pls ''&amp;lt;''axis''&amp;gt; &amp;lt;output&amp;gt; {HWAssistance = TRUE/FALSE }''&lt;br /&gt;
&lt;br /&gt;
|AVAILABILITY=&lt;br /&gt;
&lt;br /&gt;
HWAssistance: Since Version 4.1.11 / 4.2.16  firmware with 8.7.1 Altera version&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|TYPE=&lt;br /&gt;
''&amp;lt;pls&amp;gt;'':string&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;''axis''&amp;gt;: string&lt;br /&gt;
&lt;br /&gt;
|RANGE=&lt;br /&gt;
&amp;lt;''axis''&amp;gt;: a valid axis name&amp;lt;br&amp;gt;&lt;br /&gt;
''&amp;lt;output&amp;gt;'': the name of a system output. System outputs are specified by&amp;lt;br&amp;gt;&lt;br /&gt;
::System.DOut.''x'', for digital outputs, or&amp;lt;br&amp;gt;&lt;br /&gt;
::System.VOut.''x'', for virtual outputs.&lt;br /&gt;
&lt;br /&gt;
The hardware assisted PLS works with System.DOut from 1 to 8&lt;br /&gt;
&lt;br /&gt;
''&amp;lt;HWAssistance&amp;gt;'': TRUE  - starts the hardware assisted PLS  mode&lt;br /&gt;
&lt;br /&gt;
FALSE&lt;br /&gt;
&lt;br /&gt;
The value ''x''identifies the specific output to be used. It may be explicitly given or it may be an expression. The expression must evaluate to an integer ranging from 1 to 20 for digital outputs or from 1 to 32 for virtual outputs.&lt;br /&gt;
&lt;br /&gt;
|UNITS=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|DEFAULT=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SCOPE=&lt;br /&gt;
Configuration or Terminal .&lt;br /&gt;
&lt;br /&gt;
Since Version 4.5.17 the global (common shared) declaration is also possible from the Library or Task contexts. In those contexts all three parameters of PLS (axis name, system output and HWassistance flag) can be reassigned during the reloading the declaring task or library.&lt;br /&gt;
&lt;br /&gt;
|LIMITATIONS=&lt;br /&gt;
Write only&lt;br /&gt;
&lt;br /&gt;
HWAssistance feature works for Digital Logic Pentium III CPU  with 8.7.1 Altera version  only !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|EXAMPLE=&lt;br /&gt;
Common Shared Pls1 as PLS x_axis SYSTEM.Dout.4&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls2 as PLS x_axis SYS.Dout.8 HWAssistance = TRUE&lt;br /&gt;
&lt;br /&gt;
Common Shared Pls3 as PLS x_axis SYS.Dout.3 HWAssistance = FALSE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|SEE ALSO=&lt;br /&gt;
* [[MC-Basic:pls.PLSAXISNAME|pls.PLSAXISNAME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSENABLE|pls.PLSENABLE]]&lt;br /&gt;
* [[MC-Basic:pls.PLSHYSTERESIS|pls.PLSHYSTERESIS]]&lt;br /&gt;
* [[MC-Basic:pls.PLSOUTPUT|pls.PLSOUTPUT]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOLARITY|pls.PLSPOLARITY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOSITION|pls.PLSPOSITION]]&lt;br /&gt;
* [[MC-Basic:pls.PLSREPEAT|pls.PLSREPEAT]]&lt;br /&gt;
* [[MC-Basic:PLSLIST|PLSLIST]]&lt;br /&gt;
* [[MC-Basic:pls.HWASSISTANCE|pls.HWASSISTANCE]]&lt;br /&gt;
&lt;br /&gt;
[[Category:MC-Basic:Declarations|COMMON SHARED ... AS PLS]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=AXY:path-PLS&amp;diff=132918</id>
		<title>AXY:path-PLS</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=AXY:path-PLS&amp;diff=132918"/>
				<updated>2018-10-08T09:28:16Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;'''Replaced by NEW PLS article - INSERT LINK'''&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;BackToTop&amp;quot;  class=&amp;quot;noprint&amp;quot; style=&amp;quot;background-color:; position:fixed; bottom:32px; left:95%; z-index:9999; padding:0; margin:0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue; font-size:8pt; font-face:verdana,sans-serif; border:0.2em outset:#ceebf7; padding:0.1em; font-weight:bolder; -moz-border-radius:8px; &amp;quot;&amp;gt;&lt;br /&gt;
[[Image:TOP2.png|50px|link=#top]] &amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
The path-PLS is associated with the motion nodally. Thus, instead of enabling/disabling using the command '''PLSEnable''', the PLS will be automatically enabled at motion start and disabled at motion end. The motion path distance from the motion start, along the motion path, is the '''PLSsource''' variable of the PLS. Depending on the various interpolation modes, different '''PLSsource''' variables can be used:&lt;br /&gt;
&lt;br /&gt;
* Path length in position user units (e.g., mm) In case of straight line (MOVES) motion it is just a distance for the starting position. In case of joint interpolated motion (MOVE) there is no physical meaning of such a distance and in circular interpolation, we can choose between arc length and the angle from the starting point.&lt;br /&gt;
* Percentage of the motion path from the start. This variable has the advantage that it is universal , means that it can be used in all motion types. However it has no physical meaning. Percentage can be very useful in motions having dominant orientation part.&lt;br /&gt;
* Time elapsed from the motion start. This can be useful in certain application but can be applicable in time-based profiles only (PrfType = 2).&lt;br /&gt;
* X,Y,Z coordinate. This is somehow a combination of path length and the percentage of the path, it has an advantage that it is a comfortable way of implementing application constrains. Also it can be applied to any type of motion interpolation. However, using it can cause multiple triggering of a same PLS position during one movement.&amp;lt;br/&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;{{Note|}}&lt;br /&gt;
::*All properties and behaviors of the path-PLS are identical to the regular PLS except when it is explicitly noted.&lt;br /&gt;
&lt;br /&gt;
::*Contrary to the one-dimensional PLS, the path-PLS can be triggered using command values only. There are no feedback path-PLS sources.&lt;br /&gt;
&lt;br /&gt;
::*Due to the complex nature of advanced interpolation path forms, the path-PLS is not applicable to these interpolation types.&lt;br /&gt;
&lt;br /&gt;
::*The user must set the PLS output to the initial state. From then on, when the PLS is enabled, it will toggle the output. Disabling PLS does not affect the state of the digital output in any way.&lt;br /&gt;
&lt;br /&gt;
= Implementation =&lt;br /&gt;
&lt;br /&gt;
Path-PLSs can be defined in the same way as one-dimensional PLS.  Contrary to the one-dimensional PLSs the path-PLS can be activated only when explicitly given in a movement statement. Some of [[MC-Basic:element.PLSSOURCE|Axis.PLSSource]] are especially to the path-PLS.&lt;br /&gt;
&lt;br /&gt;
== PLS Properties and Commands ==&lt;br /&gt;
&lt;br /&gt;
[[MC-Basic:COMMON SHARED ... AS PLS| Common Shared &amp;lt;pls&amp;gt; as PLS {&amp;lt;element&amp;gt;} &amp;lt;io&amp;gt; {Hwassistance = on/off} ]]&lt;br /&gt;
&lt;br /&gt;
Command for PLS language object definition. Can get an element as robots or groups. Joint-based or non-robot based PLSs are not allowed. Path-PLSs are PLSs defined on elements that are robots and not axes.&lt;br /&gt;
&lt;br /&gt;
[[MC-Basic:pls.PLSENABLE|PLSENABLE]]&lt;br /&gt;
&lt;br /&gt;
Enabling of path-PLS is done through nodal assignment only. Thus, setting this variable will return an error except when PLSsource = XCOO/YCOO/ZCOO. Querying this value will return the current state of a path-PLS depending on the movement being executed.&lt;br /&gt;
&lt;br /&gt;
[[MC-Basic:pls.PLSREPEAT|PLSREPEAT]]&lt;br /&gt;
&lt;br /&gt;
Behaves the same as the regular PLS, but works on the selected '''PLSsource''' instead of the axis position.&lt;br /&gt;
&lt;br /&gt;
[[MC-Basic:pls.PLSRELATEDTO|PLSRELATEDO]]&lt;br /&gt;
&lt;br /&gt;
Flag used by '''oriented''' PLS-sources to define whether the PLSposition[*] is computed relative to the start(0) or to the target(1). For example, in '''PathLength''' it indicates whether the length is measured from the start or from the end of the motion. Default value is 0. If nothing is specified, all path-specific variables will be computed from the start.&lt;br /&gt;
&lt;br /&gt;
[[MC-Basic:element.PLSSOURCE|PLSSOURCE]] &amp;lt;br/&amp;gt;&lt;br /&gt;
The following table summarizes the types of '''PLSSource'''.&lt;br /&gt;
{|border=&amp;quot;1px&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
| '''Source Name'''&lt;br /&gt;
| '''One-dimensional&amp;lt;br&amp;gt; PLS'''&lt;br /&gt;
| '''Path-PLS'''&lt;br /&gt;
| '''Description'''&lt;br /&gt;
| '''During&amp;lt;br&amp;gt;Blending'''&lt;br /&gt;
| '''Related to&amp;lt;br&amp;gt;Start/Target'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| POSITIONCOMMAND&lt;br /&gt;
| ✓ &lt;br /&gt;
| no&lt;br /&gt;
| Axis position command &lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot;|Coordinate&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot;|No&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| POSITIONFEEDBACK &lt;br /&gt;
| ✓ &lt;br /&gt;
| no&lt;br /&gt;
| Axis position feedback&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| POSITIONEXTERNAL &lt;br /&gt;
| ✓ &lt;br /&gt;
| no&lt;br /&gt;
| External position &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Setpoint1&lt;br /&gt;
| no&lt;br /&gt;
| ✓ &lt;br /&gt;
| X axis position (SetPoint{1} value). &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Setpoint2&lt;br /&gt;
| no&lt;br /&gt;
| ✓ &lt;br /&gt;
| Y axis position (SetPoint{2} value).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Setpoint3&lt;br /&gt;
| no&lt;br /&gt;
| ✓ &lt;br /&gt;
| Z axis position (SetPoint{3} value).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| PathLength&lt;br /&gt;
| ✓ &lt;br /&gt;
| ✓ &lt;br /&gt;
| Length of the path in user units.&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot;  | Single&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot;  | Yes&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| PathPercentage&lt;br /&gt;
| ✓ &lt;br /&gt;
| ✓ &lt;br /&gt;
| Percentage of the path.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| PathTime&lt;br /&gt;
| ✓ &lt;br /&gt;
| ✓ &lt;br /&gt;
| Time duration in ms.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[MC-Basic:WITHPLS|WITHPLS]]&lt;br /&gt;
&lt;br /&gt;
Nodal assignment of path-PLS used for enabling path-PLS during motion. The WithPLS command specifies the PLSs that will be enabled during execution of the given motion and disabled when the motion ends. &lt;br /&gt;
&lt;br /&gt;
===== Related Properties and Commands =====  &lt;br /&gt;
*[[MC-Basic:pls.PLSENABLE|PLSENABLE]] &lt;br /&gt;
*[[MC-Basic:pls.PLSREPEAT|PLSREPEAT]] &lt;br /&gt;
*[[MC-Basic:pls.HWASSISTANCE|HWASSISTANCE]] &lt;br /&gt;
*[[MC-Basic:pls.PLSHYSTERESIS|PLSHYSTERESIS]] &lt;br /&gt;
*[[MC-Basic:pls.PLSAXISNAME|PLSAXISNAME]] &lt;br /&gt;
*[[MC-Basic:pls.PLSEMENTNAME|PLSELEMENTNAME]] &lt;br /&gt;
*[[MC-Basic:pls.PLSPropagationEnableDelay|PLSPropagationEnableDelay]] &lt;br /&gt;
*[[MC-Basic:pls.PLSPropagationDisableDelay|PLSPropagationDisableDelay]]&lt;br /&gt;
*[[MC-Basic:pls.PLSPropagationDelay|PLSPropagationDelay]] &lt;br /&gt;
*[[AXY:PLS On/Off delay| PLS On/Off delay]] &lt;br /&gt;
*[[MC-Basic:pls.HWIOtime|HWIOtime]]&lt;br /&gt;
*[[MC-Basic:pls.PLSOUTPUT|PLSOUTPUT]]&lt;br /&gt;
*[[MC-Basic:pls.PLSPOLARITY|PLSPOLARITY]]&lt;br /&gt;
*[[MC-Basic:pls.PLSPOSITION|PLSPOSITION]]&lt;br /&gt;
*[[MC-Basic:pls.PLSdelaytime|PLSdelaytime]]&lt;br /&gt;
*[[MC-Basic:CREATEPLSDATA|CREATEPLSDATA]]&lt;br /&gt;
*[[MC-Basic:DELETEPLS|DELETEPLS]]&lt;br /&gt;
*[[MC-Basic:PLSLIST|PLSLIST]]&lt;br /&gt;
&lt;br /&gt;
== Path Percentage and Path Length ==&lt;br /&gt;
&lt;br /&gt;
PLSsource can be '''PATHPERCENTAGE''' and '''PATHLENGTH'''. These are special types of position sources, both discontinuous variables that changes their values abruptly at the point where two movements are executed one after another. &lt;br /&gt;
&lt;br /&gt;
Example: '''PATHPERCENTAGE'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MOVE A  PLSSOURCE 0→100&lt;br /&gt;
MOVE B  PLSSOURCE 0→100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
At point A the source changes its value from 100 to 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Example:  '''PATHLENGTH''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MOVE A  PLSSOURCE 0 → L1&lt;br /&gt;
MOVE B  PLSSOURCE 0 → L2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
At point A the source changes its value from L&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;  to 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
During joint-interpolated (MOVE) movements '''PathLength''' is not relevant since the physical dimensions of such a variable are non-existent. However, the option of using '''PathPercentage''' remains. For '''PathLength''' descriptor, if the units are not homogenous, the value in aggregate units is used. For CIRCLE interpolation this will be the angle on the circle-arc from the starting point.&lt;br /&gt;
&lt;br /&gt;
For''' PathPercentage''' all values of '''PlsPosition[]''', '''PlsHysteresis''' and '''PlsRepetition''' are in percentage units on a scale of 0 to 100. All values that are negative or above 100, are used as 0 or 100.&lt;br /&gt;
&lt;br /&gt;
Every local '''PLSSource''' can cause a change in I/O state at the start of the movement depending on the '''PLSPolarity''' definition (see [[MC-Basic:pls.PLSPOLARITY|PLSPOLARITY]]). The I/O will appear at the first sample of the movement without time delay, meaning that '''PlsDelayTime[0]''' or '''HWIOtime[0]''' will be equal to 0.&lt;br /&gt;
&lt;br /&gt;
{{Note | In an instance of two movements in which the first ends with '''VFinal &amp;gt; 0''', there will be no setting to '''!PLSPolarity''' at the start of the followed movement. The next toggling is done at the first PLS position of the second movement (see Example 7 below).}}&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PathTime  ==&lt;br /&gt;
&lt;br /&gt;
The time-based source is applicable in time-based profiles only [[MC-Basic:element.PROFILERTYPE|prftype=2]], else an error is returned.&lt;br /&gt;
&lt;br /&gt;
{{Note | There are two categories of PLS-sources '''coordinate''' and '''single'''. The only difference is observable during blending. The coordinate PLS-sources trigger the PLS output once per PLS-condition independently how many individual motions caused it. The single PLS-source trigger the PLS output as many times as the number of movements involved in the blended motion (could be maximally 2) }}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Note | In case of  '''PLSsource''' from type length, percentage or time there is no continues in toggling no matter if the PLS was global enabled using '''PLSEnable''' or local using '''WithPLS'''. }}&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Setpoint1, Setpoint2, Setpoint3 ==&lt;br /&gt;
SetPoint sources are the virtual Cartesian axes, defined in the robot world frame (i.e., setpoint). Not relevant for Group without a defined kinematics. Those sources can be tracked independently at a specific movement (using ''' PLSEnable ''').&lt;br /&gt;
&lt;br /&gt;
During '''Conveyor Tracking''', values of '''Setpoint1, Setpoint2, Setpoint3''' will assume values on absolute robot coordinates (i.e., '''setpoint, here''') and not robot frame coordinates moving with the robot.&lt;br /&gt;
&lt;br /&gt;
During joint-interpolated (MOVE) movements, values of  '''Setpoint1, Setpoint2, Setpoint3''' will be linearly interpolated between the samples. Therefore, depending on the sample rate and velocity, an interpolation error may occur.&lt;br /&gt;
&lt;br /&gt;
== PLS Tracking During Proceed Command ==&lt;br /&gt;
PLSSource can be defined as global or local, and as absolute or relative.  &lt;br /&gt;
* '''Absolute''' - PLSSources that are positions in the spcase - PCMD , PFB, SetPoint1, SetPoint2 and SetPoint3.&lt;br /&gt;
* '''Relative''' - PLSSources that depend on the current movement as PLSLength, PLSPercentage and PLSTime.&lt;br /&gt;
* '''Global''' - PLSSources that are operated by the command '''PLSEnable'''.&lt;br /&gt;
* '''Local'''  - PLSSources that are connected to a specific movement, meaning they are operated by the command '''WithPLS'''.&lt;br /&gt;
&lt;br /&gt;
The following table shows how the PLS will be tracked during proceed command:&lt;br /&gt;
{|border=&amp;quot;1px&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
| '''PLSSource '''&lt;br /&gt;
| '''Absolute'''&lt;br /&gt;
| '''Relative'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| '''Global'''&lt;br /&gt;
| Tracking &lt;br /&gt;
| Track will start from first PLS position at the buffer.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| '''Local'''&lt;br /&gt;
| Tracking&lt;br /&gt;
| No tracking as the original path is no longer relevant.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Notes  ==&lt;br /&gt;
&lt;br /&gt;
{{Note | Path-PLS feature is not applicable for JOG, DELAY , PASS and DOPASS commands. An error will be returned.}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Note | Stop command disables all PLSs given in the currently executing motion.}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Refer to: [[PLS Timing Issues]]&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
&lt;br /&gt;
== Example 1 ==&lt;br /&gt;
&lt;br /&gt;
Using length of the path (distance from starting point) for the position source. Note the default value of PLSRelateTo is zero, therefore all given PLSposition values are computed from the motion start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
common shared GXY as group of axnm = A1 axnm = A2 of XY&lt;br /&gt;
common shared P1 as pls GXY Sys.Dout.1&lt;br /&gt;
common shared P2 as pls GXY Sys.Dout.2&lt;br /&gt;
common shared P3 as pls GXY Sys.Dout.3&lt;br /&gt;
CreatePLSdata 2 P1  &lt;br /&gt;
CreatePLSdata 2 P2 &lt;br /&gt;
CreatePLSdata 2 P3 &lt;br /&gt;
&lt;br /&gt;
P1.plsposition[1] = 10&lt;br /&gt;
P1.plsposition[2] = 90&lt;br /&gt;
P2.plsposition[1] = 10&lt;br /&gt;
P2.plsposition[2] = 90&lt;br /&gt;
P3.plsposition[1] = 10&lt;br /&gt;
P3.plsposition[2] = 90&lt;br /&gt;
&lt;br /&gt;
GXY.PLSsource = PathLength &lt;br /&gt;
GXY.en = 1&lt;br /&gt;
MOVES {100,0} WithPLS = P1&lt;br /&gt;
MOVES {0,100} WithPLS = P2&lt;br /&gt;
MOVES {0,0}   WithPLS = P3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Axystems;Path-pls-example1.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Example 2 ==&lt;br /&gt;
&lt;br /&gt;
Using Cartesian axis limits for position source (Setpoint1).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;common shared GXY as group of axnm &amp;lt;nowiki&amp;gt;= A1 axnm = A2 of XY&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
common shared P1 as pls GXY Sys.Dout.1&lt;br /&gt;
CreatePLSdata P1 2 &lt;br /&gt;
&amp;lt;nowiki&amp;gt;P1.plsposition[1] = 10&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;P1.plsposition[2] = 100&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
GXY.PLSsource = Setpoint1&lt;br /&gt;
GXY.en = 1&lt;br /&gt;
MOVES {0,0} &lt;br /&gt;
MOVES {200,200} WithPLS = P1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=400px heights=400px&amp;gt; Image:Axystems;Path-pls-example2.png | DOUT 1 is triggered when the path passes value X = 10 and X = 100 &amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example 3 ==&lt;br /&gt;
&lt;br /&gt;
Using path percentages to switch on/off an output during the motion. Two PL-positions are defined: one at 0% (motion start) and one at motion end (100%). Practically, this means the output will be ON during execution of the entire motion and will be switched OFF at the motion end. The default value of PLSRelatedTo determines that the percentage is calculated from the motion start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
common shared GXY as group of axnm &amp;lt;nowiki&amp;gt;= A1 axnm = A2 of XY&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
common shared P1 as pls GXY Sys.Dout.1&lt;br /&gt;
CreatePLSdata P1 2 &lt;br /&gt;
&amp;lt;nowiki&amp;gt;P1.plsposition[1] = 0&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;P1.plsposition[2] = 100&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
GXY.PLSsource = PathPercentage &lt;br /&gt;
GXY.en = 1&lt;br /&gt;
MOVES {0,0} &lt;br /&gt;
MOVES {200,200} WithPLS = P1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Axystems;Path-pls-example3.png]]&lt;br /&gt;
&lt;br /&gt;
== Example 4  ==&lt;br /&gt;
&lt;br /&gt;
Switching between two movements ('''not blended'''). If two motions with the same PLS are executed one after another, the PLS will be switched OFF within duration of one sample where the path-percentage changes from 100% (first motion) to 0% (second motion). The PLS remains enabled throughout the execution of the motion.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;common shared GXY as group of axnm &amp;lt;nowiki&amp;gt;= A1 axnm = A2 of XY&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
common shared P1 as pls GXY Sys.Dout.1&lt;br /&gt;
CreatePLSdata P1 2 &lt;br /&gt;
&amp;lt;nowiki&amp;gt;P1.plsposition[1] = 0&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;P1.plsposition[2] = 100&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
GXY.PLSsource = PathPercentage &lt;br /&gt;
GXY.en = 1&lt;br /&gt;
MOVES {0,0} &lt;br /&gt;
MOVES {200,200} WithPLS = P1&lt;br /&gt;
MOVES {300,300} WithPLS = P1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=460px heights=400px&amp;gt;&lt;br /&gt;
Image:Axystems;Path-pls-example4_1.png|At start of the first motion the output is switched ON, at its end it is switched off. Immediately after it the first sample of the second motion will switch the output back on and the output will be ON all the time until the second motion ends.&lt;br /&gt;
Image:Axystems;Path-pls-example4_2.png|At the last sample of the first motion the output is switched off. And at the first sample of the second motion the output is switched on again.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example 5 ==&lt;br /&gt;
Switching between two '''blended''' movements.&lt;br /&gt;
&lt;br /&gt;
The example shows the system behavior when the PLS-Source is of '''single''' type.&lt;br /&gt;
During actual blending (time when two motions are executed simultaneously) the system considers two independent variables passing the given PLS values (simultaneously).&lt;br /&gt;
&lt;br /&gt;
* path length (or a percentage of it) of the '''first''' motion is checked if passing the PLSpositions&lt;br /&gt;
* path length (or a percentage of it) of the '''second''' motion is checked if passing the PLSpositions&lt;br /&gt;
&lt;br /&gt;
Thus, if two motions with the same PLS (having pos. on 0%,100%) are blended, the PLS output will be switched OFF during the &amp;quot;double movement&amp;quot; phase (when both motions are superposed/blended).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;common shared GXY as group of axnm &amp;lt;nowiki&amp;gt;= A1 axnm = A2 of XY&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
common shared P1 as pls GXY Sys.Dout.1&lt;br /&gt;
CreatePLSdata P1 2 &lt;br /&gt;
&amp;lt;nowiki&amp;gt;P1.plsposition[1] = 0&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;P1.plsposition[2] = 100&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
GXY.PLSsource = PathPercentage&lt;br /&gt;
GXY.BlendingMwthod = 2&lt;br /&gt;
GXY.BlendignFactor = 90&lt;br /&gt;
GXY.en = 1&lt;br /&gt;
MOVES {0,0} &lt;br /&gt;
MOVES {200,200} WithPLS = P1&lt;br /&gt;
MOVES {300,300} WithPLS = P1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths = 400px heights = 400px&amp;gt;&lt;br /&gt;
Image:Axystems;Path-pls-example5_1.png| Output is switched off (toggled) at the beginning of the second motion (before the first is finished) and toggled back on by the end of the first motion.&lt;br /&gt;
Image:Axystems;Path-pls-example5_2.png| AT the beginning of the double-motion phase thee PLS triggered by the beginning of the second movement is switching the output OFF. The end of the first motion that coincident with the double-motion end switches the output back ON (toggle).&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example 6 ==&lt;br /&gt;
&lt;br /&gt;
Switching the PLS on same distance from beginning and the end of the motion.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
common shared GXY as group of axnm = A1 axnm = A2 of XY&lt;br /&gt;
common shared P1 as pls GXY Sys.Dout.1&lt;br /&gt;
common shared P2 as pls GXY Sys.Dout.2&lt;br /&gt;
common shared P3 as pls GXY Sys.Dout.3&lt;br /&gt;
CreatePLSdata P1 2 &lt;br /&gt;
CreatePLSdata P2 2&lt;br /&gt;
CreatePLSdata P3 2&lt;br /&gt;
&lt;br /&gt;
P1.plsposition[1] = 10&lt;br /&gt;
P1.plsposition[2] = 70&lt;br /&gt;
P1.plsRelatedTo   = 0&lt;br /&gt;
&lt;br /&gt;
P2.plsposition[1] = 10&lt;br /&gt;
P2.plsposition[2] = 70&lt;br /&gt;
P2.plsRelatedTo   = 1&lt;br /&gt;
&lt;br /&gt;
P3.plsposition[1] = 10&lt;br /&gt;
P3.plsposition[2] = 70&lt;br /&gt;
P3.plsRelatedTo   = 0&lt;br /&gt;
&lt;br /&gt;
GXY.PLSsource = PathLength &lt;br /&gt;
GXY.en = 1&lt;br /&gt;
MOVES {100,0} WithPLS = P1&lt;br /&gt;
MOVES {0,100} WithPLS = P2&lt;br /&gt;
MOVES {0,0}   WithPLS = P3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths = 400px heights = 300px&amp;gt;&lt;br /&gt;
File:Path pls example6 2.PNG| Switching the output 10mm or 70mm after start point or before target depends on plsRelatedTo definition.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example 7 ==&lt;br /&gt;
Shows the difference in serial movement once that are blend with '''Vfinal'''&amp;gt;0 . In both cases the '''PLSsource''' is from type percentage.&lt;br /&gt;
&lt;br /&gt;
'''Serial movements with VFinal &amp;gt; 0'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 common shared pathpls as pls GXY sys.DOut.1 HWAssistance =  TRUE&lt;br /&gt;
&lt;br /&gt;
 createplsdata 1 pathpls &lt;br /&gt;
 pathpls.plsposition[1] = 100&lt;br /&gt;
 pathpls.plspropagationdelay = 0&lt;br /&gt;
 pathpls.plspolarity  = 0&lt;br /&gt;
 plssource = pathpercentage&lt;br /&gt;
&lt;br /&gt;
 sys.DOut.1 = 0&lt;br /&gt;
 move {100,100} vcruise = 100 vfinal = 100&lt;br /&gt;
 move {100,0} vcruise = 100   vfinal = 100 withpls = pathpls&lt;br /&gt;
 circle angle = -90 circlecenter = {0,0}   vcruise = 100 withpls = pathpls&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Axystems;Pls with vfinal.png|caption|600px]]&lt;br /&gt;
Shows axes pcmd , IO (X20) and PLSEnable(X40)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Serial movements with VFinal = 0'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 common shared pathpls as pls GXY sys.DOut.1 HWAssistance =  TRUE&lt;br /&gt;
&lt;br /&gt;
 createplsdata 1 pathpls &lt;br /&gt;
 pathpls.plsposition[1] = 100&lt;br /&gt;
 pathpls.plspropagationdelay = 0&lt;br /&gt;
 pathpls.plspolarity  = 0&lt;br /&gt;
 plssource = pathpercentage&lt;br /&gt;
&lt;br /&gt;
 sys.DOut.1 = 0&lt;br /&gt;
 move {100,100} vcruise = 100 &lt;br /&gt;
 move {100,0} vcruise = 100    withpls = pathpls&lt;br /&gt;
 circle angle = -90 circlecenter = {0,0}   vcruise = 100 withpls = pathpls&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Axystems;Pls with vfinal zero.png|caption|600px]]&lt;br /&gt;
Shows axes pcmd , IO (X20) and PLSEnable(X40)&lt;br /&gt;
&lt;br /&gt;
See Also: [[Concatenation of Movements| ConcatenationOfMovements]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Motion Control]]&lt;br /&gt;
&amp;lt;!-- [[Category:Motion:PLS]] --&amp;gt;&lt;br /&gt;
&amp;lt;!-- [[Category:Motion:HW-PLS]] --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- @@@@@@@@@@@@@  REMOVED&lt;br /&gt;
 After implementing HW assisted PLS new demand came from the application field. The multidimensional PLS. This means switching an output on certain points of a 2 dimensional path (or 3 dimensional). In typical application an XY curve (circle, line or similar) is inscribed on the XY plane where the laser is switched ON/OFF at certain positions. &lt;br /&gt;
&lt;br /&gt;
The first idea was to implement it analogous to the one-dimensional case so instead of one-dimensional PLS positions we would have PLS multi-dimensional points. This idea was rejected as certain problems raised, problems of detecting when the path enters and when it leaves the point (epsilon sphere) and what is the order of triggering if a list of PLS positions (points) are given. The bottom line is that contrary to the one-dimensional axis PLS, the multidimensional PLS can be entered/exit in many different ways.&lt;br /&gt;
&lt;br /&gt;
Keeping the basic mechanism of PLS, to avoid confusing end-users with a totally new syntax and terminology. The original requirement linked some point in space to a PLS action. There is the disadvantage of non-existing relation between a motion and the PLS. If the path is changed and does not pass through an epsilon environment of the multi-dimensional PLS position, the PLS will not fire anymore and the application logic is totally confusing.&lt;br /&gt;
&lt;br /&gt;
PLSs are linked to motion by a nodal motion parameter which activates the PLS for a certain motion (enabling it nodally for the relevant motion only).&lt;br /&gt;
* PLSs linked to a path must be predefined with:&lt;br /&gt;
* PLS output&lt;br /&gt;
* PLS positions&lt;br /&gt;
* PLS motion element type (group instead of axis)&lt;br /&gt;
* For each segment of a motion a different PLS can be used (e.g. in first segment switch on laser at starting point, last segment switch off at end point).&lt;br /&gt;
* PLS positions have a different meaning &lt;br /&gt;
* Positions cannot be absolute anymore, but must be relative to the motion segment.&lt;br /&gt;
* Units are not easy to decide: &lt;br /&gt;
* Percentage&lt;br /&gt;
* Differs from the axis PLS&lt;br /&gt;
* Easy to be handled in motion&lt;br /&gt;
* Ease of use for the end-user depends on ability to calculate offsets to start or end ratio-wise&lt;br /&gt;
* User units&lt;br /&gt;
* Same as axis PLS&lt;br /&gt;
* Doable in motion&lt;br /&gt;
* Hard to handle for the end-user, if the motion is curved (CIRCLE, AI, ...)&lt;br /&gt;
* Due to application in lasers there must be some immediate error action on PLSs to switch off a dangerous power source linked to the PLS output (safe state).&lt;br /&gt;
= Description =&lt;br /&gt;
@@@@@@@@@@@ --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=AXY:PLS_Software_Specification&amp;diff=132916</id>
		<title>AXY:PLS Software Specification</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=AXY:PLS_Software_Specification&amp;diff=132916"/>
				<updated>2018-10-08T09:16:07Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;'''Replaced by NEW PLS article - INSERT LINK'''&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Languages}}&lt;br /&gt;
&amp;lt;div id=&amp;quot;BackToTop&amp;quot;  class=&amp;quot;noprint&amp;quot; style=&amp;quot;background-color:; position:fixed; bottom:32px; left:95%; z-index:9999; padding:0; margin:0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue; font-size:8pt; font-face:verdana,sans-serif; border:0.2em outset:#ceebf7; padding:0.1em; font-weight:bolder; -moz-border-radius:8px; &amp;quot;&amp;gt;&lt;br /&gt;
[[Image:TOP2.png|50px|link=#top]] &amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
= Refer to =&lt;br /&gt;
* [[PLS Timing Issues|PLS Timing Issues]]&lt;br /&gt;
* [[path-PLS|Path PLS]] &lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
A programmable limit switch (PLS) is a mechanism which triggers a system output when a specified axis position is reached. The PLS implementation in the softMC has the following features:&lt;br /&gt;
&lt;br /&gt;
* Multiple position specifications&lt;br /&gt;
* PLS pattern repetition&lt;br /&gt;
* Position hysteresis&lt;br /&gt;
* Enabling and disabling of PLS&lt;br /&gt;
* The output may be digital or virtual&lt;br /&gt;
&lt;br /&gt;
This article specifies the PLS functionality as it is implemented in the softMC. The functionality is described and the supporting commands are defined.&lt;br /&gt;
&lt;br /&gt;
=Definitions=&lt;br /&gt;
'''PLS''' – Programmable limit switch.&lt;br /&gt;
&lt;br /&gt;
'''PLS''' – Position specified in the PLS command, at which the state of the output is toggled.&lt;br /&gt;
&lt;br /&gt;
'''Digital output''' – Can be mapped to a device that resides on the motion bus, to either one of the drive outputs, or to EtherCAT/CAN I/O block. &amp;lt;br/&amp;gt;(Local is not supported in firmware version 5.0 and later; it is supported only in legacy SERCOS II motion controller.) &lt;br /&gt;
&lt;br /&gt;
'''Soft output''' – One of the 32 virtual outputs.&lt;br /&gt;
&lt;br /&gt;
PLS positions are defined in an array that allows you to change individual values of PLS positions. This array must be increasing monotonic. There is no limit of the number of positions or PLSs that can be defined. The initial output polarity is specified with [[MC-Basic:pls.PLSPOLARITY|Pls Polarity ]]. The output state is set when the PLS is enabled.&lt;br /&gt;
&lt;br /&gt;
= PLS Functional Description =&lt;br /&gt;
&lt;br /&gt;
== PLS Polarity ==&lt;br /&gt;
The output polarity is determined via the polarity property of the PLS. This property determines the output polarity of the first entry of the PLS position table i.e. in the segment between the first and second entries. If the actual location of the axis is elsewhere, the output polarity will be determined accordingly so when the axis will reach the first segment the polarity will be as indicated. &lt;br /&gt;
&lt;br /&gt;
For example: consider the following PLS whose positions are 10, 25, 30, 50, 65, and polarity is 0, as shown in this figure. &lt;br /&gt;
 &lt;br /&gt;
[[File:AXY;PLS plolarity description.jpeg|Figure 1a: Programmable Limit Switch polarity description|480px]]&lt;br /&gt;
&lt;br /&gt;
As can be seen, the polarity of the first segment (between 10-25) is as indicated by the polarity (1). Enabling the PLS in any other segment will cause the output to be as indicated in the figure.&lt;br /&gt;
&lt;br /&gt;
==	Output State ==&lt;br /&gt;
A PLS causes an output (digital or virtual) to be triggered when a specified axis position is reached. The initial state of the output will be determined by the PLS polarity property. When the position is reached, the state of the output is toggled. The state is also toggled each time the position is reached, irrespective of the direction of motor travel.&lt;br /&gt;
 &lt;br /&gt;
[[File:AXY;PLS description.jpeg|Figure 1b: Programmable Limit Switch description|480px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multiple positions may be specified, in which case the state of the digital output will be toggled as each position is reached. For example, consider the following PLS specification: positions 100 and 200 are specified, and the initial state of the digital output after enabling is 0. The following table illustrates how the state of output changes with changing position.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
|'''Position'''||'''Output State'''&lt;br /&gt;
|-&lt;br /&gt;
|0||0&lt;br /&gt;
|-&lt;br /&gt;
|100||1 (Toggle)&lt;br /&gt;
|-&lt;br /&gt;
|150||1 (No change)&lt;br /&gt;
|-&lt;br /&gt;
|200||0 (Toggle)&lt;br /&gt;
|-&lt;br /&gt;
|210||0 (No change yet)&lt;br /&gt;
|-&lt;br /&gt;
|200||1 (Toggle again)&lt;br /&gt;
|-&lt;br /&gt;
|150||1 (No change)&lt;br /&gt;
|-&lt;br /&gt;
|100||0 (Toggle again)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
[[File:AXY;Multiple PLS positions.jpeg|Figure 2: Multiple PLS positions|480px]]&lt;br /&gt;
&lt;br /&gt;
If the axis position were to oscillate around a specified PLS position, the output would be triggered each time the specified position was crossed.&lt;br /&gt;
&lt;br /&gt;
The initial output state is specified implicitly by the user. The output is set to this state when the PLS is enabled.&lt;br /&gt;
&lt;br /&gt;
==	PLS Position Data ==&lt;br /&gt;
The PLS position data is stored in a data structure that belongs to the PLS mechanism. This data structure is explicitly created, using the CreatePlsData command.&lt;br /&gt;
&lt;br /&gt;
The PLS data has read/write access. The user must ensure that the PLS position data is monotonic (to allow a PLS to be enabled).&lt;br /&gt;
&lt;br /&gt;
== Hysteresis ==&lt;br /&gt;
If the axis were to stop on a specified PLS position, the state of the digital output may be continually toggled, due to slight instability in the actual axis position. In this case, a hysteresis value may optionally be specified. The output state will be toggled when the PLS position is reached, and is passed by the hysteresis value. If, as shown in this example, the hysteresis value is 10, then the output will change from Low to High at position 110. It will revert to Low when the position goes down to 90.&lt;br /&gt;
 &lt;br /&gt;
[[File:AXY;Hysteresis_in_PLS_position.jpeg|Figure 3: Hysteresis in PLS position|480px]]&lt;br /&gt;
&lt;br /&gt;
==	Repetition Interval ==&lt;br /&gt;
PLS positions may be continually repeated at a specified interval. Thus if a PLS position of 100, for example, is specified with a repetition interval of 2000, then the output state will be toggled at 100, and again at 2100, 4100, and so on, in the positive direction, and at -1900, -3900, and so on in the negative direction.&lt;br /&gt;
&lt;br /&gt;
The repetition interval must be positive, and it must be greater than the absolute value difference between the least and greatest PLS position values. That is:&lt;br /&gt;
&lt;br /&gt;
Repetition Interval &amp;gt; abs(PLS_Pos_Max - PLS_Pos_Min)&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
* PLS Position values: -300, 100, 200&lt;br /&gt;
* Repetition Interval: 2000&lt;br /&gt;
* Polarity: 0&lt;br /&gt;
&lt;br /&gt;
The output state will be toggled at -300, 100, 200, as well as at 1700 (-300 + 2000), 2100 (100+2000), 2200, and at 3700 (-300 + 2000 + 2000) etc. In the negative direction, the output state will be toggled at -1800 (200 - 2000), -1900 (100 - 2000), -2300 (-300 - 2000), -3800 etc.&lt;br /&gt;
 &lt;br /&gt;
[[File:AXY;PLS Repetition Interval.jpeg|Figure 4: PLS Repetition Interval|480px]]&lt;br /&gt;
&lt;br /&gt;
==	PLS Constraints ==&lt;br /&gt;
* The number of PLSes is not be limited by the system. It is understood that there is a direct tradeoff between the number of PLSes defined and the system performance.&lt;br /&gt;
* The number of PLS positions defined per PLS is not be limited.&lt;br /&gt;
* More than one PLS may be defined per axis.&lt;br /&gt;
* PLSes are scanned at the motion bus cycle rate.&lt;br /&gt;
&lt;br /&gt;
== Enable and Disable ==&lt;br /&gt;
After being defined, a PLS is disabled (output pattern is not generated). The output is set when the PLS is enabled. The output is set to the defined initial state. PLS properties are changed only when the PLS is disabled. Each enabled PLS requires CPU resources. Conserve those resources by disabling the unused PLS(s). [[MC-Basic:pls.PLSENABLE|PLSEnable]] controls the status of the PLS:&lt;br /&gt;
 MyPLS.PlsEnable = ON | OFF&lt;br /&gt;
PLSENABLE queries the status of a PLS:&lt;br /&gt;
 ?MyPls.PlsEnable&lt;br /&gt;
 if(MyPLS.PlsEnable = OFF)&lt;br /&gt;
 . . .&lt;br /&gt;
or drives events:&lt;br /&gt;
 EventOn MyEvent MyPLS.PlsOutput = ON&lt;br /&gt;
&lt;br /&gt;
==PLS Output State==&lt;br /&gt;
Query the digital output associated with the PLS to query the state of the PLS output.&amp;lt;br/&amp;gt;&lt;br /&gt;
For example, assume the PLS output is assigned to &lt;br /&gt;
SYSTEM.DOUT.1. To determine the output state of the PLS, query the state &lt;br /&gt;
of SYSTEM.DOUT.1:&lt;br /&gt;
 --&amp;gt;?Sys.Dout.1&lt;br /&gt;
 0 | 1&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
===Step 1===&lt;br /&gt;
Declare the PLS with [[MC-Basic:COMMON SHARED ... AS PLS|&amp;lt;nowiki&amp;gt;COMMON SHARED &amp;lt;PLS name&amp;gt; AS PLS&amp;lt;/nowiki&amp;gt;]] in Config.Prg or at the &lt;br /&gt;
terminal. You must name the PLS, specify the axis that drives the PLS, and &lt;br /&gt;
name an output to be controlled by the PLS. For example:&lt;br /&gt;
 Common Shared MyPLS as PLS A1 System.Dout.1&lt;br /&gt;
sets up MyPLS as a PLS driven by axis A1 connected to SYSTEM.DOUT.1. &lt;br /&gt;
The output can be a digital output (SYSTEM.DOUT.1 through DOUT.20) or it &lt;br /&gt;
can be one of the virtual outputs (SYSTEM.VOUT.1 through VOUT.32).&lt;br /&gt;
After the Common Shared as PLS executes, the PLS is disabled. &lt;br /&gt;
Properties of the PLS are set as:&lt;br /&gt;
*A single PLS position exists at 0.&lt;br /&gt;
*The initial output polarity is 1.&lt;br /&gt;
*PLSREPEAT is set to 0.&lt;br /&gt;
*The hysteresis is set to 0.&amp;lt;br/&amp;gt;&lt;br /&gt;
These properties may be set explicitly, as long as the PLS remains disabled. &lt;br /&gt;
You can check which output is associated with a given PLS using &lt;br /&gt;
PLSOUTPUT.&lt;br /&gt;
&lt;br /&gt;
===Step 2===&lt;br /&gt;
Create the PLS data structure and define PLS positions. The number of &lt;br /&gt;
defined positions is not explicitly limited. A call to [[MC-Basic:CREATEPLSDATA|CreatePlsData ]]&lt;br /&gt;
creates an array of n positions that stores the position data. The array is 1-&lt;br /&gt;
based and an error is generated if you attempt to access an index outside of &lt;br /&gt;
the array bounds. For example:&lt;br /&gt;
 CreatePLSData 4 MyPLS&lt;br /&gt;
 MyPLS.PLSPosition[1] = 1000&lt;br /&gt;
 MyPLS.PLSPosition[2] = 1100&lt;br /&gt;
As a short form, you can use PPOS in place of [[MC-Basic:pls.PLSPOSITION|PlsPosition ]]:&lt;br /&gt;
 MyPLS.Ppos[3] = 2000&lt;br /&gt;
 MyPLS.Ppos[4] = 2200&lt;br /&gt;
You cannot change PLS positions when the PLS is enabled. Position values &lt;br /&gt;
must be increasing monotonically.&lt;br /&gt;
&lt;br /&gt;
===Step 3===&lt;br /&gt;
Set the polarity. PLSPOLARITY defaults to OFF, indicating the PLS state &lt;br /&gt;
should be OFF after the first position. Change [[MC-Basic:pls.PLSPOLARITY|PlsPolarity ]] to ON to &lt;br /&gt;
invert the state.&lt;br /&gt;
 MyPLS.PLSPolarity = ON&lt;br /&gt;
Change [[MC-Basic:pls.PLSPOLARITY|PlsPolarity ]] only if the PLS is disabled.&lt;br /&gt;
&lt;br /&gt;
===Step 4===&lt;br /&gt;
Set [[MC-Basic:pls.PLSREPEAT|PlsRepeat ]]. If you want the PLS to repeat, set the value of &lt;br /&gt;
PLSREPEAT to a non-zero, positive number. For example, to have the PLS &lt;br /&gt;
repeat every 10,000 position units, enter:&lt;br /&gt;
 MyPLS.PLSRepeat = 10000&lt;br /&gt;
PLSREPEAT defaults to 0, indicating that there is no repetition. Change &lt;br /&gt;
PLSREPEAT only when the PLS is disabled.&lt;br /&gt;
&lt;br /&gt;
===Step 5===&lt;br /&gt;
Set [[MC-Basic:pls.PLSHYSTERESIS|PlsHysteresis]], if the application requires it. Hysteresis is only &lt;br /&gt;
necessary if the system does stop on or near a PLS position. Normally, a &lt;br /&gt;
PLSHYSTERESIS of 5 or 10 counts of encoder (converted to position units) &lt;br /&gt;
or 2 or 3 counts of resolver resolution is sufficient.&lt;br /&gt;
 MyPLS.PLSHysteresis = 0.01&lt;br /&gt;
&lt;br /&gt;
===Step 6===&lt;br /&gt;
Enable the PLS Enter:&lt;br /&gt;
 MyPLS.PLSEnable = ON&lt;br /&gt;
There are a few other PLS functions you may need:&lt;br /&gt;
*Change Polarity &lt;br /&gt;
The default output state of a PLS is 0. Change this &lt;br /&gt;
initial state by modifying PLSPOLARITY.&lt;br /&gt;
 MyPLS.PLSPolarity = 1&lt;br /&gt;
The PLS must be disabled when changing this &lt;br /&gt;
setting.&lt;br /&gt;
*Query the Name&lt;br /&gt;
 Query the name of the axis driving the PLS:&lt;br /&gt;
 ? MyPLS.PLSAxisName&lt;br /&gt;
returns the axis associated with the PLS (A1).&lt;br /&gt;
*Disable the PLS&lt;br /&gt;
 Disable the PLS. For example:&lt;br /&gt;
 MyPLS.PLSEnable = OFF&lt;br /&gt;
You must disable a PLS to change PLS properties. &lt;br /&gt;
Disabling a PLS also helps conserve CPU &lt;br /&gt;
resources.&lt;br /&gt;
*Delete a PLS &lt;br /&gt;
Delete a PLS to remove it from the system only &lt;br /&gt;
when the PLS is disable and there are no tasks in &lt;br /&gt;
memory. For example:&lt;br /&gt;
 DeletePLS MyPLS&lt;br /&gt;
&lt;br /&gt;
=	Command Set =&lt;br /&gt;
A PLS is defined using the syntax for variable declaration. The following PLS properties are defined:&lt;br /&gt;
* PLS name&lt;br /&gt;
* Axis&lt;br /&gt;
* Output name&lt;br /&gt;
* One or more PLS positions&lt;br /&gt;
* Optional initial output state&lt;br /&gt;
* Optional repetition interval&lt;br /&gt;
* Optional hysteresis setting&lt;br /&gt;
&lt;br /&gt;
== PLS Commands ==&lt;br /&gt;
&lt;br /&gt;
* [[MC-Basic:COMMON SHARED ... AS PLS|&amp;lt;nowiki&amp;gt;COMMON | DIM] SHARED &amp;lt;PLS name&amp;gt; AS PLS&amp;lt;/nowiki&amp;gt;]]	&lt;br /&gt;
* [[MC-Basic:DELETEPLS|DeletePls ]]&lt;br /&gt;
* [[MC-Basic:CREATEPLSDATA|CreatePlsData ]]&lt;br /&gt;
* [[MC-Basic:pls.PLSAXISNAME|PLSAxisName]]&lt;br /&gt;
* [[MC-Basic:pls.PLSOUTPUT|PlsOutput ]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOSITION|PlsPosition ]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOLARITY|PlsPolarity ]]&lt;br /&gt;
* [[MC-Basic:pls.PLSREPEAT|PlsRepeat ]]&lt;br /&gt;
* [[MC-Basic:pls.PLSHYSTERESIS|PlsHysteresis]]&lt;br /&gt;
* [[MC-Basic:pls.PLSENABLE|PLSEnable]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:softMC Firmware]]&lt;br /&gt;
[[Category:Motion Control]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=PLS_Timing_Issues&amp;diff=132915</id>
		<title>PLS Timing Issues</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=PLS_Timing_Issues&amp;diff=132915"/>
				<updated>2018-10-08T09:15:12Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;'''Replaced by NEW PLS article - INSERT LINK'''&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction == &lt;br /&gt;
This article describes timing issues of PLS triggering.&lt;br /&gt;
&lt;br /&gt;
The following variables affect PLS timing:&lt;br /&gt;
&lt;br /&gt;
*[[MC-Basic:element.POSITIONERRORDELAY| Axis.PositionErrorDelay]]&lt;br /&gt;
*[[MC-Basic:pls.HWASSISTANCE| PLS.HWAssistance ]] &lt;br /&gt;
*[[MC-Basic:pls.PLSPropagationDelay| PLS.PLSPropagationDelay ]]&lt;br /&gt;
&lt;br /&gt;
Samples in motion profiles, in which the acceleration profile changes its basic formula (jerk discontinuity), will have an increased error in computing the inter-sample delay (Δt). This is due to the unavailability of an exact profile change parameter within one sample. In addition, higher-order (e.g., quadratic, cube, sine) acceleration profiles are not modeled in the inter-sample delay (Δt) calculations, and thus an error of JT3/6 is to be expected.&lt;br /&gt;
&lt;br /&gt;
'''An increased error in computing''' the inter-sample delay (Δt) will occur in all cases of non-linear acceleration change:&lt;br /&gt;
&lt;br /&gt;
* sine acceleration&lt;br /&gt;
* one-sample duration movements &lt;br /&gt;
* trapezoidal velocity corners&lt;br /&gt;
* trapezoidal acceleration corners&lt;br /&gt;
* extreme acceleration (so acc phase duration is 1 sample) or very short movement &lt;br /&gt;
&lt;br /&gt;
It is difficult to estimate the position error introduced, but it is typically around JT&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;/6.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery widths=300px heights=200px perrow=12&amp;gt; &lt;br /&gt;
Image:Axystems;Plstiming-acc.png|''Illustration 1: Error introduced due to the jerk value in s'''ine-acceleration''' profile at the transition sample between acceleration saturation and acceleration decrease''&lt;br /&gt;
Image:Axystems;Plstiming-tracc.png|''Illustration 2: Error introduced due to the acceleration change in '''trapezoidal acceleration''' profile at the transition sample between acceleration saturation and acceleration decrease''&lt;br /&gt;
Image:Axystems;Plstiming-trvel.png|''Illustration 3: Error introduced due to the transition point between cruise velocity and deceleration in '''trapezoidal velocity''' profile''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;{{Note | In cases of extremely short motions (velocity or acceleration too high or path length too short) even if user commanded sine-acceleration profile the system will automatically change it to trapezoidal velocity.  }}&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note | PLS will always be triggered too late if it is triggered by a feedback source such as PFB or PEXT. But in this case no additional delay should be added! }}&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Buffering ==&lt;br /&gt;
&lt;br /&gt;
The delay of the motion bus forces the system to postpone the switching of the PLS output. Therefore, the detected PLS output switch events are stored in the buffer and executed after the estimated delay.&lt;br /&gt;
&lt;br /&gt;
Two different buffers ('''per each PLS''') are dedicated to the PLS delayed outputs:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion Bus PLS Delay buffer. Used for storing PLS-delays through multiple sampling periods. The size of this buffer is:  4*10. &lt;br /&gt;
* Digital Output Microsecond Delay buffer. Used for storing microsecond delays of only one motion bus sample. The size of this buffer is '''4 ''' and it is hardware defined.&amp;lt;br/&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;{{Note|In systems with a relatively large motion bus delay &amp;lt;nowiki&amp;gt;(PositionErrorDelay &amp;gt;&amp;gt; 3)&amp;lt;/nowiki&amp;gt; number of the stored PLS switches can be greater than the Motion Bus Delay Buffer size. In this case error 3298 will be returned: '''&amp;quot;The PLS positions are too close to each other and/or the velocity is too high for output to toggle&amp;quot;'''. If one sampl has more than 4 PLS, IO error 21011 will be returned: '''&amp;quot;Too many PLS toggling requested &amp;quot;'''.}}&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debug Variables ==&lt;br /&gt;
&lt;br /&gt;
Two read-only properties returning in microseconds the time of the IO toggle. &lt;br /&gt;
&lt;br /&gt;
[[MC-Basic:pls.HWIOtime|PLS.HWIOtime ]]&lt;br /&gt;
&lt;br /&gt;
[[MC-Basic:pls.PLSdelaytime| PLS.PLSdelaytime]]&lt;br /&gt;
&lt;br /&gt;
== PLS-Timing Diagram ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:Axystems;Plstiming-scheme.png]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Motion Control]]&lt;br /&gt;
&amp;lt;!-- [[Category:Motion:PLS]] --&amp;gt;&lt;br /&gt;
&amp;lt;!-- [[Category:Motion:HW-PLS]] --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=AXY:PLS_On/Off_delay&amp;diff=132914</id>
		<title>AXY:PLS On/Off delay</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=AXY:PLS_On/Off_delay&amp;diff=132914"/>
				<updated>2018-10-08T09:13:40Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;'''Replaced by NEW PLS article - INSERT LINK'''&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLS (Programmable Limit Switch) is a mechanism by which a system output is triggered when a specified position is reached. &lt;br /&gt;
= The Problem =&lt;br /&gt;
In application the use of PLS is to control an external device. Can be a situation that there is an asymmetric behavior in enabling and disabling timing of the device. As the indication to PLS is the position without dependency on the external device there can be a case when the disabling (for example) takes longer then enable and finished later then expected. So the PLS has to be set in different timing depend on the enable/disable of the device.&lt;br /&gt;
&lt;br /&gt;
= Solution offered =&lt;br /&gt;
The solution is by different timing delays that will be define for enable and disable. Those values  will be taken into consider at timing calculating for setting PLS.&amp;lt;br/&amp;gt; &lt;br /&gt;
The PLS will be calculated according to the next folmula:&amp;lt;br/&amp;gt;&lt;br /&gt;
'''t = (PLSPropagationDelay+PLSEnableDelay)*1000 + Δt'''&lt;br /&gt;
&amp;lt;br/&amp;gt; or &amp;lt;br/&amp;gt;&lt;br /&gt;
'''t = (PLSPropagationDelay+PLSDisableDelay)*1000 + Δt'''&lt;br /&gt;
&lt;br /&gt;
= Limitation =&lt;br /&gt;
* If the delay time is smaller the the position error delay the time can't be reached. If this option is requested a new look ahead algorithm has to be implement.&lt;br /&gt;
* The assumption here is that the enabling-disabling requests are followed each other, so there is no condition for two follow PLS that indicate the same setting (enable/disable).&lt;br /&gt;
= Properties (suggestion)=&lt;br /&gt;
=== PLSEnableDelay ===&lt;br /&gt;
*Type    = double&lt;br /&gt;
*Range   = 0 - MAXD&lt;br /&gt;
*Units   = ms&lt;br /&gt;
*Default = 0&lt;br /&gt;
*Scope   = Task, Terminal&lt;br /&gt;
*Limitation =&lt;br /&gt;
*Example  = PLSEnableDelay = 4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PLSDisableDelay ===&lt;br /&gt;
*Type    = double&lt;br /&gt;
*Range   = 0 - MAXD&lt;br /&gt;
*Units   = ms&lt;br /&gt;
*Default = 0&lt;br /&gt;
*Scope   = Task, Terminal&lt;br /&gt;
*Limitation =&lt;br /&gt;
*Example  = PLSDisableDelay = 2&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
*[[MC-Basic:pls.PLSPropagationDelay|PLSPropagationDelay]]&lt;br /&gt;
*[[MC-Basic:pls.PLSPOLARITY|PLSPolarity]] &lt;br /&gt;
*[[PLS Timing Issues| PLS Timing Issues]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- {{Bugzilla|5151}}  F: asymmetric plspropagationdelay --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=Input/Output&amp;diff=132913</id>
		<title>Input/Output</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=Input/Output&amp;diff=132913"/>
				<updated>2018-10-08T09:10:09Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: /* PLS (Programmable Limit Switch) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The softMC does not have local I/O, but can map drive inputs and outputs as well as I/O extension modules to its SYS.DIN and SYS.DOUT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Local I/O SERCOS version of softMC =&lt;br /&gt;
The softMC includes 23 inputs and 20 outputs as standard on the softMC. These are accessed with the system properties DIN.1 through DIN.23 and DOUT.1 through DOUT.20.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
? System.Din.1 System.Dout.5 = System.Din1&lt;br /&gt;
?System.Din&lt;br /&gt;
System.Dout=0xfe&lt;br /&gt;
&amp;lt;/pre&amp;gt;  --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Local I/O softMC =&lt;br /&gt;
softMC (CANOpen and EtherCAT) does not have local I/O. &lt;br /&gt;
For backward compatibility sys.dout.1 to sys.dout.20 can be read and written but do not have any function.&lt;br /&gt;
&amp;lt;br&amp;gt;Value of sys.din.1 to sys.din.23 is read from file IO.DAT, from field &amp;quot;INP&amp;quot;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;File IO.DAT is generated '''automatically''' if it does not exist on the flash disk. &lt;br /&gt;
&amp;lt;br&amp;gt;''Format'' of IO.DAT &lt;br /&gt;
&amp;lt;br&amp;gt;DIP=0xXX &lt;br /&gt;
&amp;lt;br&amp;gt;INP=0xXX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Software I/O SERCOS version of softMC =&lt;br /&gt;
The softMC provides virtual software I/O in addition to the standard I/O. The primary purpose of software I/O is to place a large group of I/O where it can be read from and written to as blocks in the softMC's dual port RAM. Virtual inputs are delivered from the host over DPRAM where virtual outputs are stored in the DPRAM and retrieved by the host. This is much faster than reading or writing individual I/O points one at a time. This allows efficient communication between a machine controller, such as a VB program or a software PLC, and the softMC program.&lt;br /&gt;
&amp;lt;br/&amp;gt;DPRAM exists '''only''' in SERCOS II version of Motion controller. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Software I/O softMC =&lt;br /&gt;
&lt;br /&gt;
== Bit-oriented Software I/O ==&lt;br /&gt;
Software I/O is used in the softMC program just like standard I/O. Standard inputs are accessed with SYSTEM.DIN.1 through DIN.23, and virtual inputs are accessed with SYSTEM.VIN.1 through VIN.32. Standard outputs are accessed with SYSTEM.DOUT.1 through DOUT.20, and virtual outputs are accessed with SYSTEM.VOUT.1 through VOUT.32. You can use software I/O to start events just as with standard I/O. Programmable limit switches can use software outputs just as with standard outputs. Here is an example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OnEvent SoftwareInputEvent System.VIn.1 = ON&lt;br /&gt;
System.VOut.1 = OFF&lt;br /&gt;
If(System.VOut.4 = ON) &lt;br /&gt;
. . . &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Long-Word-Oriented Software I/O ==&lt;br /&gt;
The entire word (32 bits) of software input and output is accessed when a bit position is not included in the reference to the input or output variable. So the following statement is valid:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
System.VOut=System.VIn&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This statement copies the virtual software input to the output. The physical input and output variables are used in this manner. Be careful when assigning virtual I/O to physical I/O because there are fewer physical bits than there are virtual bits. There are only 20 bits of physical output, but the virtual output variable can have 32 bits.&lt;br /&gt;
&lt;br /&gt;
= PLS - Programmable Limit Switch = &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;'''Replaced by NEW PLS article - INSERT LINK'''&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A Programmable Limit Switch (PLS) monitors position feedback on any axis, real or simulated. A PLS offers more flexibility than a limit switch, as it allows many trip points and can be reconfigured on-the-fly. A PLS toggles the state of a specified system output when an axis position reaches any of the defined positions of the PLS. Some of the features of a PLS are:&lt;br /&gt;
&lt;br /&gt;
*Multiple position specifications.&lt;br /&gt;
&lt;br /&gt;
*Multiple PLSs per axis&lt;br /&gt;
&lt;br /&gt;
*PLS pattern repetition&lt;br /&gt;
&lt;br /&gt;
*Position hysteresis&lt;br /&gt;
&lt;br /&gt;
*Enabling and disabling of PLSs&lt;br /&gt;
&lt;br /&gt;
*The system output may be digital or soft (fast data)&lt;br /&gt;
&lt;br /&gt;
PLS positions are defined in an array that allows you to change individual values of PLS positions. This array must be increasing monotonic. There is no limit of the number of positions or PLSs that can be defined.&lt;br /&gt;
&lt;br /&gt;
The initial output polarity is specified with '''PLSPOLARITY'''. The output state is set when the PLS is enabled.&lt;br /&gt;
&lt;br /&gt;
== Enable and Disable ==&lt;br /&gt;
After being defined, a PLS is disabled (output pattern is not generated). The output is set when the PLS is enabled. The output is set to the defined initial state.&lt;br /&gt;
&lt;br /&gt;
PLS properties are changed only when the PLS is disabled. Each enabled PLS requires CPU resources. Conserve those resources by disabling the unused PLS(s). '''PLSENABLE''' controls the status of the PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PlsEnable = ON | OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''PLSENABLE''' queries the status of a PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
?MyPls.PlsEnable&lt;br /&gt;
if(MyPLS.PlsEnable = OFF) &lt;br /&gt;
. . .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or drives events:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EventOn MyEvent MyPLS.PlsOutput = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Switch Positions ==&lt;br /&gt;
The basic mechanism of the PLS is the switch position(s) where the PLS output changes state. The figure belows shows a PLS output with one switch position at 100.&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-1-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
More switch positions can be added. To have the PLS in the above example turn back off at 200, simply add a second position at 200 as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-2-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
You can add any number of positions. For example, to extend the above example to turn back on at 400 and off again at 600, add positions 3 and 4 as 400 and 600 as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-3-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
There is no explicit limit to the number of positions you can have in a PLS, but the PLS positions must be increasing monotonic (Position2 must be greater than Position1, Position3 must be greater than Position2, etc.).&lt;br /&gt;
&lt;br /&gt;
== Repetition Interval ==&lt;br /&gt;
'''PLSREPEAT''' allows you to repeat the same PLS after a fixed number of counts. For example, the figure below shows a PLS that turns on at 0, off at 10 and has a '''PLSREPEAT''' value of 100:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-4-RepetitionInterval.png|caption]]&lt;br /&gt;
&lt;br /&gt;
== Polarity ==&lt;br /&gt;
'''PLSPOLARITY''' allows you to control the polarity of the PLS output. The initial polarity may be specified as 1 or 0, indicating that the output is set to 1 or 0 after the PLS is enabled and when the axis is located between the first and second PLS positions. If the axis position (when the PLS is enabled) is not located within this segment, the output polarity is set to 0 or 1, according to the current position so that when the axis reaches the first segment, the output polarity is as indicated. The default value for polarity is '''0'''.&lt;br /&gt;
&lt;br /&gt;
== Hysteresis ==&lt;br /&gt;
The softMC allows you to apply hysteresis around switch points. Hysteresis provides a margin in the switching between PLS positions to accommodate noise in the PLS axis. Set the hysteresis greater than the noise on the axis, (typically, 5 or 10 counts of encoder is sufficient, less is required for resolver systems). If you have a hysteresis of 0.01 position units, each transition of PLS position is moved forward 0.005 units for positive motion and backward 0.005 units for negative motion. If the axis driving the PLS is stopped directly on a PLS position and the inherent noise on the axis is less than the hysteresis, the PLS state does not change due to this noise.&lt;br /&gt;
&lt;br /&gt;
== Enable and Disable ==&lt;br /&gt;
'''PLSENABLE''' enables or disables the PLS(s). After being defined, a PLS is disabled. The output is fixed when the PLS is enabled. The PLS output is set to the defined initial state when the PLS is enabled.&lt;br /&gt;
&lt;br /&gt;
== PLS Output State ==&lt;br /&gt;
Query the digital output associated with the PLS to query the state of the PLS output. For example, assume the PLS output is assigned to SYSTEM.DOUT.1. To determine the output state of the PLS, query the state of SYSTEM.DOUT.1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&amp;gt;?Sys.Dout.1&lt;br /&gt;
0 | 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Set Up ==&lt;br /&gt;
'''Step 1'''&lt;br /&gt;
&lt;br /&gt;
Declare the PLS with '''&amp;lt;nowiki&amp;gt;Common Shared &amp;lt;&amp;lt;/nowiki&amp;gt;''var''&amp;gt; as PLS''' in Config.Prg or at the terminal. You must name the PLS, specify the axis that drives the PLS, and name an output to be controlled by the PLS. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Common Shared MyPLS as PLS A1 System.Dout.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
sets up MyPLS as a PLS driven by axis A1 connected to SYSTEM.DOUT.1. The output can be a digital output (SYSTEM.DOUT.1 through DOUT.20) or it can be one of the virtual outputs (SYSTEM.VOUT.1 through VOUT.32).&lt;br /&gt;
&lt;br /&gt;
After the '''&amp;lt;nowiki&amp;gt;Common Shared &amp;lt;&amp;lt;/nowiki&amp;gt;''var''&amp;gt; as PLS''' executes, the PLS is disabled. Properties of the PLS are set as:&lt;br /&gt;
&lt;br /&gt;
:A single PLS position exists at 0.&lt;br /&gt;
&lt;br /&gt;
:The initial output polarity is 1.&lt;br /&gt;
&lt;br /&gt;
:'''PLSREPEAT''' is set to 0.&lt;br /&gt;
&lt;br /&gt;
:The hysteresis is set to 0.&lt;br /&gt;
&lt;br /&gt;
These properties may be set explicitly, as long as the PLS remains disabled. You can check which output is associated with a given PLS using '''PLSOUTPUT'''.&lt;br /&gt;
&lt;br /&gt;
'''Step 2'''&lt;br /&gt;
&lt;br /&gt;
Create the PLS data structure and define PLS positions. The number of defined positions is not explicitly limited. A call to '''CREATEPLSDATA''' creates an array of ''n'' positions that stores the position data. The array is 1-based and an error is generated if you attempt to access an index outside of the array bounds. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CreatePLSData 4 MyPLS&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.PLSPosition[1] = 1000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.PLSPosition[2] = 1100&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As a short form, you can use '''PPOS''' in place of '''PLSPOSITION''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.Ppos[3] = 2000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.Ppos[4] = 2200&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You cannot change PLS positions when the PLS is enabled. Position values must be increasing monotonically.&lt;br /&gt;
&lt;br /&gt;
'''Step 3'''&lt;br /&gt;
&lt;br /&gt;
Set the polarity. '''PLSPOLARITY''' defaults to OFF, indicating the PLS state should be OFF after the first position. Change '''PLSPOLARITY''' to ON to invert the state.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSPolarity = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change '''PLSPOLARITY''' only if the PLS is disabled.&lt;br /&gt;
&lt;br /&gt;
'''Step 4'''&lt;br /&gt;
&lt;br /&gt;
Set '''PLSREPEAT'''. If you want the PLS to repeat, set the value of '''PLSREPEAT '''to a non-zero, positive number. For example, to have the PLS repeat every 10,000 position units, enter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSRepeat = 10000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''PLSREPEAT''' defaults to 0, indicating that there is no repetition. Change '''PLSREPEAT''' only when the PLS is disabled.&lt;br /&gt;
&lt;br /&gt;
'''Step 5'''&lt;br /&gt;
&lt;br /&gt;
Set '''PLSHYSTERESIS''', ''if the application requires it''. Hysteresis is only necessary if the system does stop on or near a PLS position. Normally, a '''PLSHYSTERESIS''' of 5 or 10 counts of encoder (converted to position units) or 2 or 3 counts of resolver resolution is sufficient.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSHysteresis = 0.01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Step 6'''&lt;br /&gt;
&lt;br /&gt;
Enable the PLS. Enter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSEnable = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
There are a few other PLS functions you may need:&lt;br /&gt;
&lt;br /&gt;
'''Change Polarity '''The default output state of a PLS is 0. Change this initial state by modifying '''PLSPOLARITY'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSPolarity = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The PLS must be disabled when changing this setting.&lt;br /&gt;
&lt;br /&gt;
'''Query the Name '''Query the name of the axis driving the PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
? MyPLS.PLSAxisName&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
returns the axis associated with the PLS (A1).&lt;br /&gt;
&lt;br /&gt;
'''Disable the PLS '''Disable the PLS. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSEnable = OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must disable a PLS to change PLS properties. Disabling a PLS also helps conserve CPU resources.&lt;br /&gt;
&lt;br /&gt;
'''Delete a PLS '''Delete a PLS to remove it from the system only when the PLS is disable and there are no tasks in memory. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DeletePLS MyPLS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= External Encoders =&lt;br /&gt;
The softMC supports external encoders (encoders not connected to an axis controlled by the softMC). These encoders are connected to the system using the external encoder input of any drive in the system. You can access the encoder periodically with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;? IDNValue(&amp;lt;''axis''&amp;gt;.DriveAddress, 53, 7)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
‘Query external encoder position&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using the encoder for master/slave operation or in a way that requires the value of the signal be updated to the softMC every SERCOS cycle, you must configure the telegram for that axis as Telegram type 7. You also must specify that external position must be included in the telegram. This command is only available when in communication phase of 2 or higher.&lt;br /&gt;
&lt;br /&gt;
= Access to Legacy I/O and ISA =&lt;br /&gt;
The softMC offers support for access to legacy ISA devices located in low memory(0xA0000 - 0xE0000).&lt;br /&gt;
&lt;br /&gt;
== Commands ==&lt;br /&gt;
The softMC supports memory and I/O instructions.&lt;br /&gt;
&lt;br /&gt;
If you are using memory-mapped devices, you will need the memory access commands, '''PEEK''' and '''POKE'''. The valid memory address range for '''PEEK''' is 0xA0000 through 0xDFFFF. The valid memory address range for '''POKE''' depends on the hardware version of the softMC card.&lt;br /&gt;
&lt;br /&gt;
'''For the ISA-Bus card''', the valid memory address range for '''POKE''' is 0xA0000 to 0xCFFFF and 0xDA000 to 0xDFFFF.&lt;br /&gt;
&lt;br /&gt;
'''For the PCI card''', the valid memory address range for '''POKE''' is 0xA0000 to 0xC7FFF and 0xDB000 to 0xDFFFF.&lt;br /&gt;
&lt;br /&gt;
*'''PEEKB''' transfers byte-wide (8-bit) data from the bus to a variable.&lt;br /&gt;
*'''PEEKW''' transfers word-wide (16-bit) data from the bus to a variable.&lt;br /&gt;
*'''POKEB''' transfers byte-wide (8-bit) data to the memory bus.&lt;br /&gt;
*'''POKEW''' transfers word-wide (16-bit) data to the memory bus.&lt;br /&gt;
&lt;br /&gt;
If you are using I/O-mapped cards, you need '''INP''' and '''OUT'''.&lt;br /&gt;
*'''INPB''' transfers byte-wide (8-bit) data from the I/O bus to a variable.&lt;br /&gt;
*'''INPW''' transfers word-wide (16-bit) data from the I/O bus to a variable.&lt;br /&gt;
*'''OUTB''' transfers byte-wide (8-bit) data to the I/O bus.&lt;br /&gt;
*'''OUTW '''transfers word-wide (16-bit) data to the I/O bus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:softMC Firmware|Input/Output]]&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=Input/Output&amp;diff=132912</id>
		<title>Input/Output</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=Input/Output&amp;diff=132912"/>
				<updated>2018-10-08T09:00:21Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: /* PLS (Programmable Limit Switch) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The softMC does not have local I/O, but can map drive inputs and outputs as well as I/O extension modules to its SYS.DIN and SYS.DOUT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Local I/O SERCOS version of softMC =&lt;br /&gt;
The softMC includes 23 inputs and 20 outputs as standard on the softMC. These are accessed with the system properties DIN.1 through DIN.23 and DOUT.1 through DOUT.20.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
? System.Din.1 System.Dout.5 = System.Din1&lt;br /&gt;
?System.Din&lt;br /&gt;
System.Dout=0xfe&lt;br /&gt;
&amp;lt;/pre&amp;gt;  --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Local I/O softMC =&lt;br /&gt;
softMC (CANOpen and EtherCAT) does not have local I/O. &lt;br /&gt;
For backward compatibility sys.dout.1 to sys.dout.20 can be read and written but do not have any function.&lt;br /&gt;
&amp;lt;br&amp;gt;Value of sys.din.1 to sys.din.23 is read from file IO.DAT, from field &amp;quot;INP&amp;quot;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;File IO.DAT is generated '''automatically''' if it does not exist on the flash disk. &lt;br /&gt;
&amp;lt;br&amp;gt;''Format'' of IO.DAT &lt;br /&gt;
&amp;lt;br&amp;gt;DIP=0xXX &lt;br /&gt;
&amp;lt;br&amp;gt;INP=0xXX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Software I/O SERCOS version of softMC =&lt;br /&gt;
The softMC provides virtual software I/O in addition to the standard I/O. The primary purpose of software I/O is to place a large group of I/O where it can be read from and written to as blocks in the softMC's dual port RAM. Virtual inputs are delivered from the host over DPRAM where virtual outputs are stored in the DPRAM and retrieved by the host. This is much faster than reading or writing individual I/O points one at a time. This allows efficient communication between a machine controller, such as a VB program or a software PLC, and the softMC program.&lt;br /&gt;
&amp;lt;br/&amp;gt;DPRAM exists '''only''' in SERCOS II version of Motion controller. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Software I/O softMC =&lt;br /&gt;
&lt;br /&gt;
== Bit-oriented Software I/O ==&lt;br /&gt;
Software I/O is used in the softMC program just like standard I/O. Standard inputs are accessed with SYSTEM.DIN.1 through DIN.23, and virtual inputs are accessed with SYSTEM.VIN.1 through VIN.32. Standard outputs are accessed with SYSTEM.DOUT.1 through DOUT.20, and virtual outputs are accessed with SYSTEM.VOUT.1 through VOUT.32. You can use software I/O to start events just as with standard I/O. Programmable limit switches can use software outputs just as with standard outputs. Here is an example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OnEvent SoftwareInputEvent System.VIn.1 = ON&lt;br /&gt;
System.VOut.1 = OFF&lt;br /&gt;
If(System.VOut.4 = ON) &lt;br /&gt;
. . . &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Long-Word-Oriented Software I/O ==&lt;br /&gt;
The entire word (32 bits) of software input and output is accessed when a bit position is not included in the reference to the input or output variable. So the following statement is valid:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
System.VOut=System.VIn&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This statement copies the virtual software input to the output. The physical input and output variables are used in this manner. Be careful when assigning virtual I/O to physical I/O because there are fewer physical bits than there are virtual bits. There are only 20 bits of physical output, but the virtual output variable can have 32 bits.&lt;br /&gt;
&lt;br /&gt;
= PLS (Programmable Limit Switch) = &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;'''Replaced by NEW PLS article - INSERT LINK'''&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A Programmable Limit Switch (PLS) monitors position feedback on any axis, real or simulated. A PLS offers more flexibility than a limit switch, as it allows many trip points and can be reconfigured on-the-fly. A PLS toggles the state of a specified system output when an axis position reaches any of the defined positions of the PLS. Some of the features of a PLS are:&lt;br /&gt;
&lt;br /&gt;
*Multiple position specifications.&lt;br /&gt;
&lt;br /&gt;
*Multiple PLSs per axis&lt;br /&gt;
&lt;br /&gt;
*PLS pattern repetition&lt;br /&gt;
&lt;br /&gt;
*Position hysteresis&lt;br /&gt;
&lt;br /&gt;
*Enabling and disabling of PLSs&lt;br /&gt;
&lt;br /&gt;
*The system output may be digital or soft (fast data)&lt;br /&gt;
&lt;br /&gt;
PLS positions are defined in an array that allows you to change individual values of PLS positions. This array must be increasing monotonic. There is no limit of the number of positions or PLSs that can be defined.&lt;br /&gt;
&lt;br /&gt;
The initial output polarity is specified with '''PLSPOLARITY'''. The output state is set when the PLS is enabled.&lt;br /&gt;
&lt;br /&gt;
== Enable and Disable ==&lt;br /&gt;
After being defined, a PLS is disabled (output pattern is not generated). The output is set when the PLS is enabled. The output is set to the defined initial state.&lt;br /&gt;
&lt;br /&gt;
PLS properties are changed only when the PLS is disabled. Each enabled PLS requires CPU resources. Conserve those resources by disabling the unused PLS(s). '''PLSENABLE''' controls the status of the PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PlsEnable = ON | OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''PLSENABLE''' queries the status of a PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
?MyPls.PlsEnable&lt;br /&gt;
if(MyPLS.PlsEnable = OFF) &lt;br /&gt;
. . .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or drives events:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EventOn MyEvent MyPLS.PlsOutput = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Switch Positions ==&lt;br /&gt;
The basic mechanism of the PLS is the switch position(s) where the PLS output changes state. The figure belows shows a PLS output with one switch position at 100.&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-1-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
More switch positions can be added. To have the PLS in the above example turn back off at 200, simply add a second position at 200 as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-2-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
You can add any number of positions. For example, to extend the above example to turn back on at 400 and off again at 600, add positions 3 and 4 as 400 and 600 as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-3-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
There is no explicit limit to the number of positions you can have in a PLS, but the PLS positions must be increasing monotonic (Position2 must be greater than Position1, Position3 must be greater than Position2, etc.).&lt;br /&gt;
&lt;br /&gt;
== Repetition Interval ==&lt;br /&gt;
'''PLSREPEAT''' allows you to repeat the same PLS after a fixed number of counts. For example, the figure below shows a PLS that turns on at 0, off at 10 and has a '''PLSREPEAT''' value of 100:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-4-RepetitionInterval.png|caption]]&lt;br /&gt;
&lt;br /&gt;
== Polarity ==&lt;br /&gt;
'''PLSPOLARITY''' allows you to control the polarity of the PLS output. The initial polarity may be specified as 1 or 0, indicating that the output is set to 1 or 0 after the PLS is enabled and when the axis is located between the first and second PLS positions. If the axis position (when the PLS is enabled) is not located within this segment, the output polarity is set to 0 or 1, according to the current position so that when the axis reaches the first segment, the output polarity is as indicated. The default value for polarity is '''0'''.&lt;br /&gt;
&lt;br /&gt;
== Hysteresis ==&lt;br /&gt;
The softMC allows you to apply hysteresis around switch points. Hysteresis provides a margin in the switching between PLS positions to accommodate noise in the PLS axis. Set the hysteresis greater than the noise on the axis, (typically, 5 or 10 counts of encoder is sufficient, less is required for resolver systems). If you have a hysteresis of 0.01 position units, each transition of PLS position is moved forward 0.005 units for positive motion and backward 0.005 units for negative motion. If the axis driving the PLS is stopped directly on a PLS position and the inherent noise on the axis is less than the hysteresis, the PLS state does not change due to this noise.&lt;br /&gt;
&lt;br /&gt;
== Enable and Disable ==&lt;br /&gt;
'''PLSENABLE''' enables or disables the PLS(s). After being defined, a PLS is disabled. The output is fixed when the PLS is enabled. The PLS output is set to the defined initial state when the PLS is enabled.&lt;br /&gt;
&lt;br /&gt;
== PLS Output State ==&lt;br /&gt;
Query the digital output associated with the PLS to query the state of the PLS output. For example, assume the PLS output is assigned to SYSTEM.DOUT.1. To determine the output state of the PLS, query the state of SYSTEM.DOUT.1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&amp;gt;?Sys.Dout.1&lt;br /&gt;
0 | 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Set Up ==&lt;br /&gt;
'''Step 1'''&lt;br /&gt;
&lt;br /&gt;
Declare the PLS with '''&amp;lt;nowiki&amp;gt;Common Shared &amp;lt;&amp;lt;/nowiki&amp;gt;''var''&amp;gt; as PLS''' in Config.Prg or at the terminal. You must name the PLS, specify the axis that drives the PLS, and name an output to be controlled by the PLS. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Common Shared MyPLS as PLS A1 System.Dout.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
sets up MyPLS as a PLS driven by axis A1 connected to SYSTEM.DOUT.1. The output can be a digital output (SYSTEM.DOUT.1 through DOUT.20) or it can be one of the virtual outputs (SYSTEM.VOUT.1 through VOUT.32).&lt;br /&gt;
&lt;br /&gt;
After the '''&amp;lt;nowiki&amp;gt;Common Shared &amp;lt;&amp;lt;/nowiki&amp;gt;''var''&amp;gt; as PLS''' executes, the PLS is disabled. Properties of the PLS are set as:&lt;br /&gt;
&lt;br /&gt;
:A single PLS position exists at 0.&lt;br /&gt;
&lt;br /&gt;
:The initial output polarity is 1.&lt;br /&gt;
&lt;br /&gt;
:'''PLSREPEAT''' is set to 0.&lt;br /&gt;
&lt;br /&gt;
:The hysteresis is set to 0.&lt;br /&gt;
&lt;br /&gt;
These properties may be set explicitly, as long as the PLS remains disabled. You can check which output is associated with a given PLS using '''PLSOUTPUT'''.&lt;br /&gt;
&lt;br /&gt;
'''Step 2'''&lt;br /&gt;
&lt;br /&gt;
Create the PLS data structure and define PLS positions. The number of defined positions is not explicitly limited. A call to '''CREATEPLSDATA''' creates an array of ''n'' positions that stores the position data. The array is 1-based and an error is generated if you attempt to access an index outside of the array bounds. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CreatePLSData 4 MyPLS&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.PLSPosition[1] = 1000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.PLSPosition[2] = 1100&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As a short form, you can use '''PPOS''' in place of '''PLSPOSITION''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.Ppos[3] = 2000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.Ppos[4] = 2200&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You cannot change PLS positions when the PLS is enabled. Position values must be increasing monotonically.&lt;br /&gt;
&lt;br /&gt;
'''Step 3'''&lt;br /&gt;
&lt;br /&gt;
Set the polarity. '''PLSPOLARITY''' defaults to OFF, indicating the PLS state should be OFF after the first position. Change '''PLSPOLARITY''' to ON to invert the state.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSPolarity = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change '''PLSPOLARITY''' only if the PLS is disabled.&lt;br /&gt;
&lt;br /&gt;
'''Step 4'''&lt;br /&gt;
&lt;br /&gt;
Set '''PLSREPEAT'''. If you want the PLS to repeat, set the value of '''PLSREPEAT '''to a non-zero, positive number. For example, to have the PLS repeat every 10,000 position units, enter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSRepeat = 10000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''PLSREPEAT''' defaults to 0, indicating that there is no repetition. Change '''PLSREPEAT''' only when the PLS is disabled.&lt;br /&gt;
&lt;br /&gt;
'''Step 5'''&lt;br /&gt;
&lt;br /&gt;
Set '''PLSHYSTERESIS''', ''if the application requires it''. Hysteresis is only necessary if the system does stop on or near a PLS position. Normally, a '''PLSHYSTERESIS''' of 5 or 10 counts of encoder (converted to position units) or 2 or 3 counts of resolver resolution is sufficient.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSHysteresis = 0.01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Step 6'''&lt;br /&gt;
&lt;br /&gt;
Enable the PLS. Enter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSEnable = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
There are a few other PLS functions you may need:&lt;br /&gt;
&lt;br /&gt;
'''Change Polarity '''The default output state of a PLS is 0. Change this initial state by modifying '''PLSPOLARITY'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSPolarity = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The PLS must be disabled when changing this setting.&lt;br /&gt;
&lt;br /&gt;
'''Query the Name '''Query the name of the axis driving the PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
? MyPLS.PLSAxisName&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
returns the axis associated with the PLS (A1).&lt;br /&gt;
&lt;br /&gt;
'''Disable the PLS '''Disable the PLS. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSEnable = OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must disable a PLS to change PLS properties. Disabling a PLS also helps conserve CPU resources.&lt;br /&gt;
&lt;br /&gt;
'''Delete a PLS '''Delete a PLS to remove it from the system only when the PLS is disable and there are no tasks in memory. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DeletePLS MyPLS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= External Encoders =&lt;br /&gt;
The softMC supports external encoders (encoders not connected to an axis controlled by the softMC). These encoders are connected to the system using the external encoder input of any drive in the system. You can access the encoder periodically with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;? IDNValue(&amp;lt;''axis''&amp;gt;.DriveAddress, 53, 7)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
‘Query external encoder position&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using the encoder for master/slave operation or in a way that requires the value of the signal be updated to the softMC every SERCOS cycle, you must configure the telegram for that axis as Telegram type 7. You also must specify that external position must be included in the telegram. This command is only available when in communication phase of 2 or higher.&lt;br /&gt;
&lt;br /&gt;
= Access to Legacy I/O and ISA =&lt;br /&gt;
The softMC offers support for access to legacy ISA devices located in low memory(0xA0000 - 0xE0000).&lt;br /&gt;
&lt;br /&gt;
== Commands ==&lt;br /&gt;
The softMC supports memory and I/O instructions.&lt;br /&gt;
&lt;br /&gt;
If you are using memory-mapped devices, you will need the memory access commands, '''PEEK''' and '''POKE'''. The valid memory address range for '''PEEK''' is 0xA0000 through 0xDFFFF. The valid memory address range for '''POKE''' depends on the hardware version of the softMC card.&lt;br /&gt;
&lt;br /&gt;
'''For the ISA-Bus card''', the valid memory address range for '''POKE''' is 0xA0000 to 0xCFFFF and 0xDA000 to 0xDFFFF.&lt;br /&gt;
&lt;br /&gt;
'''For the PCI card''', the valid memory address range for '''POKE''' is 0xA0000 to 0xC7FFF and 0xDB000 to 0xDFFFF.&lt;br /&gt;
&lt;br /&gt;
*'''PEEKB''' transfers byte-wide (8-bit) data from the bus to a variable.&lt;br /&gt;
*'''PEEKW''' transfers word-wide (16-bit) data from the bus to a variable.&lt;br /&gt;
*'''POKEB''' transfers byte-wide (8-bit) data to the memory bus.&lt;br /&gt;
*'''POKEW''' transfers word-wide (16-bit) data to the memory bus.&lt;br /&gt;
&lt;br /&gt;
If you are using I/O-mapped cards, you need '''INP''' and '''OUT'''.&lt;br /&gt;
*'''INPB''' transfers byte-wide (8-bit) data from the I/O bus to a variable.&lt;br /&gt;
*'''INPW''' transfers word-wide (16-bit) data from the I/O bus to a variable.&lt;br /&gt;
*'''OUTB''' transfers byte-wide (8-bit) data to the I/O bus.&lt;br /&gt;
*'''OUTW '''transfers word-wide (16-bit) data to the I/O bus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:softMC Firmware|Input/Output]]&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=Input/Output&amp;diff=132911</id>
		<title>Input/Output</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=Input/Output&amp;diff=132911"/>
				<updated>2018-10-08T08:59:49Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: /* PLS (Programmable Limit Switch) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The softMC does not have local I/O, but can map drive inputs and outputs as well as I/O extension modules to its SYS.DIN and SYS.DOUT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Local I/O SERCOS version of softMC =&lt;br /&gt;
The softMC includes 23 inputs and 20 outputs as standard on the softMC. These are accessed with the system properties DIN.1 through DIN.23 and DOUT.1 through DOUT.20.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
? System.Din.1 System.Dout.5 = System.Din1&lt;br /&gt;
?System.Din&lt;br /&gt;
System.Dout=0xfe&lt;br /&gt;
&amp;lt;/pre&amp;gt;  --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Local I/O softMC =&lt;br /&gt;
softMC (CANOpen and EtherCAT) does not have local I/O. &lt;br /&gt;
For backward compatibility sys.dout.1 to sys.dout.20 can be read and written but do not have any function.&lt;br /&gt;
&amp;lt;br&amp;gt;Value of sys.din.1 to sys.din.23 is read from file IO.DAT, from field &amp;quot;INP&amp;quot;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;File IO.DAT is generated '''automatically''' if it does not exist on the flash disk. &lt;br /&gt;
&amp;lt;br&amp;gt;''Format'' of IO.DAT &lt;br /&gt;
&amp;lt;br&amp;gt;DIP=0xXX &lt;br /&gt;
&amp;lt;br&amp;gt;INP=0xXX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Software I/O SERCOS version of softMC =&lt;br /&gt;
The softMC provides virtual software I/O in addition to the standard I/O. The primary purpose of software I/O is to place a large group of I/O where it can be read from and written to as blocks in the softMC's dual port RAM. Virtual inputs are delivered from the host over DPRAM where virtual outputs are stored in the DPRAM and retrieved by the host. This is much faster than reading or writing individual I/O points one at a time. This allows efficient communication between a machine controller, such as a VB program or a software PLC, and the softMC program.&lt;br /&gt;
&amp;lt;br/&amp;gt;DPRAM exists '''only''' in SERCOS II version of Motion controller. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Software I/O softMC =&lt;br /&gt;
&lt;br /&gt;
== Bit-oriented Software I/O ==&lt;br /&gt;
Software I/O is used in the softMC program just like standard I/O. Standard inputs are accessed with SYSTEM.DIN.1 through DIN.23, and virtual inputs are accessed with SYSTEM.VIN.1 through VIN.32. Standard outputs are accessed with SYSTEM.DOUT.1 through DOUT.20, and virtual outputs are accessed with SYSTEM.VOUT.1 through VOUT.32. You can use software I/O to start events just as with standard I/O. Programmable limit switches can use software outputs just as with standard outputs. Here is an example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OnEvent SoftwareInputEvent System.VIn.1 = ON&lt;br /&gt;
System.VOut.1 = OFF&lt;br /&gt;
If(System.VOut.4 = ON) &lt;br /&gt;
. . . &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Long-Word-Oriented Software I/O ==&lt;br /&gt;
The entire word (32 bits) of software input and output is accessed when a bit position is not included in the reference to the input or output variable. So the following statement is valid:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
System.VOut=System.VIn&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This statement copies the virtual software input to the output. The physical input and output variables are used in this manner. Be careful when assigning virtual I/O to physical I/O because there are fewer physical bits than there are virtual bits. There are only 20 bits of physical output, but the virtual output variable can have 32 bits.&lt;br /&gt;
&lt;br /&gt;
= PLS (Programmable Limit Switch) = &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;'''Replaced by NEW PLS article - LINK'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A Programmable Limit Switch (PLS) monitors position feedback on any axis, real or simulated. A PLS offers more flexibility than a limit switch, as it allows many trip points and can be reconfigured on-the-fly. A PLS toggles the state of a specified system output when an axis position reaches any of the defined positions of the PLS. Some of the features of a PLS are:&lt;br /&gt;
&lt;br /&gt;
*Multiple position specifications.&lt;br /&gt;
&lt;br /&gt;
*Multiple PLSs per axis&lt;br /&gt;
&lt;br /&gt;
*PLS pattern repetition&lt;br /&gt;
&lt;br /&gt;
*Position hysteresis&lt;br /&gt;
&lt;br /&gt;
*Enabling and disabling of PLSs&lt;br /&gt;
&lt;br /&gt;
*The system output may be digital or soft (fast data)&lt;br /&gt;
&lt;br /&gt;
PLS positions are defined in an array that allows you to change individual values of PLS positions. This array must be increasing monotonic. There is no limit of the number of positions or PLSs that can be defined.&lt;br /&gt;
&lt;br /&gt;
The initial output polarity is specified with '''PLSPOLARITY'''. The output state is set when the PLS is enabled.&lt;br /&gt;
&lt;br /&gt;
== Enable and Disable ==&lt;br /&gt;
After being defined, a PLS is disabled (output pattern is not generated). The output is set when the PLS is enabled. The output is set to the defined initial state.&lt;br /&gt;
&lt;br /&gt;
PLS properties are changed only when the PLS is disabled. Each enabled PLS requires CPU resources. Conserve those resources by disabling the unused PLS(s). '''PLSENABLE''' controls the status of the PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PlsEnable = ON | OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''PLSENABLE''' queries the status of a PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
?MyPls.PlsEnable&lt;br /&gt;
if(MyPLS.PlsEnable = OFF) &lt;br /&gt;
. . .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or drives events:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EventOn MyEvent MyPLS.PlsOutput = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Switch Positions ==&lt;br /&gt;
The basic mechanism of the PLS is the switch position(s) where the PLS output changes state. The figure belows shows a PLS output with one switch position at 100.&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-1-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
More switch positions can be added. To have the PLS in the above example turn back off at 200, simply add a second position at 200 as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-2-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
You can add any number of positions. For example, to extend the above example to turn back on at 400 and off again at 600, add positions 3 and 4 as 400 and 600 as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-3-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
There is no explicit limit to the number of positions you can have in a PLS, but the PLS positions must be increasing monotonic (Position2 must be greater than Position1, Position3 must be greater than Position2, etc.).&lt;br /&gt;
&lt;br /&gt;
== Repetition Interval ==&lt;br /&gt;
'''PLSREPEAT''' allows you to repeat the same PLS after a fixed number of counts. For example, the figure below shows a PLS that turns on at 0, off at 10 and has a '''PLSREPEAT''' value of 100:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-4-RepetitionInterval.png|caption]]&lt;br /&gt;
&lt;br /&gt;
== Polarity ==&lt;br /&gt;
'''PLSPOLARITY''' allows you to control the polarity of the PLS output. The initial polarity may be specified as 1 or 0, indicating that the output is set to 1 or 0 after the PLS is enabled and when the axis is located between the first and second PLS positions. If the axis position (when the PLS is enabled) is not located within this segment, the output polarity is set to 0 or 1, according to the current position so that when the axis reaches the first segment, the output polarity is as indicated. The default value for polarity is '''0'''.&lt;br /&gt;
&lt;br /&gt;
== Hysteresis ==&lt;br /&gt;
The softMC allows you to apply hysteresis around switch points. Hysteresis provides a margin in the switching between PLS positions to accommodate noise in the PLS axis. Set the hysteresis greater than the noise on the axis, (typically, 5 or 10 counts of encoder is sufficient, less is required for resolver systems). If you have a hysteresis of 0.01 position units, each transition of PLS position is moved forward 0.005 units for positive motion and backward 0.005 units for negative motion. If the axis driving the PLS is stopped directly on a PLS position and the inherent noise on the axis is less than the hysteresis, the PLS state does not change due to this noise.&lt;br /&gt;
&lt;br /&gt;
== Enable and Disable ==&lt;br /&gt;
'''PLSENABLE''' enables or disables the PLS(s). After being defined, a PLS is disabled. The output is fixed when the PLS is enabled. The PLS output is set to the defined initial state when the PLS is enabled.&lt;br /&gt;
&lt;br /&gt;
== PLS Output State ==&lt;br /&gt;
Query the digital output associated with the PLS to query the state of the PLS output. For example, assume the PLS output is assigned to SYSTEM.DOUT.1. To determine the output state of the PLS, query the state of SYSTEM.DOUT.1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&amp;gt;?Sys.Dout.1&lt;br /&gt;
0 | 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Set Up ==&lt;br /&gt;
'''Step 1'''&lt;br /&gt;
&lt;br /&gt;
Declare the PLS with '''&amp;lt;nowiki&amp;gt;Common Shared &amp;lt;&amp;lt;/nowiki&amp;gt;''var''&amp;gt; as PLS''' in Config.Prg or at the terminal. You must name the PLS, specify the axis that drives the PLS, and name an output to be controlled by the PLS. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Common Shared MyPLS as PLS A1 System.Dout.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
sets up MyPLS as a PLS driven by axis A1 connected to SYSTEM.DOUT.1. The output can be a digital output (SYSTEM.DOUT.1 through DOUT.20) or it can be one of the virtual outputs (SYSTEM.VOUT.1 through VOUT.32).&lt;br /&gt;
&lt;br /&gt;
After the '''&amp;lt;nowiki&amp;gt;Common Shared &amp;lt;&amp;lt;/nowiki&amp;gt;''var''&amp;gt; as PLS''' executes, the PLS is disabled. Properties of the PLS are set as:&lt;br /&gt;
&lt;br /&gt;
:A single PLS position exists at 0.&lt;br /&gt;
&lt;br /&gt;
:The initial output polarity is 1.&lt;br /&gt;
&lt;br /&gt;
:'''PLSREPEAT''' is set to 0.&lt;br /&gt;
&lt;br /&gt;
:The hysteresis is set to 0.&lt;br /&gt;
&lt;br /&gt;
These properties may be set explicitly, as long as the PLS remains disabled. You can check which output is associated with a given PLS using '''PLSOUTPUT'''.&lt;br /&gt;
&lt;br /&gt;
'''Step 2'''&lt;br /&gt;
&lt;br /&gt;
Create the PLS data structure and define PLS positions. The number of defined positions is not explicitly limited. A call to '''CREATEPLSDATA''' creates an array of ''n'' positions that stores the position data. The array is 1-based and an error is generated if you attempt to access an index outside of the array bounds. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CreatePLSData 4 MyPLS&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.PLSPosition[1] = 1000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.PLSPosition[2] = 1100&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As a short form, you can use '''PPOS''' in place of '''PLSPOSITION''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.Ppos[3] = 2000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.Ppos[4] = 2200&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You cannot change PLS positions when the PLS is enabled. Position values must be increasing monotonically.&lt;br /&gt;
&lt;br /&gt;
'''Step 3'''&lt;br /&gt;
&lt;br /&gt;
Set the polarity. '''PLSPOLARITY''' defaults to OFF, indicating the PLS state should be OFF after the first position. Change '''PLSPOLARITY''' to ON to invert the state.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSPolarity = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change '''PLSPOLARITY''' only if the PLS is disabled.&lt;br /&gt;
&lt;br /&gt;
'''Step 4'''&lt;br /&gt;
&lt;br /&gt;
Set '''PLSREPEAT'''. If you want the PLS to repeat, set the value of '''PLSREPEAT '''to a non-zero, positive number. For example, to have the PLS repeat every 10,000 position units, enter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSRepeat = 10000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''PLSREPEAT''' defaults to 0, indicating that there is no repetition. Change '''PLSREPEAT''' only when the PLS is disabled.&lt;br /&gt;
&lt;br /&gt;
'''Step 5'''&lt;br /&gt;
&lt;br /&gt;
Set '''PLSHYSTERESIS''', ''if the application requires it''. Hysteresis is only necessary if the system does stop on or near a PLS position. Normally, a '''PLSHYSTERESIS''' of 5 or 10 counts of encoder (converted to position units) or 2 or 3 counts of resolver resolution is sufficient.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSHysteresis = 0.01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Step 6'''&lt;br /&gt;
&lt;br /&gt;
Enable the PLS. Enter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSEnable = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
There are a few other PLS functions you may need:&lt;br /&gt;
&lt;br /&gt;
'''Change Polarity '''The default output state of a PLS is 0. Change this initial state by modifying '''PLSPOLARITY'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSPolarity = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The PLS must be disabled when changing this setting.&lt;br /&gt;
&lt;br /&gt;
'''Query the Name '''Query the name of the axis driving the PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
? MyPLS.PLSAxisName&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
returns the axis associated with the PLS (A1).&lt;br /&gt;
&lt;br /&gt;
'''Disable the PLS '''Disable the PLS. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSEnable = OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must disable a PLS to change PLS properties. Disabling a PLS also helps conserve CPU resources.&lt;br /&gt;
&lt;br /&gt;
'''Delete a PLS '''Delete a PLS to remove it from the system only when the PLS is disable and there are no tasks in memory. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DeletePLS MyPLS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= External Encoders =&lt;br /&gt;
The softMC supports external encoders (encoders not connected to an axis controlled by the softMC). These encoders are connected to the system using the external encoder input of any drive in the system. You can access the encoder periodically with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;? IDNValue(&amp;lt;''axis''&amp;gt;.DriveAddress, 53, 7)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
‘Query external encoder position&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using the encoder for master/slave operation or in a way that requires the value of the signal be updated to the softMC every SERCOS cycle, you must configure the telegram for that axis as Telegram type 7. You also must specify that external position must be included in the telegram. This command is only available when in communication phase of 2 or higher.&lt;br /&gt;
&lt;br /&gt;
= Access to Legacy I/O and ISA =&lt;br /&gt;
The softMC offers support for access to legacy ISA devices located in low memory(0xA0000 - 0xE0000).&lt;br /&gt;
&lt;br /&gt;
== Commands ==&lt;br /&gt;
The softMC supports memory and I/O instructions.&lt;br /&gt;
&lt;br /&gt;
If you are using memory-mapped devices, you will need the memory access commands, '''PEEK''' and '''POKE'''. The valid memory address range for '''PEEK''' is 0xA0000 through 0xDFFFF. The valid memory address range for '''POKE''' depends on the hardware version of the softMC card.&lt;br /&gt;
&lt;br /&gt;
'''For the ISA-Bus card''', the valid memory address range for '''POKE''' is 0xA0000 to 0xCFFFF and 0xDA000 to 0xDFFFF.&lt;br /&gt;
&lt;br /&gt;
'''For the PCI card''', the valid memory address range for '''POKE''' is 0xA0000 to 0xC7FFF and 0xDB000 to 0xDFFFF.&lt;br /&gt;
&lt;br /&gt;
*'''PEEKB''' transfers byte-wide (8-bit) data from the bus to a variable.&lt;br /&gt;
*'''PEEKW''' transfers word-wide (16-bit) data from the bus to a variable.&lt;br /&gt;
*'''POKEB''' transfers byte-wide (8-bit) data to the memory bus.&lt;br /&gt;
*'''POKEW''' transfers word-wide (16-bit) data to the memory bus.&lt;br /&gt;
&lt;br /&gt;
If you are using I/O-mapped cards, you need '''INP''' and '''OUT'''.&lt;br /&gt;
*'''INPB''' transfers byte-wide (8-bit) data from the I/O bus to a variable.&lt;br /&gt;
*'''INPW''' transfers word-wide (16-bit) data from the I/O bus to a variable.&lt;br /&gt;
*'''OUTB''' transfers byte-wide (8-bit) data to the I/O bus.&lt;br /&gt;
*'''OUTW '''transfers word-wide (16-bit) data to the I/O bus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:softMC Firmware|Input/Output]]&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=Input/Output&amp;diff=132910</id>
		<title>Input/Output</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=Input/Output&amp;diff=132910"/>
				<updated>2018-10-08T08:53:33Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: /* PLS (Programmable Limit Switch) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The softMC does not have local I/O, but can map drive inputs and outputs as well as I/O extension modules to its SYS.DIN and SYS.DOUT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Local I/O SERCOS version of softMC =&lt;br /&gt;
The softMC includes 23 inputs and 20 outputs as standard on the softMC. These are accessed with the system properties DIN.1 through DIN.23 and DOUT.1 through DOUT.20.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
? System.Din.1 System.Dout.5 = System.Din1&lt;br /&gt;
?System.Din&lt;br /&gt;
System.Dout=0xfe&lt;br /&gt;
&amp;lt;/pre&amp;gt;  --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Local I/O softMC =&lt;br /&gt;
softMC (CANOpen and EtherCAT) does not have local I/O. &lt;br /&gt;
For backward compatibility sys.dout.1 to sys.dout.20 can be read and written but do not have any function.&lt;br /&gt;
&amp;lt;br&amp;gt;Value of sys.din.1 to sys.din.23 is read from file IO.DAT, from field &amp;quot;INP&amp;quot;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;File IO.DAT is generated '''automatically''' if it does not exist on the flash disk. &lt;br /&gt;
&amp;lt;br&amp;gt;''Format'' of IO.DAT &lt;br /&gt;
&amp;lt;br&amp;gt;DIP=0xXX &lt;br /&gt;
&amp;lt;br&amp;gt;INP=0xXX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Software I/O SERCOS version of softMC =&lt;br /&gt;
The softMC provides virtual software I/O in addition to the standard I/O. The primary purpose of software I/O is to place a large group of I/O where it can be read from and written to as blocks in the softMC's dual port RAM. Virtual inputs are delivered from the host over DPRAM where virtual outputs are stored in the DPRAM and retrieved by the host. This is much faster than reading or writing individual I/O points one at a time. This allows efficient communication between a machine controller, such as a VB program or a software PLC, and the softMC program.&lt;br /&gt;
&amp;lt;br/&amp;gt;DPRAM exists '''only''' in SERCOS II version of Motion controller. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Software I/O softMC =&lt;br /&gt;
&lt;br /&gt;
== Bit-oriented Software I/O ==&lt;br /&gt;
Software I/O is used in the softMC program just like standard I/O. Standard inputs are accessed with SYSTEM.DIN.1 through DIN.23, and virtual inputs are accessed with SYSTEM.VIN.1 through VIN.32. Standard outputs are accessed with SYSTEM.DOUT.1 through DOUT.20, and virtual outputs are accessed with SYSTEM.VOUT.1 through VOUT.32. You can use software I/O to start events just as with standard I/O. Programmable limit switches can use software outputs just as with standard outputs. Here is an example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OnEvent SoftwareInputEvent System.VIn.1 = ON&lt;br /&gt;
System.VOut.1 = OFF&lt;br /&gt;
If(System.VOut.4 = ON) &lt;br /&gt;
. . . &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Long-Word-Oriented Software I/O ==&lt;br /&gt;
The entire word (32 bits) of software input and output is accessed when a bit position is not included in the reference to the input or output variable. So the following statement is valid:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
System.VOut=System.VIn&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This statement copies the virtual software input to the output. The physical input and output variables are used in this manner. Be careful when assigning virtual I/O to physical I/O because there are fewer physical bits than there are virtual bits. There are only 20 bits of physical output, but the virtual output variable can have 32 bits.&lt;br /&gt;
&lt;br /&gt;
= PLS (Programmable Limit Switch) = &lt;br /&gt;
'''Replaced by NEW PLS article''' - LINK&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=freebasic&amp;gt;xxx vxv&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
A Programmable Limit Switch (PLS) monitors position feedback on any axis, real or simulated. A PLS offers more flexibility than a limit switch, as it allows many trip points and can be reconfigured on-the-fly. A PLS toggles the state of a specified system output when an axis position reaches any of the defined positions of the PLS. Some of the features of a PLS are:&lt;br /&gt;
&lt;br /&gt;
*Multiple position specifications.&lt;br /&gt;
&lt;br /&gt;
*Multiple PLSs per axis&lt;br /&gt;
&lt;br /&gt;
*PLS pattern repetition&lt;br /&gt;
&lt;br /&gt;
*Position hysteresis&lt;br /&gt;
&lt;br /&gt;
*Enabling and disabling of PLSs&lt;br /&gt;
&lt;br /&gt;
*The system output may be digital or soft (fast data)&lt;br /&gt;
&lt;br /&gt;
PLS positions are defined in an array that allows you to change individual values of PLS positions. This array must be increasing monotonic. There is no limit of the number of positions or PLSs that can be defined.&lt;br /&gt;
&lt;br /&gt;
The initial output polarity is specified with '''PLSPOLARITY'''. The output state is set when the PLS is enabled.&lt;br /&gt;
&lt;br /&gt;
== Enable and Disable ==&lt;br /&gt;
After being defined, a PLS is disabled (output pattern is not generated). The output is set when the PLS is enabled. The output is set to the defined initial state.&lt;br /&gt;
&lt;br /&gt;
PLS properties are changed only when the PLS is disabled. Each enabled PLS requires CPU resources. Conserve those resources by disabling the unused PLS(s). '''PLSENABLE''' controls the status of the PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PlsEnable = ON | OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''PLSENABLE''' queries the status of a PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
?MyPls.PlsEnable&lt;br /&gt;
if(MyPLS.PlsEnable = OFF) &lt;br /&gt;
. . .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or drives events:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EventOn MyEvent MyPLS.PlsOutput = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Switch Positions ==&lt;br /&gt;
The basic mechanism of the PLS is the switch position(s) where the PLS output changes state. The figure belows shows a PLS output with one switch position at 100.&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-1-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
More switch positions can be added. To have the PLS in the above example turn back off at 200, simply add a second position at 200 as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-2-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
You can add any number of positions. For example, to extend the above example to turn back on at 400 and off again at 600, add positions 3 and 4 as 400 and 600 as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-3-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
There is no explicit limit to the number of positions you can have in a PLS, but the PLS positions must be increasing monotonic (Position2 must be greater than Position1, Position3 must be greater than Position2, etc.).&lt;br /&gt;
&lt;br /&gt;
== Repetition Interval ==&lt;br /&gt;
'''PLSREPEAT''' allows you to repeat the same PLS after a fixed number of counts. For example, the figure below shows a PLS that turns on at 0, off at 10 and has a '''PLSREPEAT''' value of 100:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-4-RepetitionInterval.png|caption]]&lt;br /&gt;
&lt;br /&gt;
== Polarity ==&lt;br /&gt;
'''PLSPOLARITY''' allows you to control the polarity of the PLS output. The initial polarity may be specified as 1 or 0, indicating that the output is set to 1 or 0 after the PLS is enabled and when the axis is located between the first and second PLS positions. If the axis position (when the PLS is enabled) is not located within this segment, the output polarity is set to 0 or 1, according to the current position so that when the axis reaches the first segment, the output polarity is as indicated. The default value for polarity is '''0'''.&lt;br /&gt;
&lt;br /&gt;
== Hysteresis ==&lt;br /&gt;
The softMC allows you to apply hysteresis around switch points. Hysteresis provides a margin in the switching between PLS positions to accommodate noise in the PLS axis. Set the hysteresis greater than the noise on the axis, (typically, 5 or 10 counts of encoder is sufficient, less is required for resolver systems). If you have a hysteresis of 0.01 position units, each transition of PLS position is moved forward 0.005 units for positive motion and backward 0.005 units for negative motion. If the axis driving the PLS is stopped directly on a PLS position and the inherent noise on the axis is less than the hysteresis, the PLS state does not change due to this noise.&lt;br /&gt;
&lt;br /&gt;
== Enable and Disable ==&lt;br /&gt;
'''PLSENABLE''' enables or disables the PLS(s). After being defined, a PLS is disabled. The output is fixed when the PLS is enabled. The PLS output is set to the defined initial state when the PLS is enabled.&lt;br /&gt;
&lt;br /&gt;
== PLS Output State ==&lt;br /&gt;
Query the digital output associated with the PLS to query the state of the PLS output. For example, assume the PLS output is assigned to SYSTEM.DOUT.1. To determine the output state of the PLS, query the state of SYSTEM.DOUT.1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&amp;gt;?Sys.Dout.1&lt;br /&gt;
0 | 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Set Up ==&lt;br /&gt;
'''Step 1'''&lt;br /&gt;
&lt;br /&gt;
Declare the PLS with '''&amp;lt;nowiki&amp;gt;Common Shared &amp;lt;&amp;lt;/nowiki&amp;gt;''var''&amp;gt; as PLS''' in Config.Prg or at the terminal. You must name the PLS, specify the axis that drives the PLS, and name an output to be controlled by the PLS. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Common Shared MyPLS as PLS A1 System.Dout.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
sets up MyPLS as a PLS driven by axis A1 connected to SYSTEM.DOUT.1. The output can be a digital output (SYSTEM.DOUT.1 through DOUT.20) or it can be one of the virtual outputs (SYSTEM.VOUT.1 through VOUT.32).&lt;br /&gt;
&lt;br /&gt;
After the '''&amp;lt;nowiki&amp;gt;Common Shared &amp;lt;&amp;lt;/nowiki&amp;gt;''var''&amp;gt; as PLS''' executes, the PLS is disabled. Properties of the PLS are set as:&lt;br /&gt;
&lt;br /&gt;
:A single PLS position exists at 0.&lt;br /&gt;
&lt;br /&gt;
:The initial output polarity is 1.&lt;br /&gt;
&lt;br /&gt;
:'''PLSREPEAT''' is set to 0.&lt;br /&gt;
&lt;br /&gt;
:The hysteresis is set to 0.&lt;br /&gt;
&lt;br /&gt;
These properties may be set explicitly, as long as the PLS remains disabled. You can check which output is associated with a given PLS using '''PLSOUTPUT'''.&lt;br /&gt;
&lt;br /&gt;
'''Step 2'''&lt;br /&gt;
&lt;br /&gt;
Create the PLS data structure and define PLS positions. The number of defined positions is not explicitly limited. A call to '''CREATEPLSDATA''' creates an array of ''n'' positions that stores the position data. The array is 1-based and an error is generated if you attempt to access an index outside of the array bounds. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CreatePLSData 4 MyPLS&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.PLSPosition[1] = 1000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.PLSPosition[2] = 1100&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As a short form, you can use '''PPOS''' in place of '''PLSPOSITION''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.Ppos[3] = 2000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.Ppos[4] = 2200&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You cannot change PLS positions when the PLS is enabled. Position values must be increasing monotonically.&lt;br /&gt;
&lt;br /&gt;
'''Step 3'''&lt;br /&gt;
&lt;br /&gt;
Set the polarity. '''PLSPOLARITY''' defaults to OFF, indicating the PLS state should be OFF after the first position. Change '''PLSPOLARITY''' to ON to invert the state.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSPolarity = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change '''PLSPOLARITY''' only if the PLS is disabled.&lt;br /&gt;
&lt;br /&gt;
'''Step 4'''&lt;br /&gt;
&lt;br /&gt;
Set '''PLSREPEAT'''. If you want the PLS to repeat, set the value of '''PLSREPEAT '''to a non-zero, positive number. For example, to have the PLS repeat every 10,000 position units, enter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSRepeat = 10000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''PLSREPEAT''' defaults to 0, indicating that there is no repetition. Change '''PLSREPEAT''' only when the PLS is disabled.&lt;br /&gt;
&lt;br /&gt;
'''Step 5'''&lt;br /&gt;
&lt;br /&gt;
Set '''PLSHYSTERESIS''', ''if the application requires it''. Hysteresis is only necessary if the system does stop on or near a PLS position. Normally, a '''PLSHYSTERESIS''' of 5 or 10 counts of encoder (converted to position units) or 2 or 3 counts of resolver resolution is sufficient.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSHysteresis = 0.01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Step 6'''&lt;br /&gt;
&lt;br /&gt;
Enable the PLS. Enter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSEnable = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
There are a few other PLS functions you may need:&lt;br /&gt;
&lt;br /&gt;
'''Change Polarity '''The default output state of a PLS is 0. Change this initial state by modifying '''PLSPOLARITY'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSPolarity = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The PLS must be disabled when changing this setting.&lt;br /&gt;
&lt;br /&gt;
'''Query the Name '''Query the name of the axis driving the PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
? MyPLS.PLSAxisName&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
returns the axis associated with the PLS (A1).&lt;br /&gt;
&lt;br /&gt;
'''Disable the PLS '''Disable the PLS. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSEnable = OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must disable a PLS to change PLS properties. Disabling a PLS also helps conserve CPU resources.&lt;br /&gt;
&lt;br /&gt;
'''Delete a PLS '''Delete a PLS to remove it from the system only when the PLS is disable and there are no tasks in memory. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DeletePLS MyPLS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= External Encoders =&lt;br /&gt;
The softMC supports external encoders (encoders not connected to an axis controlled by the softMC). These encoders are connected to the system using the external encoder input of any drive in the system. You can access the encoder periodically with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;? IDNValue(&amp;lt;''axis''&amp;gt;.DriveAddress, 53, 7)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
‘Query external encoder position&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using the encoder for master/slave operation or in a way that requires the value of the signal be updated to the softMC every SERCOS cycle, you must configure the telegram for that axis as Telegram type 7. You also must specify that external position must be included in the telegram. This command is only available when in communication phase of 2 or higher.&lt;br /&gt;
&lt;br /&gt;
= Access to Legacy I/O and ISA =&lt;br /&gt;
The softMC offers support for access to legacy ISA devices located in low memory(0xA0000 - 0xE0000).&lt;br /&gt;
&lt;br /&gt;
== Commands ==&lt;br /&gt;
The softMC supports memory and I/O instructions.&lt;br /&gt;
&lt;br /&gt;
If you are using memory-mapped devices, you will need the memory access commands, '''PEEK''' and '''POKE'''. The valid memory address range for '''PEEK''' is 0xA0000 through 0xDFFFF. The valid memory address range for '''POKE''' depends on the hardware version of the softMC card.&lt;br /&gt;
&lt;br /&gt;
'''For the ISA-Bus card''', the valid memory address range for '''POKE''' is 0xA0000 to 0xCFFFF and 0xDA000 to 0xDFFFF.&lt;br /&gt;
&lt;br /&gt;
'''For the PCI card''', the valid memory address range for '''POKE''' is 0xA0000 to 0xC7FFF and 0xDB000 to 0xDFFFF.&lt;br /&gt;
&lt;br /&gt;
*'''PEEKB''' transfers byte-wide (8-bit) data from the bus to a variable.&lt;br /&gt;
*'''PEEKW''' transfers word-wide (16-bit) data from the bus to a variable.&lt;br /&gt;
*'''POKEB''' transfers byte-wide (8-bit) data to the memory bus.&lt;br /&gt;
*'''POKEW''' transfers word-wide (16-bit) data to the memory bus.&lt;br /&gt;
&lt;br /&gt;
If you are using I/O-mapped cards, you need '''INP''' and '''OUT'''.&lt;br /&gt;
*'''INPB''' transfers byte-wide (8-bit) data from the I/O bus to a variable.&lt;br /&gt;
*'''INPW''' transfers word-wide (16-bit) data from the I/O bus to a variable.&lt;br /&gt;
*'''OUTB''' transfers byte-wide (8-bit) data to the I/O bus.&lt;br /&gt;
*'''OUTW '''transfers word-wide (16-bit) data to the I/O bus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:softMC Firmware|Input/Output]]&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=Input/Output&amp;diff=132909</id>
		<title>Input/Output</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=Input/Output&amp;diff=132909"/>
				<updated>2018-10-08T08:52:09Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: /* PLS (Programmable Limit Switch) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The softMC does not have local I/O, but can map drive inputs and outputs as well as I/O extension modules to its SYS.DIN and SYS.DOUT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Local I/O SERCOS version of softMC =&lt;br /&gt;
The softMC includes 23 inputs and 20 outputs as standard on the softMC. These are accessed with the system properties DIN.1 through DIN.23 and DOUT.1 through DOUT.20.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
? System.Din.1 System.Dout.5 = System.Din1&lt;br /&gt;
?System.Din&lt;br /&gt;
System.Dout=0xfe&lt;br /&gt;
&amp;lt;/pre&amp;gt;  --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Local I/O softMC =&lt;br /&gt;
softMC (CANOpen and EtherCAT) does not have local I/O. &lt;br /&gt;
For backward compatibility sys.dout.1 to sys.dout.20 can be read and written but do not have any function.&lt;br /&gt;
&amp;lt;br&amp;gt;Value of sys.din.1 to sys.din.23 is read from file IO.DAT, from field &amp;quot;INP&amp;quot;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;File IO.DAT is generated '''automatically''' if it does not exist on the flash disk. &lt;br /&gt;
&amp;lt;br&amp;gt;''Format'' of IO.DAT &lt;br /&gt;
&amp;lt;br&amp;gt;DIP=0xXX &lt;br /&gt;
&amp;lt;br&amp;gt;INP=0xXX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Software I/O SERCOS version of softMC =&lt;br /&gt;
The softMC provides virtual software I/O in addition to the standard I/O. The primary purpose of software I/O is to place a large group of I/O where it can be read from and written to as blocks in the softMC's dual port RAM. Virtual inputs are delivered from the host over DPRAM where virtual outputs are stored in the DPRAM and retrieved by the host. This is much faster than reading or writing individual I/O points one at a time. This allows efficient communication between a machine controller, such as a VB program or a software PLC, and the softMC program.&lt;br /&gt;
&amp;lt;br/&amp;gt;DPRAM exists '''only''' in SERCOS II version of Motion controller. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Software I/O softMC =&lt;br /&gt;
&lt;br /&gt;
== Bit-oriented Software I/O ==&lt;br /&gt;
Software I/O is used in the softMC program just like standard I/O. Standard inputs are accessed with SYSTEM.DIN.1 through DIN.23, and virtual inputs are accessed with SYSTEM.VIN.1 through VIN.32. Standard outputs are accessed with SYSTEM.DOUT.1 through DOUT.20, and virtual outputs are accessed with SYSTEM.VOUT.1 through VOUT.32. You can use software I/O to start events just as with standard I/O. Programmable limit switches can use software outputs just as with standard outputs. Here is an example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OnEvent SoftwareInputEvent System.VIn.1 = ON&lt;br /&gt;
System.VOut.1 = OFF&lt;br /&gt;
If(System.VOut.4 = ON) &lt;br /&gt;
. . . &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Long-Word-Oriented Software I/O ==&lt;br /&gt;
The entire word (32 bits) of software input and output is accessed when a bit position is not included in the reference to the input or output variable. So the following statement is valid:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
System.VOut=System.VIn&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This statement copies the virtual software input to the output. The physical input and output variables are used in this manner. Be careful when assigning virtual I/O to physical I/O because there are fewer physical bits than there are virtual bits. There are only 20 bits of physical output, but the virtual output variable can have 32 bits.&lt;br /&gt;
&lt;br /&gt;
= PLS (Programmable Limit Switch) = &lt;br /&gt;
replaced by NEW PLS article''' - LINK&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
A Programmable Limit Switch (PLS) monitors position feedback on any axis, real or simulated. A PLS offers more flexibility than a limit switch, as it allows many trip points and can be reconfigured on-the-fly. A PLS toggles the state of a specified system output when an axis position reaches any of the defined positions of the PLS. Some of the features of a PLS are:&lt;br /&gt;
&lt;br /&gt;
*Multiple position specifications.&lt;br /&gt;
&lt;br /&gt;
*Multiple PLSs per axis&lt;br /&gt;
&lt;br /&gt;
*PLS pattern repetition&lt;br /&gt;
&lt;br /&gt;
*Position hysteresis&lt;br /&gt;
&lt;br /&gt;
*Enabling and disabling of PLSs&lt;br /&gt;
&lt;br /&gt;
*The system output may be digital or soft (fast data)&lt;br /&gt;
&lt;br /&gt;
PLS positions are defined in an array that allows you to change individual values of PLS positions. This array must be increasing monotonic. There is no limit of the number of positions or PLSs that can be defined.&lt;br /&gt;
&lt;br /&gt;
The initial output polarity is specified with '''PLSPOLARITY'''. The output state is set when the PLS is enabled.&lt;br /&gt;
&lt;br /&gt;
== Enable and Disable ==&lt;br /&gt;
After being defined, a PLS is disabled (output pattern is not generated). The output is set when the PLS is enabled. The output is set to the defined initial state.&lt;br /&gt;
&lt;br /&gt;
PLS properties are changed only when the PLS is disabled. Each enabled PLS requires CPU resources. Conserve those resources by disabling the unused PLS(s). '''PLSENABLE''' controls the status of the PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PlsEnable = ON | OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''PLSENABLE''' queries the status of a PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
?MyPls.PlsEnable&lt;br /&gt;
if(MyPLS.PlsEnable = OFF) &lt;br /&gt;
. . .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or drives events:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EventOn MyEvent MyPLS.PlsOutput = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Switch Positions ==&lt;br /&gt;
The basic mechanism of the PLS is the switch position(s) where the PLS output changes state. The figure belows shows a PLS output with one switch position at 100.&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-1-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
More switch positions can be added. To have the PLS in the above example turn back off at 200, simply add a second position at 200 as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-2-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
You can add any number of positions. For example, to extend the above example to turn back on at 400 and off again at 600, add positions 3 and 4 as 400 and 600 as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-3-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
There is no explicit limit to the number of positions you can have in a PLS, but the PLS positions must be increasing monotonic (Position2 must be greater than Position1, Position3 must be greater than Position2, etc.).&lt;br /&gt;
&lt;br /&gt;
== Repetition Interval ==&lt;br /&gt;
'''PLSREPEAT''' allows you to repeat the same PLS after a fixed number of counts. For example, the figure below shows a PLS that turns on at 0, off at 10 and has a '''PLSREPEAT''' value of 100:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-4-RepetitionInterval.png|caption]]&lt;br /&gt;
&lt;br /&gt;
== Polarity ==&lt;br /&gt;
'''PLSPOLARITY''' allows you to control the polarity of the PLS output. The initial polarity may be specified as 1 or 0, indicating that the output is set to 1 or 0 after the PLS is enabled and when the axis is located between the first and second PLS positions. If the axis position (when the PLS is enabled) is not located within this segment, the output polarity is set to 0 or 1, according to the current position so that when the axis reaches the first segment, the output polarity is as indicated. The default value for polarity is '''0'''.&lt;br /&gt;
&lt;br /&gt;
== Hysteresis ==&lt;br /&gt;
The softMC allows you to apply hysteresis around switch points. Hysteresis provides a margin in the switching between PLS positions to accommodate noise in the PLS axis. Set the hysteresis greater than the noise on the axis, (typically, 5 or 10 counts of encoder is sufficient, less is required for resolver systems). If you have a hysteresis of 0.01 position units, each transition of PLS position is moved forward 0.005 units for positive motion and backward 0.005 units for negative motion. If the axis driving the PLS is stopped directly on a PLS position and the inherent noise on the axis is less than the hysteresis, the PLS state does not change due to this noise.&lt;br /&gt;
&lt;br /&gt;
== Enable and Disable ==&lt;br /&gt;
'''PLSENABLE''' enables or disables the PLS(s). After being defined, a PLS is disabled. The output is fixed when the PLS is enabled. The PLS output is set to the defined initial state when the PLS is enabled.&lt;br /&gt;
&lt;br /&gt;
== PLS Output State ==&lt;br /&gt;
Query the digital output associated with the PLS to query the state of the PLS output. For example, assume the PLS output is assigned to SYSTEM.DOUT.1. To determine the output state of the PLS, query the state of SYSTEM.DOUT.1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&amp;gt;?Sys.Dout.1&lt;br /&gt;
0 | 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Set Up ==&lt;br /&gt;
'''Step 1'''&lt;br /&gt;
&lt;br /&gt;
Declare the PLS with '''&amp;lt;nowiki&amp;gt;Common Shared &amp;lt;&amp;lt;/nowiki&amp;gt;''var''&amp;gt; as PLS''' in Config.Prg or at the terminal. You must name the PLS, specify the axis that drives the PLS, and name an output to be controlled by the PLS. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Common Shared MyPLS as PLS A1 System.Dout.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
sets up MyPLS as a PLS driven by axis A1 connected to SYSTEM.DOUT.1. The output can be a digital output (SYSTEM.DOUT.1 through DOUT.20) or it can be one of the virtual outputs (SYSTEM.VOUT.1 through VOUT.32).&lt;br /&gt;
&lt;br /&gt;
After the '''&amp;lt;nowiki&amp;gt;Common Shared &amp;lt;&amp;lt;/nowiki&amp;gt;''var''&amp;gt; as PLS''' executes, the PLS is disabled. Properties of the PLS are set as:&lt;br /&gt;
&lt;br /&gt;
:A single PLS position exists at 0.&lt;br /&gt;
&lt;br /&gt;
:The initial output polarity is 1.&lt;br /&gt;
&lt;br /&gt;
:'''PLSREPEAT''' is set to 0.&lt;br /&gt;
&lt;br /&gt;
:The hysteresis is set to 0.&lt;br /&gt;
&lt;br /&gt;
These properties may be set explicitly, as long as the PLS remains disabled. You can check which output is associated with a given PLS using '''PLSOUTPUT'''.&lt;br /&gt;
&lt;br /&gt;
'''Step 2'''&lt;br /&gt;
&lt;br /&gt;
Create the PLS data structure and define PLS positions. The number of defined positions is not explicitly limited. A call to '''CREATEPLSDATA''' creates an array of ''n'' positions that stores the position data. The array is 1-based and an error is generated if you attempt to access an index outside of the array bounds. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CreatePLSData 4 MyPLS&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.PLSPosition[1] = 1000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.PLSPosition[2] = 1100&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As a short form, you can use '''PPOS''' in place of '''PLSPOSITION''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.Ppos[3] = 2000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.Ppos[4] = 2200&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You cannot change PLS positions when the PLS is enabled. Position values must be increasing monotonically.&lt;br /&gt;
&lt;br /&gt;
'''Step 3'''&lt;br /&gt;
&lt;br /&gt;
Set the polarity. '''PLSPOLARITY''' defaults to OFF, indicating the PLS state should be OFF after the first position. Change '''PLSPOLARITY''' to ON to invert the state.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSPolarity = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change '''PLSPOLARITY''' only if the PLS is disabled.&lt;br /&gt;
&lt;br /&gt;
'''Step 4'''&lt;br /&gt;
&lt;br /&gt;
Set '''PLSREPEAT'''. If you want the PLS to repeat, set the value of '''PLSREPEAT '''to a non-zero, positive number. For example, to have the PLS repeat every 10,000 position units, enter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSRepeat = 10000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''PLSREPEAT''' defaults to 0, indicating that there is no repetition. Change '''PLSREPEAT''' only when the PLS is disabled.&lt;br /&gt;
&lt;br /&gt;
'''Step 5'''&lt;br /&gt;
&lt;br /&gt;
Set '''PLSHYSTERESIS''', ''if the application requires it''. Hysteresis is only necessary if the system does stop on or near a PLS position. Normally, a '''PLSHYSTERESIS''' of 5 or 10 counts of encoder (converted to position units) or 2 or 3 counts of resolver resolution is sufficient.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSHysteresis = 0.01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Step 6'''&lt;br /&gt;
&lt;br /&gt;
Enable the PLS. Enter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSEnable = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
There are a few other PLS functions you may need:&lt;br /&gt;
&lt;br /&gt;
'''Change Polarity '''The default output state of a PLS is 0. Change this initial state by modifying '''PLSPOLARITY'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSPolarity = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The PLS must be disabled when changing this setting.&lt;br /&gt;
&lt;br /&gt;
'''Query the Name '''Query the name of the axis driving the PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
? MyPLS.PLSAxisName&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
returns the axis associated with the PLS (A1).&lt;br /&gt;
&lt;br /&gt;
'''Disable the PLS '''Disable the PLS. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSEnable = OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must disable a PLS to change PLS properties. Disabling a PLS also helps conserve CPU resources.&lt;br /&gt;
&lt;br /&gt;
'''Delete a PLS '''Delete a PLS to remove it from the system only when the PLS is disable and there are no tasks in memory. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DeletePLS MyPLS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= External Encoders =&lt;br /&gt;
The softMC supports external encoders (encoders not connected to an axis controlled by the softMC). These encoders are connected to the system using the external encoder input of any drive in the system. You can access the encoder periodically with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;? IDNValue(&amp;lt;''axis''&amp;gt;.DriveAddress, 53, 7)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
‘Query external encoder position&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using the encoder for master/slave operation or in a way that requires the value of the signal be updated to the softMC every SERCOS cycle, you must configure the telegram for that axis as Telegram type 7. You also must specify that external position must be included in the telegram. This command is only available when in communication phase of 2 or higher.&lt;br /&gt;
&lt;br /&gt;
= Access to Legacy I/O and ISA =&lt;br /&gt;
The softMC offers support for access to legacy ISA devices located in low memory(0xA0000 - 0xE0000).&lt;br /&gt;
&lt;br /&gt;
== Commands ==&lt;br /&gt;
The softMC supports memory and I/O instructions.&lt;br /&gt;
&lt;br /&gt;
If you are using memory-mapped devices, you will need the memory access commands, '''PEEK''' and '''POKE'''. The valid memory address range for '''PEEK''' is 0xA0000 through 0xDFFFF. The valid memory address range for '''POKE''' depends on the hardware version of the softMC card.&lt;br /&gt;
&lt;br /&gt;
'''For the ISA-Bus card''', the valid memory address range for '''POKE''' is 0xA0000 to 0xCFFFF and 0xDA000 to 0xDFFFF.&lt;br /&gt;
&lt;br /&gt;
'''For the PCI card''', the valid memory address range for '''POKE''' is 0xA0000 to 0xC7FFF and 0xDB000 to 0xDFFFF.&lt;br /&gt;
&lt;br /&gt;
*'''PEEKB''' transfers byte-wide (8-bit) data from the bus to a variable.&lt;br /&gt;
*'''PEEKW''' transfers word-wide (16-bit) data from the bus to a variable.&lt;br /&gt;
*'''POKEB''' transfers byte-wide (8-bit) data to the memory bus.&lt;br /&gt;
*'''POKEW''' transfers word-wide (16-bit) data to the memory bus.&lt;br /&gt;
&lt;br /&gt;
If you are using I/O-mapped cards, you need '''INP''' and '''OUT'''.&lt;br /&gt;
*'''INPB''' transfers byte-wide (8-bit) data from the I/O bus to a variable.&lt;br /&gt;
*'''INPW''' transfers word-wide (16-bit) data from the I/O bus to a variable.&lt;br /&gt;
*'''OUTB''' transfers byte-wide (8-bit) data to the I/O bus.&lt;br /&gt;
*'''OUTW '''transfers word-wide (16-bit) data to the I/O bus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:softMC Firmware|Input/Output]]&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=Input/Output&amp;diff=132908</id>
		<title>Input/Output</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=Input/Output&amp;diff=132908"/>
				<updated>2018-10-08T08:51:52Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: /* Long-Word-Oriented Software I/O */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The softMC does not have local I/O, but can map drive inputs and outputs as well as I/O extension modules to its SYS.DIN and SYS.DOUT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Local I/O SERCOS version of softMC =&lt;br /&gt;
The softMC includes 23 inputs and 20 outputs as standard on the softMC. These are accessed with the system properties DIN.1 through DIN.23 and DOUT.1 through DOUT.20.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
? System.Din.1 System.Dout.5 = System.Din1&lt;br /&gt;
?System.Din&lt;br /&gt;
System.Dout=0xfe&lt;br /&gt;
&amp;lt;/pre&amp;gt;  --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Local I/O softMC =&lt;br /&gt;
softMC (CANOpen and EtherCAT) does not have local I/O. &lt;br /&gt;
For backward compatibility sys.dout.1 to sys.dout.20 can be read and written but do not have any function.&lt;br /&gt;
&amp;lt;br&amp;gt;Value of sys.din.1 to sys.din.23 is read from file IO.DAT, from field &amp;quot;INP&amp;quot;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;File IO.DAT is generated '''automatically''' if it does not exist on the flash disk. &lt;br /&gt;
&amp;lt;br&amp;gt;''Format'' of IO.DAT &lt;br /&gt;
&amp;lt;br&amp;gt;DIP=0xXX &lt;br /&gt;
&amp;lt;br&amp;gt;INP=0xXX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Software I/O SERCOS version of softMC =&lt;br /&gt;
The softMC provides virtual software I/O in addition to the standard I/O. The primary purpose of software I/O is to place a large group of I/O where it can be read from and written to as blocks in the softMC's dual port RAM. Virtual inputs are delivered from the host over DPRAM where virtual outputs are stored in the DPRAM and retrieved by the host. This is much faster than reading or writing individual I/O points one at a time. This allows efficient communication between a machine controller, such as a VB program or a software PLC, and the softMC program.&lt;br /&gt;
&amp;lt;br/&amp;gt;DPRAM exists '''only''' in SERCOS II version of Motion controller. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Software I/O softMC =&lt;br /&gt;
&lt;br /&gt;
== Bit-oriented Software I/O ==&lt;br /&gt;
Software I/O is used in the softMC program just like standard I/O. Standard inputs are accessed with SYSTEM.DIN.1 through DIN.23, and virtual inputs are accessed with SYSTEM.VIN.1 through VIN.32. Standard outputs are accessed with SYSTEM.DOUT.1 through DOUT.20, and virtual outputs are accessed with SYSTEM.VOUT.1 through VOUT.32. You can use software I/O to start events just as with standard I/O. Programmable limit switches can use software outputs just as with standard outputs. Here is an example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OnEvent SoftwareInputEvent System.VIn.1 = ON&lt;br /&gt;
System.VOut.1 = OFF&lt;br /&gt;
If(System.VOut.4 = ON) &lt;br /&gt;
. . . &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Long-Word-Oriented Software I/O ==&lt;br /&gt;
The entire word (32 bits) of software input and output is accessed when a bit position is not included in the reference to the input or output variable. So the following statement is valid:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
System.VOut=System.VIn&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This statement copies the virtual software input to the output. The physical input and output variables are used in this manner. Be careful when assigning virtual I/O to physical I/O because there are fewer physical bits than there are virtual bits. There are only 20 bits of physical output, but the virtual output variable can have 32 bits.&lt;br /&gt;
&lt;br /&gt;
= PLS (Programmable Limit Switch) = &lt;br /&gt;
replaced by NEW PLS article''' - LINK&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
A Programmable Limit Switch (PLS) monitors position feedback on any axis, real or simulated. A PLS offers more flexibility than a limit switch, as it allows many trip points and can be reconfigured on-the-fly. A PLS toggles the state of a specified system output when an axis position reaches any of the defined positions of the PLS. Some of the features of a PLS are:&lt;br /&gt;
&lt;br /&gt;
*Multiple position specifications.&lt;br /&gt;
&lt;br /&gt;
*Multiple PLSs per axis&lt;br /&gt;
&lt;br /&gt;
*PLS pattern repetition&lt;br /&gt;
&lt;br /&gt;
*Position hysteresis&lt;br /&gt;
&lt;br /&gt;
*Enabling and disabling of PLSs&lt;br /&gt;
&lt;br /&gt;
*The system output may be digital or soft (fast data)&lt;br /&gt;
&lt;br /&gt;
PLS positions are defined in an array that allows you to change individual values of PLS positions. This array must be increasing monotonic. There is no limit of the number of positions or PLSs that can be defined.&lt;br /&gt;
&lt;br /&gt;
The initial output polarity is specified with '''PLSPOLARITY'''. The output state is set when the PLS is enabled.&lt;br /&gt;
&lt;br /&gt;
== Enable and Disable ==&lt;br /&gt;
After being defined, a PLS is disabled (output pattern is not generated). The output is set when the PLS is enabled. The output is set to the defined initial state.&lt;br /&gt;
&lt;br /&gt;
PLS properties are changed only when the PLS is disabled. Each enabled PLS requires CPU resources. Conserve those resources by disabling the unused PLS(s). '''PLSENABLE''' controls the status of the PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PlsEnable = ON | OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''PLSENABLE''' queries the status of a PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
?MyPls.PlsEnable&lt;br /&gt;
if(MyPLS.PlsEnable = OFF) &lt;br /&gt;
. . .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or drives events:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EventOn MyEvent MyPLS.PlsOutput = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Switch Positions ==&lt;br /&gt;
The basic mechanism of the PLS is the switch position(s) where the PLS output changes state. The figure belows shows a PLS output with one switch position at 100.&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-1-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
More switch positions can be added. To have the PLS in the above example turn back off at 200, simply add a second position at 200 as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-2-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
You can add any number of positions. For example, to extend the above example to turn back on at 400 and off again at 600, add positions 3 and 4 as 400 and 600 as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-3-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
There is no explicit limit to the number of positions you can have in a PLS, but the PLS positions must be increasing monotonic (Position2 must be greater than Position1, Position3 must be greater than Position2, etc.).&lt;br /&gt;
&lt;br /&gt;
== Repetition Interval ==&lt;br /&gt;
'''PLSREPEAT''' allows you to repeat the same PLS after a fixed number of counts. For example, the figure below shows a PLS that turns on at 0, off at 10 and has a '''PLSREPEAT''' value of 100:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-4-RepetitionInterval.png|caption]]&lt;br /&gt;
&lt;br /&gt;
== Polarity ==&lt;br /&gt;
'''PLSPOLARITY''' allows you to control the polarity of the PLS output. The initial polarity may be specified as 1 or 0, indicating that the output is set to 1 or 0 after the PLS is enabled and when the axis is located between the first and second PLS positions. If the axis position (when the PLS is enabled) is not located within this segment, the output polarity is set to 0 or 1, according to the current position so that when the axis reaches the first segment, the output polarity is as indicated. The default value for polarity is '''0'''.&lt;br /&gt;
&lt;br /&gt;
== Hysteresis ==&lt;br /&gt;
The softMC allows you to apply hysteresis around switch points. Hysteresis provides a margin in the switching between PLS positions to accommodate noise in the PLS axis. Set the hysteresis greater than the noise on the axis, (typically, 5 or 10 counts of encoder is sufficient, less is required for resolver systems). If you have a hysteresis of 0.01 position units, each transition of PLS position is moved forward 0.005 units for positive motion and backward 0.005 units for negative motion. If the axis driving the PLS is stopped directly on a PLS position and the inherent noise on the axis is less than the hysteresis, the PLS state does not change due to this noise.&lt;br /&gt;
&lt;br /&gt;
== Enable and Disable ==&lt;br /&gt;
'''PLSENABLE''' enables or disables the PLS(s). After being defined, a PLS is disabled. The output is fixed when the PLS is enabled. The PLS output is set to the defined initial state when the PLS is enabled.&lt;br /&gt;
&lt;br /&gt;
== PLS Output State ==&lt;br /&gt;
Query the digital output associated with the PLS to query the state of the PLS output. For example, assume the PLS output is assigned to SYSTEM.DOUT.1. To determine the output state of the PLS, query the state of SYSTEM.DOUT.1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&amp;gt;?Sys.Dout.1&lt;br /&gt;
0 | 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Set Up ==&lt;br /&gt;
'''Step 1'''&lt;br /&gt;
&lt;br /&gt;
Declare the PLS with '''&amp;lt;nowiki&amp;gt;Common Shared &amp;lt;&amp;lt;/nowiki&amp;gt;''var''&amp;gt; as PLS''' in Config.Prg or at the terminal. You must name the PLS, specify the axis that drives the PLS, and name an output to be controlled by the PLS. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Common Shared MyPLS as PLS A1 System.Dout.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
sets up MyPLS as a PLS driven by axis A1 connected to SYSTEM.DOUT.1. The output can be a digital output (SYSTEM.DOUT.1 through DOUT.20) or it can be one of the virtual outputs (SYSTEM.VOUT.1 through VOUT.32).&lt;br /&gt;
&lt;br /&gt;
After the '''&amp;lt;nowiki&amp;gt;Common Shared &amp;lt;&amp;lt;/nowiki&amp;gt;''var''&amp;gt; as PLS''' executes, the PLS is disabled. Properties of the PLS are set as:&lt;br /&gt;
&lt;br /&gt;
:A single PLS position exists at 0.&lt;br /&gt;
&lt;br /&gt;
:The initial output polarity is 1.&lt;br /&gt;
&lt;br /&gt;
:'''PLSREPEAT''' is set to 0.&lt;br /&gt;
&lt;br /&gt;
:The hysteresis is set to 0.&lt;br /&gt;
&lt;br /&gt;
These properties may be set explicitly, as long as the PLS remains disabled. You can check which output is associated with a given PLS using '''PLSOUTPUT'''.&lt;br /&gt;
&lt;br /&gt;
'''Step 2'''&lt;br /&gt;
&lt;br /&gt;
Create the PLS data structure and define PLS positions. The number of defined positions is not explicitly limited. A call to '''CREATEPLSDATA''' creates an array of ''n'' positions that stores the position data. The array is 1-based and an error is generated if you attempt to access an index outside of the array bounds. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CreatePLSData 4 MyPLS&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.PLSPosition[1] = 1000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.PLSPosition[2] = 1100&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As a short form, you can use '''PPOS''' in place of '''PLSPOSITION''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.Ppos[3] = 2000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.Ppos[4] = 2200&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You cannot change PLS positions when the PLS is enabled. Position values must be increasing monotonically.&lt;br /&gt;
&lt;br /&gt;
'''Step 3'''&lt;br /&gt;
&lt;br /&gt;
Set the polarity. '''PLSPOLARITY''' defaults to OFF, indicating the PLS state should be OFF after the first position. Change '''PLSPOLARITY''' to ON to invert the state.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSPolarity = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change '''PLSPOLARITY''' only if the PLS is disabled.&lt;br /&gt;
&lt;br /&gt;
'''Step 4'''&lt;br /&gt;
&lt;br /&gt;
Set '''PLSREPEAT'''. If you want the PLS to repeat, set the value of '''PLSREPEAT '''to a non-zero, positive number. For example, to have the PLS repeat every 10,000 position units, enter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSRepeat = 10000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''PLSREPEAT''' defaults to 0, indicating that there is no repetition. Change '''PLSREPEAT''' only when the PLS is disabled.&lt;br /&gt;
&lt;br /&gt;
'''Step 5'''&lt;br /&gt;
&lt;br /&gt;
Set '''PLSHYSTERESIS''', ''if the application requires it''. Hysteresis is only necessary if the system does stop on or near a PLS position. Normally, a '''PLSHYSTERESIS''' of 5 or 10 counts of encoder (converted to position units) or 2 or 3 counts of resolver resolution is sufficient.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSHysteresis = 0.01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Step 6'''&lt;br /&gt;
&lt;br /&gt;
Enable the PLS. Enter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSEnable = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
There are a few other PLS functions you may need:&lt;br /&gt;
&lt;br /&gt;
'''Change Polarity '''The default output state of a PLS is 0. Change this initial state by modifying '''PLSPOLARITY'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSPolarity = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The PLS must be disabled when changing this setting.&lt;br /&gt;
&lt;br /&gt;
'''Query the Name '''Query the name of the axis driving the PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
? MyPLS.PLSAxisName&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
returns the axis associated with the PLS (A1).&lt;br /&gt;
&lt;br /&gt;
'''Disable the PLS '''Disable the PLS. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSEnable = OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must disable a PLS to change PLS properties. Disabling a PLS also helps conserve CPU resources.&lt;br /&gt;
&lt;br /&gt;
'''Delete a PLS '''Delete a PLS to remove it from the system only when the PLS is disable and there are no tasks in memory. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DeletePLS MyPLS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= External Encoders =&lt;br /&gt;
The softMC supports external encoders (encoders not connected to an axis controlled by the softMC). These encoders are connected to the system using the external encoder input of any drive in the system. You can access the encoder periodically with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;? IDNValue(&amp;lt;''axis''&amp;gt;.DriveAddress, 53, 7)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
‘Query external encoder position&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using the encoder for master/slave operation or in a way that requires the value of the signal be updated to the softMC every SERCOS cycle, you must configure the telegram for that axis as Telegram type 7. You also must specify that external position must be included in the telegram. This command is only available when in communication phase of 2 or higher.&lt;br /&gt;
&lt;br /&gt;
= Access to Legacy I/O and ISA =&lt;br /&gt;
The softMC offers support for access to legacy ISA devices located in low memory(0xA0000 - 0xE0000).&lt;br /&gt;
&lt;br /&gt;
== Commands ==&lt;br /&gt;
The softMC supports memory and I/O instructions.&lt;br /&gt;
&lt;br /&gt;
If you are using memory-mapped devices, you will need the memory access commands, '''PEEK''' and '''POKE'''. The valid memory address range for '''PEEK''' is 0xA0000 through 0xDFFFF. The valid memory address range for '''POKE''' depends on the hardware version of the softMC card.&lt;br /&gt;
&lt;br /&gt;
'''For the ISA-Bus card''', the valid memory address range for '''POKE''' is 0xA0000 to 0xCFFFF and 0xDA000 to 0xDFFFF.&lt;br /&gt;
&lt;br /&gt;
'''For the PCI card''', the valid memory address range for '''POKE''' is 0xA0000 to 0xC7FFF and 0xDB000 to 0xDFFFF.&lt;br /&gt;
&lt;br /&gt;
*'''PEEKB''' transfers byte-wide (8-bit) data from the bus to a variable.&lt;br /&gt;
*'''PEEKW''' transfers word-wide (16-bit) data from the bus to a variable.&lt;br /&gt;
*'''POKEB''' transfers byte-wide (8-bit) data to the memory bus.&lt;br /&gt;
*'''POKEW''' transfers word-wide (16-bit) data to the memory bus.&lt;br /&gt;
&lt;br /&gt;
If you are using I/O-mapped cards, you need '''INP''' and '''OUT'''.&lt;br /&gt;
*'''INPB''' transfers byte-wide (8-bit) data from the I/O bus to a variable.&lt;br /&gt;
*'''INPW''' transfers word-wide (16-bit) data from the I/O bus to a variable.&lt;br /&gt;
*'''OUTB''' transfers byte-wide (8-bit) data to the I/O bus.&lt;br /&gt;
*'''OUTW '''transfers word-wide (16-bit) data to the I/O bus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:softMC Firmware|Input/Output]]&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=Input/Output&amp;diff=132907</id>
		<title>Input/Output</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=Input/Output&amp;diff=132907"/>
				<updated>2018-10-08T08:50:56Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: /* PLS (Programmable Limit Switch) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The softMC does not have local I/O, but can map drive inputs and outputs as well as I/O extension modules to its SYS.DIN and SYS.DOUT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Local I/O SERCOS version of softMC =&lt;br /&gt;
The softMC includes 23 inputs and 20 outputs as standard on the softMC. These are accessed with the system properties DIN.1 through DIN.23 and DOUT.1 through DOUT.20.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
? System.Din.1 System.Dout.5 = System.Din1&lt;br /&gt;
?System.Din&lt;br /&gt;
System.Dout=0xfe&lt;br /&gt;
&amp;lt;/pre&amp;gt;  --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Local I/O softMC =&lt;br /&gt;
softMC (CANOpen and EtherCAT) does not have local I/O. &lt;br /&gt;
For backward compatibility sys.dout.1 to sys.dout.20 can be read and written but do not have any function.&lt;br /&gt;
&amp;lt;br&amp;gt;Value of sys.din.1 to sys.din.23 is read from file IO.DAT, from field &amp;quot;INP&amp;quot;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;File IO.DAT is generated '''automatically''' if it does not exist on the flash disk. &lt;br /&gt;
&amp;lt;br&amp;gt;''Format'' of IO.DAT &lt;br /&gt;
&amp;lt;br&amp;gt;DIP=0xXX &lt;br /&gt;
&amp;lt;br&amp;gt;INP=0xXX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Software I/O SERCOS version of softMC =&lt;br /&gt;
The softMC provides virtual software I/O in addition to the standard I/O. The primary purpose of software I/O is to place a large group of I/O where it can be read from and written to as blocks in the softMC's dual port RAM. Virtual inputs are delivered from the host over DPRAM where virtual outputs are stored in the DPRAM and retrieved by the host. This is much faster than reading or writing individual I/O points one at a time. This allows efficient communication between a machine controller, such as a VB program or a software PLC, and the softMC program.&lt;br /&gt;
&amp;lt;br/&amp;gt;DPRAM exists '''only''' in SERCOS II version of Motion controller. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Software I/O softMC =&lt;br /&gt;
&lt;br /&gt;
== Bit-oriented Software I/O ==&lt;br /&gt;
Software I/O is used in the softMC program just like standard I/O. Standard inputs are accessed with SYSTEM.DIN.1 through DIN.23, and virtual inputs are accessed with SYSTEM.VIN.1 through VIN.32. Standard outputs are accessed with SYSTEM.DOUT.1 through DOUT.20, and virtual outputs are accessed with SYSTEM.VOUT.1 through VOUT.32. You can use software I/O to start events just as with standard I/O. Programmable limit switches can use software outputs just as with standard outputs. Here is an example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OnEvent SoftwareInputEvent System.VIn.1 = ON&lt;br /&gt;
System.VOut.1 = OFF&lt;br /&gt;
If(System.VOut.4 = ON) &lt;br /&gt;
. . . &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Long-Word-Oriented Software I/O ==&lt;br /&gt;
The entire word (32 bits) of software input and output is accessed when a bit position is not included in the reference to the input or output variable. So the following statement is valid:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
System.VOut=System.VIn&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This statement copies the virtual software input to the output. The physical input and output variables are used in this manner. Be careful when assigning virtual I/O to physical I/O because there are fewer physical bits than there are virtual bits. There are only 20 bits of physical output, but the virtual output variable can have 32 bits.&lt;br /&gt;
&lt;br /&gt;
= PLS (Programmable Limit Switch) = '''replaced by NEW PLS article''' - LINK&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
A Programmable Limit Switch (PLS) monitors position feedback on any axis, real or simulated. A PLS offers more flexibility than a limit switch, as it allows many trip points and can be reconfigured on-the-fly. A PLS toggles the state of a specified system output when an axis position reaches any of the defined positions of the PLS. Some of the features of a PLS are:&lt;br /&gt;
&lt;br /&gt;
*Multiple position specifications.&lt;br /&gt;
&lt;br /&gt;
*Multiple PLSs per axis&lt;br /&gt;
&lt;br /&gt;
*PLS pattern repetition&lt;br /&gt;
&lt;br /&gt;
*Position hysteresis&lt;br /&gt;
&lt;br /&gt;
*Enabling and disabling of PLSs&lt;br /&gt;
&lt;br /&gt;
*The system output may be digital or soft (fast data)&lt;br /&gt;
&lt;br /&gt;
PLS positions are defined in an array that allows you to change individual values of PLS positions. This array must be increasing monotonic. There is no limit of the number of positions or PLSs that can be defined.&lt;br /&gt;
&lt;br /&gt;
The initial output polarity is specified with '''PLSPOLARITY'''. The output state is set when the PLS is enabled.&lt;br /&gt;
&lt;br /&gt;
== Enable and Disable ==&lt;br /&gt;
After being defined, a PLS is disabled (output pattern is not generated). The output is set when the PLS is enabled. The output is set to the defined initial state.&lt;br /&gt;
&lt;br /&gt;
PLS properties are changed only when the PLS is disabled. Each enabled PLS requires CPU resources. Conserve those resources by disabling the unused PLS(s). '''PLSENABLE''' controls the status of the PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PlsEnable = ON | OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''PLSENABLE''' queries the status of a PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
?MyPls.PlsEnable&lt;br /&gt;
if(MyPLS.PlsEnable = OFF) &lt;br /&gt;
. . .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or drives events:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EventOn MyEvent MyPLS.PlsOutput = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Switch Positions ==&lt;br /&gt;
The basic mechanism of the PLS is the switch position(s) where the PLS output changes state. The figure belows shows a PLS output with one switch position at 100.&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-1-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
More switch positions can be added. To have the PLS in the above example turn back off at 200, simply add a second position at 200 as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-2-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
You can add any number of positions. For example, to extend the above example to turn back on at 400 and off again at 600, add positions 3 and 4 as 400 and 600 as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-3-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
There is no explicit limit to the number of positions you can have in a PLS, but the PLS positions must be increasing monotonic (Position2 must be greater than Position1, Position3 must be greater than Position2, etc.).&lt;br /&gt;
&lt;br /&gt;
== Repetition Interval ==&lt;br /&gt;
'''PLSREPEAT''' allows you to repeat the same PLS after a fixed number of counts. For example, the figure below shows a PLS that turns on at 0, off at 10 and has a '''PLSREPEAT''' value of 100:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-4-RepetitionInterval.png|caption]]&lt;br /&gt;
&lt;br /&gt;
== Polarity ==&lt;br /&gt;
'''PLSPOLARITY''' allows you to control the polarity of the PLS output. The initial polarity may be specified as 1 or 0, indicating that the output is set to 1 or 0 after the PLS is enabled and when the axis is located between the first and second PLS positions. If the axis position (when the PLS is enabled) is not located within this segment, the output polarity is set to 0 or 1, according to the current position so that when the axis reaches the first segment, the output polarity is as indicated. The default value for polarity is '''0'''.&lt;br /&gt;
&lt;br /&gt;
== Hysteresis ==&lt;br /&gt;
The softMC allows you to apply hysteresis around switch points. Hysteresis provides a margin in the switching between PLS positions to accommodate noise in the PLS axis. Set the hysteresis greater than the noise on the axis, (typically, 5 or 10 counts of encoder is sufficient, less is required for resolver systems). If you have a hysteresis of 0.01 position units, each transition of PLS position is moved forward 0.005 units for positive motion and backward 0.005 units for negative motion. If the axis driving the PLS is stopped directly on a PLS position and the inherent noise on the axis is less than the hysteresis, the PLS state does not change due to this noise.&lt;br /&gt;
&lt;br /&gt;
== Enable and Disable ==&lt;br /&gt;
'''PLSENABLE''' enables or disables the PLS(s). After being defined, a PLS is disabled. The output is fixed when the PLS is enabled. The PLS output is set to the defined initial state when the PLS is enabled.&lt;br /&gt;
&lt;br /&gt;
== PLS Output State ==&lt;br /&gt;
Query the digital output associated with the PLS to query the state of the PLS output. For example, assume the PLS output is assigned to SYSTEM.DOUT.1. To determine the output state of the PLS, query the state of SYSTEM.DOUT.1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&amp;gt;?Sys.Dout.1&lt;br /&gt;
0 | 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Set Up ==&lt;br /&gt;
'''Step 1'''&lt;br /&gt;
&lt;br /&gt;
Declare the PLS with '''&amp;lt;nowiki&amp;gt;Common Shared &amp;lt;&amp;lt;/nowiki&amp;gt;''var''&amp;gt; as PLS''' in Config.Prg or at the terminal. You must name the PLS, specify the axis that drives the PLS, and name an output to be controlled by the PLS. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Common Shared MyPLS as PLS A1 System.Dout.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
sets up MyPLS as a PLS driven by axis A1 connected to SYSTEM.DOUT.1. The output can be a digital output (SYSTEM.DOUT.1 through DOUT.20) or it can be one of the virtual outputs (SYSTEM.VOUT.1 through VOUT.32).&lt;br /&gt;
&lt;br /&gt;
After the '''&amp;lt;nowiki&amp;gt;Common Shared &amp;lt;&amp;lt;/nowiki&amp;gt;''var''&amp;gt; as PLS''' executes, the PLS is disabled. Properties of the PLS are set as:&lt;br /&gt;
&lt;br /&gt;
:A single PLS position exists at 0.&lt;br /&gt;
&lt;br /&gt;
:The initial output polarity is 1.&lt;br /&gt;
&lt;br /&gt;
:'''PLSREPEAT''' is set to 0.&lt;br /&gt;
&lt;br /&gt;
:The hysteresis is set to 0.&lt;br /&gt;
&lt;br /&gt;
These properties may be set explicitly, as long as the PLS remains disabled. You can check which output is associated with a given PLS using '''PLSOUTPUT'''.&lt;br /&gt;
&lt;br /&gt;
'''Step 2'''&lt;br /&gt;
&lt;br /&gt;
Create the PLS data structure and define PLS positions. The number of defined positions is not explicitly limited. A call to '''CREATEPLSDATA''' creates an array of ''n'' positions that stores the position data. The array is 1-based and an error is generated if you attempt to access an index outside of the array bounds. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CreatePLSData 4 MyPLS&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.PLSPosition[1] = 1000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.PLSPosition[2] = 1100&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As a short form, you can use '''PPOS''' in place of '''PLSPOSITION''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.Ppos[3] = 2000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.Ppos[4] = 2200&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You cannot change PLS positions when the PLS is enabled. Position values must be increasing monotonically.&lt;br /&gt;
&lt;br /&gt;
'''Step 3'''&lt;br /&gt;
&lt;br /&gt;
Set the polarity. '''PLSPOLARITY''' defaults to OFF, indicating the PLS state should be OFF after the first position. Change '''PLSPOLARITY''' to ON to invert the state.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSPolarity = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change '''PLSPOLARITY''' only if the PLS is disabled.&lt;br /&gt;
&lt;br /&gt;
'''Step 4'''&lt;br /&gt;
&lt;br /&gt;
Set '''PLSREPEAT'''. If you want the PLS to repeat, set the value of '''PLSREPEAT '''to a non-zero, positive number. For example, to have the PLS repeat every 10,000 position units, enter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSRepeat = 10000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''PLSREPEAT''' defaults to 0, indicating that there is no repetition. Change '''PLSREPEAT''' only when the PLS is disabled.&lt;br /&gt;
&lt;br /&gt;
'''Step 5'''&lt;br /&gt;
&lt;br /&gt;
Set '''PLSHYSTERESIS''', ''if the application requires it''. Hysteresis is only necessary if the system does stop on or near a PLS position. Normally, a '''PLSHYSTERESIS''' of 5 or 10 counts of encoder (converted to position units) or 2 or 3 counts of resolver resolution is sufficient.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSHysteresis = 0.01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Step 6'''&lt;br /&gt;
&lt;br /&gt;
Enable the PLS. Enter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSEnable = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
There are a few other PLS functions you may need:&lt;br /&gt;
&lt;br /&gt;
'''Change Polarity '''The default output state of a PLS is 0. Change this initial state by modifying '''PLSPOLARITY'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSPolarity = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The PLS must be disabled when changing this setting.&lt;br /&gt;
&lt;br /&gt;
'''Query the Name '''Query the name of the axis driving the PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
? MyPLS.PLSAxisName&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
returns the axis associated with the PLS (A1).&lt;br /&gt;
&lt;br /&gt;
'''Disable the PLS '''Disable the PLS. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSEnable = OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must disable a PLS to change PLS properties. Disabling a PLS also helps conserve CPU resources.&lt;br /&gt;
&lt;br /&gt;
'''Delete a PLS '''Delete a PLS to remove it from the system only when the PLS is disable and there are no tasks in memory. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DeletePLS MyPLS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= External Encoders =&lt;br /&gt;
The softMC supports external encoders (encoders not connected to an axis controlled by the softMC). These encoders are connected to the system using the external encoder input of any drive in the system. You can access the encoder periodically with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;? IDNValue(&amp;lt;''axis''&amp;gt;.DriveAddress, 53, 7)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
‘Query external encoder position&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using the encoder for master/slave operation or in a way that requires the value of the signal be updated to the softMC every SERCOS cycle, you must configure the telegram for that axis as Telegram type 7. You also must specify that external position must be included in the telegram. This command is only available when in communication phase of 2 or higher.&lt;br /&gt;
&lt;br /&gt;
= Access to Legacy I/O and ISA =&lt;br /&gt;
The softMC offers support for access to legacy ISA devices located in low memory(0xA0000 - 0xE0000).&lt;br /&gt;
&lt;br /&gt;
== Commands ==&lt;br /&gt;
The softMC supports memory and I/O instructions.&lt;br /&gt;
&lt;br /&gt;
If you are using memory-mapped devices, you will need the memory access commands, '''PEEK''' and '''POKE'''. The valid memory address range for '''PEEK''' is 0xA0000 through 0xDFFFF. The valid memory address range for '''POKE''' depends on the hardware version of the softMC card.&lt;br /&gt;
&lt;br /&gt;
'''For the ISA-Bus card''', the valid memory address range for '''POKE''' is 0xA0000 to 0xCFFFF and 0xDA000 to 0xDFFFF.&lt;br /&gt;
&lt;br /&gt;
'''For the PCI card''', the valid memory address range for '''POKE''' is 0xA0000 to 0xC7FFF and 0xDB000 to 0xDFFFF.&lt;br /&gt;
&lt;br /&gt;
*'''PEEKB''' transfers byte-wide (8-bit) data from the bus to a variable.&lt;br /&gt;
*'''PEEKW''' transfers word-wide (16-bit) data from the bus to a variable.&lt;br /&gt;
*'''POKEB''' transfers byte-wide (8-bit) data to the memory bus.&lt;br /&gt;
*'''POKEW''' transfers word-wide (16-bit) data to the memory bus.&lt;br /&gt;
&lt;br /&gt;
If you are using I/O-mapped cards, you need '''INP''' and '''OUT'''.&lt;br /&gt;
*'''INPB''' transfers byte-wide (8-bit) data from the I/O bus to a variable.&lt;br /&gt;
*'''INPW''' transfers word-wide (16-bit) data from the I/O bus to a variable.&lt;br /&gt;
*'''OUTB''' transfers byte-wide (8-bit) data to the I/O bus.&lt;br /&gt;
*'''OUTW '''transfers word-wide (16-bit) data to the I/O bus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:softMC Firmware|Input/Output]]&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=Input/Output&amp;diff=132906</id>
		<title>Input/Output</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=Input/Output&amp;diff=132906"/>
				<updated>2018-10-08T08:50:09Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The softMC does not have local I/O, but can map drive inputs and outputs as well as I/O extension modules to its SYS.DIN and SYS.DOUT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Local I/O SERCOS version of softMC =&lt;br /&gt;
The softMC includes 23 inputs and 20 outputs as standard on the softMC. These are accessed with the system properties DIN.1 through DIN.23 and DOUT.1 through DOUT.20.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
? System.Din.1 System.Dout.5 = System.Din1&lt;br /&gt;
?System.Din&lt;br /&gt;
System.Dout=0xfe&lt;br /&gt;
&amp;lt;/pre&amp;gt;  --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Local I/O softMC =&lt;br /&gt;
softMC (CANOpen and EtherCAT) does not have local I/O. &lt;br /&gt;
For backward compatibility sys.dout.1 to sys.dout.20 can be read and written but do not have any function.&lt;br /&gt;
&amp;lt;br&amp;gt;Value of sys.din.1 to sys.din.23 is read from file IO.DAT, from field &amp;quot;INP&amp;quot;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;File IO.DAT is generated '''automatically''' if it does not exist on the flash disk. &lt;br /&gt;
&amp;lt;br&amp;gt;''Format'' of IO.DAT &lt;br /&gt;
&amp;lt;br&amp;gt;DIP=0xXX &lt;br /&gt;
&amp;lt;br&amp;gt;INP=0xXX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Software I/O SERCOS version of softMC =&lt;br /&gt;
The softMC provides virtual software I/O in addition to the standard I/O. The primary purpose of software I/O is to place a large group of I/O where it can be read from and written to as blocks in the softMC's dual port RAM. Virtual inputs are delivered from the host over DPRAM where virtual outputs are stored in the DPRAM and retrieved by the host. This is much faster than reading or writing individual I/O points one at a time. This allows efficient communication between a machine controller, such as a VB program or a software PLC, and the softMC program.&lt;br /&gt;
&amp;lt;br/&amp;gt;DPRAM exists '''only''' in SERCOS II version of Motion controller. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Software I/O softMC =&lt;br /&gt;
&lt;br /&gt;
== Bit-oriented Software I/O ==&lt;br /&gt;
Software I/O is used in the softMC program just like standard I/O. Standard inputs are accessed with SYSTEM.DIN.1 through DIN.23, and virtual inputs are accessed with SYSTEM.VIN.1 through VIN.32. Standard outputs are accessed with SYSTEM.DOUT.1 through DOUT.20, and virtual outputs are accessed with SYSTEM.VOUT.1 through VOUT.32. You can use software I/O to start events just as with standard I/O. Programmable limit switches can use software outputs just as with standard outputs. Here is an example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OnEvent SoftwareInputEvent System.VIn.1 = ON&lt;br /&gt;
System.VOut.1 = OFF&lt;br /&gt;
If(System.VOut.4 = ON) &lt;br /&gt;
. . . &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Long-Word-Oriented Software I/O ==&lt;br /&gt;
The entire word (32 bits) of software input and output is accessed when a bit position is not included in the reference to the input or output variable. So the following statement is valid:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
System.VOut=System.VIn&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This statement copies the virtual software input to the output. The physical input and output variables are used in this manner. Be careful when assigning virtual I/O to physical I/O because there are fewer physical bits than there are virtual bits. There are only 20 bits of physical output, but the virtual output variable can have 32 bits.&lt;br /&gt;
&lt;br /&gt;
= PLS (Programmable Limit Switch) =&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
A Programmable Limit Switch (PLS) monitors position feedback on any axis, real or simulated. A PLS offers more flexibility than a limit switch, as it allows many trip points and can be reconfigured on-the-fly. A PLS toggles the state of a specified system output when an axis position reaches any of the defined positions of the PLS. Some of the features of a PLS are:&lt;br /&gt;
&lt;br /&gt;
*Multiple position specifications.&lt;br /&gt;
&lt;br /&gt;
*Multiple PLSs per axis&lt;br /&gt;
&lt;br /&gt;
*PLS pattern repetition&lt;br /&gt;
&lt;br /&gt;
*Position hysteresis&lt;br /&gt;
&lt;br /&gt;
*Enabling and disabling of PLSs&lt;br /&gt;
&lt;br /&gt;
*The system output may be digital or soft (fast data)&lt;br /&gt;
&lt;br /&gt;
PLS positions are defined in an array that allows you to change individual values of PLS positions. This array must be increasing monotonic. There is no limit of the number of positions or PLSs that can be defined.&lt;br /&gt;
&lt;br /&gt;
The initial output polarity is specified with '''PLSPOLARITY'''. The output state is set when the PLS is enabled.&lt;br /&gt;
&lt;br /&gt;
== Enable and Disable ==&lt;br /&gt;
After being defined, a PLS is disabled (output pattern is not generated). The output is set when the PLS is enabled. The output is set to the defined initial state.&lt;br /&gt;
&lt;br /&gt;
PLS properties are changed only when the PLS is disabled. Each enabled PLS requires CPU resources. Conserve those resources by disabling the unused PLS(s). '''PLSENABLE''' controls the status of the PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PlsEnable = ON | OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''PLSENABLE''' queries the status of a PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
?MyPls.PlsEnable&lt;br /&gt;
if(MyPLS.PlsEnable = OFF) &lt;br /&gt;
. . .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or drives events:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EventOn MyEvent MyPLS.PlsOutput = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Switch Positions ==&lt;br /&gt;
The basic mechanism of the PLS is the switch position(s) where the PLS output changes state. The figure belows shows a PLS output with one switch position at 100.&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-1-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
More switch positions can be added. To have the PLS in the above example turn back off at 200, simply add a second position at 200 as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-2-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
You can add any number of positions. For example, to extend the above example to turn back on at 400 and off again at 600, add positions 3 and 4 as 400 and 600 as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-3-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
There is no explicit limit to the number of positions you can have in a PLS, but the PLS positions must be increasing monotonic (Position2 must be greater than Position1, Position3 must be greater than Position2, etc.).&lt;br /&gt;
&lt;br /&gt;
== Repetition Interval ==&lt;br /&gt;
'''PLSREPEAT''' allows you to repeat the same PLS after a fixed number of counts. For example, the figure below shows a PLS that turns on at 0, off at 10 and has a '''PLSREPEAT''' value of 100:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-4-RepetitionInterval.png|caption]]&lt;br /&gt;
&lt;br /&gt;
== Polarity ==&lt;br /&gt;
'''PLSPOLARITY''' allows you to control the polarity of the PLS output. The initial polarity may be specified as 1 or 0, indicating that the output is set to 1 or 0 after the PLS is enabled and when the axis is located between the first and second PLS positions. If the axis position (when the PLS is enabled) is not located within this segment, the output polarity is set to 0 or 1, according to the current position so that when the axis reaches the first segment, the output polarity is as indicated. The default value for polarity is '''0'''.&lt;br /&gt;
&lt;br /&gt;
== Hysteresis ==&lt;br /&gt;
The softMC allows you to apply hysteresis around switch points. Hysteresis provides a margin in the switching between PLS positions to accommodate noise in the PLS axis. Set the hysteresis greater than the noise on the axis, (typically, 5 or 10 counts of encoder is sufficient, less is required for resolver systems). If you have a hysteresis of 0.01 position units, each transition of PLS position is moved forward 0.005 units for positive motion and backward 0.005 units for negative motion. If the axis driving the PLS is stopped directly on a PLS position and the inherent noise on the axis is less than the hysteresis, the PLS state does not change due to this noise.&lt;br /&gt;
&lt;br /&gt;
== Enable and Disable ==&lt;br /&gt;
'''PLSENABLE''' enables or disables the PLS(s). After being defined, a PLS is disabled. The output is fixed when the PLS is enabled. The PLS output is set to the defined initial state when the PLS is enabled.&lt;br /&gt;
&lt;br /&gt;
== PLS Output State ==&lt;br /&gt;
Query the digital output associated with the PLS to query the state of the PLS output. For example, assume the PLS output is assigned to SYSTEM.DOUT.1. To determine the output state of the PLS, query the state of SYSTEM.DOUT.1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&amp;gt;?Sys.Dout.1&lt;br /&gt;
0 | 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Set Up ==&lt;br /&gt;
'''Step 1'''&lt;br /&gt;
&lt;br /&gt;
Declare the PLS with '''&amp;lt;nowiki&amp;gt;Common Shared &amp;lt;&amp;lt;/nowiki&amp;gt;''var''&amp;gt; as PLS''' in Config.Prg or at the terminal. You must name the PLS, specify the axis that drives the PLS, and name an output to be controlled by the PLS. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Common Shared MyPLS as PLS A1 System.Dout.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
sets up MyPLS as a PLS driven by axis A1 connected to SYSTEM.DOUT.1. The output can be a digital output (SYSTEM.DOUT.1 through DOUT.20) or it can be one of the virtual outputs (SYSTEM.VOUT.1 through VOUT.32).&lt;br /&gt;
&lt;br /&gt;
After the '''&amp;lt;nowiki&amp;gt;Common Shared &amp;lt;&amp;lt;/nowiki&amp;gt;''var''&amp;gt; as PLS''' executes, the PLS is disabled. Properties of the PLS are set as:&lt;br /&gt;
&lt;br /&gt;
:A single PLS position exists at 0.&lt;br /&gt;
&lt;br /&gt;
:The initial output polarity is 1.&lt;br /&gt;
&lt;br /&gt;
:'''PLSREPEAT''' is set to 0.&lt;br /&gt;
&lt;br /&gt;
:The hysteresis is set to 0.&lt;br /&gt;
&lt;br /&gt;
These properties may be set explicitly, as long as the PLS remains disabled. You can check which output is associated with a given PLS using '''PLSOUTPUT'''.&lt;br /&gt;
&lt;br /&gt;
'''Step 2'''&lt;br /&gt;
&lt;br /&gt;
Create the PLS data structure and define PLS positions. The number of defined positions is not explicitly limited. A call to '''CREATEPLSDATA''' creates an array of ''n'' positions that stores the position data. The array is 1-based and an error is generated if you attempt to access an index outside of the array bounds. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CreatePLSData 4 MyPLS&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.PLSPosition[1] = 1000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.PLSPosition[2] = 1100&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As a short form, you can use '''PPOS''' in place of '''PLSPOSITION''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.Ppos[3] = 2000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.Ppos[4] = 2200&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You cannot change PLS positions when the PLS is enabled. Position values must be increasing monotonically.&lt;br /&gt;
&lt;br /&gt;
'''Step 3'''&lt;br /&gt;
&lt;br /&gt;
Set the polarity. '''PLSPOLARITY''' defaults to OFF, indicating the PLS state should be OFF after the first position. Change '''PLSPOLARITY''' to ON to invert the state.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSPolarity = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change '''PLSPOLARITY''' only if the PLS is disabled.&lt;br /&gt;
&lt;br /&gt;
'''Step 4'''&lt;br /&gt;
&lt;br /&gt;
Set '''PLSREPEAT'''. If you want the PLS to repeat, set the value of '''PLSREPEAT '''to a non-zero, positive number. For example, to have the PLS repeat every 10,000 position units, enter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSRepeat = 10000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''PLSREPEAT''' defaults to 0, indicating that there is no repetition. Change '''PLSREPEAT''' only when the PLS is disabled.&lt;br /&gt;
&lt;br /&gt;
'''Step 5'''&lt;br /&gt;
&lt;br /&gt;
Set '''PLSHYSTERESIS''', ''if the application requires it''. Hysteresis is only necessary if the system does stop on or near a PLS position. Normally, a '''PLSHYSTERESIS''' of 5 or 10 counts of encoder (converted to position units) or 2 or 3 counts of resolver resolution is sufficient.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSHysteresis = 0.01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Step 6'''&lt;br /&gt;
&lt;br /&gt;
Enable the PLS. Enter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSEnable = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
There are a few other PLS functions you may need:&lt;br /&gt;
&lt;br /&gt;
'''Change Polarity '''The default output state of a PLS is 0. Change this initial state by modifying '''PLSPOLARITY'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSPolarity = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The PLS must be disabled when changing this setting.&lt;br /&gt;
&lt;br /&gt;
'''Query the Name '''Query the name of the axis driving the PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
? MyPLS.PLSAxisName&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
returns the axis associated with the PLS (A1).&lt;br /&gt;
&lt;br /&gt;
'''Disable the PLS '''Disable the PLS. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSEnable = OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must disable a PLS to change PLS properties. Disabling a PLS also helps conserve CPU resources.&lt;br /&gt;
&lt;br /&gt;
'''Delete a PLS '''Delete a PLS to remove it from the system only when the PLS is disable and there are no tasks in memory. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DeletePLS MyPLS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= External Encoders =&lt;br /&gt;
The softMC supports external encoders (encoders not connected to an axis controlled by the softMC). These encoders are connected to the system using the external encoder input of any drive in the system. You can access the encoder periodically with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;? IDNValue(&amp;lt;''axis''&amp;gt;.DriveAddress, 53, 7)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
‘Query external encoder position&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using the encoder for master/slave operation or in a way that requires the value of the signal be updated to the softMC every SERCOS cycle, you must configure the telegram for that axis as Telegram type 7. You also must specify that external position must be included in the telegram. This command is only available when in communication phase of 2 or higher.&lt;br /&gt;
&lt;br /&gt;
= Access to Legacy I/O and ISA =&lt;br /&gt;
The softMC offers support for access to legacy ISA devices located in low memory(0xA0000 - 0xE0000).&lt;br /&gt;
&lt;br /&gt;
== Commands ==&lt;br /&gt;
The softMC supports memory and I/O instructions.&lt;br /&gt;
&lt;br /&gt;
If you are using memory-mapped devices, you will need the memory access commands, '''PEEK''' and '''POKE'''. The valid memory address range for '''PEEK''' is 0xA0000 through 0xDFFFF. The valid memory address range for '''POKE''' depends on the hardware version of the softMC card.&lt;br /&gt;
&lt;br /&gt;
'''For the ISA-Bus card''', the valid memory address range for '''POKE''' is 0xA0000 to 0xCFFFF and 0xDA000 to 0xDFFFF.&lt;br /&gt;
&lt;br /&gt;
'''For the PCI card''', the valid memory address range for '''POKE''' is 0xA0000 to 0xC7FFF and 0xDB000 to 0xDFFFF.&lt;br /&gt;
&lt;br /&gt;
*'''PEEKB''' transfers byte-wide (8-bit) data from the bus to a variable.&lt;br /&gt;
*'''PEEKW''' transfers word-wide (16-bit) data from the bus to a variable.&lt;br /&gt;
*'''POKEB''' transfers byte-wide (8-bit) data to the memory bus.&lt;br /&gt;
*'''POKEW''' transfers word-wide (16-bit) data to the memory bus.&lt;br /&gt;
&lt;br /&gt;
If you are using I/O-mapped cards, you need '''INP''' and '''OUT'''.&lt;br /&gt;
*'''INPB''' transfers byte-wide (8-bit) data from the I/O bus to a variable.&lt;br /&gt;
*'''INPW''' transfers word-wide (16-bit) data from the I/O bus to a variable.&lt;br /&gt;
*'''OUTB''' transfers byte-wide (8-bit) data to the I/O bus.&lt;br /&gt;
*'''OUTW '''transfers word-wide (16-bit) data to the I/O bus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:softMC Firmware|Input/Output]]&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=Input/Output&amp;diff=132905</id>
		<title>Input/Output</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=Input/Output&amp;diff=132905"/>
				<updated>2018-10-08T08:39:29Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: Reverted edits by Lisa (talk) to last revision by Miborich&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The softMC does not have local I/O, but can map drive inputs and outputs as well as I/O extension modules to its SYS.DIN and SYS.DOUT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Local I/O SERCOS version of softMC =&lt;br /&gt;
The softMC includes 23 inputs and 20 outputs as standard on the softMC. These are accessed with the system properties DIN.1 through DIN.23 and DOUT.1 through DOUT.20.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
? System.Din.1 System.Dout.5 = System.Din1&lt;br /&gt;
?System.Din&lt;br /&gt;
System.Dout=0xfe&lt;br /&gt;
&amp;lt;/pre&amp;gt;  --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Local I/O softMC =&lt;br /&gt;
softMC (CANOpen and EtherCAT) does not have local I/O. &lt;br /&gt;
For backward compatibility sys.dout.1 to sys.dout.20 can be read and written but do not have any function.&lt;br /&gt;
&amp;lt;br&amp;gt;Value of sys.din.1 to sys.din.23 is read from file IO.DAT, from field &amp;quot;INP&amp;quot;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;File IO.DAT is generated '''automatically''' if it does not exist on the flash disk. &lt;br /&gt;
&amp;lt;br&amp;gt;''Format'' of IO.DAT &lt;br /&gt;
&amp;lt;br&amp;gt;DIP=0xXX &lt;br /&gt;
&amp;lt;br&amp;gt;INP=0xXX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Software I/O SERCOS version of softMC =&lt;br /&gt;
The softMC provides virtual software I/O in addition to the standard I/O. The primary purpose of software I/O is to place a large group of I/O where it can be read from and written to as blocks in the softMC's dual port RAM. Virtual inputs are delivered from the host over DPRAM where virtual outputs are stored in the DPRAM and retrieved by the host. This is much faster than reading or writing individual I/O points one at a time. This allows efficient communication between a machine controller, such as a VB program or a software PLC, and the softMC program.&lt;br /&gt;
&amp;lt;br/&amp;gt;DPRAM exists '''only''' in SERCOS II version of Motion controller. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Software I/O softMC =&lt;br /&gt;
&lt;br /&gt;
== Bit-oriented Software I/O ==&lt;br /&gt;
Software I/O is used in the softMC program just like standard I/O. Standard inputs are accessed with SYSTEM.DIN.1 through DIN.23, and virtual inputs are accessed with SYSTEM.VIN.1 through VIN.32. Standard outputs are accessed with SYSTEM.DOUT.1 through DOUT.20, and virtual outputs are accessed with SYSTEM.VOUT.1 through VOUT.32. You can use software I/O to start events just as with standard I/O. Programmable limit switches can use software outputs just as with standard outputs. Here is an example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OnEvent SoftwareInputEvent System.VIn.1 = ON&lt;br /&gt;
System.VOut.1 = OFF&lt;br /&gt;
If(System.VOut.4 = ON) &lt;br /&gt;
. . . &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Long-Word-Oriented Software I/O ==&lt;br /&gt;
The entire word (32 bits) of software input and output is accessed when a bit position is not included in the reference to the input or output variable. So the following statement is valid:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
System.VOut=System.VIn&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This statement copies the virtual software input to the output. The physical input and output variables are used in this manner. Be careful when assigning virtual I/O to physical I/O because there are fewer physical bits than there are virtual bits. There are only 20 bits of physical output, but the virtual output variable can have 32 bits.&lt;br /&gt;
&lt;br /&gt;
= PLS (Programmable Limit Switch) =&lt;br /&gt;
A Programmable Limit Switch (PLS) monitors position feedback on any axis, real or simulated. A PLS offers more flexibility than a limit switch, as it allows many trip points and can be reconfigured on-the-fly. A PLS toggles the state of a specified system output when an axis position reaches any of the defined positions of the PLS. Some of the features of a PLS are:&lt;br /&gt;
&lt;br /&gt;
*Multiple position specifications.&lt;br /&gt;
&lt;br /&gt;
*Multiple PLSs per axis&lt;br /&gt;
&lt;br /&gt;
*PLS pattern repetition&lt;br /&gt;
&lt;br /&gt;
*Position hysteresis&lt;br /&gt;
&lt;br /&gt;
*Enabling and disabling of PLSs&lt;br /&gt;
&lt;br /&gt;
*The system output may be digital or soft (fast data)&lt;br /&gt;
&lt;br /&gt;
PLS positions are defined in an array that allows you to change individual values of PLS positions. This array must be increasing monotonic. There is no limit of the number of positions or PLSs that can be defined.&lt;br /&gt;
&lt;br /&gt;
The initial output polarity is specified with '''PLSPOLARITY'''. The output state is set when the PLS is enabled.&lt;br /&gt;
&lt;br /&gt;
== Enable and Disable ==&lt;br /&gt;
After being defined, a PLS is disabled (output pattern is not generated). The output is set when the PLS is enabled. The output is set to the defined initial state.&lt;br /&gt;
&lt;br /&gt;
PLS properties are changed only when the PLS is disabled. Each enabled PLS requires CPU resources. Conserve those resources by disabling the unused PLS(s). '''PLSENABLE''' controls the status of the PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PlsEnable = ON | OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''PLSENABLE''' queries the status of a PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
?MyPls.PlsEnable&lt;br /&gt;
if(MyPLS.PlsEnable = OFF) &lt;br /&gt;
. . .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or drives events:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EventOn MyEvent MyPLS.PlsOutput = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Switch Positions ==&lt;br /&gt;
The basic mechanism of the PLS is the switch position(s) where the PLS output changes state. The figure belows shows a PLS output with one switch position at 100.&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-1-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
More switch positions can be added. To have the PLS in the above example turn back off at 200, simply add a second position at 200 as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-2-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
You can add any number of positions. For example, to extend the above example to turn back on at 400 and off again at 600, add positions 3 and 4 as 400 and 600 as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-3-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
There is no explicit limit to the number of positions you can have in a PLS, but the PLS positions must be increasing monotonic (Position2 must be greater than Position1, Position3 must be greater than Position2, etc.).&lt;br /&gt;
&lt;br /&gt;
== Repetition Interval ==&lt;br /&gt;
'''PLSREPEAT''' allows you to repeat the same PLS after a fixed number of counts. For example, the figure below shows a PLS that turns on at 0, off at 10 and has a '''PLSREPEAT''' value of 100:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-4-RepetitionInterval.png|caption]]&lt;br /&gt;
&lt;br /&gt;
== Polarity ==&lt;br /&gt;
'''PLSPOLARITY''' allows you to control the polarity of the PLS output. The initial polarity may be specified as 1 or 0, indicating that the output is set to 1 or 0 after the PLS is enabled and when the axis is located between the first and second PLS positions. If the axis position (when the PLS is enabled) is not located within this segment, the output polarity is set to 0 or 1, according to the current position so that when the axis reaches the first segment, the output polarity is as indicated. The default value for polarity is '''0'''.&lt;br /&gt;
&lt;br /&gt;
== Hysteresis ==&lt;br /&gt;
The softMC allows you to apply hysteresis around switch points. Hysteresis provides a margin in the switching between PLS positions to accommodate noise in the PLS axis. Set the hysteresis greater than the noise on the axis, (typically, 5 or 10 counts of encoder is sufficient, less is required for resolver systems). If you have a hysteresis of 0.01 position units, each transition of PLS position is moved forward 0.005 units for positive motion and backward 0.005 units for negative motion. If the axis driving the PLS is stopped directly on a PLS position and the inherent noise on the axis is less than the hysteresis, the PLS state does not change due to this noise.&lt;br /&gt;
&lt;br /&gt;
== Enable and Disable ==&lt;br /&gt;
'''PLSENABLE''' enables or disables the PLS(s). After being defined, a PLS is disabled. The output is fixed when the PLS is enabled. The PLS output is set to the defined initial state when the PLS is enabled.&lt;br /&gt;
&lt;br /&gt;
== PLS Output State ==&lt;br /&gt;
Query the digital output associated with the PLS to query the state of the PLS output. For example, assume the PLS output is assigned to SYSTEM.DOUT.1. To determine the output state of the PLS, query the state of SYSTEM.DOUT.1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&amp;gt;?Sys.Dout.1&lt;br /&gt;
0 | 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Set Up ==&lt;br /&gt;
'''Step 1'''&lt;br /&gt;
&lt;br /&gt;
Declare the PLS with '''&amp;lt;nowiki&amp;gt;Common Shared &amp;lt;&amp;lt;/nowiki&amp;gt;''var''&amp;gt; as PLS''' in Config.Prg or at the terminal. You must name the PLS, specify the axis that drives the PLS, and name an output to be controlled by the PLS. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Common Shared MyPLS as PLS A1 System.Dout.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
sets up MyPLS as a PLS driven by axis A1 connected to SYSTEM.DOUT.1. The output can be a digital output (SYSTEM.DOUT.1 through DOUT.20) or it can be one of the virtual outputs (SYSTEM.VOUT.1 through VOUT.32).&lt;br /&gt;
&lt;br /&gt;
After the '''&amp;lt;nowiki&amp;gt;Common Shared &amp;lt;&amp;lt;/nowiki&amp;gt;''var''&amp;gt; as PLS''' executes, the PLS is disabled. Properties of the PLS are set as:&lt;br /&gt;
&lt;br /&gt;
:A single PLS position exists at 0.&lt;br /&gt;
&lt;br /&gt;
:The initial output polarity is 1.&lt;br /&gt;
&lt;br /&gt;
:'''PLSREPEAT''' is set to 0.&lt;br /&gt;
&lt;br /&gt;
:The hysteresis is set to 0.&lt;br /&gt;
&lt;br /&gt;
These properties may be set explicitly, as long as the PLS remains disabled. You can check which output is associated with a given PLS using '''PLSOUTPUT'''.&lt;br /&gt;
&lt;br /&gt;
'''Step 2'''&lt;br /&gt;
&lt;br /&gt;
Create the PLS data structure and define PLS positions. The number of defined positions is not explicitly limited. A call to '''CREATEPLSDATA''' creates an array of ''n'' positions that stores the position data. The array is 1-based and an error is generated if you attempt to access an index outside of the array bounds. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CreatePLSData 4 MyPLS&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.PLSPosition[1] = 1000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.PLSPosition[2] = 1100&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As a short form, you can use '''PPOS''' in place of '''PLSPOSITION''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.Ppos[3] = 2000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.Ppos[4] = 2200&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You cannot change PLS positions when the PLS is enabled. Position values must be increasing monotonically.&lt;br /&gt;
&lt;br /&gt;
'''Step 3'''&lt;br /&gt;
&lt;br /&gt;
Set the polarity. '''PLSPOLARITY''' defaults to OFF, indicating the PLS state should be OFF after the first position. Change '''PLSPOLARITY''' to ON to invert the state.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSPolarity = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change '''PLSPOLARITY''' only if the PLS is disabled.&lt;br /&gt;
&lt;br /&gt;
'''Step 4'''&lt;br /&gt;
&lt;br /&gt;
Set '''PLSREPEAT'''. If you want the PLS to repeat, set the value of '''PLSREPEAT '''to a non-zero, positive number. For example, to have the PLS repeat every 10,000 position units, enter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSRepeat = 10000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''PLSREPEAT''' defaults to 0, indicating that there is no repetition. Change '''PLSREPEAT''' only when the PLS is disabled.&lt;br /&gt;
&lt;br /&gt;
'''Step 5'''&lt;br /&gt;
&lt;br /&gt;
Set '''PLSHYSTERESIS''', ''if the application requires it''. Hysteresis is only necessary if the system does stop on or near a PLS position. Normally, a '''PLSHYSTERESIS''' of 5 or 10 counts of encoder (converted to position units) or 2 or 3 counts of resolver resolution is sufficient.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSHysteresis = 0.01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Step 6'''&lt;br /&gt;
&lt;br /&gt;
Enable the PLS. Enter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSEnable = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
There are a few other PLS functions you may need:&lt;br /&gt;
&lt;br /&gt;
'''Change Polarity '''The default output state of a PLS is 0. Change this initial state by modifying '''PLSPOLARITY'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSPolarity = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The PLS must be disabled when changing this setting.&lt;br /&gt;
&lt;br /&gt;
'''Query the Name '''Query the name of the axis driving the PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
? MyPLS.PLSAxisName&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
returns the axis associated with the PLS (A1).&lt;br /&gt;
&lt;br /&gt;
'''Disable the PLS '''Disable the PLS. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSEnable = OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must disable a PLS to change PLS properties. Disabling a PLS also helps conserve CPU resources.&lt;br /&gt;
&lt;br /&gt;
'''Delete a PLS '''Delete a PLS to remove it from the system only when the PLS is disable and there are no tasks in memory. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DeletePLS MyPLS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= External Encoders =&lt;br /&gt;
The softMC supports external encoders (encoders not connected to an axis controlled by the softMC). These encoders are connected to the system using the external encoder input of any drive in the system. You can access the encoder periodically with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;? IDNValue(&amp;lt;''axis''&amp;gt;.DriveAddress, 53, 7)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
‘Query external encoder position&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using the encoder for master/slave operation or in a way that requires the value of the signal be updated to the softMC every SERCOS cycle, you must configure the telegram for that axis as Telegram type 7. You also must specify that external position must be included in the telegram. This command is only available when in communication phase of 2 or higher.&lt;br /&gt;
&lt;br /&gt;
= Access to Legacy I/O and ISA =&lt;br /&gt;
The softMC offers support for access to legacy ISA devices located in low memory(0xA0000 - 0xE0000).&lt;br /&gt;
&lt;br /&gt;
== Commands ==&lt;br /&gt;
The softMC supports memory and I/O instructions.&lt;br /&gt;
&lt;br /&gt;
If you are using memory-mapped devices, you will need the memory access commands, '''PEEK''' and '''POKE'''. The valid memory address range for '''PEEK''' is 0xA0000 through 0xDFFFF. The valid memory address range for '''POKE''' depends on the hardware version of the softMC card.&lt;br /&gt;
&lt;br /&gt;
'''For the ISA-Bus card''', the valid memory address range for '''POKE''' is 0xA0000 to 0xCFFFF and 0xDA000 to 0xDFFFF.&lt;br /&gt;
&lt;br /&gt;
'''For the PCI card''', the valid memory address range for '''POKE''' is 0xA0000 to 0xC7FFF and 0xDB000 to 0xDFFFF.&lt;br /&gt;
&lt;br /&gt;
*'''PEEKB''' transfers byte-wide (8-bit) data from the bus to a variable.&lt;br /&gt;
*'''PEEKW''' transfers word-wide (16-bit) data from the bus to a variable.&lt;br /&gt;
*'''POKEB''' transfers byte-wide (8-bit) data to the memory bus.&lt;br /&gt;
*'''POKEW''' transfers word-wide (16-bit) data to the memory bus.&lt;br /&gt;
&lt;br /&gt;
If you are using I/O-mapped cards, you need '''INP''' and '''OUT'''.&lt;br /&gt;
*'''INPB''' transfers byte-wide (8-bit) data from the I/O bus to a variable.&lt;br /&gt;
*'''INPW''' transfers word-wide (16-bit) data from the I/O bus to a variable.&lt;br /&gt;
*'''OUTB''' transfers byte-wide (8-bit) data to the I/O bus.&lt;br /&gt;
*'''OUTW '''transfers word-wide (16-bit) data to the I/O bus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:softMC Firmware|Input/Output]]&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=Input/Output&amp;diff=132904</id>
		<title>Input/Output</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=Input/Output&amp;diff=132904"/>
				<updated>2018-10-08T08:38:39Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: /* PLS (Programmable Limit Switch) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The softMC does not have local I/O, but can map drive inputs and outputs as well as I/O extension modules to its SYS.DIN and SYS.DOUT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Local I/O SERCOS version of softMC =&lt;br /&gt;
The softMC includes 23 inputs and 20 outputs as standard on the softMC. These are accessed with the system properties DIN.1 through DIN.23 and DOUT.1 through DOUT.20.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
? System.Din.1 System.Dout.5 = System.Din1&lt;br /&gt;
?System.Din&lt;br /&gt;
System.Dout=0xfe&lt;br /&gt;
&amp;lt;/pre&amp;gt;  --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Local I/O softMC =&lt;br /&gt;
softMC (CANopen and EtherCAT) does not have local I/O. &lt;br /&gt;
For backward compatibility sys.dout.1 to sys.dout.20 can be read and written but do not have any function.&lt;br /&gt;
&amp;lt;br&amp;gt;Value of sys.din.1 to sys.din.23 is read from file IO.DAT, from field &amp;quot;INP&amp;quot;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;File IO.DAT is generated '''automatically''' if it does not exist on the flash disk. &lt;br /&gt;
&amp;lt;br&amp;gt;''Format'' of IO.DAT &lt;br /&gt;
&amp;lt;br&amp;gt;DIP=0xXX &lt;br /&gt;
&amp;lt;br&amp;gt;INP=0xXX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Software I/O SERCOS version of softMC =&lt;br /&gt;
The softMC provides virtual software I/O in addition to the standard I/O. The primary purpose of software I/O is to place a large group of I/O where it can be read from and written to as blocks in the softMC's dual port RAM. Virtual inputs are delivered from the host over DPRAM where virtual outputs are stored in the DPRAM and retrieved by the host. This is much faster than reading or writing individual I/O points one at a time. This allows efficient communication between a machine controller, such as a VB program or a software PLC, and the softMC program.&lt;br /&gt;
&amp;lt;br/&amp;gt;DPRAM exists '''only''' in SERCOS II version of Motion controller. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Software I/O softMC =&lt;br /&gt;
&lt;br /&gt;
== Bit-oriented Software I/O ==&lt;br /&gt;
Software I/O is used in the softMC program just like standard I/O. Standard inputs are accessed with SYSTEM.DIN.1 through DIN.23, and virtual inputs are accessed with SYSTEM.VIN.1 through VIN.32. Standard outputs are accessed with SYSTEM.DOUT.1 through DOUT.20, and virtual outputs are accessed with SYSTEM.VOUT.1 through VOUT.32. You can use software I/O to start events just as with standard I/O. Programmable limit switches can use software outputs just as with standard outputs. Here is an example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OnEvent SoftwareInputEvent System.VIn.1 = ON&lt;br /&gt;
System.VOut.1 = OFF&lt;br /&gt;
If(System.VOut.4 = ON) &lt;br /&gt;
. . . &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Long-Word-Oriented Software I/O ==&lt;br /&gt;
The entire word (32 bits) of software input and output is accessed when a bit position is not included in the reference to the input or output variable. So the following statement is valid:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
System.VOut=System.VIn&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This statement copies the virtual software input to the output. The physical input and output variables are used in this manner. Be careful when assigning virtual I/O to physical I/O because there are fewer physical bits than there are virtual bits. There are only 20 bits of physical output, but the virtual output variable can have 32 bits.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= PLS (Programmable Limit Switch) =&lt;br /&gt;
&lt;br /&gt;
A Programmable Limit Switch (PLS) monitors position feedback on any axis, real or simulated. A PLS offers more flexibility than a limit switch, as it allows many trip points and can be reconfigured on-the-fly. A PLS toggles the state of a specified system output when an axis position reaches any of the defined positions of the PLS. Some of the features of a PLS are:&lt;br /&gt;
&lt;br /&gt;
*Multiple position specifications.&lt;br /&gt;
&lt;br /&gt;
*Multiple PLSs per axis&lt;br /&gt;
&lt;br /&gt;
*PLS pattern repetition&lt;br /&gt;
&lt;br /&gt;
*Position hysteresis&lt;br /&gt;
&lt;br /&gt;
*Enabling and disabling of PLSs&lt;br /&gt;
&lt;br /&gt;
*The system output may be digital or soft (fast data)&lt;br /&gt;
&lt;br /&gt;
PLS positions are defined in an array that allows you to change individual values of PLS positions. This array must be increasing monotonic. There is no limit of the number of positions or PLSs that can be defined.&lt;br /&gt;
&lt;br /&gt;
The initial output polarity is specified with '''PLSPOLARITY'''. The output state is set when the PLS is enabled.&lt;br /&gt;
&lt;br /&gt;
== Enable and Disable ==&lt;br /&gt;
After being defined, a PLS is disabled (output pattern is not generated). The output is set when the PLS is enabled. The output is set to the defined initial state.&lt;br /&gt;
&lt;br /&gt;
PLS properties are changed only when the PLS is disabled. Each enabled PLS requires CPU resources. Conserve those resources by disabling the unused PLS(s). '''PLSENABLE''' controls the status of the PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PlsEnable = ON | OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''PLSENABLE''' queries the status of a PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
?MyPls.PlsEnable&lt;br /&gt;
if(MyPLS.PlsEnable = OFF) &lt;br /&gt;
. . .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or drives events:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EventOn MyEvent MyPLS.PlsOutput = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Switch Positions ==&lt;br /&gt;
The basic mechanism of the PLS is the switch position(s) where the PLS output changes state. The figure belows shows a PLS output with one switch position at 100.&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-1-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
More switch positions can be added. To have the PLS in the above example turn back off at 200, simply add a second position at 200 as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-2-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
You can add any number of positions. For example, to extend the above example to turn back on at 400 and off again at 600, add positions 3 and 4 as 400 and 600 as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-3-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
There is no explicit limit to the number of positions you can have in a PLS, but the PLS positions must be increasing monotonic (Position2 must be greater than Position1, Position3 must be greater than Position2, etc.).&lt;br /&gt;
&lt;br /&gt;
== Repetition Interval ==&lt;br /&gt;
'''PLSREPEAT''' allows you to repeat the same PLS after a fixed number of counts. For example, the figure below shows a PLS that turns on at 0, off at 10 and has a '''PLSREPEAT''' value of 100:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-4-RepetitionInterval.png|caption]]&lt;br /&gt;
&lt;br /&gt;
== Polarity ==&lt;br /&gt;
'''PLSPOLARITY''' allows you to control the polarity of the PLS output. The initial polarity may be specified as 1 or 0, indicating that the output is set to 1 or 0 after the PLS is enabled and when the axis is located between the first and second PLS positions. If the axis position (when the PLS is enabled) is not located within this segment, the output polarity is set to 0 or 1, according to the current position so that when the axis reaches the first segment, the output polarity is as indicated. The default value for polarity is '''0'''.&lt;br /&gt;
&lt;br /&gt;
== Hysteresis ==&lt;br /&gt;
The softMC allows you to apply hysteresis around switch points. Hysteresis provides a margin in the switching between PLS positions to accommodate noise in the PLS axis. Set the hysteresis greater than the noise on the axis, (typically, 5 or 10 counts of encoder is sufficient, less is required for resolver systems). If you have a hysteresis of 0.01 position units, each transition of PLS position is moved forward 0.005 units for positive motion and backward 0.005 units for negative motion. If the axis driving the PLS is stopped directly on a PLS position and the inherent noise on the axis is less than the hysteresis, the PLS state does not change due to this noise.&lt;br /&gt;
&lt;br /&gt;
== Enable and Disable ==&lt;br /&gt;
'''PLSENABLE''' enables or disables the PLS(s). After being defined, a PLS is disabled. The output is fixed when the PLS is enabled. The PLS output is set to the defined initial state when the PLS is enabled.&lt;br /&gt;
&lt;br /&gt;
== PLS Output State ==&lt;br /&gt;
Query the digital output associated with the PLS to query the state of the PLS output. For example, assume the PLS output is assigned to SYSTEM.DOUT.1. To determine the output state of the PLS, query the state of SYSTEM.DOUT.1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&amp;gt;?Sys.Dout.1&lt;br /&gt;
0 | 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Set Up ==&lt;br /&gt;
'''Step 1'''&lt;br /&gt;
&lt;br /&gt;
Declare the PLS with '''&amp;lt;nowiki&amp;gt;Common Shared &amp;lt;&amp;lt;/nowiki&amp;gt;''var''&amp;gt; as PLS''' in Config.Prg or at the terminal. You must name the PLS, specify the axis that drives the PLS, and name an output to be controlled by the PLS. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Common Shared MyPLS as PLS A1 System.Dout.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
sets up MyPLS as a PLS driven by axis A1 connected to SYSTEM.DOUT.1. The output can be a digital output (SYSTEM.DOUT.1 through DOUT.20) or it can be one of the virtual outputs (SYSTEM.VOUT.1 through VOUT.32).&lt;br /&gt;
&lt;br /&gt;
After the '''&amp;lt;nowiki&amp;gt;Common Shared &amp;lt;&amp;lt;/nowiki&amp;gt;''var''&amp;gt; as PLS''' executes, the PLS is disabled. Properties of the PLS are set as:&lt;br /&gt;
&lt;br /&gt;
:A single PLS position exists at 0.&lt;br /&gt;
&lt;br /&gt;
:The initial output polarity is 1.&lt;br /&gt;
&lt;br /&gt;
:'''PLSREPEAT''' is set to 0.&lt;br /&gt;
&lt;br /&gt;
:The hysteresis is set to 0.&lt;br /&gt;
&lt;br /&gt;
These properties may be set explicitly, as long as the PLS remains disabled. You can check which output is associated with a given PLS using '''PLSOUTPUT'''.&lt;br /&gt;
&lt;br /&gt;
'''Step 2'''&lt;br /&gt;
&lt;br /&gt;
Create the PLS data structure and define PLS positions. The number of defined positions is not explicitly limited. A call to '''CREATEPLSDATA''' creates an array of ''n'' positions that stores the position data. The array is 1-based and an error is generated if you attempt to access an index outside of the array bounds. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CreatePLSData 4 MyPLS&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.PLSPosition[1] = 1000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.PLSPosition[2] = 1100&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As a short form, you can use '''PPOS''' in place of '''PLSPOSITION''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.Ppos[3] = 2000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.Ppos[4] = 2200&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You cannot change PLS positions when the PLS is enabled. Position values must be increasing monotonically.&lt;br /&gt;
&lt;br /&gt;
'''Step 3'''&lt;br /&gt;
&lt;br /&gt;
Set the polarity. '''PLSPOLARITY''' defaults to OFF, indicating the PLS state should be OFF after the first position. Change '''PLSPOLARITY''' to ON to invert the state.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSPolarity = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change '''PLSPOLARITY''' only if the PLS is disabled.&lt;br /&gt;
&lt;br /&gt;
'''Step 4'''&lt;br /&gt;
&lt;br /&gt;
Set '''PLSREPEAT'''. If you want the PLS to repeat, set the value of '''PLSREPEAT '''to a non-zero, positive number. For example, to have the PLS repeat every 10,000 position units, enter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSRepeat = 10000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''PLSREPEAT''' defaults to 0, indicating that there is no repetition. Change '''PLSREPEAT''' only when the PLS is disabled.&lt;br /&gt;
&lt;br /&gt;
'''Step 5'''&lt;br /&gt;
&lt;br /&gt;
Set '''PLSHYSTERESIS''', ''if the application requires it''. Hysteresis is only necessary if the system does stop on or near a PLS position. Normally, a '''PLSHYSTERESIS''' of 5 or 10 counts of encoder (converted to position units) or 2 or 3 counts of resolver resolution is sufficient.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSHysteresis = 0.01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Step 6'''&lt;br /&gt;
&lt;br /&gt;
Enable the PLS. Enter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSEnable = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
There are a few other PLS functions you may need:&lt;br /&gt;
&lt;br /&gt;
'''Change Polarity '''The default output state of a PLS is 0. Change this initial state by modifying '''PLSPOLARITY'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSPolarity = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The PLS must be disabled when changing this setting.&lt;br /&gt;
&lt;br /&gt;
'''Query the Name '''Query the name of the axis driving the PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
? MyPLS.PLSAxisName&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
returns the axis associated with the PLS (A1).&lt;br /&gt;
&lt;br /&gt;
'''Disable the PLS '''Disable the PLS. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSEnable = OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must disable a PLS to change PLS properties. Disabling a PLS also helps conserve CPU resources.&lt;br /&gt;
&lt;br /&gt;
'''Delete a PLS '''Delete a PLS to remove it from the system only when the PLS is disable and there are no tasks in memory. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DeletePLS MyPLS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= External Encoders =&lt;br /&gt;
The softMC supports external encoders (encoders not connected to an axis controlled by the softMC). These encoders are connected to the system using the external encoder input of any drive in the system. You can access the encoder periodically with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;? IDNValue(&amp;lt;''axis''&amp;gt;.DriveAddress, 53, 7)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
‘Query external encoder position&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using the encoder for master/slave operation or in a way that requires the value of the signal be updated to the softMC every SERCOS cycle, you must configure the telegram for that axis as Telegram type 7. You also must specify that external position must be included in the telegram. This command is only available when in communication phase of 2 or higher.&lt;br /&gt;
&lt;br /&gt;
= Access to Legacy I/O and ISA =&lt;br /&gt;
The softMC offers support for access to legacy ISA devices located in low memory(0xA0000 - 0xE0000).&lt;br /&gt;
&lt;br /&gt;
== Commands ==&lt;br /&gt;
The softMC supports memory and I/O instructions.&lt;br /&gt;
&lt;br /&gt;
If you are using memory-mapped devices, you will need the memory access commands, '''PEEK''' and '''POKE'''. The valid memory address range for '''PEEK''' is 0xA0000 through 0xDFFFF. The valid memory address range for '''POKE''' depends on the hardware version of the softMC card.&lt;br /&gt;
&lt;br /&gt;
'''For the ISA-Bus card''', the valid memory address range for '''POKE''' is 0xA0000 to 0xCFFFF and 0xDA000 to 0xDFFFF.&lt;br /&gt;
&lt;br /&gt;
'''For the PCI card''', the valid memory address range for '''POKE''' is 0xA0000 to 0xC7FFF and 0xDB000 to 0xDFFFF.&lt;br /&gt;
&lt;br /&gt;
*'''PEEKB''' transfers byte-wide (8-bit) data from the bus to a variable.&lt;br /&gt;
*'''PEEKW''' transfers word-wide (16-bit) data from the bus to a variable.&lt;br /&gt;
*'''POKEB''' transfers byte-wide (8-bit) data to the memory bus.&lt;br /&gt;
*'''POKEW''' transfers word-wide (16-bit) data to the memory bus.&lt;br /&gt;
&lt;br /&gt;
If you are using I/O-mapped cards, you need '''INP''' and '''OUT'''.&lt;br /&gt;
*'''INPB''' transfers byte-wide (8-bit) data from the I/O bus to a variable.&lt;br /&gt;
*'''INPW''' transfers word-wide (16-bit) data from the I/O bus to a variable.&lt;br /&gt;
*'''OUTB''' transfers byte-wide (8-bit) data to the I/O bus.&lt;br /&gt;
*'''OUTW '''transfers word-wide (16-bit) data to the I/O bus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:softMC Firmware|Input/Output]]&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=Input/Output&amp;diff=132903</id>
		<title>Input/Output</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=Input/Output&amp;diff=132903"/>
				<updated>2018-10-08T08:38:05Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: /* PLS (Programmable Limit Switch) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The softMC does not have local I/O, but can map drive inputs and outputs as well as I/O extension modules to its SYS.DIN and SYS.DOUT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Local I/O SERCOS version of softMC =&lt;br /&gt;
The softMC includes 23 inputs and 20 outputs as standard on the softMC. These are accessed with the system properties DIN.1 through DIN.23 and DOUT.1 through DOUT.20.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
? System.Din.1 System.Dout.5 = System.Din1&lt;br /&gt;
?System.Din&lt;br /&gt;
System.Dout=0xfe&lt;br /&gt;
&amp;lt;/pre&amp;gt;  --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Local I/O softMC =&lt;br /&gt;
softMC (CANopen and EtherCAT) does not have local I/O. &lt;br /&gt;
For backward compatibility sys.dout.1 to sys.dout.20 can be read and written but do not have any function.&lt;br /&gt;
&amp;lt;br&amp;gt;Value of sys.din.1 to sys.din.23 is read from file IO.DAT, from field &amp;quot;INP&amp;quot;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;File IO.DAT is generated '''automatically''' if it does not exist on the flash disk. &lt;br /&gt;
&amp;lt;br&amp;gt;''Format'' of IO.DAT &lt;br /&gt;
&amp;lt;br&amp;gt;DIP=0xXX &lt;br /&gt;
&amp;lt;br&amp;gt;INP=0xXX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Software I/O SERCOS version of softMC =&lt;br /&gt;
The softMC provides virtual software I/O in addition to the standard I/O. The primary purpose of software I/O is to place a large group of I/O where it can be read from and written to as blocks in the softMC's dual port RAM. Virtual inputs are delivered from the host over DPRAM where virtual outputs are stored in the DPRAM and retrieved by the host. This is much faster than reading or writing individual I/O points one at a time. This allows efficient communication between a machine controller, such as a VB program or a software PLC, and the softMC program.&lt;br /&gt;
&amp;lt;br/&amp;gt;DPRAM exists '''only''' in SERCOS II version of Motion controller. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Software I/O softMC =&lt;br /&gt;
&lt;br /&gt;
== Bit-oriented Software I/O ==&lt;br /&gt;
Software I/O is used in the softMC program just like standard I/O. Standard inputs are accessed with SYSTEM.DIN.1 through DIN.23, and virtual inputs are accessed with SYSTEM.VIN.1 through VIN.32. Standard outputs are accessed with SYSTEM.DOUT.1 through DOUT.20, and virtual outputs are accessed with SYSTEM.VOUT.1 through VOUT.32. You can use software I/O to start events just as with standard I/O. Programmable limit switches can use software outputs just as with standard outputs. Here is an example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OnEvent SoftwareInputEvent System.VIn.1 = ON&lt;br /&gt;
System.VOut.1 = OFF&lt;br /&gt;
If(System.VOut.4 = ON) &lt;br /&gt;
. . . &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Long-Word-Oriented Software I/O ==&lt;br /&gt;
The entire word (32 bits) of software input and output is accessed when a bit position is not included in the reference to the input or output variable. So the following statement is valid:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
System.VOut=System.VIn&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This statement copies the virtual software input to the output. The physical input and output variables are used in this manner. Be careful when assigning virtual I/O to physical I/O because there are fewer physical bits than there are virtual bits. There are only 20 bits of physical output, but the virtual output variable can have 32 bits.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= PLS (Programmable Limit Switch) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
A Programmable Limit Switch (PLS) monitors position feedback on any axis, real or simulated. A PLS offers more flexibility than a limit switch, as it allows many trip points and can be reconfigured on-the-fly. A PLS toggles the state of a specified system output when an axis position reaches any of the defined positions of the PLS. Some of the features of a PLS are:&lt;br /&gt;
&lt;br /&gt;
*Multiple position specifications.&lt;br /&gt;
&lt;br /&gt;
*Multiple PLSs per axis&lt;br /&gt;
&lt;br /&gt;
*PLS pattern repetition&lt;br /&gt;
&lt;br /&gt;
*Position hysteresis&lt;br /&gt;
&lt;br /&gt;
*Enabling and disabling of PLSs&lt;br /&gt;
&lt;br /&gt;
*The system output may be digital or soft (fast data)&lt;br /&gt;
&lt;br /&gt;
PLS positions are defined in an array that allows you to change individual values of PLS positions. This array must be increasing monotonic. There is no limit of the number of positions or PLSs that can be defined.&lt;br /&gt;
&lt;br /&gt;
The initial output polarity is specified with '''PLSPOLARITY'''. The output state is set when the PLS is enabled.&lt;br /&gt;
&lt;br /&gt;
== Enable and Disable ==&lt;br /&gt;
After being defined, a PLS is disabled (output pattern is not generated). The output is set when the PLS is enabled. The output is set to the defined initial state.&lt;br /&gt;
&lt;br /&gt;
PLS properties are changed only when the PLS is disabled. Each enabled PLS requires CPU resources. Conserve those resources by disabling the unused PLS(s). '''PLSENABLE''' controls the status of the PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PlsEnable = ON | OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''PLSENABLE''' queries the status of a PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
?MyPls.PlsEnable&lt;br /&gt;
if(MyPLS.PlsEnable = OFF) &lt;br /&gt;
. . .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or drives events:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EventOn MyEvent MyPLS.PlsOutput = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Switch Positions ==&lt;br /&gt;
The basic mechanism of the PLS is the switch position(s) where the PLS output changes state. The figure belows shows a PLS output with one switch position at 100.&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-1-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
More switch positions can be added. To have the PLS in the above example turn back off at 200, simply add a second position at 200 as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-2-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
You can add any number of positions. For example, to extend the above example to turn back on at 400 and off again at 600, add positions 3 and 4 as 400 and 600 as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-3-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
There is no explicit limit to the number of positions you can have in a PLS, but the PLS positions must be increasing monotonic (Position2 must be greater than Position1, Position3 must be greater than Position2, etc.).&lt;br /&gt;
&lt;br /&gt;
== Repetition Interval ==&lt;br /&gt;
'''PLSREPEAT''' allows you to repeat the same PLS after a fixed number of counts. For example, the figure below shows a PLS that turns on at 0, off at 10 and has a '''PLSREPEAT''' value of 100:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-4-RepetitionInterval.png|caption]]&lt;br /&gt;
&lt;br /&gt;
== Polarity ==&lt;br /&gt;
'''PLSPOLARITY''' allows you to control the polarity of the PLS output. The initial polarity may be specified as 1 or 0, indicating that the output is set to 1 or 0 after the PLS is enabled and when the axis is located between the first and second PLS positions. If the axis position (when the PLS is enabled) is not located within this segment, the output polarity is set to 0 or 1, according to the current position so that when the axis reaches the first segment, the output polarity is as indicated. The default value for polarity is '''0'''.&lt;br /&gt;
&lt;br /&gt;
== Hysteresis ==&lt;br /&gt;
The softMC allows you to apply hysteresis around switch points. Hysteresis provides a margin in the switching between PLS positions to accommodate noise in the PLS axis. Set the hysteresis greater than the noise on the axis, (typically, 5 or 10 counts of encoder is sufficient, less is required for resolver systems). If you have a hysteresis of 0.01 position units, each transition of PLS position is moved forward 0.005 units for positive motion and backward 0.005 units for negative motion. If the axis driving the PLS is stopped directly on a PLS position and the inherent noise on the axis is less than the hysteresis, the PLS state does not change due to this noise.&lt;br /&gt;
&lt;br /&gt;
== Enable and Disable ==&lt;br /&gt;
'''PLSENABLE''' enables or disables the PLS(s). After being defined, a PLS is disabled. The output is fixed when the PLS is enabled. The PLS output is set to the defined initial state when the PLS is enabled.&lt;br /&gt;
&lt;br /&gt;
== PLS Output State ==&lt;br /&gt;
Query the digital output associated with the PLS to query the state of the PLS output. For example, assume the PLS output is assigned to SYSTEM.DOUT.1. To determine the output state of the PLS, query the state of SYSTEM.DOUT.1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&amp;gt;?Sys.Dout.1&lt;br /&gt;
0 | 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Set Up ==&lt;br /&gt;
'''Step 1'''&lt;br /&gt;
&lt;br /&gt;
Declare the PLS with '''&amp;lt;nowiki&amp;gt;Common Shared &amp;lt;&amp;lt;/nowiki&amp;gt;''var''&amp;gt; as PLS''' in Config.Prg or at the terminal. You must name the PLS, specify the axis that drives the PLS, and name an output to be controlled by the PLS. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Common Shared MyPLS as PLS A1 System.Dout.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
sets up MyPLS as a PLS driven by axis A1 connected to SYSTEM.DOUT.1. The output can be a digital output (SYSTEM.DOUT.1 through DOUT.20) or it can be one of the virtual outputs (SYSTEM.VOUT.1 through VOUT.32).&lt;br /&gt;
&lt;br /&gt;
After the '''&amp;lt;nowiki&amp;gt;Common Shared &amp;lt;&amp;lt;/nowiki&amp;gt;''var''&amp;gt; as PLS''' executes, the PLS is disabled. Properties of the PLS are set as:&lt;br /&gt;
&lt;br /&gt;
:A single PLS position exists at 0.&lt;br /&gt;
&lt;br /&gt;
:The initial output polarity is 1.&lt;br /&gt;
&lt;br /&gt;
:'''PLSREPEAT''' is set to 0.&lt;br /&gt;
&lt;br /&gt;
:The hysteresis is set to 0.&lt;br /&gt;
&lt;br /&gt;
These properties may be set explicitly, as long as the PLS remains disabled. You can check which output is associated with a given PLS using '''PLSOUTPUT'''.&lt;br /&gt;
&lt;br /&gt;
'''Step 2'''&lt;br /&gt;
&lt;br /&gt;
Create the PLS data structure and define PLS positions. The number of defined positions is not explicitly limited. A call to '''CREATEPLSDATA''' creates an array of ''n'' positions that stores the position data. The array is 1-based and an error is generated if you attempt to access an index outside of the array bounds. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CreatePLSData 4 MyPLS&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.PLSPosition[1] = 1000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.PLSPosition[2] = 1100&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As a short form, you can use '''PPOS''' in place of '''PLSPOSITION''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.Ppos[3] = 2000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.Ppos[4] = 2200&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You cannot change PLS positions when the PLS is enabled. Position values must be increasing monotonically.&lt;br /&gt;
&lt;br /&gt;
'''Step 3'''&lt;br /&gt;
&lt;br /&gt;
Set the polarity. '''PLSPOLARITY''' defaults to OFF, indicating the PLS state should be OFF after the first position. Change '''PLSPOLARITY''' to ON to invert the state.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSPolarity = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change '''PLSPOLARITY''' only if the PLS is disabled.&lt;br /&gt;
&lt;br /&gt;
'''Step 4'''&lt;br /&gt;
&lt;br /&gt;
Set '''PLSREPEAT'''. If you want the PLS to repeat, set the value of '''PLSREPEAT '''to a non-zero, positive number. For example, to have the PLS repeat every 10,000 position units, enter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSRepeat = 10000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''PLSREPEAT''' defaults to 0, indicating that there is no repetition. Change '''PLSREPEAT''' only when the PLS is disabled.&lt;br /&gt;
&lt;br /&gt;
'''Step 5'''&lt;br /&gt;
&lt;br /&gt;
Set '''PLSHYSTERESIS''', ''if the application requires it''. Hysteresis is only necessary if the system does stop on or near a PLS position. Normally, a '''PLSHYSTERESIS''' of 5 or 10 counts of encoder (converted to position units) or 2 or 3 counts of resolver resolution is sufficient.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSHysteresis = 0.01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Step 6'''&lt;br /&gt;
&lt;br /&gt;
Enable the PLS. Enter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSEnable = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
There are a few other PLS functions you may need:&lt;br /&gt;
&lt;br /&gt;
'''Change Polarity '''The default output state of a PLS is 0. Change this initial state by modifying '''PLSPOLARITY'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSPolarity = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The PLS must be disabled when changing this setting.&lt;br /&gt;
&lt;br /&gt;
'''Query the Name '''Query the name of the axis driving the PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
? MyPLS.PLSAxisName&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
returns the axis associated with the PLS (A1).&lt;br /&gt;
&lt;br /&gt;
'''Disable the PLS '''Disable the PLS. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSEnable = OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must disable a PLS to change PLS properties. Disabling a PLS also helps conserve CPU resources.&lt;br /&gt;
&lt;br /&gt;
'''Delete a PLS '''Delete a PLS to remove it from the system only when the PLS is disable and there are no tasks in memory. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DeletePLS MyPLS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= External Encoders =&lt;br /&gt;
The softMC supports external encoders (encoders not connected to an axis controlled by the softMC). These encoders are connected to the system using the external encoder input of any drive in the system. You can access the encoder periodically with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;? IDNValue(&amp;lt;''axis''&amp;gt;.DriveAddress, 53, 7)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
‘Query external encoder position&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using the encoder for master/slave operation or in a way that requires the value of the signal be updated to the softMC every SERCOS cycle, you must configure the telegram for that axis as Telegram type 7. You also must specify that external position must be included in the telegram. This command is only available when in communication phase of 2 or higher.&lt;br /&gt;
&lt;br /&gt;
= Access to Legacy I/O and ISA =&lt;br /&gt;
The softMC offers support for access to legacy ISA devices located in low memory(0xA0000 - 0xE0000).&lt;br /&gt;
&lt;br /&gt;
== Commands ==&lt;br /&gt;
The softMC supports memory and I/O instructions.&lt;br /&gt;
&lt;br /&gt;
If you are using memory-mapped devices, you will need the memory access commands, '''PEEK''' and '''POKE'''. The valid memory address range for '''PEEK''' is 0xA0000 through 0xDFFFF. The valid memory address range for '''POKE''' depends on the hardware version of the softMC card.&lt;br /&gt;
&lt;br /&gt;
'''For the ISA-Bus card''', the valid memory address range for '''POKE''' is 0xA0000 to 0xCFFFF and 0xDA000 to 0xDFFFF.&lt;br /&gt;
&lt;br /&gt;
'''For the PCI card''', the valid memory address range for '''POKE''' is 0xA0000 to 0xC7FFF and 0xDB000 to 0xDFFFF.&lt;br /&gt;
&lt;br /&gt;
*'''PEEKB''' transfers byte-wide (8-bit) data from the bus to a variable.&lt;br /&gt;
*'''PEEKW''' transfers word-wide (16-bit) data from the bus to a variable.&lt;br /&gt;
*'''POKEB''' transfers byte-wide (8-bit) data to the memory bus.&lt;br /&gt;
*'''POKEW''' transfers word-wide (16-bit) data to the memory bus.&lt;br /&gt;
&lt;br /&gt;
If you are using I/O-mapped cards, you need '''INP''' and '''OUT'''.&lt;br /&gt;
*'''INPB''' transfers byte-wide (8-bit) data from the I/O bus to a variable.&lt;br /&gt;
*'''INPW''' transfers word-wide (16-bit) data from the I/O bus to a variable.&lt;br /&gt;
*'''OUTB''' transfers byte-wide (8-bit) data to the I/O bus.&lt;br /&gt;
*'''OUTW '''transfers word-wide (16-bit) data to the I/O bus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:softMC Firmware|Input/Output]]&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=Input/Output&amp;diff=132902</id>
		<title>Input/Output</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=Input/Output&amp;diff=132902"/>
				<updated>2018-10-08T08:37:02Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: /* PLS (Programmable Limit Switch) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The softMC does not have local I/O, but can map drive inputs and outputs as well as I/O extension modules to its SYS.DIN and SYS.DOUT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Local I/O SERCOS version of softMC =&lt;br /&gt;
The softMC includes 23 inputs and 20 outputs as standard on the softMC. These are accessed with the system properties DIN.1 through DIN.23 and DOUT.1 through DOUT.20.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
? System.Din.1 System.Dout.5 = System.Din1&lt;br /&gt;
?System.Din&lt;br /&gt;
System.Dout=0xfe&lt;br /&gt;
&amp;lt;/pre&amp;gt;  --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Local I/O softMC =&lt;br /&gt;
softMC (CANopen and EtherCAT) does not have local I/O. &lt;br /&gt;
For backward compatibility sys.dout.1 to sys.dout.20 can be read and written but do not have any function.&lt;br /&gt;
&amp;lt;br&amp;gt;Value of sys.din.1 to sys.din.23 is read from file IO.DAT, from field &amp;quot;INP&amp;quot;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;File IO.DAT is generated '''automatically''' if it does not exist on the flash disk. &lt;br /&gt;
&amp;lt;br&amp;gt;''Format'' of IO.DAT &lt;br /&gt;
&amp;lt;br&amp;gt;DIP=0xXX &lt;br /&gt;
&amp;lt;br&amp;gt;INP=0xXX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Software I/O SERCOS version of softMC =&lt;br /&gt;
The softMC provides virtual software I/O in addition to the standard I/O. The primary purpose of software I/O is to place a large group of I/O where it can be read from and written to as blocks in the softMC's dual port RAM. Virtual inputs are delivered from the host over DPRAM where virtual outputs are stored in the DPRAM and retrieved by the host. This is much faster than reading or writing individual I/O points one at a time. This allows efficient communication between a machine controller, such as a VB program or a software PLC, and the softMC program.&lt;br /&gt;
&amp;lt;br/&amp;gt;DPRAM exists '''only''' in SERCOS II version of Motion controller. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Software I/O softMC =&lt;br /&gt;
&lt;br /&gt;
== Bit-oriented Software I/O ==&lt;br /&gt;
Software I/O is used in the softMC program just like standard I/O. Standard inputs are accessed with SYSTEM.DIN.1 through DIN.23, and virtual inputs are accessed with SYSTEM.VIN.1 through VIN.32. Standard outputs are accessed with SYSTEM.DOUT.1 through DOUT.20, and virtual outputs are accessed with SYSTEM.VOUT.1 through VOUT.32. You can use software I/O to start events just as with standard I/O. Programmable limit switches can use software outputs just as with standard outputs. Here is an example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OnEvent SoftwareInputEvent System.VIn.1 = ON&lt;br /&gt;
System.VOut.1 = OFF&lt;br /&gt;
If(System.VOut.4 = ON) &lt;br /&gt;
. . . &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Long-Word-Oriented Software I/O ==&lt;br /&gt;
The entire word (32 bits) of software input and output is accessed when a bit position is not included in the reference to the input or output variable. So the following statement is valid:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
System.VOut=System.VIn&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This statement copies the virtual software input to the output. The physical input and output variables are used in this manner. Be careful when assigning virtual I/O to physical I/O because there are fewer physical bits than there are virtual bits. There are only 20 bits of physical output, but the virtual output variable can have 32 bits.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= PLS (Programmable Limit Switch) =&lt;br /&gt;
A Programmable Limit Switch (PLS) monitors position feedback on any axis, real or simulated. A PLS offers more flexibility than a limit switch, as it allows many trip points and can be reconfigured on-the-fly. A PLS toggles the state of a specified system output when an axis position reaches any of the defined positions of the PLS. Some of the features of a PLS are:&lt;br /&gt;
&lt;br /&gt;
*Multiple position specifications.&lt;br /&gt;
&lt;br /&gt;
*Multiple PLSs per axis&lt;br /&gt;
&lt;br /&gt;
*PLS pattern repetition&lt;br /&gt;
&lt;br /&gt;
*Position hysteresis&lt;br /&gt;
&lt;br /&gt;
*Enabling and disabling of PLSs&lt;br /&gt;
&lt;br /&gt;
*The system output may be digital or soft (fast data)&lt;br /&gt;
&lt;br /&gt;
PLS positions are defined in an array that allows you to change individual values of PLS positions. This array must be increasing monotonic. There is no limit of the number of positions or PLSs that can be defined.&lt;br /&gt;
&lt;br /&gt;
The initial output polarity is specified with '''PLSPOLARITY'''. The output state is set when the PLS is enabled.&lt;br /&gt;
&lt;br /&gt;
== Enable and Disable ==&lt;br /&gt;
After being defined, a PLS is disabled (output pattern is not generated). The output is set when the PLS is enabled. The output is set to the defined initial state.&lt;br /&gt;
&lt;br /&gt;
PLS properties are changed only when the PLS is disabled. Each enabled PLS requires CPU resources. Conserve those resources by disabling the unused PLS(s). '''PLSENABLE''' controls the status of the PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PlsEnable = ON | OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''PLSENABLE''' queries the status of a PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
?MyPls.PlsEnable&lt;br /&gt;
if(MyPLS.PlsEnable = OFF) &lt;br /&gt;
. . .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or drives events:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EventOn MyEvent MyPLS.PlsOutput = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Switch Positions ==&lt;br /&gt;
The basic mechanism of the PLS is the switch position(s) where the PLS output changes state. The figure belows shows a PLS output with one switch position at 100.&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-1-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
More switch positions can be added. To have the PLS in the above example turn back off at 200, simply add a second position at 200 as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-2-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
You can add any number of positions. For example, to extend the above example to turn back on at 400 and off again at 600, add positions 3 and 4 as 400 and 600 as shown below:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-3-switchPositions.png|caption|400px]]&lt;br /&gt;
&lt;br /&gt;
There is no explicit limit to the number of positions you can have in a PLS, but the PLS positions must be increasing monotonic (Position2 must be greater than Position1, Position3 must be greater than Position2, etc.).&lt;br /&gt;
&lt;br /&gt;
== Repetition Interval ==&lt;br /&gt;
'''PLSREPEAT''' allows you to repeat the same PLS after a fixed number of counts. For example, the figure below shows a PLS that turns on at 0, off at 10 and has a '''PLSREPEAT''' value of 100:&lt;br /&gt;
&lt;br /&gt;
[[Image:Axsystems;UserManual-4-RepetitionInterval.png|caption]]&lt;br /&gt;
&lt;br /&gt;
== Polarity ==&lt;br /&gt;
'''PLSPOLARITY''' allows you to control the polarity of the PLS output. The initial polarity may be specified as 1 or 0, indicating that the output is set to 1 or 0 after the PLS is enabled and when the axis is located between the first and second PLS positions. If the axis position (when the PLS is enabled) is not located within this segment, the output polarity is set to 0 or 1, according to the current position so that when the axis reaches the first segment, the output polarity is as indicated. The default value for polarity is '''0'''.&lt;br /&gt;
&lt;br /&gt;
== Hysteresis ==&lt;br /&gt;
The softMC allows you to apply hysteresis around switch points. Hysteresis provides a margin in the switching between PLS positions to accommodate noise in the PLS axis. Set the hysteresis greater than the noise on the axis, (typically, 5 or 10 counts of encoder is sufficient, less is required for resolver systems). If you have a hysteresis of 0.01 position units, each transition of PLS position is moved forward 0.005 units for positive motion and backward 0.005 units for negative motion. If the axis driving the PLS is stopped directly on a PLS position and the inherent noise on the axis is less than the hysteresis, the PLS state does not change due to this noise.&lt;br /&gt;
&lt;br /&gt;
== Enable and Disable ==&lt;br /&gt;
'''PLSENABLE''' enables or disables the PLS(s). After being defined, a PLS is disabled. The output is fixed when the PLS is enabled. The PLS output is set to the defined initial state when the PLS is enabled.&lt;br /&gt;
&lt;br /&gt;
== PLS Output State ==&lt;br /&gt;
Query the digital output associated with the PLS to query the state of the PLS output. For example, assume the PLS output is assigned to SYSTEM.DOUT.1. To determine the output state of the PLS, query the state of SYSTEM.DOUT.1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&amp;gt;?Sys.Dout.1&lt;br /&gt;
0 | 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Set Up ==&lt;br /&gt;
'''Step 1'''&lt;br /&gt;
&lt;br /&gt;
Declare the PLS with '''&amp;lt;nowiki&amp;gt;Common Shared &amp;lt;&amp;lt;/nowiki&amp;gt;''var''&amp;gt; as PLS''' in Config.Prg or at the terminal. You must name the PLS, specify the axis that drives the PLS, and name an output to be controlled by the PLS. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Common Shared MyPLS as PLS A1 System.Dout.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
sets up MyPLS as a PLS driven by axis A1 connected to SYSTEM.DOUT.1. The output can be a digital output (SYSTEM.DOUT.1 through DOUT.20) or it can be one of the virtual outputs (SYSTEM.VOUT.1 through VOUT.32).&lt;br /&gt;
&lt;br /&gt;
After the '''&amp;lt;nowiki&amp;gt;Common Shared &amp;lt;&amp;lt;/nowiki&amp;gt;''var''&amp;gt; as PLS''' executes, the PLS is disabled. Properties of the PLS are set as:&lt;br /&gt;
&lt;br /&gt;
:A single PLS position exists at 0.&lt;br /&gt;
&lt;br /&gt;
:The initial output polarity is 1.&lt;br /&gt;
&lt;br /&gt;
:'''PLSREPEAT''' is set to 0.&lt;br /&gt;
&lt;br /&gt;
:The hysteresis is set to 0.&lt;br /&gt;
&lt;br /&gt;
These properties may be set explicitly, as long as the PLS remains disabled. You can check which output is associated with a given PLS using '''PLSOUTPUT'''.&lt;br /&gt;
&lt;br /&gt;
'''Step 2'''&lt;br /&gt;
&lt;br /&gt;
Create the PLS data structure and define PLS positions. The number of defined positions is not explicitly limited. A call to '''CREATEPLSDATA''' creates an array of ''n'' positions that stores the position data. The array is 1-based and an error is generated if you attempt to access an index outside of the array bounds. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CreatePLSData 4 MyPLS&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.PLSPosition[1] = 1000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.PLSPosition[2] = 1100&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As a short form, you can use '''PPOS''' in place of '''PLSPOSITION''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.Ppos[3] = 2000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;MyPLS.Ppos[4] = 2200&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You cannot change PLS positions when the PLS is enabled. Position values must be increasing monotonically.&lt;br /&gt;
&lt;br /&gt;
'''Step 3'''&lt;br /&gt;
&lt;br /&gt;
Set the polarity. '''PLSPOLARITY''' defaults to OFF, indicating the PLS state should be OFF after the first position. Change '''PLSPOLARITY''' to ON to invert the state.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSPolarity = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change '''PLSPOLARITY''' only if the PLS is disabled.&lt;br /&gt;
&lt;br /&gt;
'''Step 4'''&lt;br /&gt;
&lt;br /&gt;
Set '''PLSREPEAT'''. If you want the PLS to repeat, set the value of '''PLSREPEAT '''to a non-zero, positive number. For example, to have the PLS repeat every 10,000 position units, enter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSRepeat = 10000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''PLSREPEAT''' defaults to 0, indicating that there is no repetition. Change '''PLSREPEAT''' only when the PLS is disabled.&lt;br /&gt;
&lt;br /&gt;
'''Step 5'''&lt;br /&gt;
&lt;br /&gt;
Set '''PLSHYSTERESIS''', ''if the application requires it''. Hysteresis is only necessary if the system does stop on or near a PLS position. Normally, a '''PLSHYSTERESIS''' of 5 or 10 counts of encoder (converted to position units) or 2 or 3 counts of resolver resolution is sufficient.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSHysteresis = 0.01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Step 6'''&lt;br /&gt;
&lt;br /&gt;
Enable the PLS. Enter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSEnable = ON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
There are a few other PLS functions you may need:&lt;br /&gt;
&lt;br /&gt;
'''Change Polarity '''The default output state of a PLS is 0. Change this initial state by modifying '''PLSPOLARITY'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSPolarity = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The PLS must be disabled when changing this setting.&lt;br /&gt;
&lt;br /&gt;
'''Query the Name '''Query the name of the axis driving the PLS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
? MyPLS.PLSAxisName&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
returns the axis associated with the PLS (A1).&lt;br /&gt;
&lt;br /&gt;
'''Disable the PLS '''Disable the PLS. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyPLS.PLSEnable = OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must disable a PLS to change PLS properties. Disabling a PLS also helps conserve CPU resources.&lt;br /&gt;
&lt;br /&gt;
'''Delete a PLS '''Delete a PLS to remove it from the system only when the PLS is disable and there are no tasks in memory. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DeletePLS MyPLS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= External Encoders =&lt;br /&gt;
The softMC supports external encoders (encoders not connected to an axis controlled by the softMC). These encoders are connected to the system using the external encoder input of any drive in the system. You can access the encoder periodically with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;? IDNValue(&amp;lt;''axis''&amp;gt;.DriveAddress, 53, 7)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
‘Query external encoder position&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using the encoder for master/slave operation or in a way that requires the value of the signal be updated to the softMC every SERCOS cycle, you must configure the telegram for that axis as Telegram type 7. You also must specify that external position must be included in the telegram. This command is only available when in communication phase of 2 or higher.&lt;br /&gt;
&lt;br /&gt;
= Access to Legacy I/O and ISA =&lt;br /&gt;
The softMC offers support for access to legacy ISA devices located in low memory(0xA0000 - 0xE0000).&lt;br /&gt;
&lt;br /&gt;
== Commands ==&lt;br /&gt;
The softMC supports memory and I/O instructions.&lt;br /&gt;
&lt;br /&gt;
If you are using memory-mapped devices, you will need the memory access commands, '''PEEK''' and '''POKE'''. The valid memory address range for '''PEEK''' is 0xA0000 through 0xDFFFF. The valid memory address range for '''POKE''' depends on the hardware version of the softMC card.&lt;br /&gt;
&lt;br /&gt;
'''For the ISA-Bus card''', the valid memory address range for '''POKE''' is 0xA0000 to 0xCFFFF and 0xDA000 to 0xDFFFF.&lt;br /&gt;
&lt;br /&gt;
'''For the PCI card''', the valid memory address range for '''POKE''' is 0xA0000 to 0xC7FFF and 0xDB000 to 0xDFFFF.&lt;br /&gt;
&lt;br /&gt;
*'''PEEKB''' transfers byte-wide (8-bit) data from the bus to a variable.&lt;br /&gt;
*'''PEEKW''' transfers word-wide (16-bit) data from the bus to a variable.&lt;br /&gt;
*'''POKEB''' transfers byte-wide (8-bit) data to the memory bus.&lt;br /&gt;
*'''POKEW''' transfers word-wide (16-bit) data to the memory bus.&lt;br /&gt;
&lt;br /&gt;
If you are using I/O-mapped cards, you need '''INP''' and '''OUT'''.&lt;br /&gt;
*'''INPB''' transfers byte-wide (8-bit) data from the I/O bus to a variable.&lt;br /&gt;
*'''INPW''' transfers word-wide (16-bit) data from the I/O bus to a variable.&lt;br /&gt;
*'''OUTB''' transfers byte-wide (8-bit) data to the I/O bus.&lt;br /&gt;
*'''OUTW '''transfers word-wide (16-bit) data to the I/O bus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:softMC Firmware|Input/Output]]&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	<entry>
		<id>http://softmc.servotronix.com/index.php?title=Motion_Commands_Reference_List&amp;diff=132901</id>
		<title>Motion Commands Reference List</title>
		<link rel="alternate" type="text/html" href="http://softmc.servotronix.com/index.php?title=Motion_Commands_Reference_List&amp;diff=132901"/>
				<updated>2018-10-08T08:11:33Z</updated>
		
		<summary type="html">&lt;p&gt;Lisa: /* PLS (Programmable Limit Switch) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div id=&amp;quot;BackToTop&amp;quot;  class=&amp;quot;noprint&amp;quot; style=&amp;quot;background-color:; position:fixed; bottom:32px; left:95%; z-index:9999; padding:0; margin:0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue; font-size:8pt; font-face:verdana,sans-serif; border:0.2em outset:#ceebf7; padding:0.1em; font-weight:bolder; -moz-border-radius:8px; &amp;quot;&amp;gt;&lt;br /&gt;
[[Image:TOP2.png|50px|link=#top]] &amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Motion Commands==&lt;br /&gt;
&lt;br /&gt;
* [[MC-Basic:ATTACH| ATTACH]]&lt;br /&gt;
* [[MC-Basic:CHECKCAMMONOTONIC| CHECKCAMMONOTONIC ]]&lt;br /&gt;
* [[MC-Basic:MOVE| MOVE ]]&lt;br /&gt;
* [[MC-Basic:MOVES| MOVES ]]&lt;br /&gt;
* [[MC-Basic:MOVESKD| MOVESKD ]]&lt;br /&gt;
* [[MC-Basic:CIRCLE| CIRCLE ]]&lt;br /&gt;
* [[MC-Basic:DELAY| DELAY ]]&lt;br /&gt;
* [[MC-Basic:CONFIGGROUP| CONFIGGROUP ]]&lt;br /&gt;
* [[MC-Basic:CREATECAMDATA| CREATECAMDATA ]]&lt;br /&gt;
* [[MC-Basic:CREATECOMP| CREATECOMP ]]&lt;br /&gt;
* [[MC-Basic:CREATEPLSDATA| CREATEPLSDATA ]]&lt;br /&gt;
* [[MC-Basic:DELETECAM| DELETECAM ]]&lt;br /&gt;
* [[MC-Basic:DELETEGROUP| DELETEGROUP ]]&lt;br /&gt;
* [[MC-Basic:DELETEMOVINGFRAME| DELETEMOVINGFRAME ]]&lt;br /&gt;
* [[MC-Basic:DELETEPLS| DELETEPLS ]]&lt;br /&gt;
* [[MC-Basic:DOPASS| DOPASS ]]&lt;br /&gt;
* [[MC-Basic:JOG| JOG ]]&lt;br /&gt;
* [[MC-Basic:LOADCAMDATA| LOADCAMDATA ]]&lt;br /&gt;
* [[MC-Basic:STORECAMDATA|STORECAMDATA]]&lt;br /&gt;
* [[MC-Basic:LOADCOMPDATA| LOADCOMPDATA ]]&lt;br /&gt;
* [[MC-Basic:LOADCOMPDATA$| LOADCOMPDATA$]]&lt;br /&gt;
* [[MC-Basic:NEXTITEM| NEXTITEM ]]&lt;br /&gt;
* [[MC-Basic:NOOFCOORDINATES| NOOFCOORDINATES ]]&lt;br /&gt;
* [[MC-Basic:PASS| PASS ]]&lt;br /&gt;
* [[MC-Basic:PROCEED| PROCEED ]]&lt;br /&gt;
* [[MC-Basic:STOP| STOP ]]&lt;br /&gt;
* [[MC-Basic:SYNCALL| SYNCALL ]]&lt;br /&gt;
* [[MC-Basic:SYNCCLEAR| SYNCCLEAR ]]&lt;br /&gt;
* [[MC-Basic:SYNCSTART| SYNCSTART ]]&lt;br /&gt;
* [[MC-Basic:TOCART| TOCART ]]&lt;br /&gt;
* [[MC-Basic:TOJOINT| TOJOINT ]]&lt;br /&gt;
* [[MC-Basic:TORQUE| TORQUE ]]&lt;br /&gt;
* [[MC-Basic:UNCONFIGGROUP| UNCONFIGGROUP ]]&lt;br /&gt;
&lt;br /&gt;
==Axis Properties==&lt;br /&gt;
&lt;br /&gt;
* [[MC-Basic:element.ABSENABLE| ABSENABLE ]]&lt;br /&gt;
* [[MC-Basic:element.ABSOLUTE| ABSOLUTE ]]&lt;br /&gt;
* [[MC-Basic:element.ACCELERATION| ACCELERATION ]]&lt;br /&gt;
* [[MC-Basic:axis.ACCELERATIONCOMMAND| ACCELERATIONCOMMAND ]]&lt;br /&gt;
* [[MC-Basic:element.ACCELERATIONFACTOR| ACCELERATIONFACTOR ]]&lt;br /&gt;
* [[Category talk:MC-Basic:axis.ACCELERATIONMAX| ACCELERATIONMAX ]]&lt;br /&gt;
* [[MC-Basic:element.ACCELERATIONRATE| ACCELERATIONRATE ]]&lt;br /&gt;
* [[MC-Basic:axis.ACTIVECAM| ACTIVECAM ]]&lt;br /&gt;
* [[MC-Basic:axis.ALTERNATIVECAM| ALTERNATIVECAM ]]&lt;br /&gt;
* [[MC-Basic:axis.ALTERNATIVECAM.NAME| ALTERNATIVECAM.NAME ]]&lt;br /&gt;
* [[MC-Basic:axis.ALTERNATIVEOFFSET| ALTERNATIVEOFFSET ]]&lt;br /&gt;
* [[MC-Basic:element.ATTACHEDTO| ATTACHEDTO ]]&lt;br /&gt;
* [[MC-Basic:axis.AXISNAME| AXISNAME ]]&lt;br /&gt;
* [[MC-Basic:axis.AXISTYPE| AXISTYPE ]]&lt;br /&gt;
* [[MC-Basic:element.BLENDINGFACTOR| BLENDINGFACTOR ]]&lt;br /&gt;
* [[MC-Basic:element.BLENDINGFACTORPREVIOUS| BLENDINGFACTORPREVIOUS ]]&lt;br /&gt;
* [[MC-Basic:element.BLENDINGMETHOD| BLENDINGMETHOD ]]&lt;br /&gt;
* [[MC-Basic:element.BLENDINGSTARTCONDITION| BLENDINGSTARTCONDITION ]]&lt;br /&gt;
* [[MC-Basic:element.BLENDPROTECTED| BLENDPROTECTED ]]&lt;br /&gt;
* [[MC-Basic:axis.CAMCYCLE| CAMCYCLE ]]&lt;br /&gt;
* [[MC-Basic:axis.CAMINDEX| CAMINDEX ]]&lt;br /&gt;
* [[MC-Basic:axis.CAMOFFSET| CAMOFFSET ]]&lt;br /&gt;
* [[MC-Basic:axis.CAMVALUE| CAMVALUE ]]&lt;br /&gt;
* [[MC-Basic:axis.CAPTURE| CAPTURE ]]&lt;br /&gt;
* [[MC-Basic:axis.CAPTUREINPUT| CAPTUREINPUT ]]&lt;br /&gt;
* [[MC-Basic:axis.CAPTUREPOLARITY| CAPTUREPOLARITY ]]&lt;br /&gt;
* [[MC-Basic:axis.CAPTUREPOSITION| CAPTUREPOSITION ]]&lt;br /&gt;
* [[MC-Basic:axis.CAPTURESOURCE| CAPTURESOURCE ]]&lt;br /&gt;
* [[MC-Basic:axis.COMPENSATIONSOURCE| COMPENSATIONSOURCE ]]&lt;br /&gt;
* [[MC-Basic:axis.COMPPOSITIONCOMMAND| COMPPOSITIONCOMMAND ]]&lt;br /&gt;
* [[MC-Basic:axis.COMPPOSITIONFEEDBACK| COMPPOSITIONFEEDBACK ]]&lt;br /&gt;
* [[MC-Basic:axis.COULOMBFRICTION| COULOMBFRICTION ]]&lt;br /&gt;
* [[MC-Basic:axis.COUNTCOMMAND| COUNTCOMMAND ]]&lt;br /&gt;
* [[MC-Basic:axis.COUNTEXTERNAL| COUNTEXTERNAL ]]&lt;br /&gt;
* [[MC-Basic:axis.CountExtMax| CountExtMax ]]&lt;br /&gt;
* [[MC-Basic:axis.CountExtMin| CountExtMin ]]&lt;br /&gt;
* [[MC-Basic:axis.CountExtRollOver| CountExtRollOver ]]&lt;br /&gt;
* [[MC-Basic:axis.COUNTFEEDBACK| COUNTFEEDBACK ]]&lt;br /&gt;
* [[MC-Basic:axis.CountMax| CountMax ]]&lt;br /&gt;
* [[MC-Basic:axis.CountMin| CountMin ]]&lt;br /&gt;
* [[MC-Basic:axis.CountRollOver| CountRollOver ]]&lt;br /&gt;
* [[MC-Basic:axis.COUNTTORQUEADDITIVECOMMAND| COUNTTORQUEADDITIVECOMMAND ]]&lt;br /&gt;
* [[MC-Basic:axis.COUNTTORQUECOMMAND| COUNTTORQUECOMMAND ]]&lt;br /&gt;
* [[MC-Basic:axis.COUNTTORQUEDRIVECOMMAND| COUNTTORQUEDRIVECOMMAND ]]&lt;br /&gt;
* [[MC-Basic:axis.COUNTTORQUEFEEDBACK| COUNTTORQUEFEEDBACK ]]&lt;br /&gt;
* [[MC-Basic:element.CP| CP ]]&lt;br /&gt;
* [[MC-Basic:element.CURRENTABSOLUTE| CURRENTABSOLUTE ]]&lt;br /&gt;
* [[MC-Basic:element.CURRENTTIME| CURRENTTIME ]]&lt;br /&gt;
* [[MC-Basic:element.DECELERATION| DECELERATION ]]&lt;br /&gt;
* [[MC-Basic:element.DECELERATIONMAX| DECELERATIONMAX ]]&lt;br /&gt;
* [[MC-Basic:element.DECELERATIONRATE| DECELERATIONRATE ]]&lt;br /&gt;
* [[MC-Basic:axis.DECELERATIONSTOP| DECELERATIONSTOP ]]&lt;br /&gt;
* [[MC-Basic:axis.DIRECTION| DIRECTION ]]&lt;br /&gt;
* [[MC-Basic:axis.DIRECTIONEXTERNAL| DIRECTIONEXTERNAL ]]&lt;br /&gt;
* [[MC-Basic:axis.DISABLETIMEOUT| DISABLETIMEOUT ]]&lt;br /&gt;
* [[MC-Basic:axis.DISPLACEMENT| DISPLACEMENT ]]&lt;br /&gt;
* [[MC-Basic:element.DOUBLEMODE| DOUBLEMODE ]]&lt;br /&gt;
* [[MC-Basic:axis.DRIVEADDRESS| DRIVEADDRESS ]]&lt;br /&gt;
* [[MC-Basic:axis.DRIVECONTROL| DRIVECONTROL ]]&lt;br /&gt;
* [[MC-Basic:axis.DRIVEENABLE| DRIVEENABLE ]]&lt;br /&gt;
* [[MC-Basic:axis.DRIVEON| DRIVEON ]]&lt;br /&gt;
* [[MC-Basic:axis.DRIVEOPMODE| DRIVEOPMODE ]]&lt;br /&gt;
* [[MC-Basic:axis.DRIVESTATUS| DRIVESTATUS ]]&lt;br /&gt;
* [[MC-Basic:element.DYNAMICMODEL| DYNAMICMODEL ]]&lt;br /&gt;
* [[MC-Basic:element.DYNAMICPARAMETER| DYNAMICPARAMETER ]]&lt;br /&gt;
* [[MC-Basic:element.ELEMENTID| ELEMENTID ]]&lt;br /&gt;
* [[MC-Basic:element.ELEMENTNAME| ELEMENTNAME ]]&lt;br /&gt;
* [[MC-Basic:element.ELEMENTSIZE| ELEMENTSIZE ]]&lt;br /&gt;
* [[MC-Basic:element.ENABLE| ENABLE ]]&lt;br /&gt;
* [[MC-Basic:axis.FASTDATAENABLE| FASTDATAENABLE ]]&lt;br /&gt;
* [[MC-Basic:axis.FEEDBACK| FEEDBACK ]]&lt;br /&gt;
* [[MC-Basic:axis.FIRSTCAM| FIRSTCAM ]]&lt;br /&gt;
* [[MC-Basic:axis.FIRSTCAM.NAME| FIRSTCAM.NAME ]]&lt;br /&gt;
* [[MC-Basic:axis.FOLLOWINGMODE| FOLLOWINGMODE ]]&lt;br /&gt;
* [[MC-Basic:axis.GEARRATIO| GEARRATIO ]]&lt;br /&gt;
* [[MC-Basic:axis.HALTRESTART| HALTRESTART ]]&lt;br /&gt;
* [[MC-Basic:axis.HOLDTYPE| HOLDTYPE ]]&lt;br /&gt;
* [[MC-Basic:axis.HOMEACCELERATION| HOMEACCELERATION ]]&lt;br /&gt;
* [[MC-Basic:axis.HOMEDIRECTION| HOMEDIRECTION ]]&lt;br /&gt;
* [[MC-Basic:axis.HOMEDISTANCE| HOMEDISTANCE ]]&lt;br /&gt;
* [[MC-Basic:axis.HOMEDISTANCEMAX| HOMEDISTANCEMAX ]]&lt;br /&gt;
* [[MC-Basic:axis.HOMEOFFSET| HOMEOFFSET ]]&lt;br /&gt;
* [[MC-Basic:axis.HOMEPOLARITY| HOMEPOLARITY ]]&lt;br /&gt;
* [[MC-Basic:axis.HOMERETURN| HOMERETURN ]]&lt;br /&gt;
* [[MC-Basic:axis.HOMESTATUS| HOMESTATUS ]]&lt;br /&gt;
* [[MC-Basic:axis.HOMETYPE| HOMETYPE ]]&lt;br /&gt;
* [[MC-Basic:axis.HOMEVELOCITY| HOMEVELOCITY ]]&lt;br /&gt;
* [[MC-Basic:axis.IN1| IN1]]&lt;br /&gt;
* [[MC-Basic:axis.IN1MODE| IN1MODE ]]&lt;br /&gt;
* [[MC-Basic:axis.IN2| IN2]]&lt;br /&gt;
* [[MC-Basic:axis.IN2MODE| IN2MODE ]]&lt;br /&gt;
* [[MC-Basic:axis.IN3| IN3]]&lt;br /&gt;
* [[MC-Basic:axis.IN3MODE| IN3MODE ]]&lt;br /&gt;
* [[MC-Basic:element.INTERPOLATIONTYPE| INTERPOLATIONTYPE ]]&lt;br /&gt;
* [[MC-Basic:element.ISMOVING| ISMOVING ]]&lt;br /&gt;
* [[MC-Basic:element.ISSETTLED| ISSETTLED ]]&lt;br /&gt;
* [[MC-Basic:axis.ISSWAPED| ISSWAPED ]]&lt;br /&gt;
* [[MC-Basic:element.JERK| JERK ]]&lt;br /&gt;
* [[MC-Basic:element.JERKACCELERATIONPERCENTAGE| JERKACCELERATIONPERCENTAGE ]]&lt;br /&gt;
&amp;lt;!--* [[MC-Basic:axis.JERKDECELERATIONPERCENTAGE| JERKDECELERATIONPERCENTAGE ]]--&amp;gt;&lt;br /&gt;
* [[MC-Basic:element.JERKFACTOR| JERKFACTOR ]]&lt;br /&gt;
* [[MC-Basic:element.JERKMAX| JERKMAX ]]&lt;br /&gt;
* [[MC-Basic:element.JERKRATE| JERKRATE ]]&lt;br /&gt;
* [[MC-Basic:axis.MASTERSOURCE| MASTERSOURCE ]]&lt;br /&gt;
* [[MC-Basic:axis.MasterSource.Name| MasterSource.Name ]]&lt;br /&gt;
* [[MC-Basic:axis.MASTERSYNC| MASTERSYNC ]]&lt;br /&gt;
* [[MC-Basic:axis.MAXOFFSET| MAXOFFSET ]]&lt;br /&gt;
* [[MC-Basic:axis.ModelOffset| ModelOffset ]]&lt;br /&gt;
* [[MC-Basic:element.MOTION| MOTION ]]&lt;br /&gt;
* [[MC-Basic:axis.MOTIONBUSVELOCITYBASE| MOTIONBUSVELOCITYBASE ]]&lt;br /&gt;
* [[MC-Basic:axis.MOTIONBUSVELOCITYSCALE| MOTIONBUSVELOCITYSCALE ]]&lt;br /&gt;
* [[MC-Basic:element.MOTIONSTATUS| MOTIONSTATUS ]]&lt;br /&gt;
* [[MC-Basic:axis.OPMODE| OPMODE ]]&lt;br /&gt;
* [[MC-Basic:axis.OPMODEMAP| OPMODEMAP ]]&lt;br /&gt;
* [[MC-Basic:axis.PAYLOADINERTIA| PAYLOADINERTIA ]]&lt;br /&gt;
* [[MC-Basic:element.PAYLOADMASS| PAYLOADMASS ]]&lt;br /&gt;
&amp;lt;!-- * [[MC-Basic:axis.PIPEMODE | PIPEMODE ]] --&amp;gt;&lt;br /&gt;
* [[MC-Basic:element.PLSSOURCE| PLSSOURCE ]]&lt;br /&gt;
* [[MC-Basic:axis.PositionBacklash| PositionBacklash ]]&lt;br /&gt;
* [[MC-Basic:axis.PositionBacklashAlpha| PositionBacklashAlpha ]]&lt;br /&gt;
* [[MC-Basic:element.POSITIONCOMMAND| POSITIONCOMMAND ]]&lt;br /&gt;
* [[MC-Basic:element.POSITIONCOMMANDHISTORY| POSITIONCOMMANDHISTORY ]]&lt;br /&gt;
* [[MC-Basic:element.POSITIONERROR| POSITIONERROR ]]&lt;br /&gt;
* [[MC-Basic:element.POSITIONERRORDELAY| POSITIONERRORDELAY ]]&lt;br /&gt;
* [[MC-Basic:element.POSITIONERRORMAX| POSITIONERRORMAX ]]&lt;br /&gt;
* [[MC-Basic:element.POSITIONERRORSETTLE| POSITIONERRORSETTLE ]]&lt;br /&gt;
* [[MC-Basic:axis.POSITIONEXTERNAL| POSITIONEXTERNAL ]]&lt;br /&gt;
* [[MC-Basic:axis.POSITIONEXTERNALFACTOR| POSITIONEXTERNALFACTOR ]]&lt;br /&gt;
* [[MC-Basic:axis.POSITIONEXTROLLOVER| POSITIONEXTROLLOVER ]]&lt;br /&gt;
* [[MC-Basic:axis.POSITIONEXTROLLOVERENABLE| POSITIONEXTROLLOVERENABLE ]]&lt;br /&gt;
* [[MC-Basic:axis.POSITIONEXTROLLOVERMIN| POSITIONEXTROLLOVERMIN ]]&lt;br /&gt;
* [[MC-Basic:axis.POSITIONFACTOR| POSITIONFACTOR ]]&lt;br /&gt;
* [[MC-Basic:element.POSITIONFEEDBACK| POSITIONFEEDBACK ]]&lt;br /&gt;
* [[MC-Basic:element.POSITIONFINAL| POSITIONFINAL ]]&lt;br /&gt;
* [[MC-Basic:axis.POSITIONMAX| POSITIONMAX ]]&lt;br /&gt;
* [[MC-Basic:axis.POSITIONMAXENABLE| POSITIONMAXENABLE ]]&lt;br /&gt;
* [[MC-Basic:axis.POSITIONMIN| POSITIONMIN ]]&lt;br /&gt;
* [[MC-Basic:axis.POSITIONMINENABLE| POSITIONMINENABLE ]]&lt;br /&gt;
* [[MC-Basic:axis.POSITIONROLLOVER| POSITIONROLLOVER ]]&lt;br /&gt;
* [[MC-Basic:axis.POSITIONROLLOVERENABLE| POSITIONROLLOVERENABLE ]]&lt;br /&gt;
* [[MC-Basic:axis.POSITIONROLLOVERMIN| POSITIONROLLOVERMIN ]]&lt;br /&gt;
* [[MC-Basic:element.POSITIONTOGO| POSITIONTOGO ]]&lt;br /&gt;
&amp;lt;!--* [[MC-Basic:axis.PROCEDURECHANGEBIT | PROCEDURECHANGEBIT ]]--&amp;gt;&lt;br /&gt;
* [[MC-Basic:element.PROCEEDTYPE| PROCEEDTYPE ]]&lt;br /&gt;
* [[MC-Basic:element.PROFILERTYPE| PROFILERTYPE ]]&lt;br /&gt;
* [[MC-Basic:axis.REALTIMECONTROLBIT| REALTIMECONTROLBIT ]]&lt;br /&gt;
* [[MC-Basic:axis.REALTIMESTATUSBIT| REALTIMESTATUSBIT ]]&lt;br /&gt;
* [[MC-Basic:element.RESCUEMODE| RESCUEMODE ]]&lt;br /&gt;
* [[MC-Basic:axis.RTCB1| RTCB1]]&lt;br /&gt;
* [[MC-Basic:axis.RTCB1 MODE| RTCB1 MODE ]]&lt;br /&gt;
* [[MC-Basic:axis.RTCB2| RTCB2]]&lt;br /&gt;
* [[MC-Basic:axis.RTCB2 MODE| RTCB2 MODE ]]&lt;br /&gt;
* [[MC-Basic:axis.RTSB1 MODE| RTSB1 MODE ]]&lt;br /&gt;
* [[MC-Basic:axis.RTSB2 MODE| RTSB2 MODE ]]&lt;br /&gt;
* [[MC-Basic:axis.SIMULATED| SIMULATED ]]&lt;br /&gt;
* [[MC-Basic:element.SineWaveFreq| SineWaveFreq ]]&lt;br /&gt;
* [[MC-Basic:element.SLAVE| SLAVE ]]&lt;br /&gt;
* [[MC-Basic:axis.SLAVEDEVIATION| SLAVEDEVIATION ]]&lt;br /&gt;
* [[MC-Basic:axis.SLAVEDISABLE| SLAVEDISABLE ]]&lt;br /&gt;
* [[MC-Basic:axis.SLAVEDISCONNECT| SLAVEDISCONNECT ]]&lt;br /&gt;
* [[MC-Basic:axis.SLAVELAG| SLAVELAG ]]&lt;br /&gt;
* [[MC-Basic:axis.SLAVEMAXDEVIATION| SLAVEMAXDEVIATION ]]&lt;br /&gt;
* [[MC-Basic:element.SMOOTHFACTOR| SMOOTHFACTOR ]]&lt;br /&gt;
* [[MC-Basic:element.STARTTYPE| STARTTYPE ]]&lt;br /&gt;
* [[MC-Basic:element.STOPTYPE| STOPTYPE ]]&lt;br /&gt;
* [[MC-Basic:axis.SUMTORQUE| SUMTORQUE ]]&lt;br /&gt;
* [[MC-Basic:element.TIMEACCELERATION| TIMEACCELERATION ]]&lt;br /&gt;
* [[MC-Basic:element.TIMEACCMIN| TIMEACCMIN ]]&lt;br /&gt;
* [[MC-Basic:element.TIMEDECELERATION| TIMEDECELERATION ]]&lt;br /&gt;
* [[MC-Basic:element.TIMEDECMIN| TIMEDECMIN ]]&lt;br /&gt;
* [[MC-Basic:axis.TIMEJOG| TIMEJOG ]]&lt;br /&gt;
* [[MC-Basic:axis.TIMEOFSHORTMOTIONS| TIMEOFSHORTMOTIONS ]]&lt;br /&gt;
* [[MC-Basic:element.TIMESETTLE| TIMESETTLE ]]&lt;br /&gt;
* [[MC-Basic:element.TIMESETTLEMAX| TIMESETTLEMAX ]]&lt;br /&gt;
* [[MC-Basic:axis.TORQUEADDCOMMAND| TORQUEADDCOMMAND ]]&lt;br /&gt;
* [[MC-Basic:axis.TORQUECHANGERATIO| TORQUECHANGERATIO ]]&lt;br /&gt;
* [[MC-Basic:axis.TORQUECHANGERATIOMAX| TORQUECHANGERATIOMAX ]]&lt;br /&gt;
* [[MC-Basic:element.TORQUECOMMAND| TORQUECOMMAND ]]&lt;br /&gt;
* [[MC-Basic:axis.TORQUEDRIVECOMMAND| TORQUEDRIVECOMMAND ]]&lt;br /&gt;
* [[MC-Basic:axis.TORQUEERROR| TORQUEERROR ]]&lt;br /&gt;
* [[MC-Basic:axis.TORQUEERRORDISABLETYPE| TORQUEERRORDISABLETYPE ]]&lt;br /&gt;
* [[MC-Basic:axis.TORQUEERRORENABLE| TORQUEERRORENABLE ]]&lt;br /&gt;
* [[MC-Basic:axis.TORQUEERRORFILTER| TORQUEERRORFILTER ]]&lt;br /&gt;
* [[MC-Basic:axis.TORQUEERRORMAX| TORQUEERRORMAX ]]&lt;br /&gt;
* [[MC-Basic:axis.TORQUEERRORSTOPTYPE| TORQUEERRORSTOPTYPE ]]&lt;br /&gt;
* [[MC-Basic:axis.TORQUEFACTOR| TORQUEFACTOR ]]&lt;br /&gt;
* [[MC-Basic:element.TORQUEFEEDBACK| TORQUEFEEDBACK ]]&lt;br /&gt;
* [[MC-Basic:axis.TorqueLimit| TorqueLimit ]]&lt;br /&gt;
* [[MC-Basic:axis.TorqueLimitVelocityMax| TorqueLimitVelocityMax ]]&lt;br /&gt;
* [[MC-Basic:axis.TorqueMax| TorqueMax ]]&lt;br /&gt;
* [[MC-Basic:element.TOTALTIME| TOTALTIME ]]&lt;br /&gt;
* [[MC-Basic:axis.UserFollowingMode| UserFollowingMode ]]&lt;br /&gt;
* [[MC-Basic:axis.VELOCITYADDITIVECOMMAND| VELOCITYADDITIVECOMMAND ]]&lt;br /&gt;
* [[MC-Basic:element.VELOCITYCOMMAND| VELOCITYCOMMAND ]]&lt;br /&gt;
* [[MC-Basic:element.VELOCITYCRUISE| VELOCITYCRUISE ]]&lt;br /&gt;
* [[MC-Basic:axis.VELOCITYEXTERNAL| VELOCITYEXTERNAL ]]&lt;br /&gt;
* [[MC-Basic:axis.VELOCITYEXTERNALFACTOR| VELOCITYEXTERNALFACTOR ]]&lt;br /&gt;
* [[MC-Basic:element.VELOCITYFACTOR| VELOCITYFACTOR ]]&lt;br /&gt;
* [[MC-Basic:element.VELOCITYFEEDBACK| VELOCITYFEEDBACK ]]&lt;br /&gt;
* [[MC-Basic:element.VELOCITYFINAL| VELOCITYFINAL ]]&lt;br /&gt;
* [[MC-Basic:axis.VELOCITYJOG| VELOCITYJOG ]]&lt;br /&gt;
* [[MC-Basic:axis.VelocityLimitTorqueMax| VelocityLimitTorqueMax ]]&lt;br /&gt;
* [[MC-Basic:element.VELOCITYMAX| VELOCITYMAX ]]&lt;br /&gt;
* [[MC-Basic:element.VELOCITYOVERRIDE| VELOCITYOVERRIDE ]]&lt;br /&gt;
* [[MC-Basic:axis.VELOCITYOVERSPEED| VELOCITYOVERSPEED ]]&lt;br /&gt;
* [[MC-Basic:element.VELOCITYRATE| VELOCITYRATE ]]&lt;br /&gt;
* [[MC-Basic:axis.VELOCITYSAFETYLIMIT| VELOCITYSAFETYLIMIT ]]&lt;br /&gt;
* [[MC-Basic:axis.VISCOUSFRICTION| VISCOUSFRICTION ]]&lt;br /&gt;
* [[MC-Basic:axis.WRAP| WRAP ]]&lt;br /&gt;
&lt;br /&gt;
==Group Properties==&lt;br /&gt;
&lt;br /&gt;
* [[MC-Basic:element.ABSENABLE| ABSENABLE ]]&lt;br /&gt;
* [[MC-Basic:element.ABSOLUTE| ABSOLUTE ]]&lt;br /&gt;
* [[MC-Basic:element.ACCELERATION| ACCELERATION ]]&lt;br /&gt;
* [[MC-Basic:element.ACCELERATIONFACTOR| ACCELERATIONFACTOR ]]&lt;br /&gt;
* [[MC-Basic:element.ACCELERATIONMAX| ACCELERATIONMAX ]]&lt;br /&gt;
* [[MC-Basic:element.ACCELERATIONRATE| ACCELERATIONRATE ]]&lt;br /&gt;
* [[MC-Basic:group.ACCELRATIONCOMMAND| ACCELRATIONCOMMAND ]]&lt;br /&gt;
* [[MC-Basic:group.ANGLE| ANGLE ]]&lt;br /&gt;
* [[MC-Basic:element.ATTACHEDTO| ATTACHEDTO ]]&lt;br /&gt;
* [[MC-Basic:element.BLENDINGFACTOR| BLENDINGFACTOR ]]&lt;br /&gt;
* [[MC-Basic:element.BLENDINGFACTORPREVIOUS| BLENDINGFACTORPREVIOUS ]]&lt;br /&gt;
* [[MC-Basic:element.BLENDINGMETHOD| BLENDINGMETHOD ]]&lt;br /&gt;
* [[MC-Basic:element.BLENDINGSTARTCONDITION| BLENDINGSTARTCONDITION ]]&lt;br /&gt;
* [[MC-Basic:element.BLENDPROTECTED| BLENDPROTECTED ]]&lt;br /&gt;
* [[MC-Basic:group.CIRCLECENTER| CIRCLECENTER ]]&lt;br /&gt;
* [[MC-Basic:group.CIRCLEPOINT| CIRCLEPOINT ]]&lt;br /&gt;
* [[MC-Basic:group.CIRCLETYPE| CIRCLETYPE ]]&lt;br /&gt;
* [[MC-Basic:group.COUPLED| COUPLED ]]&lt;br /&gt;
* [[MC-Basic:element.CP| CP ]]&lt;br /&gt;
* [[MC-Basic:group.CPLG| CPLG ]]&lt;br /&gt;
* [[MC-Basic:element.CPPREV| CPPREV ]]&lt;br /&gt;
* [[MC-Basic:element.CURRENTABSOLUTE| CURRENTABSOLUTE ]]&lt;br /&gt;
* [[MC-Basic:element.CURRENTTIME| CURRENTTIME ]]&lt;br /&gt;
* [[MC-Basic:element.DECELERATION| DECELERATION ]]&lt;br /&gt;
* [[MC-Basic:element.DECELERATIONMAX| DECELERATIONMAX ]]&lt;br /&gt;
* [[MC-Basic:element.DECELERATIONRATE| DECELERATIONRATE ]]&lt;br /&gt;
* [[MC-Basic:group.DECELERATIONSTOP| DECELERATIONSTOP ]]&lt;br /&gt;
* [[MC-Basic:element.DEST| DEST ]]&lt;br /&gt;
* [[MC-Basic:group.DEST JOINT| DEST JOINT ]]&lt;br /&gt;
* [[MC-Basic:group.DESTANGLE| DESTANGLE ]]&lt;br /&gt;
* [[MC-Basic:group.DESTCENTER| DESTCENTER ]]&lt;br /&gt;
* [[MC-Basic:group.DESTCIRCLEPOINT| DESTCIRCLEPOINT ]]&lt;br /&gt;
* [[MC-Basic:group.DOMINANCEMODE| DOMINANCEMODE ]]&lt;br /&gt;
* [[MC-Basic:element.DOUBLEMODE| DOUBLEMODE ]]&lt;br /&gt;
* [[MC-Basic:element.DYNAMICMODEL| DYNAMICMODEL ]]&lt;br /&gt;
* [[MC-Basic:element.ELEMENTID| ELEMENTID ]]&lt;br /&gt;
* [[MC-Basic:element.ELEMENTNAME| ELEMENTNAME ]]&lt;br /&gt;
* [[MC-Basic:element.ELEMENTSIZE| ELEMENTSIZE ]]&lt;br /&gt;
* [[MC-Basic:element.ENABLE| ENABLE ]]&lt;br /&gt;
* [[MC-Basic:element.INTERPOLATIONTYPE| INTERPOLATIONTYPE ]]&lt;br /&gt;
* [[MC-Basic:element.ISMOVING| ISMOVING ]]&lt;br /&gt;
* [[MC-Basic:element.ISSETTLED| ISSETTLED ]]&lt;br /&gt;
* [[MC-Basic:element.JERK| JERK ]]&lt;br /&gt;
* [[MC-Basic:element.JERKACCELERATIONPERCENTAGE| JERKACCELERATIONPERCENTAGE ]]&lt;br /&gt;
* [[MC-Basic:element.JERKDECELERATIONPERCENTAGE| JERKDECELERATIONPERCENTAGE ]]&lt;br /&gt;
* [[MC-Basic:element.JERKFACTOR| JERKFACTOR ]]&lt;br /&gt;
* [[MC-Basic:element.JERKMAX| JERKMAX ]]&lt;br /&gt;
* [[MC-Basic:element.JERKRATE| JERKRATE ]]&lt;br /&gt;
* [[MC-Basic:element.MOTION| MOTION ]]&lt;br /&gt;
* [[MC-Basic:element.PLSSOURCE| PLSSOURCE ]]&lt;br /&gt;
* [[MC-Basic:element.POSITIONCOMMAND| POSITIONCOMMAND ]]&lt;br /&gt;
* [[MC-Basic:element.POSITIONCOMMANDHISTORY| POSITIONCOMMANDHISTORY ]]&lt;br /&gt;
* [[MC-Basic:element.POSITIONERROR| POSITIONERROR ]]&lt;br /&gt;
* [[MC-Basic:element.POSITIONERRORDELAY| POSITIONERRORDELAY ]]&lt;br /&gt;
* [[MC-Basic:element.POSITIONERRORMAX| POSITIONERRORMAX ]]&lt;br /&gt;
* [[MC-Basic:element.POSITIONERRORSETTLE| POSITIONERRORSETTLE ]]&lt;br /&gt;
* [[MC-Basic:element.POSITIONFEEDBACK| POSITIONFEEDBACK ]]&lt;br /&gt;
* [[MC-Basic:element.POSITIONFINAL| POSITIONFINAL ]]&lt;br /&gt;
* [[MC-Basic:element.POSITIONTOGO| POSITIONTOGO ]]&lt;br /&gt;
* [[MC-Basic:element.PROCEEDTYPE| PROCEEDTYPE ]]&lt;br /&gt;
* [[MC-Basic:element.PROFILERTYPE| PROFILERTYPE ]]&lt;br /&gt;
* [[MC-Basic:element.RESCUEMODE| RESCUEMODE ]]&lt;br /&gt;
* [[MC-Basic:group.SELECTAXES| SELECTAXES ]]&lt;br /&gt;
* [[MC-Basic:element.SineWaveFreq| SineWaveFreq ]]&lt;br /&gt;
* [[MC-Basic:element.SMOOTHFACTOR| SMOOTHFACTOR ]]&lt;br /&gt;
* [[MC-Basic:element.STARTTYPE| STARTTYPE ]]&lt;br /&gt;
* [[MC-Basic:element.STOPTYPE| STOPTYPE ]]&lt;br /&gt;
* [[MC-Basic:robot.STRETCHFACTOR| STRETCHFACTOR ]]&lt;br /&gt;
* [[MC-Basic:robot.STRETCHVECTOR| STRETCHVECTOR ]]&lt;br /&gt;
* [[MC-Basic:group.THROUGH| THROUGH ]]&lt;br /&gt;
* [[MC-Basic:element.TIMEACCELERATION| TIMEACCELERATION ]]&lt;br /&gt;
* [[MC-Basic:element.TIMEACCMIN| TIMEACCMIN ]]&lt;br /&gt;
* [[MC-Basic:element.TIMEDECELERATION| TIMEDECELERATION ]]&lt;br /&gt;
* [[MC-Basic:element.TIMEDECMIN| TIMEDECMIN ]]&lt;br /&gt;
* [[MC-Basic:element.TIMESETTLE| TIMESETTLE ]]&lt;br /&gt;
* [[MC-Basic:element.TIMESETTLEMAX| TIMESETTLEMAX ]]&lt;br /&gt;
* [[MC-Basic:element.TORQUECOMMAND| TORQUECOMMAND ]]&lt;br /&gt;
* [[MC-Basic:element.TORQUEFEEDBACK| TORQUEFEEDBACK ]]&lt;br /&gt;
* [[MC-Basic:element.TOTALTIME| TOTALTIME ]]&lt;br /&gt;
* [[MC-Basic:group.UPTO| UPTO ]]&lt;br /&gt;
* [[MC-Basic:element.VELOCITYCOMMAND| VELOCITYCOMMAND ]]&lt;br /&gt;
* [[MC-Basic:element.VELOCITYCRUISE| VELOCITYCRUISE ]]&lt;br /&gt;
* [[MC-Basic:element.VELOCITYFACTOR| VELOCITYFACTOR ]]&lt;br /&gt;
* [[MC-Basic:element.VELOCITYFEEDBACK| VELOCITYFEEDBACK ]]&lt;br /&gt;
* [[MC-Basic:element.VELOCITYFINAL| VELOCITYFINAL ]]&lt;br /&gt;
* [[MC-Basic:element.VELOCITYMAX| VELOCITYMAX ]]&lt;br /&gt;
* [[MC-Basic:element.VELOCITYOVERRIDE| VELOCITYOVERRIDE ]]&lt;br /&gt;
* [[MC-Basic:element.VELOCITYRATE| VELOCITYRATE ]]&lt;br /&gt;
&lt;br /&gt;
==Robot Properties== &lt;br /&gt;
&lt;br /&gt;
* [[MC-Basic:robot.ACCELCMDCART| ACCELCMDCART ]]&lt;br /&gt;
* [[MC-Basic:robot.ACCELERATIONDESYNCROT| ACCELERATIONDESYNCROT ]]&lt;br /&gt;
* [[MC-Basic:robot.ACCELERATIONDESYNCTRAN| ACCELERATIONDESYNCTRAN ]]&lt;br /&gt;
* [[MC-Basic:robot.ACCELERATIONMAXROT| ACCELERATIONMAXROT ]]&lt;br /&gt;
* [[MC-Basic:robot.ACCELERATIONMAXTRANS| ACCELERATIONMAXTRANS ]]&lt;br /&gt;
* [[MC-Basic:robot.ACCELERATIONROT| ACCELERATIONROT ]]&lt;br /&gt;
* [[MC-Basic:robot.ACCELERATIONSYNCROT| ACCELERATIONSYNCROT ]]&lt;br /&gt;
* [[MC-Basic:robot.ACCELERATIONSYNCTRAN| ACCELERATIONSYNCTRAN ]]&lt;br /&gt;
* [[MC-Basic:robot.ACCELERATIONTRANS| ACCELERATIONTRANS ]]&lt;br /&gt;
* [[MC-Basic:robot.ARMCMD| ARMCMD ]]&lt;br /&gt;
* [[MC-Basic:robot.ARMFBK| ARMFBK ]]&lt;br /&gt;
* [[MC-Basic:robot.AXIS| AXIS ]]&lt;br /&gt;
* [[MC-Basic:robot.BASE| BASE ]]&lt;br /&gt;
* [[MC-Basic:robot.DECELERATIONROT| DECELERATIONROT ]]&lt;br /&gt;
* [[MC-Basic:robot.DECELERATIONSTOPROT| DECELERATIONSTOPROT ]]&lt;br /&gt;
* [[MC-Basic:robot.DECELERATIONSTOPTRANS| DECELERATIONSTOPTRANS ]]&lt;br /&gt;
* [[MC-Basic:robot.DECELERATIONTRANS| DECELERATIONTRANS ]]&lt;br /&gt;
* [[MC-Basic:element.DYNAMICPARAMETER| DYNAMICPARAMETER ]]&lt;br /&gt;
* [[MC-Basic:robot.ELBOWCMD| ELBOWCMD ]]&lt;br /&gt;
* [[MC-Basic:robot.ELBOWFBK| ELBOWFBK ]]&lt;br /&gt;
* [[MC-Basic:robot.GOTOLIMIT| GOTOLIMIT ]]&lt;br /&gt;
* [[MC-Basic:robot.GLOBALBASE| GLOBALBASE ]]&lt;br /&gt;
* [[MC-Basic:robot.GLOBALHERE| GLOBALHERE ]]&lt;br /&gt;
* [[MC-Basic:robot.GLOBALSETPOINT| GLOBALSETPOINT ]]&lt;br /&gt;
* [[MC-Basic:robot.HERE| HERE ]]&lt;br /&gt;
* [[MC-Basic:robot.INERTIAREDUCTION| INERTIAREDUCTION ]]&lt;br /&gt;
* [[MC-Basic:robot.INERTIATHRESHOLD| INERTIATHRESHOLD ]]&lt;br /&gt;
* [[MC-Basic:robot.ISMOVINGFRAMESYNCHRONIZED| ISMOVINGFRAMESYNCHRONIZED ]]&lt;br /&gt;
* [[MC-Basic:robot.JERKDESYNCROT| JERKDESYNCROT ]]&lt;br /&gt;
* [[MC-Basic:robot.JERKDESYNCTRAN| JERKDESYNCTRAN ]]&lt;br /&gt;
* [[MC-Basic:robot.JERKMAXROT| JERKMAXROT ]]&lt;br /&gt;
* [[MC-Basic:robot.JERKMAXTRANS| JERKMAXTRANS ]]&lt;br /&gt;
* [[MC-Basic:robot.JERKROT| JERKROT ]]&lt;br /&gt;
* [[MC-Basic:robot.JERKSYNCROT| JERKSYNCROT ]]&lt;br /&gt;
* [[MC-Basic:robot.JERKSYNCTRAN| JERKSYNCTRAN ]]&lt;br /&gt;
* [[MC-Basic:robot.JERKTRANS| JERKTRANS ]]&lt;br /&gt;
* [[MC-Basic:robot.JOINTENABLE| JOINTENABLE ]]&lt;br /&gt;
* [[MC-Basic:robot.LINK| LINK ]]&lt;br /&gt;
* [[MC-Basic:robot.MACHINETABLE| MACHINETABLE ]]&lt;br /&gt;
* [[MC-Basic:robot.MASTERFRAME| MASTERFRAME ]]&lt;br /&gt;
* [[MC-Basic:robot.MASTERFRAMENAME| MASTERFRAMENAME ]]&lt;br /&gt;
* [[MC-Basic:robot.MODELENABLE| MODELENABLE ]]&lt;br /&gt;
* [[MC-Basic:robot.NUMBEROFITEMS| NUMBEROFITEMS ]]&lt;br /&gt;
* [[MC-Basic:robot.ORIENTATIONCOMPLEMENT| ORIENTATIONCOMPLEMENT ]]&lt;br /&gt;
* [[MC-Basic:robot.ORIENTATIONERROR| ORIENTATIONERROR ]]&lt;br /&gt;
* [[MC-Basic:robot.ORIENTATIONERRORSETTLE| ORIENTATIONERRORSETTLE ]]&lt;br /&gt;
* [[MC-Basic:robot.ORIENTATIONFOLLOWING| ORIENTATIONFOLLOWING ]]&lt;br /&gt;
* [[MC-Basic:robot.PAYLOADINERTIA| PAYLOADINERTIA ]]&lt;br /&gt;
* [[MC-Basic:element.PAYLOADMASS| PAYLOADMASS ]]&lt;br /&gt;
* [[MC-Basic:robot.Persistent| Persistent ]]&lt;br /&gt;
* [[MC-Basic:element.POSITIONERROR| POSITIONERROR ]]&lt;br /&gt;
* [[MC-Basic:robot.RMAX| RMAX ]]&lt;br /&gt;
* [[MC-Basic:robot.RMIN| RMIN ]]&lt;br /&gt;
* [[MC-Basic:robot.SETPOINT| SETPOINT ]]&lt;br /&gt;
* [[MC-Basic:robot.SINGULARITYMARGIN| SINGULARITYMARGIN ]]&lt;br /&gt;
* [[MC-Basic:element.SLAVE| SLAVE ]]&lt;br /&gt;
* [[MC-Basic:robot.START| START ]]&lt;br /&gt;
* [[MC-Basic:robot.START JOINT| START JOINT ]]&lt;br /&gt;
* [[MC-Basic:robot.STRETCHFACTOR| STRETCHFACTOR ]]&lt;br /&gt;
* [[MC-Basic:robot.STRETCHVECTOR| STRETCHVECTOR ]]&lt;br /&gt;
* [[MC-Basic:robot.TOOL| TOOL ]]&lt;br /&gt;
* [[MC-Basic:robot.TYPEOF| TYPEOF ]]&lt;br /&gt;
* [[MC-Basic:robot.USERPARAMETER| USERPARAMETER ]]&lt;br /&gt;
* [[MC-Basic:robot.USERPARAMETERVECTOR| USERPARAMETERVECTOR ]]&lt;br /&gt;
* [[MC-Basic:robot.VELOCITYCOMMANDCARTESIAN| VELOCITYCOMMANDCARTESIAN ]]&lt;br /&gt;
* [[MC-Basic:robot.VELOCITYDESYNCROT| VELOCITYDESYNCROT ]]&lt;br /&gt;
* [[MC-Basic:robot.VELOCITYDESYNCTRAN| VELOCITYDESYNCTRAN ]]&lt;br /&gt;
* [[MC-Basic:robot.VELOCITYFEEDBACKCARTESIAN| VELOCITYFEEDBACKCARTESIAN ]]&lt;br /&gt;
* [[MC-Basic:robot.VELOCITYFINALROT| VELOCITYFINALROT ]]&lt;br /&gt;
* [[MC-Basic:robot.VELOCITYFINALTRANS| VELOCITYFINALTRANS ]]&lt;br /&gt;
* [[MC-Basic:robot.VELOCITYMAXROT| VELOCITYMAXROT ]]&lt;br /&gt;
* [[MC-Basic:robot.VELOCITYMAXTRANS| VELOCITYMAXTRANS ]]&lt;br /&gt;
* [[MC-Basic:robot.VELOCITYROT| VELOCITYROT ]]&lt;br /&gt;
* [[MC-Basic:robot.VELOCITYSYNCROT| VELOCITYSYNCROT ]]&lt;br /&gt;
* [[MC-Basic:robot.VELOCITYSYNCTRAN| VELOCITYSYNCTRAN ]]&lt;br /&gt;
* [[MC-Basic:robot.VELOCITYTRANS| VELOCITYTRANS ]]&lt;br /&gt;
* [[MC-Basic:robot.WORKPIECE| WORKPIECE ]]&lt;br /&gt;
* [[MC-Basic:robot.WRISTCMD| WRISTCMD ]]&lt;br /&gt;
* [[MC-Basic:robot.WRISTFBK| WRISTFBK ]]&lt;br /&gt;
* [[MC-Basic:robot.XMAX| XMAX ]]&lt;br /&gt;
* [[MC-Basic:robot.XMIN| XMIN ]]&lt;br /&gt;
* [[MC-Basic:robot.YMAX| YMAX ]]&lt;br /&gt;
* [[MC-Basic:robot.YMIN| YMIN ]]&lt;br /&gt;
* [[MC-Basic:robot.ZMAX| ZMAX ]]&lt;br /&gt;
* [[MC-Basic:robot.ZMIN| ZMIN ]]&lt;br /&gt;
* [[MC-Basic:ROBOTTYPE| ROBOTTYPE ]]&lt;br /&gt;
* [[MC-Basic:ROBOTTYPE$| ROBOTTYPE$]]&lt;br /&gt;
&lt;br /&gt;
===Advanced Interpolation===&lt;br /&gt;
* [[MC-Basic:DOPASS|DOPASS]]&lt;br /&gt;
* [[MC-Basic:PASS|PASS]]&lt;br /&gt;
* [[MC-Basic:robot.PASSBACKWARD| PASSBACKWARD ]]&lt;br /&gt;
* [[MC-Basic:robot.PASSBUFFERLEVEL| PASSBUFFERLEVEL ]]&lt;br /&gt;
* [[MC-Basic:robot.PASSINTERPOLATION| PASSINTERPOLATION ]]&lt;br /&gt;
* [[MC-Basic:robot.PASSMETHOD| PASSMETHOD ]]&lt;br /&gt;
* [[MC-Basic:robot.PASSROTMINGAP| PASSROTMINGAP ]]&lt;br /&gt;
* [[MC-Basic:robot.PASSSYMMETRICPATH| PASSSYMMETRICPATH ]]&lt;br /&gt;
* [[MC-Basic:element.PASSTHROUGHMAXDEVIATION| PASSTHROUGHMAXDEVIATION ]]&lt;br /&gt;
* [[MC-Basic:robot.PASSTRANMINGAP| PASSTRANMINGAP ]]&lt;br /&gt;
* [[MC-Basic:robot.PASSUPTO| PASSUPTO ]]&lt;br /&gt;
* [[MC-Basic:robot.CURRENTPASS| CURRENTPASS ]]&lt;br /&gt;
* [[MC-Basic:robot.PASSBUFFERLEVEL | PASSBUFFERLEVEL]]&lt;br /&gt;
* [[MC-Basic:robot.PASSBUFFERMIN| PASSBUFFERMIN]]&lt;br /&gt;
* [[MC-Basic:robot.PASSBUFFERMAX | PASSBUFFERMAX]]&lt;br /&gt;
* [[MC-Basic:robot.PASSBUFFERSIZE| PASSBUFFERSIZE]]&lt;br /&gt;
* [[MC-Basic:robot.PASSBUFFERLOW | PASSBUFFERLOW]]&lt;br /&gt;
* [[MC-Basic:robot.STRETCHFACTOR|STRETCHFACTOR]]&lt;br /&gt;
* [[MC-Basic:robot.STRETCHVECTOR|STRETCHVECTOR]]&lt;br /&gt;
&lt;br /&gt;
==Camming==&lt;br /&gt;
&lt;br /&gt;
* [[MC-Basic:cam.CYCLE| cam.CYCLE ]]&lt;br /&gt;
* [[MC-Basic:cam.INUSE| cam.INUSE ]]&lt;br /&gt;
* [[MC-Basic:cam.ISMONOTONIC| cam.ISMONOTONIC ]]&lt;br /&gt;
* [[MC-Basic:cam.MASTERDATA| cam.MASTERDATA ]]&lt;br /&gt;
* [[MC-Basic:cam.SLAVEDATA| cam.SLAVEDATA]]&lt;br /&gt;
* [[MC-Basic:cam.NEXT| cam.NEXT ]]&lt;br /&gt;
* [[MC-Basic:cam.NEXT.NAME| cam.NEXT.NAME ]]&lt;br /&gt;
* [[MC-Basic:cam.PREVIOUS| cam.PREVIOUS ]]&lt;br /&gt;
* [[MC-Basic:cam.PREVIOUS.NAME| cam.PREVIOUS.NAME ]]&lt;br /&gt;
* [[MC-Basic:cam.SIZE| cam.SIZE ]]&lt;br /&gt;
* [[MC-Basic:cam.CAMID| cam.CAMID ]]&lt;br /&gt;
* [[MC-Basic:cam.CAMTYPE| cam.CAMTYPE]]&lt;br /&gt;
* [[MC-Basic:cam.POLY| cam.POLY]]&lt;br /&gt;
&lt;br /&gt;
==Compensation Tables==&lt;br /&gt;
&lt;br /&gt;
* [[MC-Basic:CompensationSource.Name| CompensationSource.Name ]]&lt;br /&gt;
* [[MC-Basic:COMPSET| COMPSET ]]&lt;br /&gt;
* [[MC-Basic:compTable.COMPACTIVE| compTable.COMPACTIVE ]]&lt;br /&gt;
* [[MC-Basic:compTable.MAXPOSITION| compTable.MAXPOSITION ]]&lt;br /&gt;
* [[MC-Basic:compTable.MINPOSITION| compTable.MINPOSITION ]]&lt;br /&gt;
* [[MC-Basic:compTable.MULTIPLIER| compTable.MULTIPLIER ]]&lt;br /&gt;
* [[MC-Basic:compTable.SOURCEDATA| compTable.SOURCEDATA ]]&lt;br /&gt;
* [[MC-Basic:compTable.TARGETDATA| compTable.TARGETDATA ]]&lt;br /&gt;
* [[MC-Basic:compTable.DIRECTION| compTable.DIRECTION ]]&lt;br /&gt;
* [[MC-Basic:compTable.CompID | compTable.CompID ]]&lt;br /&gt;
&lt;br /&gt;
==Points==&lt;br /&gt;
* [[MC-Basic:CASTJOINT| CASTJOINT ]]&lt;br /&gt;
* [[MC-Basic:CASTLOCATION| CASTLOCATION ]]&lt;br /&gt;
* [[MC-Basic:CASTPOINT| CASTPOINT ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==PLS (Programmable Limit Switch)==&lt;br /&gt;
&lt;br /&gt;
* [[MC-Basic:CREATEPLSDATA| CREATEPLSDATA ]]&lt;br /&gt;
* [[MC-Basic:DELETEPLS| DELETEPLS ]]&lt;br /&gt;
* [[MC-Basic:WITHPLS| WITHPLS]]&lt;br /&gt;
* [[MC-Basic:PLSLIST| PLSLIST]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [[MC-Basic:pls.HWASSISTANCE| pls.HWASSISTANCE]]&lt;br /&gt;
* [[MC-Basic:pls.HWIOtime| pls.HWIOtTIME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSAXISNAME| pls.PLSAXISNAME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSEMENTNAME| pls.PLSEMENTNAME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSdelaytime| pls.PLSDELAYTIME]]&lt;br /&gt;
* [[MC-Basic:pls.PLSENABLE| pls.PLSENABLE]]&lt;br /&gt;
* [[MC-Basic:pls.PLSHYSTERESIS| pls.PLSHYSTERESIS]]&lt;br /&gt;
* [[MC-Basic:pls.PLSOUTPUT| pls.PLSOUTPUT]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOLARITY| pls.PLSPOLARITY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPOSITION| pls.PLSPOSITION]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationDelay| pls.PLSPROPAGATIONDELAY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationDisableDelay| pls.PLSPROPAGATIONDISABLEDELAY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSPropagationEnableDelay| pls.PLSPROPAGATIONENABLEDELAY]]&lt;br /&gt;
* [[MC-Basic:pls.PLSRELATEDTO| pls.PLSRELATEDTO]]&lt;br /&gt;
* [[MC-Basic:pls.PLSREPEAT| pls.PLSREPEAT]]&lt;br /&gt;
&lt;br /&gt;
==Element Properties==&lt;br /&gt;
* [[MC-Basic:PlcMotionStatusCreate| PlcMotionStatusCreate ]]&lt;br /&gt;
* [[MC-Basic:PlcMotionStatusDestroy| PlcMotionStatusDestroy ]]&lt;br /&gt;
* [[MC-Basic:PlcMotionStatusQuery| PlcMotionStatusQuery ]]&lt;br /&gt;
* [[MC-Basic:element.PlcMotionStatus| element.PlcMotionStatus ]]&lt;br /&gt;
* [[MC-Basic:element.PrecomputationMode| element.PrecomputationMode ]]&lt;br /&gt;
* [[MC-Basic:element.RTKActive| element.RTKActive ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Identification and Dynamic Model==&lt;br /&gt;
&lt;br /&gt;
* [[MC-Basic:IdentificationCancel| IdentificationCancel ]]&lt;br /&gt;
* [[MC-Basic:IdentificationFinish| IdentificationFinish ]]&lt;br /&gt;
* [[MC-Basic:IdentificationStart| IdentificationStart ]]&lt;br /&gt;
* [[MC-Basic:IdentificationStatus| IdentificationStatus ]]&lt;br /&gt;
&lt;br /&gt;
==Moving Frame (Conveyor Tracking)==&lt;br /&gt;
&lt;br /&gt;
* [[MC-Basic:movingFrame.ACCELERATIONMAXROT| ACCELERATIONMAXROT ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.ACCELERATIONMAXTRAN| ACCELERATIONMAXTRAN ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.BASE| BASE ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.DAMPINGFACTOR| DAMPINGFACTOR ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.DOWNMASTER| DOWNMASTER ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.DOWNSTREAM| DOWNSTREAM ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.ELEMENTNAME| ELEMENTNAME ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.FILTERFACTOR| FILTERFACTOR ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.HERE| HERE ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.ISINWINDOW| ISINWINDOW ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.JERKMAXROT| JERKMAXROT ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.JERKMAXTRAN| JERKMAXTRAN ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.MASTERSOURCE| MASTERSOURCE ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.MAXFLOPS| MAXFLOPS ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.MOVINGFRAMEID| MOVINGFRAMEID ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.MOVINGFRAMENAME| MOVINGFRAMENAME ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.MOVINGFRAMESCALE| MOVINGFRAMESCALE ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.NUMBERDEGREESOFFREADOM| NUMBERDEGREESOFFREADOM ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.NUMBEROFITEMS| NUMBEROFITEMS ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.OBJECTLOC| OBJECTLOC ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.OrientationTransformation| OrientationTransformation ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.SLAVEORIENTATION| SLAVEORIENTATION ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.TOOL| TOOL ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.TranslationTransformation| TranslationTransformation ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.TYPE| TYPE ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.UPMASTER| UPMASTER ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.UPSTREAM| UPSTREAM ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.VELOCITYMAXROT| VELOCITYMAXROT ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.VELOCITYMAXTRANS| VELOCITYMAXTRANS ]]&lt;br /&gt;
* [[MC-Basic:movingFrame.ZERO| ZERO ]]&lt;br /&gt;
&lt;br /&gt;
==System Parameters==&lt;br /&gt;
* [[MC-Basic:SYSTEM.ACCELERATIONRATE| SYSTEM.ACCELERATIONRATE ]]&lt;br /&gt;
* [[MC-Basic:SYSTEM.DECELERATIONRATE| SYSTEM.DECELERATIONRATE ]]&lt;br /&gt;
* [[MC-Basic:SYSTEM.ENABLE| SYSTEM.ENABLE ]]&lt;br /&gt;
* [[MC-Basic:SYSTEM.JERKRATE| SYSTEM.JERKRATE ]]&lt;br /&gt;
* [[MC-Basic:SYSTEM.MOTIONASSISTANCE| SYSTEM.MOTIONASSISTANCE ]]&lt;br /&gt;
* [[MC-Basic:SYSTEM.MOTIONMARGIN| SYSTEM.MOTIONMARGIN ]]&lt;br /&gt;
* [[MC-Basic:SYSTEM.NUMBERAXES| SYSTEM.NUMBERAXES ]]&lt;br /&gt;
* [[MC-Basic:SYSTEM.VELOCITYOVERRIDE| SYSTEM.VELOCITYOVERRIDE ]]&lt;br /&gt;
* [[MC-Basic:SYSTEM.VELOCITYRATE| SYSTEM.VELOCITYRATE ]]&lt;/div&gt;</summary>
		<author><name>Lisa</name></author>	</entry>

	</feed>