{"payload":{"meta":{"Graph":{"@Type":"81297157","@Value":{"Guid":"(Guid)7be79b9e-9105-42aa-a30f-2d68c1f93639","ParentGuid":"(Guid)74ccca2f-50e3-4d5a-9d7a-9fd420284f83","Name":"(string)atGreyCodeToInt","Properties":{"@Type":"2c41fa04:IDictionary","@Value":[{"@Key":"(Guid)829a18f2-c514-4f6e-9634-1df173429203","@Value":{"@Type":"829a18f2","@Value":{"ParentObjects":{"@Type":"fa2ee218:IDictionary","@Value":[{"@Key":"(Guid)d9b2b2cc-ea99-4c3b-aa42-1e5c49e65b84","@Value":"(Guid)9a3a0783-0c5e-46c3-8afd-032a970fe961"}]}}}}]},"TypeGuid":"(Guid)6f9dac99-8de1-4efc-8465-68ac443b7d08","EmbeddedTypeGuids":{"@Type":"[Guid]","@Value":["(Guid)a9ed5b7e-75c5-4651-af16-d2c27e98cb94","(Guid)3b83b776-fb25-43b8-99f2-3c507c9143fc"]}}},"TypeInfos":{"2c41fa04":"{2c41fa04-1834-41c1-816e-303c7aa2c05b}","81297157":"{81297157-7ec9-45ce-845e-84cab2b88ade}","829a18f2":"{829a18f2-c514-4f6e-9634-1df173429203}","fa2ee218":"{fa2ee218-a39b-4b6d-b249-49dbddbd168a}","Guid":"System.Guid","string":"System.String"}},"object":{"Graph":{"@Type":"6f9dac99","@Value":{"SpecialFunc":{"@Type":"0db3d7bb:Enum","@Value":"None"},"Implementation":{"@Type":"3b83b776","@Value":{"TextDocument":{"@Type":"f3878285","@Value":{"TextBlobForSerialisation":"(string)//Converts greycode to integer\n// The Util library has this built in but does not include any fault output to detect miswire, broken, or shorted wire\n// This is tested with an 8 bit greycode encoder.\n//It should work up to 16 bits\n//\n//If count changes by more then the fault threashold then the fault pulses\n\n//Convert uint to array of bits\nFOR i := 0 TO 15  DO\n\tbits[i] := (in AND LREAL_TO_UINT( EXPT(2, i))) <> 0;\nEND_FOR\n\n//Greycode conversion\ni := 15;\nWHILE i > 0 DO //Couldn't seem to get FOR DO to count backwards\n\ti := i-1;\n\tbits[i] := bits[i] XOR bits[i+1];\t\t\t\nEND_WHILE\n\n//Convert array of bits to uint\nout:=0;\nFOR i := 0 TO 15  DO\n\tIF bits[i] THEN\n\t\tout := out + LREAL_TO_INT(EXPT(2,i));\n\tEND_IF\nEND_FOR\n\n//If encoder counts by more then 1 that is a fault\n//This does not handle rolling over back to 0, it assumes that will never happen as in the case of a distributor that can't rotate all the way around\nIF firstScan THEN\n\toutLast := out;\nEND_IF\nIF out <> outLast THEN\n\tfault := ABS(out - outLast) > faultThreashold;\n\toutLast := out;\t\nEND_IF\n\n\n//Clear first scan\nfirstScan := FALSE;","LineInfoPersistence":"(string)7be79b9e-9105-42aa-a30f-2d68c1f93639_Impl_LineIds"}}}},"Interface":{"@Type":"a9ed5b7e","@Value":{"TextDocument":{"@Type":"f3878285","@Value":{"TextBlobForSerialisation":"(string)FUNCTION_BLOCK atGreyCodeToInt\nVAR_INPUT\n\t// Raw bits from input\n\tin: WORD;\n\t// Fault triggered if out value changes by more then this in one scan\n\tfaultThreashold: INT;\nEND_VAR\nVAR_OUTPUT\n\t// Converted output\n\tout: INT;\n\t// Fault out, if change is to great\n\tfault: bool;\nEND_VAR\nVAR\n\ti: INT;\n\tbits: ARRAY[0..15] OF BOOL;\n\toutLast: INT;\n\tfirstScan: BOOL := TRUE;\nEND_VAR\n","LineInfoPersistence":"(string)7be79b9e-9105-42aa-a30f-2d68c1f93639_Decl_LineIds"}}}},"UniqueIdGenerator":"(string)740","POULevel":{"@Type":"8e575c5b:Enum","@Value":"Standard"},"ChildObjectGuids":{"@Type":"ArrayList:IList","@Value":[]},"AddAttributeSubsequent":"(bool)False"}},"TypeInfos":{"0db3d7bb":"{0db3d7bb-cde0-4416-9a7b-ce49a0124323}","3b83b776":"{3b83b776-fb25-43b8-99f2-3c507c9143fc}","6f9dac99":"{6f9dac99-8de1-4efc-8465-68ac443b7d08}","8e575c5b":"{8e575c5b-1d37-49c6-941b-5c0ec7874787}","a9ed5b7e":"{a9ed5b7e-75c5-4651-af16-d2c27e98cb94}","ArrayList":"System.Collections.ArrayList","bool":"System.Boolean","f3878285":"{f3878285-8e4f-490b-bb1b-9acbb7eb04db}","string":"System.String"}}},"FormatVersion":"1.0"}