Omron Forums Support Posted March 14, 2022 Posted March 14, 2022 use perlutil;use IntDm;use DoubleDm;use StringDm;use StatusDm;use Composite;########################################################################################################################################################################################################################################################################################################################################################################### ###### Micrscan Link Example ###### ###### Version 1.0 ###### ###### May 1st, 2015 ###### ################################################################################################################################################################################################################################################################################################################################################################################# MSLink: This perl script demonstrates how you can configure various data types as Microscan Link inputs### ###### ### ### Inputs: ### integer### float ### string ### boolean###### Outputs:### integer### float ### string ### boolean######package MSLink;## REGISTER this package so that perl steps know this package is available#perlutil::register("MSLink");##################################################################################BEGIN {## STATUS FLAGS. Used with Composite::SetStatusFlags() call.# *ST_TRAINABLE = \0x00000001; # step or datum is trainable *ST_TRAINED = \0x00000002; # step or datum has been trained *ST_PARTCREATE = \0x00000004; # step creates a part *ST_STOP_ON_TRAIN = \0x00000008; # step needs to be set up (or moved) before training *ST_IS_EMBEDDED = \0x00000010; # composite is embedded in parent *ST_THREADED = \0x00000020; # step is threaded *ST_NEED_STAT_TRAIN = \0x00000040; *ST_CAN_TUNE_PARAMS = \0x00000080; *ST_DIRTY = \0x00000100; # composite is "dirty" *ST_ENABLED = \0x00000200; # composite is enabled *ST_INCLUDED_IN_RESULTS = \0x00000400; # composite is included in results uploaded from target #*ST_USES_MONSTER = \0x00000800; # uses monster resource. *ST_VIRGIN = \0x00001000; # composite has never been run *ST_FIELD = \0x00002000; # composite is a field *ST_DISABLE_PRECHECK = \0x00004000; # disable prechecking on this step/datum *ST_INCLUDED_IN_STREAM = \0x00008000; # do not stream this composite to disk/network *ST_SKIP_REGEN = \0x00010000; # do not attempt to follow references when building regen list *ST_HIDDEN = \0x00020000; # hide this object in the tree view (but show children) *ST_TIMING_ENABLE = \0x00040000; # this step contains timing diagnostics# editability mask bits. Used with Composite::SetEditability() call. *EM_DATUM = \0x01; # editable as a datum *EM_REFDATUM = \0x02; # editable as a reference to a datum *EM_CANROTATE = \0x04; # valid for steps and shapes *EM_CANMOVE = \0x08; # valid for shapes *EM_CANSIZE = \0x10; # valid for shapes *EM_CANMASK = \0x20; # valid for steps *EM_RESULT = \0x40; # valid for output datums *EM_ENABLEREFEDIT = \0x80; # if ref editable, enable the reference editing *EM_NOUSERUPLOAD = \0x100; # if no user upload, the user can't select the # datum as a result to upload, but it's automatically # included in the uploaded results. *EM_VOLDATUM = \0x200; # datum is volatile, can be changed at runtime *EM_ALWAYSUPLOAD = \0x400; # always upload datum @ results upload time, even if step or datum has an error *EM_CANSCALE = \0x800; # can shape be scaled *EM_CANSTRETCH = \0x1000; # can shape be stretched linearly (rhombus) *EM_CAN_MODIFY_AT_RUNTIME = \0x2000; # can be modified by the user at runtime - no questions asked *EM_ASK_MODIFY_AT_RUNTIME = \0x4000; # ask parent step if datum can be modified at runtime *EM_ARRAYDATUM = \0x8000; # this datum is part of an array record# Useful defines for IOListDm Types *IO_INPUT = \1; *IO_OUTPUT = \2; *IO_BOTH = \3; *AVPIOTYPE_ALL = \0; *AVPIOTYPE_PHYSICAL = \1; *AVPIOTYPE_VIRTUAL = \2; *AVPIOTYPE_SENSOR = \3; *AVPIOTYPE_STROBE = \4; *AVPIOTYPE_ANALOGOUT = \5; *AVPIOTYPE_SLAVESENSOR = \6; *AVPIOTYPE_TTLINPUT = \7; *AVPIOTYPE_TTLOUTPUT = \8; *AVPIOTYPE_RS422INPUT = \9; *AVPIOTYPE_RS422OUTPUT = \10;# Useful defines for Datum list Types *INPUT_DATUM = \0; *OUTPUT_DATUM = \1; *RESOURCE_DATUM = \2; *INPUT_DATUMLIST = \0; *OUTPUT_DATUMLIST = \1;# Useful defines for Debug Info Types *DWM_INFO = \1; *DWM_WARNING = \2; *DWM_SERIOUS = \4; *DWM_LEVEL = \15; *DWM_SHOWMSG = \0x00010000; #smart camera sensor resolutions *WVGA_WIDTH = \752; *WVGA_HEIGHT = \480; *SXGA_WIDTH = \1280; *SXGA_HEIGHT = \960; *WUXGA_WIDTH = \2048; *WUXGA_HEIGHT = \1088; # Datum List references *RES_INT = \0; *RES_FLOAT = \1; *RES_STRING = \2; *RES_BOOL = \3; *OUT_INT = \0; *OUT_FLOAT = \1; *OUT_STRING = \2; *OUT_BOOL = \3;}################################################################################################################################################################################################################################################sub FilterStepType{ ##use this sub if you want your script to only be listed for Custom Vision Tools or only for Custom Steps return 2; # returning 0 means you want it listed for both types of steps # return 1 if your script should only be listed for Custom Vision Tools (has an input buffer and an ROI) # return 2 if your script should only be listed for Custom Steps (used for logic scripts only, has no ROI and no connection to the buffer)}################################################################################################################################################################################################################################################sub Init{ #one time initialization routine. Similar to PreRun, but will only be called once, regardless of whether you're in setup or runtime mode}################################################################################################################################################################################################################################################sub Cleanup{ #complement to Init} ################################################################################################################################################################################################################################################sub Apply{ #called when ever your script is selected in the Custom Step or Custom Vision Tool's "Avail Package Scripts" list #it is here where you will create all of your input and output datums perlutil::clear_datum_lists; ################################################################################ # add input datums perlutil::add_datum_int ($RESOURCE_DATUM,1, "intIn\nInteger", 0); # 0 perlutil::add_datum_double ($RESOURCE_DATUM,1, "floatIn\nFloat", 0); # 1 perlutil::add_datum_string ($RESOURCE_DATUM,1, "stringIn\nString", 0); # 2 perlutil::add_datum_status ($RESOURCE_DATUM,1, "boolIn\nBoolean", 0); # 3 # add limits to input coordinate datums # These will need to be double-checked as they are going to be linked # to an external controller ####################################################### #SET MIN/MAX LIMITS ON THOSE DATUMS THAT NEED IT my $datum = perlutil::get_datum(0,$RES_INT); IntDm::SetMinValue($datum, -1000000000); IntDm::SetMaxValue($datum, 1000000000); $datum = perlutil::get_datum(0,$RES_FLOAT); DoubleDm::SetMinValue($datum, -1000000000.0); DoubleDm::SetMaxValue($datum, 1000000000.0); ######################################################### # OUTPUT DATUMS perlutil::add_datum_int ($OUTPUT_DATUM,1, "intOut\nInteger", 0); # 0 perlutil::add_datum_double ($OUTPUT_DATUM,1, "floatOut\nFloat", 0); # 1 perlutil::add_datum_string ($OUTPUT_DATUM,1, "stringOut\nString", 0); # 2 perlutil::add_datum_status ($OUTPUT_DATUM,1, "boolOut\nBoolean", 0); # 3 ####################################################### #SET MIN/MAX LIMITS ON THOSE DATUMS THAT NEED IT $datum = perlutil::get_datum(1,$OUT_INT); IntDm::SetMinValue($datum, -1000000000); IntDm::SetMaxValue($datum, 1000000000); $datum = perlutil::get_datum(1,$OUT_FLOAT); DoubleDm::SetMinValue($datum, -1000000000.0); DoubleDm::SetMaxValue($datum, 1000000000.0);}################################################################################################################################################################################################################################################sub UIAction{ #make a note of all datums if you want to use them again after returning 1 from here return 0;}################################################################################################################################################################################################################################################sub PreRun{ # make sure that all input datums can be linked my $i = 0; my $thisDm = 0; for ($i =0;$i< $RES_BOOL + 1;$i++) { $thisDm = perlutil::get_datum(0, $i); $currentFlags = Composite::GetEditability($thisDm); Composite::SetEditability( $thisDm , $currentFlags | $EM_CAN_MODIFY_AT_RUNTIME ); } return 0; }################################################################################################################################################################################################################################################sub Run{ my $passFlag = 0; my $int = perlutil::get_datum_int(0, $RES_INT); my $float = perlutil::get_datum_double(0,$RES_FLOAT); my $string = perlutil::get_datum_string(0,$RES_STRING); my $bool = perlutil::get_datum_status(0,$RES_BOOL); perlutil::set_datum_int($OUTPUT_DATUM, $OUT_INT, $int); perlutil::set_datum_double($OUTPUT_DATUM, $OUT_FLOAT, $float); perlutil::set_datum_string($OUTPUT_DATUM, $OUT_STRING, $string); perlutil::set_datum_status($OUTPUT_DATUM, $OUT_BOOL, $bool); perlutil::SetPassed($passFlag); return 0;}sub Draw{}sub PostRun {}sub Update { }sub Start{}sub Stop{} return 1; Software Version 2.0 & above Quote
Recommended Posts
Top Posters In This Topic
1
Popular Days
Mar 14
1
Top Posters In This Topic
Omron Forums Support 1 post
Popular Days
Mar 14 2022
1 post