diff --git a/ExternalLibraries/BR.AN.PviServices.dll b/ExternalLibraries/BR.AN.PviServices.dll
new file mode 100644
index 0000000..6a6a038
Binary files /dev/null and b/ExternalLibraries/BR.AN.PviServices.dll differ
diff --git a/ExternalLibraries/Host/BR.AN.PviServices.dll b/ExternalLibraries/Host/BR.AN.PviServices.dll
new file mode 100644
index 0000000..8742a64
Binary files /dev/null and b/ExternalLibraries/Host/BR.AN.PviServices.dll differ
diff --git a/ExternalLibraries/Host/Newtonsoft.Json.dll b/ExternalLibraries/Host/Newtonsoft.Json.dll
new file mode 100644
index 0000000..341d08f
Binary files /dev/null and b/ExternalLibraries/Host/Newtonsoft.Json.dll differ
diff --git a/ExternalLibraries/Host/Newtonsoft.Json.xml b/ExternalLibraries/Host/Newtonsoft.Json.xml
new file mode 100644
index 0000000..2c981ab
--- /dev/null
+++ b/ExternalLibraries/Host/Newtonsoft.Json.xml
@@ -0,0 +1,11363 @@
+
+
+
+ Newtonsoft.Json
+
+
+
+
+ Represents a BSON Oid (object id).
+
+
+
+
+ Gets or sets the value of the Oid.
+
+ The value of the Oid.
+
+
+
+ Initializes a new instance of the class.
+
+ The Oid value.
+
+
+
+ Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data.
+
+
+
+
+ Gets or sets a value indicating whether binary data reading should be compatible with incorrect Json.NET 3.5 written binary.
+
+
+ true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false.
+
+
+
+
+ Gets or sets a value indicating whether the root object will be read as a JSON array.
+
+
+ true if the root object will be read as a JSON array; otherwise, false.
+
+
+
+
+ Gets or sets the used when reading values from BSON.
+
+ The used when reading values from BSON.
+
+
+
+ Initializes a new instance of the class.
+
+ The containing the BSON data to read.
+
+
+
+ Initializes a new instance of the class.
+
+ The containing the BSON data to read.
+
+
+
+ Initializes a new instance of the class.
+
+ The containing the BSON data to read.
+ if set to true the root object will be read as a JSON array.
+ The used when reading values from BSON.
+
+
+
+ Initializes a new instance of the class.
+
+ The containing the BSON data to read.
+ if set to true the root object will be read as a JSON array.
+ The used when reading values from BSON.
+
+
+
+ Reads the next JSON token from the underlying .
+
+
+ true if the next token was read successfully; false if there are no more tokens to read.
+
+
+
+
+ Changes the reader's state to .
+ If is set to true, the underlying is also closed.
+
+
+
+
+ Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data.
+
+
+
+
+ Gets or sets the used when writing values to BSON.
+ When set to no conversion will occur.
+
+ The used when writing values to BSON.
+
+
+
+ Initializes a new instance of the class.
+
+ The to write to.
+
+
+
+ Initializes a new instance of the class.
+
+ The to write to.
+
+
+
+ Flushes whatever is in the buffer to the underlying and also flushes the underlying stream.
+
+
+
+
+ Writes the end.
+
+ The token.
+
+
+
+ Writes a comment /*...*/ containing the specified text.
+
+ Text to place inside the comment.
+
+
+
+ Writes the start of a constructor with the given name.
+
+ The name of the constructor.
+
+
+
+ Writes raw JSON.
+
+ The raw JSON to write.
+
+
+
+ Writes raw JSON where a value is expected and updates the writer's state.
+
+ The raw JSON to write.
+
+
+
+ Writes the beginning of a JSON array.
+
+
+
+
+ Writes the beginning of a JSON object.
+
+
+
+
+ Writes the property name of a name/value pair on a JSON object.
+
+ The name of the property.
+
+
+
+ Closes this writer.
+ If is set to true, the underlying is also closed.
+ If is set to true, the JSON is auto-completed.
+
+
+
+
+ Writes a value.
+ An error will raised if the value cannot be written as a single JSON token.
+
+ The value to write.
+
+
+
+ Writes a null value.
+
+
+
+
+ Writes an undefined value.
+
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a [] value.
+
+ The [] value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a [] value that represents a BSON object id.
+
+ The Object ID value to write.
+
+
+
+ Writes a BSON regex.
+
+ The regex pattern.
+ The regex options.
+
+
+
+ Specifies how constructors are used when initializing objects during deserialization by the .
+
+
+
+
+ First attempt to use the public default constructor, then fall back to a single parameterized constructor, then to the non-public default constructor.
+
+
+
+
+ Json.NET will use a non-public default constructor before falling back to a parameterized constructor.
+
+
+
+
+ Converts a binary value to and from a base 64 string value.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Converts a to and from JSON and BSON.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Creates a custom object.
+
+ The object type to convert.
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Creates an object which will then be populated by the serializer.
+
+ Type of the object.
+ The created object.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Gets a value indicating whether this can write JSON.
+
+
+ true if this can write JSON; otherwise, false.
+
+
+
+
+ Converts a to and from JSON.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified value type.
+
+ Type of the value.
+
+ true if this instance can convert the specified value type; otherwise, false.
+
+
+
+
+ Converts a to and from JSON.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified value type.
+
+ Type of the value.
+
+ true if this instance can convert the specified value type; otherwise, false.
+
+
+
+
+ Provides a base class for converting a to and from JSON.
+
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Converts a F# discriminated union type to and from JSON.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Converts an Entity Framework to and from JSON.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Converts an to and from JSON.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Gets a value indicating whether this can write JSON.
+
+
+ true if this can write JSON; otherwise, false.
+
+
+
+
+ Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z").
+
+
+
+
+ Gets or sets the date time styles used when converting a date to and from JSON.
+
+ The date time styles used when converting a date to and from JSON.
+
+
+
+ Gets or sets the date time format used when converting a date to and from JSON.
+
+ The date time format used when converting a date to and from JSON.
+
+
+
+ Gets or sets the culture used when converting a date to and from JSON.
+
+ The culture used when converting a date to and from JSON.
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Converts a to and from a JavaScript Date constructor (e.g. new Date(52231943)).
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing property value of the JSON that is being converted.
+ The calling serializer.
+ The object value.
+
+
+
+ Converts a to and from JSON.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Converts a to and from JSON and BSON.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Converts an to and from its name string value.
+
+
+
+
+ Gets or sets a value indicating whether the written enum text should be camel case.
+ The default value is false.
+
+ true if the written enum text will be camel case; otherwise, false.
+
+
+
+ Gets or sets the naming strategy used to resolve how enum text is written.
+
+ The naming strategy used to resolve how enum text is written.
+
+
+
+ Gets or sets a value indicating whether integer values are allowed when serializing and deserializing.
+ The default value is true.
+
+ true if integers are allowed when serializing and deserializing; otherwise, false.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class.
+
+ true if the written enum text will be camel case; otherwise, false.
+
+
+
+ Initializes a new instance of the class.
+
+ The naming strategy used to resolve how enum text is written.
+ true if integers are allowed when serializing and deserializing; otherwise, false.
+
+
+
+ Initializes a new instance of the class.
+
+ The of the used to write enum text.
+
+
+
+ Initializes a new instance of the class.
+
+ The of the used to write enum text.
+
+ The parameter list to use when constructing the described by .
+ If null, the default constructor is used.
+ When non-null, there must be a constructor defined in the that exactly matches the number,
+ order, and type of these parameters.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The of the used to write enum text.
+
+ The parameter list to use when constructing the described by .
+ If null, the default constructor is used.
+ When non-null, there must be a constructor defined in the that exactly matches the number,
+ order, and type of these parameters.
+
+ true if integers are allowed when serializing and deserializing; otherwise, false.
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Converts a to and from Unix epoch time
+
+
+
+
+ Gets or sets a value indicating whether the dates before Unix epoch
+ should converted to and from JSON.
+
+
+ true to allow converting dates before Unix epoch to and from JSON;
+ false to throw an exception when a date being converted to or from JSON
+ occurred before Unix epoch. The default value is false.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+ true to allow converting dates before Unix epoch to and from JSON;
+ false to throw an exception when a date being converted to or from JSON
+ occurred before Unix epoch. The default value is false.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing property value of the JSON that is being converted.
+ The calling serializer.
+ The object value.
+
+
+
+ Converts a to and from a string (e.g. "1.2.3.4").
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing property value of the JSON that is being converted.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Converts XML to and from JSON.
+
+
+
+
+ Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produced multiple root elements.
+
+ The name of the deserialized root element.
+
+
+
+ Gets or sets a value to indicate whether to write the Json.NET array attribute.
+ This attribute helps preserve arrays when converting the written XML back to JSON.
+
+ true if the array attribute is written to the XML; otherwise, false.
+
+
+
+ Gets or sets a value indicating whether to write the root JSON object.
+
+ true if the JSON root object is omitted; otherwise, false.
+
+
+
+ Gets or sets a value indicating whether to encode special characters when converting JSON to XML.
+ If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify
+ XML namespaces, attributes or processing directives. Instead special characters are encoded and written
+ as part of the XML element name.
+
+ true if special characters are encoded; otherwise, false.
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The calling serializer.
+ The value.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Checks if the is a namespace attribute.
+
+ Attribute name to test.
+ The attribute name prefix if it has one, otherwise an empty string.
+ true if attribute name is for a namespace attribute, otherwise false.
+
+
+
+ Determines whether this instance can convert the specified value type.
+
+ Type of the value.
+
+ true if this instance can convert the specified value type; otherwise, false.
+
+
+
+
+ Specifies how dates are formatted when writing JSON text.
+
+
+
+
+ Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z".
+
+
+
+
+ Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/".
+
+
+
+
+ Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text.
+
+
+
+
+ Date formatted strings are not parsed to a date type and are read as strings.
+
+
+
+
+ Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to .
+
+
+
+
+ Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to .
+
+
+
+
+ Specifies how to treat the time value when converting between string and .
+
+
+
+
+ Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time.
+
+
+
+
+ Treat as a UTC. If the object represents a local time, it is converted to a UTC.
+
+
+
+
+ Treat as a local time if a is being converted to a string.
+ If a string is being converted to , convert to a local time if a time zone is specified.
+
+
+
+
+ Time zone information should be preserved when converting.
+
+
+
+
+ The default JSON name table implementation.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets a string containing the same characters as the specified range of characters in the given array.
+
+ The character array containing the name to find.
+ The zero-based index into the array specifying the first character of the name.
+ The number of characters in the name.
+ A string containing the same characters as the specified range of characters in the given array.
+
+
+
+ Adds the specified string into name table.
+
+ The string to add.
+ This method is not thread-safe.
+ The resolved string.
+
+
+
+ Specifies default value handling options for the .
+
+
+
+
+
+
+
+
+ Include members where the member value is the same as the member's default value when serializing objects.
+ Included members are written to JSON. Has no effect when deserializing.
+
+
+
+
+ Ignore members where the member value is the same as the member's default value when serializing objects
+ so that it is not written to JSON.
+ This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers,
+ decimals and floating point numbers; and false for booleans). The default value ignored can be changed by
+ placing the on the property.
+
+
+
+
+ Members with a default value but no JSON will be set to their default value when deserializing.
+
+
+
+
+ Ignore members where the member value is the same as the member's default value when serializing objects
+ and set members to their default value when deserializing.
+
+
+
+
+ Specifies float format handling options when writing special floating point numbers, e.g. ,
+ and with .
+
+
+
+
+ Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity".
+
+
+
+
+ Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity.
+ Note that this will produce non-valid JSON.
+
+
+
+
+ Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a of property.
+
+
+
+
+ Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text.
+
+
+
+
+ Floating point numbers are parsed to .
+
+
+
+
+ Floating point numbers are parsed to .
+
+
+
+
+ Specifies formatting options for the .
+
+
+
+
+ No special formatting is applied. This is the default.
+
+
+
+
+ Causes child objects to be indented according to the and settings.
+
+
+
+
+ Provides an interface for using pooled arrays.
+
+ The array type content.
+
+
+
+ Rent an array from the pool. This array must be returned when it is no longer needed.
+
+ The minimum required length of the array. The returned array may be longer.
+ The rented array from the pool. This array must be returned when it is no longer needed.
+
+
+
+ Return an array to the pool.
+
+ The array that is being returned.
+
+
+
+ Provides an interface to enable a class to return line and position information.
+
+
+
+
+ Gets a value indicating whether the class can return line information.
+
+
+ true if and can be provided; otherwise, false.
+
+
+
+
+ Gets the current line number.
+
+ The current line number or 0 if no line information is available (for example, when returns false).
+
+
+
+ Gets the current line position.
+
+ The current line position or 0 if no line information is available (for example, when returns false).
+
+
+
+ Instructs the how to serialize the collection.
+
+
+
+
+ Gets or sets a value indicating whether null items are allowed in the collection.
+
+ true if null items are allowed in the collection; otherwise, false.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class with a flag indicating whether the array can contain null items.
+
+ A flag indicating whether the array can contain null items.
+
+
+
+ Initializes a new instance of the class with the specified container Id.
+
+ The container Id.
+
+
+
+ Instructs the to use the specified constructor when deserializing that object.
+
+
+
+
+ Instructs the how to serialize the object.
+
+
+
+
+ Gets or sets the id.
+
+ The id.
+
+
+
+ Gets or sets the title.
+
+ The title.
+
+
+
+ Gets or sets the description.
+
+ The description.
+
+
+
+ Gets or sets the collection's items converter.
+
+ The collection's items converter.
+
+
+
+ The parameter list to use when constructing the described by .
+ If null, the default constructor is used.
+ When non-null, there must be a constructor defined in the that exactly matches the number,
+ order, and type of these parameters.
+
+
+
+ [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })]
+
+
+
+
+
+ Gets or sets the of the .
+
+ The of the .
+
+
+
+ The parameter list to use when constructing the described by .
+ If null, the default constructor is used.
+ When non-null, there must be a constructor defined in the that exactly matches the number,
+ order, and type of these parameters.
+
+
+
+ [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })]
+
+
+
+
+
+ Gets or sets a value that indicates whether to preserve object references.
+
+
+ true to keep object reference; otherwise, false. The default is false.
+
+
+
+
+ Gets or sets a value that indicates whether to preserve collection's items references.
+
+
+ true to keep collection's items object references; otherwise, false. The default is false.
+
+
+
+
+ Gets or sets the reference loop handling used when serializing the collection's items.
+
+ The reference loop handling.
+
+
+
+ Gets or sets the type name handling used when serializing the collection's items.
+
+ The type name handling.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class with the specified container Id.
+
+ The container Id.
+
+
+
+ Provides methods for converting between .NET types and JSON types.
+
+
+
+
+
+
+
+ Gets or sets a function that creates default .
+ Default settings are automatically used by serialization methods on ,
+ and and on .
+ To serialize without using any default settings create a with
+ .
+
+
+
+
+ Represents JavaScript's boolean value true as a string. This field is read-only.
+
+
+
+
+ Represents JavaScript's boolean value false as a string. This field is read-only.
+
+
+
+
+ Represents JavaScript's null as a string. This field is read-only.
+
+
+
+
+ Represents JavaScript's undefined as a string. This field is read-only.
+
+
+
+
+ Represents JavaScript's positive infinity as a string. This field is read-only.
+
+
+
+
+ Represents JavaScript's negative infinity as a string. This field is read-only.
+
+
+
+
+ Represents JavaScript's NaN as a string. This field is read-only.
+
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation using the specified.
+
+ The value to convert.
+ The format the date will be converted to.
+ The time zone handling when the date is converted to a string.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation using the specified.
+
+ The value to convert.
+ The format the date will be converted to.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ The string delimiter character.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ The string delimiter character.
+ The string escape handling.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Serializes the specified object to a JSON string.
+
+ The object to serialize.
+ A JSON string representation of the object.
+
+
+
+ Serializes the specified object to a JSON string using formatting.
+
+ The object to serialize.
+ Indicates how the output should be formatted.
+
+ A JSON string representation of the object.
+
+
+
+
+ Serializes the specified object to a JSON string using a collection of .
+
+ The object to serialize.
+ A collection of converters used while serializing.
+ A JSON string representation of the object.
+
+
+
+ Serializes the specified object to a JSON string using formatting and a collection of .
+
+ The object to serialize.
+ Indicates how the output should be formatted.
+ A collection of converters used while serializing.
+ A JSON string representation of the object.
+
+
+
+ Serializes the specified object to a JSON string using .
+
+ The object to serialize.
+ The used to serialize the object.
+ If this is null, default serialization settings will be used.
+
+ A JSON string representation of the object.
+
+
+
+
+ Serializes the specified object to a JSON string using a type, formatting and .
+
+ The object to serialize.
+ The used to serialize the object.
+ If this is null, default serialization settings will be used.
+
+ The type of the value being serialized.
+ This parameter is used when is to write out the type name if the type of the value does not match.
+ Specifying the type is optional.
+
+
+ A JSON string representation of the object.
+
+
+
+
+ Serializes the specified object to a JSON string using formatting and .
+
+ The object to serialize.
+ Indicates how the output should be formatted.
+ The used to serialize the object.
+ If this is null, default serialization settings will be used.
+
+ A JSON string representation of the object.
+
+
+
+
+ Serializes the specified object to a JSON string using a type, formatting and .
+
+ The object to serialize.
+ Indicates how the output should be formatted.
+ The used to serialize the object.
+ If this is null, default serialization settings will be used.
+
+ The type of the value being serialized.
+ This parameter is used when is to write out the type name if the type of the value does not match.
+ Specifying the type is optional.
+
+
+ A JSON string representation of the object.
+
+
+
+
+ Deserializes the JSON to a .NET object.
+
+ The JSON to deserialize.
+ The deserialized object from the JSON string.
+
+
+
+ Deserializes the JSON to a .NET object using .
+
+ The JSON to deserialize.
+
+ The used to deserialize the object.
+ If this is null, default serialization settings will be used.
+
+ The deserialized object from the JSON string.
+
+
+
+ Deserializes the JSON to the specified .NET type.
+
+ The JSON to deserialize.
+ The of object being deserialized.
+ The deserialized object from the JSON string.
+
+
+
+ Deserializes the JSON to the specified .NET type.
+
+ The type of the object to deserialize to.
+ The JSON to deserialize.
+ The deserialized object from the JSON string.
+
+
+
+ Deserializes the JSON to the given anonymous type.
+
+
+ The anonymous type to deserialize to. This can't be specified
+ traditionally and must be inferred from the anonymous type passed
+ as a parameter.
+
+ The JSON to deserialize.
+ The anonymous type object.
+ The deserialized anonymous type from the JSON string.
+
+
+
+ Deserializes the JSON to the given anonymous type using .
+
+
+ The anonymous type to deserialize to. This can't be specified
+ traditionally and must be inferred from the anonymous type passed
+ as a parameter.
+
+ The JSON to deserialize.
+ The anonymous type object.
+
+ The used to deserialize the object.
+ If this is null, default serialization settings will be used.
+
+ The deserialized anonymous type from the JSON string.
+
+
+
+ Deserializes the JSON to the specified .NET type using a collection of .
+
+ The type of the object to deserialize to.
+ The JSON to deserialize.
+ Converters to use while deserializing.
+ The deserialized object from the JSON string.
+
+
+
+ Deserializes the JSON to the specified .NET type using .
+
+ The type of the object to deserialize to.
+ The object to deserialize.
+
+ The used to deserialize the object.
+ If this is null, default serialization settings will be used.
+
+ The deserialized object from the JSON string.
+
+
+
+ Deserializes the JSON to the specified .NET type using a collection of .
+
+ The JSON to deserialize.
+ The type of the object to deserialize.
+ Converters to use while deserializing.
+ The deserialized object from the JSON string.
+
+
+
+ Deserializes the JSON to the specified .NET type using .
+
+ The JSON to deserialize.
+ The type of the object to deserialize to.
+
+ The used to deserialize the object.
+ If this is null, default serialization settings will be used.
+
+ The deserialized object from the JSON string.
+
+
+
+ Populates the object with values from the JSON string.
+
+ The JSON to populate values from.
+ The target object to populate values onto.
+
+
+
+ Populates the object with values from the JSON string using .
+
+ The JSON to populate values from.
+ The target object to populate values onto.
+
+ The used to deserialize the object.
+ If this is null, default serialization settings will be used.
+
+
+
+
+ Serializes the to a JSON string.
+
+ The node to serialize.
+ A JSON string of the .
+
+
+
+ Serializes the to a JSON string using formatting.
+
+ The node to serialize.
+ Indicates how the output should be formatted.
+ A JSON string of the .
+
+
+
+ Serializes the to a JSON string using formatting and omits the root object if is true.
+
+ The node to serialize.
+ Indicates how the output should be formatted.
+ Omits writing the root object.
+ A JSON string of the .
+
+
+
+ Deserializes the from a JSON string.
+
+ The JSON string.
+ The deserialized .
+
+
+
+ Deserializes the from a JSON string nested in a root element specified by .
+
+ The JSON string.
+ The name of the root element to append when deserializing.
+ The deserialized .
+
+
+
+ Deserializes the from a JSON string nested in a root element specified by
+ and writes a Json.NET array attribute for collections.
+
+ The JSON string.
+ The name of the root element to append when deserializing.
+
+ A value to indicate whether to write the Json.NET array attribute.
+ This attribute helps preserve arrays when converting the written XML back to JSON.
+
+ The deserialized .
+
+
+
+ Deserializes the from a JSON string nested in a root element specified by ,
+ writes a Json.NET array attribute for collections, and encodes special characters.
+
+ The JSON string.
+ The name of the root element to append when deserializing.
+
+ A value to indicate whether to write the Json.NET array attribute.
+ This attribute helps preserve arrays when converting the written XML back to JSON.
+
+
+ A value to indicate whether to encode special characters when converting JSON to XML.
+ If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify
+ XML namespaces, attributes or processing directives. Instead special characters are encoded and written
+ as part of the XML element name.
+
+ The deserialized .
+
+
+
+ Serializes the to a JSON string.
+
+ The node to convert to JSON.
+ A JSON string of the .
+
+
+
+ Serializes the to a JSON string using formatting.
+
+ The node to convert to JSON.
+ Indicates how the output should be formatted.
+ A JSON string of the .
+
+
+
+ Serializes the to a JSON string using formatting and omits the root object if is true.
+
+ The node to serialize.
+ Indicates how the output should be formatted.
+ Omits writing the root object.
+ A JSON string of the .
+
+
+
+ Deserializes the from a JSON string.
+
+ The JSON string.
+ The deserialized .
+
+
+
+ Deserializes the from a JSON string nested in a root element specified by .
+
+ The JSON string.
+ The name of the root element to append when deserializing.
+ The deserialized .
+
+
+
+ Deserializes the from a JSON string nested in a root element specified by
+ and writes a Json.NET array attribute for collections.
+
+ The JSON string.
+ The name of the root element to append when deserializing.
+
+ A value to indicate whether to write the Json.NET array attribute.
+ This attribute helps preserve arrays when converting the written XML back to JSON.
+
+ The deserialized .
+
+
+
+ Deserializes the from a JSON string nested in a root element specified by ,
+ writes a Json.NET array attribute for collections, and encodes special characters.
+
+ The JSON string.
+ The name of the root element to append when deserializing.
+
+ A value to indicate whether to write the Json.NET array attribute.
+ This attribute helps preserve arrays when converting the written XML back to JSON.
+
+
+ A value to indicate whether to encode special characters when converting JSON to XML.
+ If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify
+ XML namespaces, attributes or processing directives. Instead special characters are encoded and written
+ as part of the XML element name.
+
+ The deserialized .
+
+
+
+ Converts an object to and from JSON.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Gets a value indicating whether this can read JSON.
+
+ true if this can read JSON; otherwise, false.
+
+
+
+ Gets a value indicating whether this can write JSON.
+
+ true if this can write JSON; otherwise, false.
+
+
+
+ Converts an object to and from JSON.
+
+ The object type to convert.
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read. If there is no existing value then null will be used.
+ The existing value has a value.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Instructs the to use the specified when serializing the member or class.
+
+
+
+
+ Gets the of the .
+
+ The of the .
+
+
+
+ The parameter list to use when constructing the described by .
+ If null, the default constructor is used.
+
+
+
+
+ Initializes a new instance of the class.
+
+ Type of the .
+
+
+
+ Initializes a new instance of the class.
+
+ Type of the .
+ Parameter list to use when constructing the . Can be null.
+
+
+
+ Represents a collection of .
+
+
+
+
+ Instructs the how to serialize the collection.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class with the specified container Id.
+
+ The container Id.
+
+
+
+ The exception thrown when an error occurs during JSON serialization or deserialization.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class
+ with a specified error message.
+
+ The error message that explains the reason for the exception.
+
+
+
+ Initializes a new instance of the class
+ with a specified error message and a reference to the inner exception that is the cause of this exception.
+
+ The error message that explains the reason for the exception.
+ The exception that is the cause of the current exception, or null if no inner exception is specified.
+
+
+
+ Initializes a new instance of the class.
+
+ The that holds the serialized object data about the exception being thrown.
+ The that contains contextual information about the source or destination.
+ The parameter is null.
+ The class name is null or is zero (0).
+
+
+
+ Instructs the to deserialize properties with no matching class member into the specified collection
+ and write values during serialization.
+
+
+
+
+ Gets or sets a value that indicates whether to write extension data when serializing the object.
+
+
+ true to write extension data when serializing the object; otherwise, false. The default is true.
+
+
+
+
+ Gets or sets a value that indicates whether to read extension data when deserializing the object.
+
+
+ true to read extension data when deserializing the object; otherwise, false. The default is true.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Instructs the not to serialize the public field or public read/write property value.
+
+
+
+
+ Base class for a table of atomized string objects.
+
+
+
+
+ Gets a string containing the same characters as the specified range of characters in the given array.
+
+ The character array containing the name to find.
+ The zero-based index into the array specifying the first character of the name.
+ The number of characters in the name.
+ A string containing the same characters as the specified range of characters in the given array.
+
+
+
+ Instructs the how to serialize the object.
+
+
+
+
+ Gets or sets the member serialization.
+
+ The member serialization.
+
+
+
+ Gets or sets the missing member handling used when deserializing this object.
+
+ The missing member handling.
+
+
+
+ Gets or sets how the object's properties with null values are handled during serialization and deserialization.
+
+ How the object's properties with null values are handled during serialization and deserialization.
+
+
+
+ Gets or sets a value that indicates whether the object's properties are required.
+
+
+ A value indicating whether the object's properties are required.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class with the specified member serialization.
+
+ The member serialization.
+
+
+
+ Initializes a new instance of the class with the specified container Id.
+
+ The container Id.
+
+
+
+ Instructs the to always serialize the member with the specified name.
+
+
+
+
+ Gets or sets the type used when serializing the property's collection items.
+
+ The collection's items type.
+
+
+
+ The parameter list to use when constructing the described by .
+ If null, the default constructor is used.
+ When non-null, there must be a constructor defined in the that exactly matches the number,
+ order, and type of these parameters.
+
+
+
+ [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })]
+
+
+
+
+
+ Gets or sets the of the .
+
+ The of the .
+
+
+
+ The parameter list to use when constructing the described by .
+ If null, the default constructor is used.
+ When non-null, there must be a constructor defined in the that exactly matches the number,
+ order, and type of these parameters.
+
+
+
+ [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })]
+
+
+
+
+
+ Gets or sets the null value handling used when serializing this property.
+
+ The null value handling.
+
+
+
+ Gets or sets the default value handling used when serializing this property.
+
+ The default value handling.
+
+
+
+ Gets or sets the reference loop handling used when serializing this property.
+
+ The reference loop handling.
+
+
+
+ Gets or sets the object creation handling used when deserializing this property.
+
+ The object creation handling.
+
+
+
+ Gets or sets the type name handling used when serializing this property.
+
+ The type name handling.
+
+
+
+ Gets or sets whether this property's value is serialized as a reference.
+
+ Whether this property's value is serialized as a reference.
+
+
+
+ Gets or sets the order of serialization of a member.
+
+ The numeric order of serialization.
+
+
+
+ Gets or sets a value indicating whether this property is required.
+
+
+ A value indicating whether this property is required.
+
+
+
+
+ Gets or sets the name of the property.
+
+ The name of the property.
+
+
+
+ Gets or sets the reference loop handling used when serializing the property's collection items.
+
+ The collection's items reference loop handling.
+
+
+
+ Gets or sets the type name handling used when serializing the property's collection items.
+
+ The collection's items type name handling.
+
+
+
+ Gets or sets whether this property's collection items are serialized as a reference.
+
+ Whether this property's collection items are serialized as a reference.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class with the specified name.
+
+ Name of the property.
+
+
+
+ Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data.
+
+
+
+
+ Asynchronously reads the next JSON token from the source.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns true if the next token was read successfully; false if there are no more tokens to read.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously skips the children of the current token.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously reads the next JSON token from the source as a [].
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the []. This result will be null at the end of an array.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously reads the next JSON token from the source as a .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the . This result will be null at the end of an array.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Specifies the state of the reader.
+
+
+
+
+ A read method has not been called.
+
+
+
+
+ The end of the file has been reached successfully.
+
+
+
+
+ Reader is at a property.
+
+
+
+
+ Reader is at the start of an object.
+
+
+
+
+ Reader is in an object.
+
+
+
+
+ Reader is at the start of an array.
+
+
+
+
+ Reader is in an array.
+
+
+
+
+ The method has been called.
+
+
+
+
+ Reader has just read a value.
+
+
+
+
+ Reader is at the start of a constructor.
+
+
+
+
+ Reader is in a constructor.
+
+
+
+
+ An error occurred that prevents the read operation from continuing.
+
+
+
+
+ The end of the file has been reached successfully.
+
+
+
+
+ Gets the current reader state.
+
+ The current reader state.
+
+
+
+ Gets or sets a value indicating whether the source should be closed when this reader is closed.
+
+
+ true to close the source when this reader is closed; otherwise false. The default is true.
+
+
+
+
+ Gets or sets a value indicating whether multiple pieces of JSON content can
+ be read from a continuous stream without erroring.
+
+
+ true to support reading multiple pieces of JSON content; otherwise false.
+ The default is false.
+
+
+
+
+ Gets the quotation mark character used to enclose the value of a string.
+
+
+
+
+ Gets or sets how time zones are handled when reading JSON.
+
+
+
+
+ Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON.
+
+
+
+
+ Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text.
+
+
+
+
+ Gets or sets how custom date formatted strings are parsed when reading JSON.
+
+
+
+
+ Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a .
+ A null value means there is no maximum.
+ The default value is 64.
+
+
+
+
+ Gets the type of the current JSON token.
+
+
+
+
+ Gets the text value of the current JSON token.
+
+
+
+
+ Gets the .NET type for the current JSON token.
+
+
+
+
+ Gets the depth of the current token in the JSON document.
+
+ The depth of the current token in the JSON document.
+
+
+
+ Gets the path of the current JSON token.
+
+
+
+
+ Gets or sets the culture used when reading JSON. Defaults to .
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Reads the next JSON token from the source.
+
+ true if the next token was read successfully; false if there are no more tokens to read.
+
+
+
+ Reads the next JSON token from the source as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the source as a .
+
+ A . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the source as a [].
+
+ A [] or null if the next JSON token is null. This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the source as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the source as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the source as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the source as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the source as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Skips the children of the current token.
+
+
+
+
+ Sets the current token.
+
+ The new token.
+
+
+
+ Sets the current token and value.
+
+ The new token.
+ The value.
+
+
+
+ Sets the current token and value.
+
+ The new token.
+ The value.
+ A flag indicating whether the position index inside an array should be updated.
+
+
+
+ Sets the state based on current token type.
+
+
+
+
+ Releases unmanaged and - optionally - managed resources.
+
+ true to release both managed and unmanaged resources; false to release only unmanaged resources.
+
+
+
+ Changes the reader's state to .
+ If is set to true, the source is also closed.
+
+
+
+
+ The exception thrown when an error occurs while reading JSON text.
+
+
+
+
+ Gets the line number indicating where the error occurred.
+
+ The line number indicating where the error occurred.
+
+
+
+ Gets the line position indicating where the error occurred.
+
+ The line position indicating where the error occurred.
+
+
+
+ Gets the path to the JSON where the error occurred.
+
+ The path to the JSON where the error occurred.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class
+ with a specified error message.
+
+ The error message that explains the reason for the exception.
+
+
+
+ Initializes a new instance of the class
+ with a specified error message and a reference to the inner exception that is the cause of this exception.
+
+ The error message that explains the reason for the exception.
+ The exception that is the cause of the current exception, or null if no inner exception is specified.
+
+
+
+ Initializes a new instance of the class.
+
+ The that holds the serialized object data about the exception being thrown.
+ The that contains contextual information about the source or destination.
+ The parameter is null.
+ The class name is null or is zero (0).
+
+
+
+ Initializes a new instance of the class
+ with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception.
+
+ The error message that explains the reason for the exception.
+ The path to the JSON where the error occurred.
+ The line number indicating where the error occurred.
+ The line position indicating where the error occurred.
+ The exception that is the cause of the current exception, or null if no inner exception is specified.
+
+
+
+ Instructs the to always serialize the member, and to require that the member has a value.
+
+
+
+
+ The exception thrown when an error occurs during JSON serialization or deserialization.
+
+
+
+
+ Gets the line number indicating where the error occurred.
+
+ The line number indicating where the error occurred.
+
+
+
+ Gets the line position indicating where the error occurred.
+
+ The line position indicating where the error occurred.
+
+
+
+ Gets the path to the JSON where the error occurred.
+
+ The path to the JSON where the error occurred.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class
+ with a specified error message.
+
+ The error message that explains the reason for the exception.
+
+
+
+ Initializes a new instance of the class
+ with a specified error message and a reference to the inner exception that is the cause of this exception.
+
+ The error message that explains the reason for the exception.
+ The exception that is the cause of the current exception, or null if no inner exception is specified.
+
+
+
+ Initializes a new instance of the class.
+
+ The that holds the serialized object data about the exception being thrown.
+ The that contains contextual information about the source or destination.
+ The parameter is null.
+ The class name is null or is zero (0).
+
+
+
+ Initializes a new instance of the class
+ with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception.
+
+ The error message that explains the reason for the exception.
+ The path to the JSON where the error occurred.
+ The line number indicating where the error occurred.
+ The line position indicating where the error occurred.
+ The exception that is the cause of the current exception, or null if no inner exception is specified.
+
+
+
+ Serializes and deserializes objects into and from the JSON format.
+ The enables you to control how objects are encoded into JSON.
+
+
+
+
+ Occurs when the errors during serialization and deserialization.
+
+
+
+
+ Gets or sets the used by the serializer when resolving references.
+
+
+
+
+ Gets or sets the used by the serializer when resolving type names.
+
+
+
+
+ Gets or sets the used by the serializer when resolving type names.
+
+
+
+
+ Gets or sets the used by the serializer when writing trace messages.
+
+ The trace writer.
+
+
+
+ Gets or sets the equality comparer used by the serializer when comparing references.
+
+ The equality comparer.
+
+
+
+ Gets or sets how type name writing and reading is handled by the serializer.
+ The default value is .
+
+
+ should be used with caution when your application deserializes JSON from an external source.
+ Incoming types should be validated with a custom
+ when deserializing with a value other than .
+
+
+
+
+ Gets or sets how a type name assembly is written and resolved by the serializer.
+ The default value is .
+
+ The type name assembly format.
+
+
+
+ Gets or sets how a type name assembly is written and resolved by the serializer.
+ The default value is .
+
+ The type name assembly format.
+
+
+
+ Gets or sets how object references are preserved by the serializer.
+ The default value is .
+
+
+
+
+ Gets or sets how reference loops (e.g. a class referencing itself) is handled.
+ The default value is .
+
+
+
+
+ Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization.
+ The default value is .
+
+
+
+
+ Gets or sets how null values are handled during serialization and deserialization.
+ The default value is .
+
+
+
+
+ Gets or sets how default values are handled during serialization and deserialization.
+ The default value is .
+
+
+
+
+ Gets or sets how objects are created during deserialization.
+ The default value is .
+
+ The object creation handling.
+
+
+
+ Gets or sets how constructors are used during deserialization.
+ The default value is .
+
+ The constructor handling.
+
+
+
+ Gets or sets how metadata properties are used during deserialization.
+ The default value is .
+
+ The metadata properties handling.
+
+
+
+ Gets a collection that will be used during serialization.
+
+ Collection that will be used during serialization.
+
+
+
+ Gets or sets the contract resolver used by the serializer when
+ serializing .NET objects to JSON and vice versa.
+
+
+
+
+ Gets or sets the used by the serializer when invoking serialization callback methods.
+
+ The context.
+
+
+
+ Indicates how JSON text output is formatted.
+ The default value is .
+
+
+
+
+ Gets or sets how dates are written to JSON text.
+ The default value is .
+
+
+
+
+ Gets or sets how time zones are handled during serialization and deserialization.
+ The default value is .
+
+
+
+
+ Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON.
+ The default value is .
+
+
+
+
+ Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text.
+ The default value is .
+
+
+
+
+ Gets or sets how special floating point numbers, e.g. ,
+ and ,
+ are written as JSON text.
+ The default value is .
+
+
+
+
+ Gets or sets how strings are escaped when writing JSON text.
+ The default value is .
+
+
+
+
+ Gets or sets how and values are formatted when writing JSON text,
+ and the expected date format when reading JSON text.
+ The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK".
+
+
+
+
+ Gets or sets the culture used when reading JSON.
+ The default value is .
+
+
+
+
+ Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a .
+ A null value means there is no maximum.
+ The default value is 64.
+
+
+
+
+ Gets a value indicating whether there will be a check for additional JSON content after deserializing an object.
+ The default value is false.
+
+
+ true if there will be a check for additional JSON content after deserializing an object; otherwise, false.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Creates a new instance.
+ The will not use default settings
+ from .
+
+
+ A new instance.
+ The will not use default settings
+ from .
+
+
+
+
+ Creates a new instance using the specified .
+ The will not use default settings
+ from .
+
+ The settings to be applied to the .
+
+ A new instance using the specified .
+ The will not use default settings
+ from .
+
+
+
+
+ Creates a new instance.
+ The will use default settings
+ from .
+
+
+ A new instance.
+ The will use default settings
+ from .
+
+
+
+
+ Creates a new instance using the specified .
+ The will use default settings
+ from as well as the specified .
+
+ The settings to be applied to the .
+
+ A new instance using the specified .
+ The will use default settings
+ from as well as the specified .
+
+
+
+
+ Populates the JSON values onto the target object.
+
+ The that contains the JSON structure to read values from.
+ The target object to populate values onto.
+
+
+
+ Populates the JSON values onto the target object.
+
+ The that contains the JSON structure to read values from.
+ The target object to populate values onto.
+
+
+
+ Deserializes the JSON structure contained by the specified .
+
+ The that contains the JSON structure to deserialize.
+ The being deserialized.
+
+
+
+ Deserializes the JSON structure contained by the specified
+ into an instance of the specified type.
+
+ The containing the object.
+ The of object being deserialized.
+ The instance of being deserialized.
+
+
+
+ Deserializes the JSON structure contained by the specified
+ into an instance of the specified type.
+
+ The containing the object.
+ The type of the object to deserialize.
+ The instance of being deserialized.
+
+
+
+ Deserializes the JSON structure contained by the specified
+ into an instance of the specified type.
+
+ The containing the object.
+ The of object being deserialized.
+ The instance of being deserialized.
+
+
+
+ Serializes the specified and writes the JSON structure
+ using the specified .
+
+ The used to write the JSON structure.
+ The to serialize.
+
+
+
+ Serializes the specified and writes the JSON structure
+ using the specified .
+
+ The used to write the JSON structure.
+ The to serialize.
+
+ The type of the value being serialized.
+ This parameter is used when is to write out the type name if the type of the value does not match.
+ Specifying the type is optional.
+
+
+
+
+ Serializes the specified and writes the JSON structure
+ using the specified .
+
+ The used to write the JSON structure.
+ The to serialize.
+
+ The type of the value being serialized.
+ This parameter is used when is Auto to write out the type name if the type of the value does not match.
+ Specifying the type is optional.
+
+
+
+
+ Serializes the specified and writes the JSON structure
+ using the specified .
+
+ The used to write the JSON structure.
+ The to serialize.
+
+
+
+ Specifies the settings on a object.
+
+
+
+
+ Gets or sets how reference loops (e.g. a class referencing itself) are handled.
+ The default value is .
+
+ Reference loop handling.
+
+
+
+ Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization.
+ The default value is .
+
+ Missing member handling.
+
+
+
+ Gets or sets how objects are created during deserialization.
+ The default value is .
+
+ The object creation handling.
+
+
+
+ Gets or sets how null values are handled during serialization and deserialization.
+ The default value is .
+
+ Null value handling.
+
+
+
+ Gets or sets how default values are handled during serialization and deserialization.
+ The default value is .
+
+ The default value handling.
+
+
+
+ Gets or sets a collection that will be used during serialization.
+
+ The converters.
+
+
+
+ Gets or sets how object references are preserved by the serializer.
+ The default value is .
+
+ The preserve references handling.
+
+
+
+ Gets or sets how type name writing and reading is handled by the serializer.
+ The default value is .
+
+
+ should be used with caution when your application deserializes JSON from an external source.
+ Incoming types should be validated with a custom
+ when deserializing with a value other than .
+
+ The type name handling.
+
+
+
+ Gets or sets how metadata properties are used during deserialization.
+ The default value is .
+
+ The metadata properties handling.
+
+
+
+ Gets or sets how a type name assembly is written and resolved by the serializer.
+ The default value is .
+
+ The type name assembly format.
+
+
+
+ Gets or sets how a type name assembly is written and resolved by the serializer.
+ The default value is .
+
+ The type name assembly format.
+
+
+
+ Gets or sets how constructors are used during deserialization.
+ The default value is .
+
+ The constructor handling.
+
+
+
+ Gets or sets the contract resolver used by the serializer when
+ serializing .NET objects to JSON and vice versa.
+
+ The contract resolver.
+
+
+
+ Gets or sets the equality comparer used by the serializer when comparing references.
+
+ The equality comparer.
+
+
+
+ Gets or sets the used by the serializer when resolving references.
+
+ The reference resolver.
+
+
+
+ Gets or sets a function that creates the used by the serializer when resolving references.
+
+ A function that creates the used by the serializer when resolving references.
+
+
+
+ Gets or sets the used by the serializer when writing trace messages.
+
+ The trace writer.
+
+
+
+ Gets or sets the used by the serializer when resolving type names.
+
+ The binder.
+
+
+
+ Gets or sets the used by the serializer when resolving type names.
+
+ The binder.
+
+
+
+ Gets or sets the error handler called during serialization and deserialization.
+
+ The error handler called during serialization and deserialization.
+
+
+
+ Gets or sets the used by the serializer when invoking serialization callback methods.
+
+ The context.
+
+
+
+ Gets or sets how and values are formatted when writing JSON text,
+ and the expected date format when reading JSON text.
+ The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK".
+
+
+
+
+ Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a .
+ A null value means there is no maximum.
+ The default value is 64.
+
+
+
+
+ Indicates how JSON text output is formatted.
+ The default value is .
+
+
+
+
+ Gets or sets how dates are written to JSON text.
+ The default value is .
+
+
+
+
+ Gets or sets how time zones are handled during serialization and deserialization.
+ The default value is .
+
+
+
+
+ Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON.
+ The default value is .
+
+
+
+
+ Gets or sets how special floating point numbers, e.g. ,
+ and ,
+ are written as JSON.
+ The default value is .
+
+
+
+
+ Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text.
+ The default value is .
+
+
+
+
+ Gets or sets how strings are escaped when writing JSON text.
+ The default value is .
+
+
+
+
+ Gets or sets the culture used when reading JSON.
+ The default value is .
+
+
+
+
+ Gets a value indicating whether there will be a check for additional content after deserializing an object.
+ The default value is false.
+
+
+ true if there will be a check for additional content after deserializing an object; otherwise, false.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class
+ using values copied from the passed in .
+
+
+
+
+ Represents a reader that provides fast, non-cached, forward-only access to JSON text data.
+
+
+
+
+ Asynchronously reads the next JSON token from the source.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns true if the next token was read successfully; false if there are no more tokens to read.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously reads the next JSON token from the source as a [].
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the []. This result will be null at the end of an array.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously reads the next JSON token from the source as a .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the . This result will be null at the end of an array.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Initializes a new instance of the class with the specified .
+
+ The containing the JSON data to read.
+
+
+
+ Gets or sets the reader's property name table.
+
+
+
+
+ Gets or sets the reader's character buffer pool.
+
+
+
+
+ Reads the next JSON token from the underlying .
+
+
+ true if the next token was read successfully; false if there are no more tokens to read.
+
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the underlying as a .
+
+ A . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the underlying as a [].
+
+ A [] or null if the next JSON token is null. This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Changes the reader's state to .
+ If is set to true, the underlying is also closed.
+
+
+
+
+ Gets a value indicating whether the class can return line information.
+
+
+ true if and can be provided; otherwise, false.
+
+
+
+
+ Gets the current line number.
+
+
+ The current line number or 0 if no line information is available (for example, returns false).
+
+
+
+
+ Gets the current line position.
+
+
+ The current line position or 0 if no line information is available (for example, returns false).
+
+
+
+
+ Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data.
+
+
+
+
+ Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the JSON value delimiter.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the specified end token.
+
+ The end token to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously closes this writer.
+ If is set to true, the destination is also closed.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the end of the current JSON object or array.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes indent characters.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes an indent space.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes raw JSON without changing the writer's state.
+
+ The raw JSON to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a null value.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the property name of a name/value pair of a JSON object.
+
+ The name of the property.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the property name of a name/value pair of a JSON object.
+
+ The name of the property.
+ A flag to indicate whether the text should be escaped when it is written as a JSON property name.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the beginning of a JSON array.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the beginning of a JSON object.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the start of a constructor with the given name.
+
+ The name of the constructor.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes an undefined value.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the given white space.
+
+ The string of white space characters.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a [] value.
+
+ The [] value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a comment /*...*/ containing the specified text.
+
+ Text to place inside the comment.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the end of an array.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the end of a constructor.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the end of a JSON object.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes raw JSON where a value is expected and updates the writer's state.
+
+ The raw JSON to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Gets or sets the writer's character array pool.
+
+
+
+
+ Gets or sets how many s to write for each level in the hierarchy when is set to .
+
+
+
+
+ Gets or sets which character to use to quote attribute values.
+
+
+
+
+ Gets or sets which character to use for indenting when is set to .
+
+
+
+
+ Gets or sets a value indicating whether object names will be surrounded with quotes.
+
+
+
+
+ Initializes a new instance of the class using the specified .
+
+ The to write to.
+
+
+
+ Flushes whatever is in the buffer to the underlying and also flushes the underlying .
+
+
+
+
+ Closes this writer.
+ If is set to true, the underlying is also closed.
+ If is set to true, the JSON is auto-completed.
+
+
+
+
+ Writes the beginning of a JSON object.
+
+
+
+
+ Writes the beginning of a JSON array.
+
+
+
+
+ Writes the start of a constructor with the given name.
+
+ The name of the constructor.
+
+
+
+ Writes the specified end token.
+
+ The end token to write.
+
+
+
+ Writes the property name of a name/value pair on a JSON object.
+
+ The name of the property.
+
+
+
+ Writes the property name of a name/value pair on a JSON object.
+
+ The name of the property.
+ A flag to indicate whether the text should be escaped when it is written as a JSON property name.
+
+
+
+ Writes indent characters.
+
+
+
+
+ Writes the JSON value delimiter.
+
+
+
+
+ Writes an indent space.
+
+
+
+
+ Writes a value.
+ An error will raised if the value cannot be written as a single JSON token.
+
+ The value to write.
+
+
+
+ Writes a null value.
+
+
+
+
+ Writes an undefined value.
+
+
+
+
+ Writes raw JSON.
+
+ The raw JSON to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a [] value.
+
+ The [] value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a comment /*...*/ containing the specified text.
+
+ Text to place inside the comment.
+
+
+
+ Writes the given white space.
+
+ The string of white space characters.
+
+
+
+ Specifies the type of JSON token.
+
+
+
+
+ This is returned by the if a read method has not been called.
+
+
+
+
+ An object start token.
+
+
+
+
+ An array start token.
+
+
+
+
+ A constructor start token.
+
+
+
+
+ An object property name.
+
+
+
+
+ A comment.
+
+
+
+
+ Raw JSON.
+
+
+
+
+ An integer.
+
+
+
+
+ A float.
+
+
+
+
+ A string.
+
+
+
+
+ A boolean.
+
+
+
+
+ A null token.
+
+
+
+
+ An undefined token.
+
+
+
+
+ An object end token.
+
+
+
+
+ An array end token.
+
+
+
+
+ A constructor end token.
+
+
+
+
+ A Date.
+
+
+
+
+ Byte data.
+
+
+
+
+
+ Represents a reader that provides validation.
+
+
+ JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+ Sets an event handler for receiving schema validation errors.
+
+
+
+
+ Gets the text value of the current JSON token.
+
+
+
+
+
+ Gets the depth of the current token in the JSON document.
+
+ The depth of the current token in the JSON document.
+
+
+
+ Gets the path of the current JSON token.
+
+
+
+
+ Gets the quotation mark character used to enclose the value of a string.
+
+
+
+
+
+ Gets the type of the current JSON token.
+
+
+
+
+
+ Gets the .NET type for the current JSON token.
+
+
+
+
+
+ Initializes a new instance of the class that
+ validates the content returned from the given .
+
+ The to read from while validating.
+
+
+
+ Gets or sets the schema.
+
+ The schema.
+
+
+
+ Gets the used to construct this .
+
+ The specified in the constructor.
+
+
+
+ Changes the reader's state to .
+ If is set to true, the underlying is also closed.
+
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of .
+
+
+
+ Reads the next JSON token from the underlying as a [].
+
+
+ A [] or null if the next JSON token is null.
+
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of .
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of .
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of .
+
+
+
+ Reads the next JSON token from the underlying as a .
+
+ A . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of .
+
+
+
+ Reads the next JSON token from the underlying .
+
+
+ true if the next token was read successfully; false if there are no more tokens to read.
+
+
+
+
+ Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data.
+
+
+
+
+ Asynchronously closes this writer.
+ If is set to true, the destination is also closed.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the specified end token.
+
+ The end token to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes indent characters.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the JSON value delimiter.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes an indent space.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes raw JSON without changing the writer's state.
+
+ The raw JSON to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the end of the current JSON object or array.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the end of an array.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the end of a constructor.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the end of a JSON object.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a null value.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the property name of a name/value pair of a JSON object.
+
+ The name of the property.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the property name of a name/value pair of a JSON object.
+
+ The name of the property.
+ A flag to indicate whether the text should be escaped when it is written as a JSON property name.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the beginning of a JSON array.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a comment /*...*/ containing the specified text.
+
+ Text to place inside the comment.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes raw JSON where a value is expected and updates the writer's state.
+
+ The raw JSON to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the start of a constructor with the given name.
+
+ The name of the constructor.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the beginning of a JSON object.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the current token.
+
+ The to read the token from.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the current token.
+
+ The to read the token from.
+ A flag indicating whether the current token's children should be written.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the token and its value.
+
+ The to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the token and its value.
+
+ The to write.
+
+ The value to write.
+ A value is only required for tokens that have an associated value, e.g. the property name for .
+ null can be passed to the method for tokens that don't have a value, e.g. .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a [] value.
+
+ The [] value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes an undefined value.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the given white space.
+
+ The string of white space characters.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously ets the state of the .
+
+ The being written.
+ The value being written.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Gets or sets a value indicating whether the destination should be closed when this writer is closed.
+
+
+ true to close the destination when this writer is closed; otherwise false. The default is true.
+
+
+
+
+ Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed.
+
+
+ true to auto-complete the JSON when this writer is closed; otherwise false. The default is true.
+
+
+
+
+ Gets the top.
+
+ The top.
+
+
+
+ Gets the state of the writer.
+
+
+
+
+ Gets the path of the writer.
+
+
+
+
+ Gets or sets a value indicating how JSON text output should be formatted.
+
+
+
+
+ Gets or sets how dates are written to JSON text.
+
+
+
+
+ Gets or sets how time zones are handled when writing JSON text.
+
+
+
+
+ Gets or sets how strings are escaped when writing JSON text.
+
+
+
+
+ Gets or sets how special floating point numbers, e.g. ,
+ and ,
+ are written to JSON text.
+
+
+
+
+ Gets or sets how and values are formatted when writing JSON text.
+
+
+
+
+ Gets or sets the culture used when writing JSON. Defaults to .
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Flushes whatever is in the buffer to the destination and also flushes the destination.
+
+
+
+
+ Closes this writer.
+ If is set to true, the destination is also closed.
+ If is set to true, the JSON is auto-completed.
+
+
+
+
+ Writes the beginning of a JSON object.
+
+
+
+
+ Writes the end of a JSON object.
+
+
+
+
+ Writes the beginning of a JSON array.
+
+
+
+
+ Writes the end of an array.
+
+
+
+
+ Writes the start of a constructor with the given name.
+
+ The name of the constructor.
+
+
+
+ Writes the end constructor.
+
+
+
+
+ Writes the property name of a name/value pair of a JSON object.
+
+ The name of the property.
+
+
+
+ Writes the property name of a name/value pair of a JSON object.
+
+ The name of the property.
+ A flag to indicate whether the text should be escaped when it is written as a JSON property name.
+
+
+
+ Writes the end of the current JSON object or array.
+
+
+
+
+ Writes the current token and its children.
+
+ The to read the token from.
+
+
+
+ Writes the current token.
+
+ The to read the token from.
+ A flag indicating whether the current token's children should be written.
+
+
+
+ Writes the token and its value.
+
+ The to write.
+
+ The value to write.
+ A value is only required for tokens that have an associated value, e.g. the property name for .
+ null can be passed to the method for tokens that don't have a value, e.g. .
+
+
+
+
+ Writes the token.
+
+ The to write.
+
+
+
+ Writes the specified end token.
+
+ The end token to write.
+
+
+
+ Writes indent characters.
+
+
+
+
+ Writes the JSON value delimiter.
+
+
+
+
+ Writes an indent space.
+
+
+
+
+ Writes a null value.
+
+
+
+
+ Writes an undefined value.
+
+
+
+
+ Writes raw JSON without changing the writer's state.
+
+ The raw JSON to write.
+
+
+
+ Writes raw JSON where a value is expected and updates the writer's state.
+
+ The raw JSON to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a [] value.
+
+ The [] value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+ An error will raised if the value cannot be written as a single JSON token.
+
+ The value to write.
+
+
+
+ Writes a comment /*...*/ containing the specified text.
+
+ Text to place inside the comment.
+
+
+
+ Writes the given white space.
+
+ The string of white space characters.
+
+
+
+ Releases unmanaged and - optionally - managed resources.
+
+ true to release both managed and unmanaged resources; false to release only unmanaged resources.
+
+
+
+ Sets the state of the .
+
+ The being written.
+ The value being written.
+
+
+
+ The exception thrown when an error occurs while writing JSON text.
+
+
+
+
+ Gets the path to the JSON where the error occurred.
+
+ The path to the JSON where the error occurred.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class
+ with a specified error message.
+
+ The error message that explains the reason for the exception.
+
+
+
+ Initializes a new instance of the class
+ with a specified error message and a reference to the inner exception that is the cause of this exception.
+
+ The error message that explains the reason for the exception.
+ The exception that is the cause of the current exception, or null if no inner exception is specified.
+
+
+
+ Initializes a new instance of the class.
+
+ The that holds the serialized object data about the exception being thrown.
+ The that contains contextual information about the source or destination.
+ The parameter is null.
+ The class name is null or is zero (0).
+
+
+
+ Initializes a new instance of the class
+ with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception.
+
+ The error message that explains the reason for the exception.
+ The path to the JSON where the error occurred.
+ The exception that is the cause of the current exception, or null if no inner exception is specified.
+
+
+
+ Specifies how JSON comments are handled when loading JSON.
+
+
+
+
+ Ignore comments.
+
+
+
+
+ Load comments as a with type .
+
+
+
+
+ Specifies how duplicate property names are handled when loading JSON.
+
+
+
+
+ Replace the existing value when there is a duplicate property. The value of the last property in the JSON object will be used.
+
+
+
+
+ Ignore the new value when there is a duplicate property. The value of the first property in the JSON object will be used.
+
+
+
+
+ Throw a when a duplicate property is encountered.
+
+
+
+
+ Contains the LINQ to JSON extension methods.
+
+
+
+
+ Returns a collection of tokens that contains the ancestors of every token in the source collection.
+
+ The type of the objects in source, constrained to .
+ An of that contains the source collection.
+ An of that contains the ancestors of every token in the source collection.
+
+
+
+ Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection.
+
+ The type of the objects in source, constrained to .
+ An of that contains the source collection.
+ An of that contains every token in the source collection, the ancestors of every token in the source collection.
+
+
+
+ Returns a collection of tokens that contains the descendants of every token in the source collection.
+
+ The type of the objects in source, constrained to .
+ An of that contains the source collection.
+ An of that contains the descendants of every token in the source collection.
+
+
+
+ Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection.
+
+ The type of the objects in source, constrained to .
+ An of that contains the source collection.
+ An of that contains every token in the source collection, and the descendants of every token in the source collection.
+
+
+
+ Returns a collection of child properties of every object in the source collection.
+
+ An of that contains the source collection.
+ An of that contains the properties of every object in the source collection.
+
+
+
+ Returns a collection of child values of every object in the source collection with the given key.
+
+ An of that contains the source collection.
+ The token key.
+ An of that contains the values of every token in the source collection with the given key.
+
+
+
+ Returns a collection of child values of every object in the source collection.
+
+ An of that contains the source collection.
+ An of that contains the values of every token in the source collection.
+
+
+
+ Returns a collection of converted child values of every object in the source collection with the given key.
+
+ The type to convert the values to.
+ An of that contains the source collection.
+ The token key.
+ An that contains the converted values of every token in the source collection with the given key.
+
+
+
+ Returns a collection of converted child values of every object in the source collection.
+
+ The type to convert the values to.
+ An of that contains the source collection.
+ An that contains the converted values of every token in the source collection.
+
+
+
+ Converts the value.
+
+ The type to convert the value to.
+ A cast as a of .
+ A converted value.
+
+
+
+ Converts the value.
+
+ The source collection type.
+ The type to convert the value to.
+ A cast as a of .
+ A converted value.
+
+
+
+ Returns a collection of child tokens of every array in the source collection.
+
+ The source collection type.
+ An of that contains the source collection.
+ An of that contains the values of every token in the source collection.
+
+
+
+ Returns a collection of converted child tokens of every array in the source collection.
+
+ An of that contains the source collection.
+ The type to convert the values to.
+ The source collection type.
+ An that contains the converted values of every token in the source collection.
+
+
+
+ Returns the input typed as .
+
+ An of that contains the source collection.
+ The input typed as .
+
+
+
+ Returns the input typed as .
+
+ The source collection type.
+ An of that contains the source collection.
+ The input typed as .
+
+
+
+ Represents a collection of objects.
+
+ The type of token.
+
+
+
+ Gets the of with the specified key.
+
+
+
+
+
+ Represents a JSON array.
+
+
+
+
+
+
+
+ Writes this token to a asynchronously.
+
+ A into which this method will write.
+ The token to monitor for cancellation requests.
+ A collection of which will be used when writing the token.
+ A that represents the asynchronous write operation.
+
+
+
+ Asynchronously loads a from a .
+
+ A that will be read for the content of the .
+ If this is null, default load settings will be used.
+ The token to monitor for cancellation requests. The default value is .
+ A representing the asynchronous load. The property contains the JSON that was read from the specified .
+
+
+
+ Asynchronously loads a from a .
+
+ A that will be read for the content of the .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ The token to monitor for cancellation requests. The default value is .
+ A representing the asynchronous load. The property contains the JSON that was read from the specified .
+
+
+
+ Gets the container's children tokens.
+
+ The container's children tokens.
+
+
+
+ Gets the node type for this .
+
+ The type.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class from another object.
+
+ A object to copy from.
+
+
+
+ Initializes a new instance of the class with the specified content.
+
+ The contents of the array.
+
+
+
+ Initializes a new instance of the class with the specified content.
+
+ The contents of the array.
+
+
+
+ Loads an from a .
+
+ A that will be read for the content of the .
+ A that contains the JSON that was read from the specified .
+
+
+
+ Loads an from a .
+
+ A that will be read for the content of the .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ A that contains the JSON that was read from the specified .
+
+
+
+ Load a from a string that contains JSON.
+
+ A that contains JSON.
+ A populated from the string that contains JSON.
+
+
+
+
+
+
+ Load a from a string that contains JSON.
+
+ A that contains JSON.
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ A populated from the string that contains JSON.
+
+
+
+
+
+
+ Creates a from an object.
+
+ The object that will be used to create .
+ A with the values of the specified object.
+
+
+
+ Creates a from an object.
+
+ The object that will be used to create .
+ The that will be used to read the object.
+ A with the values of the specified object.
+
+
+
+ Writes this token to a .
+
+ A into which this method will write.
+ A collection of which will be used when writing the token.
+
+
+
+ Gets the with the specified key.
+
+ The with the specified key.
+
+
+
+ Gets or sets the at the specified index.
+
+
+
+
+
+ Determines the index of a specific item in the .
+
+ The object to locate in the .
+
+ The index of if found in the list; otherwise, -1.
+
+
+
+
+ Inserts an item to the at the specified index.
+
+ The zero-based index at which should be inserted.
+ The object to insert into the .
+
+ is not a valid index in the .
+
+
+
+
+ Removes the item at the specified index.
+
+ The zero-based index of the item to remove.
+
+ is not a valid index in the .
+
+
+
+
+ Returns an enumerator that iterates through the collection.
+
+
+ A of that can be used to iterate through the collection.
+
+
+
+
+ Adds an item to the .
+
+ The object to add to the .
+
+
+
+ Removes all items from the .
+
+
+
+
+ Determines whether the contains a specific value.
+
+ The object to locate in the .
+
+ true if is found in the ; otherwise, false.
+
+
+
+
+ Copies the elements of the to an array, starting at a particular array index.
+
+ The array.
+ Index of the array.
+
+
+
+ Gets a value indicating whether the is read-only.
+
+ true if the is read-only; otherwise, false.
+
+
+
+ Removes the first occurrence of a specific object from the .
+
+ The object to remove from the .
+
+ true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original .
+
+
+
+
+ Represents a JSON constructor.
+
+
+
+
+ Writes this token to a asynchronously.
+
+ A into which this method will write.
+ The token to monitor for cancellation requests.
+ A collection of which will be used when writing the token.
+ A that represents the asynchronous write operation.
+
+
+
+ Asynchronously loads a from a .
+
+ A that will be read for the content of the .
+ The token to monitor for cancellation requests. The default value is .
+
+ A that represents the asynchronous load. The
+ property returns a that contains the JSON that was read from the specified .
+
+
+
+ Asynchronously loads a from a .
+
+ A that will be read for the content of the .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ The token to monitor for cancellation requests. The default value is .
+
+ A that represents the asynchronous load. The
+ property returns a that contains the JSON that was read from the specified .
+
+
+
+ Gets the container's children tokens.
+
+ The container's children tokens.
+
+
+
+ Gets or sets the name of this constructor.
+
+ The constructor name.
+
+
+
+ Gets the node type for this .
+
+ The type.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class from another object.
+
+ A object to copy from.
+
+
+
+ Initializes a new instance of the class with the specified name and content.
+
+ The constructor name.
+ The contents of the constructor.
+
+
+
+ Initializes a new instance of the class with the specified name and content.
+
+ The constructor name.
+ The contents of the constructor.
+
+
+
+ Initializes a new instance of the class with the specified name.
+
+ The constructor name.
+
+
+
+ Writes this token to a .
+
+ A into which this method will write.
+ A collection of which will be used when writing the token.
+
+
+
+ Gets the with the specified key.
+
+ The with the specified key.
+
+
+
+ Loads a from a .
+
+ A that will be read for the content of the .
+ A that contains the JSON that was read from the specified .
+
+
+
+ Loads a from a .
+
+ A that will be read for the content of the .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ A that contains the JSON that was read from the specified .
+
+
+
+ Represents a token that can contain other tokens.
+
+
+
+
+ Occurs when the list changes or an item in the list changes.
+
+
+
+
+ Occurs before an item is added to the collection.
+
+
+
+
+ Occurs when the items list of the collection has changed, or the collection is reset.
+
+
+
+
+ Gets the container's children tokens.
+
+ The container's children tokens.
+
+
+
+ Raises the event.
+
+ The instance containing the event data.
+
+
+
+ Raises the event.
+
+ The instance containing the event data.
+
+
+
+ Raises the event.
+
+ The instance containing the event data.
+
+
+
+ Gets a value indicating whether this token has child tokens.
+
+
+ true if this token has child values; otherwise, false.
+
+
+
+
+ Get the first child token of this token.
+
+
+ A containing the first child token of the .
+
+
+
+
+ Get the last child token of this token.
+
+
+ A containing the last child token of the .
+
+
+
+
+ Returns a collection of the child tokens of this token, in document order.
+
+
+ An of containing the child tokens of this , in document order.
+
+
+
+
+ Returns a collection of the child values of this token, in document order.
+
+ The type to convert the values to.
+
+ A containing the child values of this , in document order.
+
+
+
+
+ Returns a collection of the descendant tokens for this token in document order.
+
+ An of containing the descendant tokens of the .
+
+
+
+ Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order.
+
+ An of containing this token, and all the descendant tokens of the .
+
+
+
+ Adds the specified content as children of this .
+
+ The content to be added.
+
+
+
+ Adds the specified content as the first children of this .
+
+ The content to be added.
+
+
+
+ Creates a that can be used to add tokens to the .
+
+ A that is ready to have content written to it.
+
+
+
+ Replaces the child nodes of this token with the specified content.
+
+ The content.
+
+
+
+ Removes the child nodes from this token.
+
+
+
+
+ Merge the specified content into this .
+
+ The content to be merged.
+
+
+
+ Merge the specified content into this using .
+
+ The content to be merged.
+ The used to merge the content.
+
+
+
+ Gets the count of child JSON tokens.
+
+ The count of child JSON tokens.
+
+
+
+ Represents a collection of objects.
+
+ The type of token.
+
+
+
+ An empty collection of objects.
+
+
+
+
+ Initializes a new instance of the struct.
+
+ The enumerable.
+
+
+
+ Returns an enumerator that can be used to iterate through the collection.
+
+
+ A that can be used to iterate through the collection.
+
+
+
+
+ Gets the of with the specified key.
+
+
+
+
+
+ Determines whether the specified is equal to this instance.
+
+ The to compare with this instance.
+
+ true if the specified is equal to this instance; otherwise, false.
+
+
+
+
+ Determines whether the specified is equal to this instance.
+
+ The to compare with this instance.
+
+ true if the specified is equal to this instance; otherwise, false.
+
+
+
+
+ Returns a hash code for this instance.
+
+
+ A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table.
+
+
+
+
+ Represents a JSON object.
+
+
+
+
+
+
+
+ Writes this token to a asynchronously.
+
+ A into which this method will write.
+ The token to monitor for cancellation requests.
+ A collection of which will be used when writing the token.
+ A that represents the asynchronous write operation.
+
+
+
+ Asynchronously loads a from a .
+
+ A that will be read for the content of the .
+ The token to monitor for cancellation requests. The default value is .
+
+ A that represents the asynchronous load. The
+ property returns a that contains the JSON that was read from the specified .
+
+
+
+ Asynchronously loads a from a .
+
+ A that will be read for the content of the .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ The token to monitor for cancellation requests. The default value is .
+
+ A that represents the asynchronous load. The
+ property returns a that contains the JSON that was read from the specified .
+
+
+
+ Gets the container's children tokens.
+
+ The container's children tokens.
+
+
+
+ Occurs when a property value changes.
+
+
+
+
+ Occurs when a property value is changing.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class from another object.
+
+ A object to copy from.
+
+
+
+ Initializes a new instance of the class with the specified content.
+
+ The contents of the object.
+
+
+
+ Initializes a new instance of the class with the specified content.
+
+ The contents of the object.
+
+
+
+ Gets the node type for this .
+
+ The type.
+
+
+
+ Gets an of of this object's properties.
+
+ An of of this object's properties.
+
+
+
+ Gets a with the specified name.
+
+ The property name.
+ A with the specified name or null.
+
+
+
+ Gets the with the specified name.
+ The exact name will be searched for first and if no matching property is found then
+ the will be used to match a property.
+
+ The property name.
+ One of the enumeration values that specifies how the strings will be compared.
+ A matched with the specified name or null.
+
+
+
+ Gets a of of this object's property values.
+
+ A of of this object's property values.
+
+
+
+ Gets the with the specified key.
+
+ The with the specified key.
+
+
+
+ Gets or sets the with the specified property name.
+
+
+
+
+
+ Loads a from a .
+
+ A that will be read for the content of the .
+ A that contains the JSON that was read from the specified .
+
+ is not valid JSON.
+
+
+
+
+ Loads a from a .
+
+ A that will be read for the content of the .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ A that contains the JSON that was read from the specified .
+
+ is not valid JSON.
+
+
+
+
+ Load a from a string that contains JSON.
+
+ A that contains JSON.
+ A populated from the string that contains JSON.
+
+ is not valid JSON.
+
+
+
+
+
+
+
+ Load a from a string that contains JSON.
+
+ A that contains JSON.
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ A populated from the string that contains JSON.
+
+ is not valid JSON.
+
+
+
+
+
+
+
+ Creates a from an object.
+
+ The object that will be used to create .
+ A with the values of the specified object.
+
+
+
+ Creates a from an object.
+
+ The object that will be used to create .
+ The that will be used to read the object.
+ A with the values of the specified object.
+
+
+
+ Writes this token to a .
+
+ A into which this method will write.
+ A collection of which will be used when writing the token.
+
+
+
+ Gets the with the specified property name.
+
+ Name of the property.
+ The with the specified property name.
+
+
+
+ Gets the with the specified property name.
+ The exact property name will be searched for first and if no matching property is found then
+ the will be used to match a property.
+
+ Name of the property.
+ One of the enumeration values that specifies how the strings will be compared.
+ The with the specified property name.
+
+
+
+ Tries to get the with the specified property name.
+ The exact property name will be searched for first and if no matching property is found then
+ the will be used to match a property.
+
+ Name of the property.
+ The value.
+ One of the enumeration values that specifies how the strings will be compared.
+ true if a value was successfully retrieved; otherwise, false.
+
+
+
+ Adds the specified property name.
+
+ Name of the property.
+ The value.
+
+
+
+ Determines whether the JSON object has the specified property name.
+
+ Name of the property.
+ true if the JSON object has the specified property name; otherwise, false.
+
+
+
+ Removes the property with the specified name.
+
+ Name of the property.
+ true if item was successfully removed; otherwise, false.
+
+
+
+ Tries to get the with the specified property name.
+
+ Name of the property.
+ The value.
+ true if a value was successfully retrieved; otherwise, false.
+
+
+
+ Returns an enumerator that can be used to iterate through the collection.
+
+
+ A that can be used to iterate through the collection.
+
+
+
+
+ Raises the event with the provided arguments.
+
+ Name of the property.
+
+
+
+ Raises the event with the provided arguments.
+
+ Name of the property.
+
+
+
+ Returns the responsible for binding operations performed on this object.
+
+ The expression tree representation of the runtime value.
+
+ The to bind this object.
+
+
+
+
+ Represents a JSON property.
+
+
+
+
+ Writes this token to a asynchronously.
+
+ A into which this method will write.
+ The token to monitor for cancellation requests.
+ A collection of which will be used when writing the token.
+ A that represents the asynchronous write operation.
+
+
+
+ Asynchronously loads a from a .
+
+ A that will be read for the content of the .
+ The token to monitor for cancellation requests. The default value is .
+ A representing the asynchronous creation. The
+ property returns a that contains the JSON that was read from the specified .
+
+
+
+ Asynchronously loads a from a .
+
+ A that will be read for the content of the .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ The token to monitor for cancellation requests. The default value is .
+ A representing the asynchronous creation. The
+ property returns a that contains the JSON that was read from the specified .
+
+
+
+ Gets the container's children tokens.
+
+ The container's children tokens.
+
+
+
+ Gets the property name.
+
+ The property name.
+
+
+
+ Gets or sets the property value.
+
+ The property value.
+
+
+
+ Initializes a new instance of the class from another object.
+
+ A object to copy from.
+
+
+
+ Gets the node type for this .
+
+ The type.
+
+
+
+ Initializes a new instance of the class.
+
+ The property name.
+ The property content.
+
+
+
+ Initializes a new instance of the class.
+
+ The property name.
+ The property content.
+
+
+
+ Writes this token to a .
+
+ A into which this method will write.
+ A collection of which will be used when writing the token.
+
+
+
+ Loads a from a .
+
+ A that will be read for the content of the .
+ A that contains the JSON that was read from the specified .
+
+
+
+ Loads a from a .
+
+ A that will be read for the content of the .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ A that contains the JSON that was read from the specified .
+
+
+
+ Represents a view of a .
+
+
+
+
+ Initializes a new instance of the class.
+
+ The name.
+
+
+
+ When overridden in a derived class, returns whether resetting an object changes its value.
+
+
+ true if resetting the component changes its value; otherwise, false.
+
+ The component to test for reset capability.
+
+
+
+ When overridden in a derived class, gets the current value of the property on a component.
+
+
+ The value of a property for a given component.
+
+ The component with the property for which to retrieve the value.
+
+
+
+ When overridden in a derived class, resets the value for this property of the component to the default value.
+
+ The component with the property value that is to be reset to the default value.
+
+
+
+ When overridden in a derived class, sets the value of the component to a different value.
+
+ The component with the property value that is to be set.
+ The new value.
+
+
+
+ When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted.
+
+
+ true if the property should be persisted; otherwise, false.
+
+ The component with the property to be examined for persistence.
+
+
+
+ When overridden in a derived class, gets the type of the component this property is bound to.
+
+
+ A that represents the type of component this property is bound to.
+ When the or
+
+ methods are invoked, the object specified might be an instance of this type.
+
+
+
+
+ When overridden in a derived class, gets a value indicating whether this property is read-only.
+
+
+ true if the property is read-only; otherwise, false.
+
+
+
+
+ When overridden in a derived class, gets the type of the property.
+
+
+ A that represents the type of the property.
+
+
+
+
+ Gets the hash code for the name of the member.
+
+
+
+ The hash code for the name of the member.
+
+
+
+
+ Represents a raw JSON string.
+
+
+
+
+ Asynchronously creates an instance of with the content of the reader's current token.
+
+ The reader.
+ The token to monitor for cancellation requests. The default value is .
+ A representing the asynchronous creation. The
+ property returns an instance of with the content of the reader's current token.
+
+
+
+ Initializes a new instance of the class from another object.
+
+ A object to copy from.
+
+
+
+ Initializes a new instance of the class.
+
+ The raw json.
+
+
+
+ Creates an instance of with the content of the reader's current token.
+
+ The reader.
+ An instance of with the content of the reader's current token.
+
+
+
+ Specifies the settings used when cloning JSON.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets a flag that indicates whether to copy annotations when cloning a .
+ The default value is true.
+
+
+ A flag that indicates whether to copy annotations when cloning a .
+
+
+
+
+ Specifies the settings used when loading JSON.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets how JSON comments are handled when loading JSON.
+ The default value is .
+
+ The JSON comment handling.
+
+
+
+ Gets or sets how JSON line info is handled when loading JSON.
+ The default value is .
+
+ The JSON line info handling.
+
+
+
+ Gets or sets how duplicate property names in JSON objects are handled when loading JSON.
+ The default value is .
+
+ The JSON duplicate property name handling.
+
+
+
+ Specifies the settings used when merging JSON.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the method used when merging JSON arrays.
+
+ The method used when merging JSON arrays.
+
+
+
+ Gets or sets how null value properties are merged.
+
+ How null value properties are merged.
+
+
+
+ Gets or sets the comparison used to match property names while merging.
+ The exact property name will be searched for first and if no matching property is found then
+ the will be used to match a property.
+
+ The comparison used to match property names while merging.
+
+
+
+ Specifies the settings used when selecting JSON.
+
+
+
+
+ Gets or sets a timeout that will be used when executing regular expressions.
+
+ The timeout that will be used when executing regular expressions.
+
+
+
+ Gets or sets a flag that indicates whether an error should be thrown if
+ no tokens are found when evaluating part of the expression.
+
+
+ A flag that indicates whether an error should be thrown if
+ no tokens are found when evaluating part of the expression.
+
+
+
+
+ Represents an abstract JSON token.
+
+
+
+
+ Writes this token to a asynchronously.
+
+ A into which this method will write.
+ The token to monitor for cancellation requests.
+ A collection of which will be used when writing the token.
+ A that represents the asynchronous write operation.
+
+
+
+ Writes this token to a asynchronously.
+
+ A into which this method will write.
+ A collection of which will be used when writing the token.
+ A that represents the asynchronous write operation.
+
+
+
+ Asynchronously creates a from a .
+
+ An positioned at the token to read into this .
+ The token to monitor for cancellation requests. The default value is .
+
+ A that represents the asynchronous creation. The
+ property returns a that contains
+ the token and its descendant tokens
+ that were read from the reader. The runtime type of the token is determined
+ by the token type of the first token encountered in the reader.
+
+
+
+
+ Asynchronously creates a from a .
+
+ An positioned at the token to read into this .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ The token to monitor for cancellation requests. The default value is .
+
+ A that represents the asynchronous creation. The
+ property returns a that contains
+ the token and its descendant tokens
+ that were read from the reader. The runtime type of the token is determined
+ by the token type of the first token encountered in the reader.
+
+
+
+
+ Asynchronously creates a from a .
+
+ A positioned at the token to read into this .
+ The token to monitor for cancellation requests. The default value is .
+
+ A that represents the asynchronous creation. The
+ property returns a that contains the token and its descendant tokens
+ that were read from the reader. The runtime type of the token is determined
+ by the token type of the first token encountered in the reader.
+
+
+
+
+ Asynchronously creates a from a .
+
+ A positioned at the token to read into this .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ The token to monitor for cancellation requests. The default value is .
+
+ A that represents the asynchronous creation. The
+ property returns a that contains the token and its descendant tokens
+ that were read from the reader. The runtime type of the token is determined
+ by the token type of the first token encountered in the reader.
+
+
+
+
+ Gets a comparer that can compare two tokens for value equality.
+
+ A that can compare two nodes for value equality.
+
+
+
+ Gets or sets the parent.
+
+ The parent.
+
+
+
+ Gets the root of this .
+
+ The root of this .
+
+
+
+ Gets the node type for this .
+
+ The type.
+
+
+
+ Gets a value indicating whether this token has child tokens.
+
+
+ true if this token has child values; otherwise, false.
+
+
+
+
+ Compares the values of two tokens, including the values of all descendant tokens.
+
+ The first to compare.
+ The second to compare.
+ true if the tokens are equal; otherwise false.
+
+
+
+ Gets the next sibling token of this node.
+
+ The that contains the next sibling token.
+
+
+
+ Gets the previous sibling token of this node.
+
+ The that contains the previous sibling token.
+
+
+
+ Gets the path of the JSON token.
+
+
+
+
+ Adds the specified content immediately after this token.
+
+ A content object that contains simple content or a collection of content objects to be added after this token.
+
+
+
+ Adds the specified content immediately before this token.
+
+ A content object that contains simple content or a collection of content objects to be added before this token.
+
+
+
+ Returns a collection of the ancestor tokens of this token.
+
+ A collection of the ancestor tokens of this token.
+
+
+
+ Returns a collection of tokens that contain this token, and the ancestors of this token.
+
+ A collection of tokens that contain this token, and the ancestors of this token.
+
+
+
+ Returns a collection of the sibling tokens after this token, in document order.
+
+ A collection of the sibling tokens after this tokens, in document order.
+
+
+
+ Returns a collection of the sibling tokens before this token, in document order.
+
+ A collection of the sibling tokens before this token, in document order.
+
+
+
+ Gets the with the specified key.
+
+ The with the specified key.
+
+
+
+ Gets the with the specified key converted to the specified type.
+
+ The type to convert the token to.
+ The token key.
+ The converted token value.
+
+
+
+ Get the first child token of this token.
+
+ A containing the first child token of the .
+
+
+
+ Get the last child token of this token.
+
+ A containing the last child token of the .
+
+
+
+ Returns a collection of the child tokens of this token, in document order.
+
+ An of containing the child tokens of this , in document order.
+
+
+
+ Returns a collection of the child tokens of this token, in document order, filtered by the specified type.
+
+ The type to filter the child tokens on.
+ A containing the child tokens of this , in document order.
+
+
+
+ Returns a collection of the child values of this token, in document order.
+
+ The type to convert the values to.
+ A containing the child values of this , in document order.
+
+
+
+ Removes this token from its parent.
+
+
+
+
+ Replaces this token with the specified token.
+
+ The value.
+
+
+
+ Writes this token to a .
+
+ A into which this method will write.
+ A collection of which will be used when writing the token.
+
+
+
+ Returns the indented JSON for this token.
+
+
+ ToString() returns a non-JSON string value for tokens with a type of .
+ If you want the JSON for all token types then you should use .
+
+
+ The indented JSON for this token.
+
+
+
+
+ Returns the JSON for this token using the given formatting and converters.
+
+ Indicates how the output should be formatted.
+ A collection of s which will be used when writing the token.
+ The JSON for this token using the given formatting and converters.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to [].
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from [] to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Creates a for this token.
+
+ A that can be used to read this token and its descendants.
+
+
+
+ Creates a from an object.
+
+ The object that will be used to create .
+ A with the value of the specified object.
+
+
+
+ Creates a from an object using the specified .
+
+ The object that will be used to create .
+ The that will be used when reading the object.
+ A with the value of the specified object.
+
+
+
+ Creates an instance of the specified .NET type from the .
+
+ The object type that the token will be deserialized to.
+ The new object created from the JSON value.
+
+
+
+ Creates an instance of the specified .NET type from the .
+
+ The object type that the token will be deserialized to.
+ The new object created from the JSON value.
+
+
+
+ Creates an instance of the specified .NET type from the using the specified .
+
+ The object type that the token will be deserialized to.
+ The that will be used when creating the object.
+ The new object created from the JSON value.
+
+
+
+ Creates an instance of the specified .NET type from the using the specified .
+
+ The object type that the token will be deserialized to.
+ The that will be used when creating the object.
+ The new object created from the JSON value.
+
+
+
+ Creates a from a .
+
+ A positioned at the token to read into this .
+
+ A that contains the token and its descendant tokens
+ that were read from the reader. The runtime type of the token is determined
+ by the token type of the first token encountered in the reader.
+
+
+
+
+ Creates a from a .
+
+ An positioned at the token to read into this .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+
+ A that contains the token and its descendant tokens
+ that were read from the reader. The runtime type of the token is determined
+ by the token type of the first token encountered in the reader.
+
+
+
+
+ Load a from a string that contains JSON.
+
+ A that contains JSON.
+ A populated from the string that contains JSON.
+
+
+
+ Load a from a string that contains JSON.
+
+ A that contains JSON.
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ A populated from the string that contains JSON.
+
+
+
+ Creates a from a .
+
+ A positioned at the token to read into this .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+
+ A that contains the token and its descendant tokens
+ that were read from the reader. The runtime type of the token is determined
+ by the token type of the first token encountered in the reader.
+
+
+
+
+ Creates a from a .
+
+ A positioned at the token to read into this .
+
+ A that contains the token and its descendant tokens
+ that were read from the reader. The runtime type of the token is determined
+ by the token type of the first token encountered in the reader.
+
+
+
+
+ Selects a using a JSONPath expression. Selects the token that matches the object path.
+
+
+ A that contains a JSONPath expression.
+
+ A , or null.
+
+
+
+ Selects a using a JSONPath expression. Selects the token that matches the object path.
+
+
+ A that contains a JSONPath expression.
+
+ A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression.
+ A .
+
+
+
+ Selects a using a JSONPath expression. Selects the token that matches the object path.
+
+
+ A that contains a JSONPath expression.
+
+ The used to select tokens.
+ A .
+
+
+
+ Selects a collection of elements using a JSONPath expression.
+
+
+ A that contains a JSONPath expression.
+
+ An of that contains the selected elements.
+
+
+
+ Selects a collection of elements using a JSONPath expression.
+
+
+ A that contains a JSONPath expression.
+
+ A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression.
+ An of that contains the selected elements.
+
+
+
+ Selects a collection of elements using a JSONPath expression.
+
+
+ A that contains a JSONPath expression.
+
+ The used to select tokens.
+ An of that contains the selected elements.
+
+
+
+ Returns the responsible for binding operations performed on this object.
+
+ The expression tree representation of the runtime value.
+
+ The to bind this object.
+
+
+
+
+ Returns the responsible for binding operations performed on this object.
+
+ The expression tree representation of the runtime value.
+
+ The to bind this object.
+
+
+
+
+ Creates a new instance of the . All child tokens are recursively cloned.
+
+ A new instance of the .
+
+
+
+ Creates a new instance of the . All child tokens are recursively cloned.
+
+ A object to configure cloning settings.
+ A new instance of the .
+
+
+
+ Adds an object to the annotation list of this .
+
+ The annotation to add.
+
+
+
+ Get the first annotation object of the specified type from this .
+
+ The type of the annotation to retrieve.
+ The first annotation object that matches the specified type, or null if no annotation is of the specified type.
+
+
+
+ Gets the first annotation object of the specified type from this .
+
+ The of the annotation to retrieve.
+ The first annotation object that matches the specified type, or null if no annotation is of the specified type.
+
+
+
+ Gets a collection of annotations of the specified type for this .
+
+ The type of the annotations to retrieve.
+ An that contains the annotations for this .
+
+
+
+ Gets a collection of annotations of the specified type for this .
+
+ The of the annotations to retrieve.
+ An of that contains the annotations that match the specified type for this .
+
+
+
+ Removes the annotations of the specified type from this .
+
+ The type of annotations to remove.
+
+
+
+ Removes the annotations of the specified type from this .
+
+ The of annotations to remove.
+
+
+
+ Compares tokens to determine whether they are equal.
+
+
+
+
+ Determines whether the specified objects are equal.
+
+ The first object of type to compare.
+ The second object of type to compare.
+
+ true if the specified objects are equal; otherwise, false.
+
+
+
+
+ Returns a hash code for the specified object.
+
+ The for which a hash code is to be returned.
+ A hash code for the specified object.
+ The type of is a reference type and is null.
+
+
+
+ Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data.
+
+
+
+
+ Gets the at the reader's current position.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The token to read from.
+
+
+
+ Initializes a new instance of the class.
+
+ The token to read from.
+ The initial path of the token. It is prepended to the returned .
+
+
+
+ Reads the next JSON token from the underlying .
+
+
+ true if the next token was read successfully; false if there are no more tokens to read.
+
+
+
+
+ Gets the path of the current JSON token.
+
+
+
+
+ Specifies the type of token.
+
+
+
+
+ No token type has been set.
+
+
+
+
+ A JSON object.
+
+
+
+
+ A JSON array.
+
+
+
+
+ A JSON constructor.
+
+
+
+
+ A JSON object property.
+
+
+
+
+ A comment.
+
+
+
+
+ An integer value.
+
+
+
+
+ A float value.
+
+
+
+
+ A string value.
+
+
+
+
+ A boolean value.
+
+
+
+
+ A null value.
+
+
+
+
+ An undefined value.
+
+
+
+
+ A date value.
+
+
+
+
+ A raw JSON value.
+
+
+
+
+ A collection of bytes value.
+
+
+
+
+ A Guid value.
+
+
+
+
+ A Uri value.
+
+
+
+
+ A TimeSpan value.
+
+
+
+
+ Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data.
+
+
+
+
+ Gets the at the writer's current position.
+
+
+
+
+ Gets the token being written.
+
+ The token being written.
+
+
+
+ Initializes a new instance of the class writing to the given .
+
+ The container being written to.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Flushes whatever is in the buffer to the underlying .
+
+
+
+
+ Closes this writer.
+ If is set to true, the JSON is auto-completed.
+
+
+ Setting to true has no additional effect, since the underlying is a type that cannot be closed.
+
+
+
+
+ Writes the beginning of a JSON object.
+
+
+
+
+ Writes the beginning of a JSON array.
+
+
+
+
+ Writes the start of a constructor with the given name.
+
+ The name of the constructor.
+
+
+
+ Writes the end.
+
+ The token.
+
+
+
+ Writes the property name of a name/value pair on a JSON object.
+
+ The name of the property.
+
+
+
+ Writes a value.
+ An error will be raised if the value cannot be written as a single JSON token.
+
+ The value to write.
+
+
+
+ Writes a null value.
+
+
+
+
+ Writes an undefined value.
+
+
+
+
+ Writes raw JSON.
+
+ The raw JSON to write.
+
+
+
+ Writes a comment /*...*/ containing the specified text.
+
+ Text to place inside the comment.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a [] value.
+
+ The [] value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Represents a value in JSON (string, integer, date, etc).
+
+
+
+
+ Writes this token to a asynchronously.
+
+ A into which this method will write.
+ The token to monitor for cancellation requests.
+ A collection of which will be used when writing the token.
+ A that represents the asynchronous write operation.
+
+
+
+ Initializes a new instance of the class from another object.
+
+ A object to copy from.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Gets a value indicating whether this token has child tokens.
+
+
+ true if this token has child values; otherwise, false.
+
+
+
+
+ Creates a comment with the given value.
+
+ The value.
+ A comment with the given value.
+
+
+
+ Creates a string with the given value.
+
+ The value.
+ A string with the given value.
+
+
+
+ Creates a null value.
+
+ A null value.
+
+
+
+ Creates a undefined value.
+
+ A undefined value.
+
+
+
+ Gets the node type for this .
+
+ The type.
+
+
+
+ Gets or sets the underlying token value.
+
+ The underlying token value.
+
+
+
+ Writes this token to a .
+
+ A into which this method will write.
+ A collection of s which will be used when writing the token.
+
+
+
+ Indicates whether the current object is equal to another object of the same type.
+
+
+ true if the current object is equal to the parameter; otherwise, false.
+
+ An object to compare with this object.
+
+
+
+ Determines whether the specified is equal to the current .
+
+ The to compare with the current .
+
+ true if the specified is equal to the current ; otherwise, false.
+
+
+
+
+ Serves as a hash function for a particular type.
+
+
+ A hash code for the current .
+
+
+
+
+ Returns a that represents this instance.
+
+
+ ToString() returns a non-JSON string value for tokens with a type of .
+ If you want the JSON for all token types then you should use .
+
+
+ A that represents this instance.
+
+
+
+
+ Returns a that represents this instance.
+
+ The format.
+
+ A that represents this instance.
+
+
+
+
+ Returns a that represents this instance.
+
+ The format provider.
+
+ A that represents this instance.
+
+
+
+
+ Returns a that represents this instance.
+
+ The format.
+ The format provider.
+
+ A that represents this instance.
+
+
+
+
+ Returns the responsible for binding operations performed on this object.
+
+ The expression tree representation of the runtime value.
+
+ The to bind this object.
+
+
+
+
+ Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object.
+
+ An object to compare with this instance.
+
+ A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings:
+ Value
+ Meaning
+ Less than zero
+ This instance is less than .
+ Zero
+ This instance is equal to .
+ Greater than zero
+ This instance is greater than .
+
+
+ is not of the same type as this instance.
+
+
+
+
+ Specifies how line information is handled when loading JSON.
+
+
+
+
+ Ignore line information.
+
+
+
+
+ Load line information.
+
+
+
+
+ Specifies how JSON arrays are merged together.
+
+
+
+ Concatenate arrays.
+
+
+ Union arrays, skipping items that already exist.
+
+
+ Replace all array items.
+
+
+ Merge array items together, matched by index.
+
+
+
+ Specifies how null value properties are merged.
+
+
+
+
+ The content's null value properties will be ignored during merging.
+
+
+
+
+ The content's null value properties will be merged.
+
+
+
+
+ Specifies the member serialization options for the .
+
+
+
+
+ All public members are serialized by default. Members can be excluded using or .
+ This is the default member serialization mode.
+
+
+
+
+ Only members marked with or are serialized.
+ This member serialization mode can also be set by marking the class with .
+
+
+
+
+ All public and private fields are serialized. Members can be excluded using or .
+ This member serialization mode can also be set by marking the class with
+ and setting IgnoreSerializableAttribute on to false.
+
+
+
+
+ Specifies metadata property handling options for the .
+
+
+
+
+ Read metadata properties located at the start of a JSON object.
+
+
+
+
+ Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance.
+
+
+
+
+ Do not try to read metadata properties.
+
+
+
+
+ Specifies missing member handling options for the .
+
+
+
+
+ Ignore a missing member and do not attempt to deserialize it.
+
+
+
+
+ Throw a when a missing member is encountered during deserialization.
+
+
+
+
+ Specifies null value handling options for the .
+
+
+
+
+
+
+
+
+ Include null values when serializing and deserializing objects.
+
+
+
+
+ Ignore null values when serializing and deserializing objects.
+
+
+
+
+ Specifies how object creation is handled by the .
+
+
+
+
+ Reuse existing objects, create new objects when needed.
+
+
+
+
+ Only reuse existing objects.
+
+
+
+
+ Always create new objects.
+
+
+
+
+ Specifies reference handling options for the .
+ Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement .
+
+
+
+
+
+
+
+ Do not preserve references when serializing types.
+
+
+
+
+ Preserve references when serializing into a JSON object structure.
+
+
+
+
+ Preserve references when serializing into a JSON array structure.
+
+
+
+
+ Preserve references when serializing.
+
+
+
+
+ Specifies reference loop handling options for the .
+
+
+
+
+ Throw a when a loop is encountered.
+
+
+
+
+ Ignore loop references and do not serialize.
+
+
+
+
+ Serialize loop references.
+
+
+
+
+ Indicating whether a property is required.
+
+
+
+
+ The property is not required. The default state.
+
+
+
+
+ The property must be defined in JSON but can be a null value.
+
+
+
+
+ The property must be defined in JSON and cannot be a null value.
+
+
+
+
+ The property is not required but it cannot be a null value.
+
+
+
+
+
+ Contains the JSON schema extension methods.
+
+
+ JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+
+ Determines whether the is valid.
+
+
+ JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details.
+
+
+ The source to test.
+ The schema to test with.
+
+ true if the specified is valid; otherwise, false.
+
+
+
+
+
+ Determines whether the is valid.
+
+
+ JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details.
+
+
+ The source to test.
+ The schema to test with.
+ When this method returns, contains any error messages generated while validating.
+
+ true if the specified is valid; otherwise, false.
+
+
+
+
+
+ Validates the specified .
+
+
+ JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details.
+
+
+ The source to test.
+ The schema to test with.
+
+
+
+
+ Validates the specified .
+
+
+ JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details.
+
+
+ The source to test.
+ The schema to test with.
+ The validation event handler.
+
+
+
+
+ An in-memory representation of a JSON Schema.
+
+
+ JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+ Gets or sets the id.
+
+
+
+
+ Gets or sets the title.
+
+
+
+
+ Gets or sets whether the object is required.
+
+
+
+
+ Gets or sets whether the object is read-only.
+
+
+
+
+ Gets or sets whether the object is visible to users.
+
+
+
+
+ Gets or sets whether the object is transient.
+
+
+
+
+ Gets or sets the description of the object.
+
+
+
+
+ Gets or sets the types of values allowed by the object.
+
+ The type.
+
+
+
+ Gets or sets the pattern.
+
+ The pattern.
+
+
+
+ Gets or sets the minimum length.
+
+ The minimum length.
+
+
+
+ Gets or sets the maximum length.
+
+ The maximum length.
+
+
+
+ Gets or sets a number that the value should be divisible by.
+
+ A number that the value should be divisible by.
+
+
+
+ Gets or sets the minimum.
+
+ The minimum.
+
+
+
+ Gets or sets the maximum.
+
+ The maximum.
+
+
+
+ Gets or sets a flag indicating whether the value can not equal the number defined by the minimum attribute ().
+
+ A flag indicating whether the value can not equal the number defined by the minimum attribute ().
+
+
+
+ Gets or sets a flag indicating whether the value can not equal the number defined by the maximum attribute ().
+
+ A flag indicating whether the value can not equal the number defined by the maximum attribute ().
+
+
+
+ Gets or sets the minimum number of items.
+
+ The minimum number of items.
+
+
+
+ Gets or sets the maximum number of items.
+
+ The maximum number of items.
+
+
+
+ Gets or sets the of items.
+
+ The of items.
+
+
+
+ Gets or sets a value indicating whether items in an array are validated using the instance at their array position from .
+
+
+ true if items are validated using their array position; otherwise, false.
+
+
+
+
+ Gets or sets the of additional items.
+
+ The of additional items.
+
+
+
+ Gets or sets a value indicating whether additional items are allowed.
+
+
+ true if additional items are allowed; otherwise, false.
+
+
+
+
+ Gets or sets whether the array items must be unique.
+
+
+
+
+ Gets or sets the of properties.
+
+ The of properties.
+
+
+
+ Gets or sets the of additional properties.
+
+ The of additional properties.
+
+
+
+ Gets or sets the pattern properties.
+
+ The pattern properties.
+
+
+
+ Gets or sets a value indicating whether additional properties are allowed.
+
+
+ true if additional properties are allowed; otherwise, false.
+
+
+
+
+ Gets or sets the required property if this property is present.
+
+ The required property if this property is present.
+
+
+
+ Gets or sets the a collection of valid enum values allowed.
+
+ A collection of valid enum values allowed.
+
+
+
+ Gets or sets disallowed types.
+
+ The disallowed types.
+
+
+
+ Gets or sets the default value.
+
+ The default value.
+
+
+
+ Gets or sets the collection of that this schema extends.
+
+ The collection of that this schema extends.
+
+
+
+ Gets or sets the format.
+
+ The format.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Reads a from the specified .
+
+ The containing the JSON Schema to read.
+ The object representing the JSON Schema.
+
+
+
+ Reads a from the specified .
+
+ The containing the JSON Schema to read.
+ The to use when resolving schema references.
+ The object representing the JSON Schema.
+
+
+
+ Load a from a string that contains JSON Schema.
+
+ A that contains JSON Schema.
+ A populated from the string that contains JSON Schema.
+
+
+
+ Load a from a string that contains JSON Schema using the specified .
+
+ A that contains JSON Schema.
+ The resolver.
+ A populated from the string that contains JSON Schema.
+
+
+
+ Writes this schema to a .
+
+ A into which this method will write.
+
+
+
+ Writes this schema to a using the specified .
+
+ A into which this method will write.
+ The resolver used.
+
+
+
+ Returns a that represents the current .
+
+
+ A that represents the current .
+
+
+
+
+
+ Returns detailed information about the schema exception.
+
+
+ JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+ Gets the line number indicating where the error occurred.
+
+ The line number indicating where the error occurred.
+
+
+
+ Gets the line position indicating where the error occurred.
+
+ The line position indicating where the error occurred.
+
+
+
+ Gets the path to the JSON where the error occurred.
+
+ The path to the JSON where the error occurred.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class
+ with a specified error message.
+
+ The error message that explains the reason for the exception.
+
+
+
+ Initializes a new instance of the class
+ with a specified error message and a reference to the inner exception that is the cause of this exception.
+
+ The error message that explains the reason for the exception.
+ The exception that is the cause of the current exception, or null if no inner exception is specified.
+
+
+
+ Initializes a new instance of the class.
+
+ The that holds the serialized object data about the exception being thrown.
+ The that contains contextual information about the source or destination.
+ The parameter is null.
+ The class name is null or is zero (0).
+
+
+
+
+ Generates a from a specified .
+
+
+ JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+ Gets or sets how undefined schemas are handled by the serializer.
+
+
+
+
+ Gets or sets the contract resolver.
+
+ The contract resolver.
+
+
+
+ Generate a from the specified type.
+
+ The type to generate a from.
+ A generated from the specified type.
+
+
+
+ Generate a from the specified type.
+
+ The type to generate a from.
+ The used to resolve schema references.
+ A generated from the specified type.
+
+
+
+ Generate a from the specified type.
+
+ The type to generate a from.
+ Specify whether the generated root will be nullable.
+ A generated from the specified type.
+
+
+
+ Generate a from the specified type.
+
+ The type to generate a from.
+ The used to resolve schema references.
+ Specify whether the generated root will be nullable.
+ A generated from the specified type.
+
+
+
+
+ Resolves from an id.
+
+
+ JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+ Gets or sets the loaded schemas.
+
+ The loaded schemas.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets a for the specified reference.
+
+ The id.
+ A for the specified reference.
+
+
+
+
+ The value types allowed by the .
+
+
+ JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+ No type specified.
+
+
+
+
+ String type.
+
+
+
+
+ Float type.
+
+
+
+
+ Integer type.
+
+
+
+
+ Boolean type.
+
+
+
+
+ Object type.
+
+
+
+
+ Array type.
+
+
+
+
+ Null type.
+
+
+
+
+ Any type.
+
+
+
+
+
+ Specifies undefined schema Id handling options for the .
+
+
+ JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+ Do not infer a schema Id.
+
+
+
+
+ Use the .NET type name as the schema Id.
+
+
+
+
+ Use the assembly qualified .NET type name as the schema Id.
+
+
+
+
+
+ Returns detailed information related to the .
+
+
+ JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+ Gets the associated with the validation error.
+
+ The JsonSchemaException associated with the validation error.
+
+
+
+ Gets the path of the JSON location where the validation error occurred.
+
+ The path of the JSON location where the validation error occurred.
+
+
+
+ Gets the text description corresponding to the validation error.
+
+ The text description.
+
+
+
+
+ Represents the callback method that will handle JSON schema validation events and the .
+
+
+ JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+ A camel case naming strategy.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+ A flag indicating whether dictionary keys should be processed.
+
+
+ A flag indicating whether explicitly specified property names should be processed,
+ e.g. a property name customized with a .
+
+
+
+
+ Initializes a new instance of the class.
+
+
+ A flag indicating whether dictionary keys should be processed.
+
+
+ A flag indicating whether explicitly specified property names should be processed,
+ e.g. a property name customized with a .
+
+
+ A flag indicating whether extension data names should be processed.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Resolves the specified property name.
+
+ The property name to resolve.
+ The resolved property name.
+
+
+
+ Resolves member mappings for a type, camel casing property names.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Resolves the contract for a given type.
+
+ The type to resolve a contract for.
+ The contract for a given type.
+
+
+
+ Used by to resolve a for a given .
+
+
+
+
+ Gets a value indicating whether members are being get and set using dynamic code generation.
+ This value is determined by the runtime permissions available.
+
+
+ true if using dynamic code generation; otherwise, false.
+
+
+
+
+ Gets or sets the default members search flags.
+
+ The default members search flags.
+
+
+
+ Gets or sets a value indicating whether compiler generated members should be serialized.
+
+
+ true if serialized compiler generated members; otherwise, false.
+
+
+
+
+ Gets or sets a value indicating whether to ignore the interface when serializing and deserializing types.
+
+
+ true if the interface will be ignored when serializing and deserializing types; otherwise, false.
+
+
+
+
+ Gets or sets a value indicating whether to ignore the attribute when serializing and deserializing types.
+
+
+ true if the attribute will be ignored when serializing and deserializing types; otherwise, false.
+
+
+
+
+ Gets or sets a value indicating whether to ignore IsSpecified members when serializing and deserializing types.
+
+
+ true if the IsSpecified members will be ignored when serializing and deserializing types; otherwise, false.
+
+
+
+
+ Gets or sets a value indicating whether to ignore ShouldSerialize members when serializing and deserializing types.
+
+
+ true if the ShouldSerialize members will be ignored when serializing and deserializing types; otherwise, false.
+
+
+
+
+ Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized.
+
+ The naming strategy used to resolve how property names and dictionary keys are serialized.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Resolves the contract for a given type.
+
+ The type to resolve a contract for.
+ The contract for a given type.
+
+
+
+ Gets the serializable members for the type.
+
+ The type to get serializable members for.
+ The serializable members for the type.
+
+
+
+ Creates a for the given type.
+
+ Type of the object.
+ A for the given type.
+
+
+
+ Creates the constructor parameters.
+
+ The constructor to create properties for.
+ The type's member properties.
+ Properties for the given .
+
+
+
+ Creates a for the given .
+
+ The matching member property.
+ The constructor parameter.
+ A created for the given .
+
+
+
+ Resolves the default for the contract.
+
+ Type of the object.
+ The contract's default .
+
+
+
+ Creates a for the given type.
+
+ Type of the object.
+ A for the given type.
+
+
+
+ Creates a for the given type.
+
+ Type of the object.
+ A for the given type.
+
+
+
+ Creates a for the given type.
+
+ Type of the object.
+ A for the given type.
+
+
+
+ Creates a for the given type.
+
+ Type of the object.
+ A for the given type.
+
+
+
+ Creates a for the given type.
+
+ Type of the object.
+ A for the given type.
+
+
+
+ Creates a for the given type.
+
+ Type of the object.
+ A for the given type.
+
+
+
+ Creates a for the given type.
+
+ Type of the object.
+ A for the given type.
+
+
+
+ Determines which contract type is created for the given type.
+
+ Type of the object.
+ A for the given type.
+
+
+
+ Creates properties for the given .
+
+ The type to create properties for.
+ /// The member serialization mode for the type.
+ Properties for the given .
+
+
+
+ Creates the used by the serializer to get and set values from a member.
+
+ The member.
+ The used by the serializer to get and set values from a member.
+
+
+
+ Creates a for the given .
+
+ The member's parent .
+ The member to create a for.
+ A created for the given .
+
+
+
+ Resolves the name of the property.
+
+ Name of the property.
+ Resolved name of the property.
+
+
+
+ Resolves the name of the extension data. By default no changes are made to extension data names.
+
+ Name of the extension data.
+ Resolved name of the extension data.
+
+
+
+ Resolves the key of the dictionary. By default is used to resolve dictionary keys.
+
+ Key of the dictionary.
+ Resolved key of the dictionary.
+
+
+
+ Gets the resolved name of the property.
+
+ Name of the property.
+ Name of the property.
+
+
+
+ The default naming strategy. Property names and dictionary keys are unchanged.
+
+
+
+
+ Resolves the specified property name.
+
+ The property name to resolve.
+ The resolved property name.
+
+
+
+ The default serialization binder used when resolving and loading classes from type names.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ When overridden in a derived class, controls the binding of a serialized object to a type.
+
+ Specifies the name of the serialized object.
+ Specifies the name of the serialized object.
+
+ The type of the object the formatter creates a new instance of.
+
+
+
+
+ When overridden in a derived class, controls the binding of a serialized object to a type.
+
+ The type of the object the formatter creates a new instance of.
+ Specifies the name of the serialized object.
+ Specifies the name of the serialized object.
+
+
+
+ Represents a trace writer that writes to the application's instances.
+
+
+
+
+ Gets the that will be used to filter the trace messages passed to the writer.
+ For example a filter level of will exclude messages and include ,
+ and messages.
+
+
+ The that will be used to filter the trace messages passed to the writer.
+
+
+
+
+ Writes the specified trace level, message and optional exception.
+
+ The at which to write this trace.
+ The trace message.
+ The trace exception. This parameter is optional.
+
+
+
+ Get and set values for a using dynamic methods.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The member info.
+
+
+
+ Sets the value.
+
+ The target to set the value on.
+ The value to set on the target.
+
+
+
+ Gets the value.
+
+ The target to get the value from.
+ The value.
+
+
+
+ Provides information surrounding an error.
+
+
+
+
+ Gets the error.
+
+ The error.
+
+
+
+ Gets the original object that caused the error.
+
+ The original object that caused the error.
+
+
+
+ Gets the member that caused the error.
+
+ The member that caused the error.
+
+
+
+ Gets the path of the JSON location where the error occurred.
+
+ The path of the JSON location where the error occurred.
+
+
+
+ Gets or sets a value indicating whether this is handled.
+
+ true if handled; otherwise, false.
+
+
+
+ Provides data for the Error event.
+
+
+
+
+ Gets the current object the error event is being raised against.
+
+ The current object the error event is being raised against.
+
+
+
+ Gets the error context.
+
+ The error context.
+
+
+
+ Initializes a new instance of the class.
+
+ The current object.
+ The error context.
+
+
+
+ Get and set values for a using dynamic methods.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The member info.
+
+
+
+ Sets the value.
+
+ The target to set the value on.
+ The value to set on the target.
+
+
+
+ Gets the value.
+
+ The target to get the value from.
+ The value.
+
+
+
+ Provides methods to get attributes.
+
+
+
+
+ Returns a collection of all of the attributes, or an empty collection if there are no attributes.
+
+ When true, look up the hierarchy chain for the inherited custom attribute.
+ A collection of s, or an empty collection.
+
+
+
+ Returns a collection of attributes, identified by type, or an empty collection if there are no attributes.
+
+ The type of the attributes.
+ When true, look up the hierarchy chain for the inherited custom attribute.
+ A collection of s, or an empty collection.
+
+
+
+ Used by to resolve a for a given .
+
+
+
+
+
+
+
+
+ Resolves the contract for a given type.
+
+ The type to resolve a contract for.
+ The contract for a given type.
+
+
+
+ Used to resolve references when serializing and deserializing JSON by the .
+
+
+
+
+ Resolves a reference to its object.
+
+ The serialization context.
+ The reference to resolve.
+ The object that was resolved from the reference.
+
+
+
+ Gets the reference for the specified object.
+
+ The serialization context.
+ The object to get a reference for.
+ The reference to the object.
+
+
+
+ Determines whether the specified object is referenced.
+
+ The serialization context.
+ The object to test for a reference.
+
+ true if the specified object is referenced; otherwise, false.
+
+
+
+
+ Adds a reference to the specified object.
+
+ The serialization context.
+ The reference.
+ The object to reference.
+
+
+
+ Allows users to control class loading and mandate what class to load.
+
+
+
+
+ When implemented, controls the binding of a serialized object to a type.
+
+ Specifies the name of the serialized object.
+ Specifies the name of the serialized object
+ The type of the object the formatter creates a new instance of.
+
+
+
+ When implemented, controls the binding of a serialized object to a type.
+
+ The type of the object the formatter creates a new instance of.
+ Specifies the name of the serialized object.
+ Specifies the name of the serialized object.
+
+
+
+ Represents a trace writer.
+
+
+
+
+ Gets the that will be used to filter the trace messages passed to the writer.
+ For example a filter level of will exclude messages and include ,
+ and messages.
+
+ The that will be used to filter the trace messages passed to the writer.
+
+
+
+ Writes the specified trace level, message and optional exception.
+
+ The at which to write this trace.
+ The trace message.
+ The trace exception. This parameter is optional.
+
+
+
+ Provides methods to get and set values.
+
+
+
+
+ Sets the value.
+
+ The target to set the value on.
+ The value to set on the target.
+
+
+
+ Gets the value.
+
+ The target to get the value from.
+ The value.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Gets the of the collection items.
+
+ The of the collection items.
+
+
+
+ Gets a value indicating whether the collection type is a multidimensional array.
+
+ true if the collection type is a multidimensional array; otherwise, false.
+
+
+
+ Gets or sets the function used to create the object. When set this function will override .
+
+ The function used to create the object.
+
+
+
+ Gets a value indicating whether the creator has a parameter with the collection values.
+
+ true if the creator has a parameter with the collection values; otherwise, false.
+
+
+
+ Initializes a new instance of the class.
+
+ The underlying type for the contract.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Gets or sets the default collection items .
+
+ The converter.
+
+
+
+ Gets or sets a value indicating whether the collection items preserve object references.
+
+ true if collection items preserve object references; otherwise, false.
+
+
+
+ Gets or sets the collection item reference loop handling.
+
+ The reference loop handling.
+
+
+
+ Gets or sets the collection item type name handling.
+
+ The type name handling.
+
+
+
+ Initializes a new instance of the class.
+
+ The underlying type for the contract.
+
+
+
+ Handles serialization callback events.
+
+ The object that raised the callback event.
+ The streaming context.
+
+
+
+ Handles serialization error callback events.
+
+ The object that raised the callback event.
+ The streaming context.
+ The error context.
+
+
+
+ Sets extension data for an object during deserialization.
+
+ The object to set extension data on.
+ The extension data key.
+ The extension data value.
+
+
+
+ Gets extension data for an object during serialization.
+
+ The object to set extension data on.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Gets the underlying type for the contract.
+
+ The underlying type for the contract.
+
+
+
+ Gets or sets the type created during deserialization.
+
+ The type created during deserialization.
+
+
+
+ Gets or sets whether this type contract is serialized as a reference.
+
+ Whether this type contract is serialized as a reference.
+
+
+
+ Gets or sets the default for this contract.
+
+ The converter.
+
+
+
+ Gets the internally resolved for the contract's type.
+ This converter is used as a fallback converter when no other converter is resolved.
+ Setting will always override this converter.
+
+
+
+
+ Gets or sets all methods called immediately after deserialization of the object.
+
+ The methods called immediately after deserialization of the object.
+
+
+
+ Gets or sets all methods called during deserialization of the object.
+
+ The methods called during deserialization of the object.
+
+
+
+ Gets or sets all methods called after serialization of the object graph.
+
+ The methods called after serialization of the object graph.
+
+
+
+ Gets or sets all methods called before serialization of the object.
+
+ The methods called before serialization of the object.
+
+
+
+ Gets or sets all method called when an error is thrown during the serialization of the object.
+
+ The methods called when an error is thrown during the serialization of the object.
+
+
+
+ Gets or sets the default creator method used to create the object.
+
+ The default creator method used to create the object.
+
+
+
+ Gets or sets a value indicating whether the default creator is non-public.
+
+ true if the default object creator is non-public; otherwise, false.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Gets or sets the dictionary key resolver.
+
+ The dictionary key resolver.
+
+
+
+ Gets the of the dictionary keys.
+
+ The of the dictionary keys.
+
+
+
+ Gets the of the dictionary values.
+
+ The of the dictionary values.
+
+
+
+ Gets or sets the function used to create the object. When set this function will override .
+
+ The function used to create the object.
+
+
+
+ Gets a value indicating whether the creator has a parameter with the dictionary values.
+
+ true if the creator has a parameter with the dictionary values; otherwise, false.
+
+
+
+ Initializes a new instance of the class.
+
+ The underlying type for the contract.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Gets the object's properties.
+
+ The object's properties.
+
+
+
+ Gets or sets the property name resolver.
+
+ The property name resolver.
+
+
+
+ Initializes a new instance of the class.
+
+ The underlying type for the contract.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Gets or sets the object constructor.
+
+ The object constructor.
+
+
+
+ Initializes a new instance of the class.
+
+ The underlying type for the contract.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Initializes a new instance of the class.
+
+ The underlying type for the contract.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Gets or sets the object member serialization.
+
+ The member object serialization.
+
+
+
+ Gets or sets the missing member handling used when deserializing this object.
+
+ The missing member handling.
+
+
+
+ Gets or sets a value that indicates whether the object's properties are required.
+
+
+ A value indicating whether the object's properties are required.
+
+
+
+
+ Gets or sets how the object's properties with null values are handled during serialization and deserialization.
+
+ How the object's properties with null values are handled during serialization and deserialization.
+
+
+
+ Gets the object's properties.
+
+ The object's properties.
+
+
+
+ Gets a collection of instances that define the parameters used with .
+
+
+
+
+ Gets or sets the function used to create the object. When set this function will override .
+ This function is called with a collection of arguments which are defined by the collection.
+
+ The function used to create the object.
+
+
+
+ Gets or sets the extension data setter.
+
+
+
+
+ Gets or sets the extension data getter.
+
+
+
+
+ Gets or sets the extension data value type.
+
+
+
+
+ Gets or sets the extension data name resolver.
+
+ The extension data name resolver.
+
+
+
+ Initializes a new instance of the class.
+
+ The underlying type for the contract.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Initializes a new instance of the class.
+
+ The underlying type for the contract.
+
+
+
+ Maps a JSON property to a .NET member or constructor parameter.
+
+
+
+
+ Gets or sets the name of the property.
+
+ The name of the property.
+
+
+
+ Gets or sets the type that declared this property.
+
+ The type that declared this property.
+
+
+
+ Gets or sets the order of serialization of a member.
+
+ The numeric order of serialization.
+
+
+
+ Gets or sets the name of the underlying member or parameter.
+
+ The name of the underlying member or parameter.
+
+
+
+ Gets the that will get and set the during serialization.
+
+ The that will get and set the during serialization.
+
+
+
+ Gets or sets the for this property.
+
+ The for this property.
+
+
+
+ Gets or sets the type of the property.
+
+ The type of the property.
+
+
+
+ Gets or sets the for the property.
+ If set this converter takes precedence over the contract converter for the property type.
+
+ The converter.
+
+
+
+ Gets or sets the member converter.
+
+ The member converter.
+
+
+
+ Gets or sets a value indicating whether this is ignored.
+
+ true if ignored; otherwise, false.
+
+
+
+ Gets or sets a value indicating whether this is readable.
+
+ true if readable; otherwise, false.
+
+
+
+ Gets or sets a value indicating whether this is writable.
+
+ true if writable; otherwise, false.
+
+
+
+ Gets or sets a value indicating whether this has a member attribute.
+
+ true if has a member attribute; otherwise, false.
+
+
+
+ Gets the default value.
+
+ The default value.
+
+
+
+ Gets or sets a value indicating whether this is required.
+
+ A value indicating whether this is required.
+
+
+
+ Gets a value indicating whether has a value specified.
+
+
+
+
+ Gets or sets a value indicating whether this property preserves object references.
+
+
+ true if this instance is reference; otherwise, false.
+
+
+
+
+ Gets or sets the property null value handling.
+
+ The null value handling.
+
+
+
+ Gets or sets the property default value handling.
+
+ The default value handling.
+
+
+
+ Gets or sets the property reference loop handling.
+
+ The reference loop handling.
+
+
+
+ Gets or sets the property object creation handling.
+
+ The object creation handling.
+
+
+
+ Gets or sets or sets the type name handling.
+
+ The type name handling.
+
+
+
+ Gets or sets a predicate used to determine whether the property should be serialized.
+
+ A predicate used to determine whether the property should be serialized.
+
+
+
+ Gets or sets a predicate used to determine whether the property should be deserialized.
+
+ A predicate used to determine whether the property should be deserialized.
+
+
+
+ Gets or sets a predicate used to determine whether the property should be serialized.
+
+ A predicate used to determine whether the property should be serialized.
+
+
+
+ Gets or sets an action used to set whether the property has been deserialized.
+
+ An action used to set whether the property has been deserialized.
+
+
+
+ Returns a that represents this instance.
+
+
+ A that represents this instance.
+
+
+
+
+ Gets or sets the converter used when serializing the property's collection items.
+
+ The collection's items converter.
+
+
+
+ Gets or sets whether this property's collection items are serialized as a reference.
+
+ Whether this property's collection items are serialized as a reference.
+
+
+
+ Gets or sets the type name handling used when serializing the property's collection items.
+
+ The collection's items type name handling.
+
+
+
+ Gets or sets the reference loop handling used when serializing the property's collection items.
+
+ The collection's items reference loop handling.
+
+
+
+ A collection of objects.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The type.
+
+
+
+ When implemented in a derived class, extracts the key from the specified element.
+
+ The element from which to extract the key.
+ The key for the specified element.
+
+
+
+ Adds a object.
+
+ The property to add to the collection.
+
+
+
+ Gets the closest matching object.
+ First attempts to get an exact case match of and then
+ a case insensitive match.
+
+ Name of the property.
+ A matching property if found.
+
+
+
+ Gets a property by property name.
+
+ The name of the property to get.
+ Type property name string comparison.
+ A matching property if found.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Initializes a new instance of the class.
+
+ The underlying type for the contract.
+
+
+
+ Lookup and create an instance of the type described by the argument.
+
+ The type to create.
+ Optional arguments to pass to an initializing constructor of the JsonConverter.
+ If null, the default constructor is used.
+
+
+
+ A kebab case naming strategy.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+ A flag indicating whether dictionary keys should be processed.
+
+
+ A flag indicating whether explicitly specified property names should be processed,
+ e.g. a property name customized with a .
+
+
+
+
+ Initializes a new instance of the class.
+
+
+ A flag indicating whether dictionary keys should be processed.
+
+
+ A flag indicating whether explicitly specified property names should be processed,
+ e.g. a property name customized with a .
+
+
+ A flag indicating whether extension data names should be processed.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Resolves the specified property name.
+
+ The property name to resolve.
+ The resolved property name.
+
+
+
+ Represents a trace writer that writes to memory. When the trace message limit is
+ reached then old trace messages will be removed as new messages are added.
+
+
+
+
+ Gets the that will be used to filter the trace messages passed to the writer.
+ For example a filter level of will exclude messages and include ,
+ and messages.
+
+
+ The that will be used to filter the trace messages passed to the writer.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Writes the specified trace level, message and optional exception.
+
+ The at which to write this trace.
+ The trace message.
+ The trace exception. This parameter is optional.
+
+
+
+ Returns an enumeration of the most recent trace messages.
+
+ An enumeration of the most recent trace messages.
+
+
+
+ Returns a of the most recent trace messages.
+
+
+ A of the most recent trace messages.
+
+
+
+
+ A base class for resolving how property names and dictionary keys are serialized.
+
+
+
+
+ A flag indicating whether dictionary keys should be processed.
+ Defaults to false.
+
+
+
+
+ A flag indicating whether extension data names should be processed.
+ Defaults to false.
+
+
+
+
+ A flag indicating whether explicitly specified property names,
+ e.g. a property name customized with a , should be processed.
+ Defaults to false.
+
+
+
+
+ Gets the serialized name for a given property name.
+
+ The initial property name.
+ A flag indicating whether the property has had a name explicitly specified.
+ The serialized property name.
+
+
+
+ Gets the serialized name for a given extension data name.
+
+ The initial extension data name.
+ The serialized extension data name.
+
+
+
+ Gets the serialized key for a given dictionary key.
+
+ The initial dictionary key.
+ The serialized dictionary key.
+
+
+
+ Resolves the specified property name.
+
+ The property name to resolve.
+ The resolved property name.
+
+
+
+ Hash code calculation
+
+
+
+
+
+ Object equality implementation
+
+
+
+
+
+
+ Compare to another NamingStrategy
+
+
+
+
+
+
+ Represents a method that constructs an object.
+
+ The object type to create.
+
+
+
+ When applied to a method, specifies that the method is called when an error occurs serializing an object.
+
+
+
+
+ Provides methods to get attributes from a , , or .
+
+
+
+
+ Initializes a new instance of the class.
+
+ The instance to get attributes for. This parameter should be a , , or .
+
+
+
+ Returns a collection of all of the attributes, or an empty collection if there are no attributes.
+
+ When true, look up the hierarchy chain for the inherited custom attribute.
+ A collection of s, or an empty collection.
+
+
+
+ Returns a collection of attributes, identified by type, or an empty collection if there are no attributes.
+
+ The type of the attributes.
+ When true, look up the hierarchy chain for the inherited custom attribute.
+ A collection of s, or an empty collection.
+
+
+
+ Get and set values for a using reflection.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The member info.
+
+
+
+ Sets the value.
+
+ The target to set the value on.
+ The value to set on the target.
+
+
+
+ Gets the value.
+
+ The target to get the value from.
+ The value.
+
+
+
+ A snake case naming strategy.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+ A flag indicating whether dictionary keys should be processed.
+
+
+ A flag indicating whether explicitly specified property names should be processed,
+ e.g. a property name customized with a .
+
+
+
+
+ Initializes a new instance of the class.
+
+
+ A flag indicating whether dictionary keys should be processed.
+
+
+ A flag indicating whether explicitly specified property names should be processed,
+ e.g. a property name customized with a .
+
+
+ A flag indicating whether extension data names should be processed.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Resolves the specified property name.
+
+ The property name to resolve.
+ The resolved property name.
+
+
+
+ Specifies how strings are escaped when writing JSON text.
+
+
+
+
+ Only control characters (e.g. newline) are escaped.
+
+
+
+
+ All non-ASCII and control characters (e.g. newline) are escaped.
+
+
+
+
+ HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped.
+
+
+
+
+ Indicates the method that will be used during deserialization for locating and loading assemblies.
+
+
+
+
+ In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the LoadWithPartialName method of the class is used to load the assembly.
+
+
+
+
+ In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The Load method of the class is used to load the assembly.
+
+
+
+
+ Specifies type name handling options for the .
+
+
+ should be used with caution when your application deserializes JSON from an external source.
+ Incoming types should be validated with a custom
+ when deserializing with a value other than .
+
+
+
+
+ Do not include the .NET type name when serializing types.
+
+
+
+
+ Include the .NET type name when serializing into a JSON object structure.
+
+
+
+
+ Include the .NET type name when serializing into a JSON array structure.
+
+
+
+
+ Always include the .NET type name when serializing.
+
+
+
+
+ Include the .NET type name when the type of the object being serialized is not the same as its declared type.
+ Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON
+ you must specify a root type object with
+ or .
+
+
+
+
+ Determines whether the collection is null or empty.
+
+ The collection.
+
+ true if the collection is null or empty; otherwise, false.
+
+
+
+
+ Adds the elements of the specified collection to the specified generic .
+
+ The list to add to.
+ The collection of elements to add.
+
+
+
+ Converts the value to the specified type. If the value is unable to be converted, the
+ value is checked whether it assignable to the specified type.
+
+ The value to convert.
+ The culture to use when converting.
+ The type to convert or cast the value to.
+
+ The converted type. If conversion was unsuccessful, the initial value
+ is returned if assignable to the target type.
+
+
+
+
+ Helper method for generating a MetaObject which calls a
+ specific method on Dynamic that returns a result
+
+
+
+
+ Helper method for generating a MetaObject which calls a
+ specific method on Dynamic, but uses one of the arguments for
+ the result.
+
+
+
+
+ Helper method for generating a MetaObject which calls a
+ specific method on Dynamic, but uses one of the arguments for
+ the result.
+
+
+
+
+ Returns a Restrictions object which includes our current restrictions merged
+ with a restriction limiting our type
+
+
+
+
+ Helper class for serializing immutable collections.
+ Note that this is used by all builds, even those that don't support immutable collections, in case the DLL is GACed
+ https://github.com/JamesNK/Newtonsoft.Json/issues/652
+
+
+
+
+ Gets the type of the typed collection's items.
+
+ The type.
+ The type of the typed collection's items.
+
+
+
+ Gets the member's underlying type.
+
+ The member.
+ The underlying type of the member.
+
+
+
+ Determines whether the property is an indexed property.
+
+ The property.
+
+ true if the property is an indexed property; otherwise, false.
+
+
+
+
+ Gets the member's value on the object.
+
+ The member.
+ The target object.
+ The member's value on the object.
+
+
+
+ Sets the member's value on the target object.
+
+ The member.
+ The target.
+ The value.
+
+
+
+ Determines whether the specified MemberInfo can be read.
+
+ The MemberInfo to determine whether can be read.
+ /// if set to true then allow the member to be gotten non-publicly.
+
+ true if the specified MemberInfo can be read; otherwise, false.
+
+
+
+
+ Determines whether the specified MemberInfo can be set.
+
+ The MemberInfo to determine whether can be set.
+ if set to true then allow the member to be set non-publicly.
+ if set to true then allow the member to be set if read-only.
+
+ true if the specified MemberInfo can be set; otherwise, false.
+
+
+
+
+ Builds a string. Unlike this class lets you reuse its internal buffer.
+
+
+
+
+ Determines whether the string is all white space. Empty string will return false.
+
+ The string to test whether it is all white space.
+
+ true if the string is all white space; otherwise, false.
+
+
+
+
+ Specifies the state of the .
+
+
+
+
+ An exception has been thrown, which has left the in an invalid state.
+ You may call the method to put the in the Closed state.
+ Any other method calls result in an being thrown.
+
+
+
+
+ The method has been called.
+
+
+
+
+ An object is being written.
+
+
+
+
+ An array is being written.
+
+
+
+
+ A constructor is being written.
+
+
+
+
+ A property is being written.
+
+
+
+
+ A write method has not been called.
+
+
+
+ Specifies that an output will not be null even if the corresponding type allows it.
+
+
+ Specifies that when a method returns , the parameter will not be null even if the corresponding type allows it.
+
+
+ Initializes the attribute with the specified return value condition.
+
+ The return value condition. If the method returns this value, the associated parameter will not be null.
+
+
+
+ Gets the return value condition.
+
+
+ Specifies that an output may be null even if the corresponding type disallows it.
+
+
+ Specifies that null is allowed as an input even if the corresponding type disallows it.
+
+
+
+ Specifies that the method will not return if the associated Boolean parameter is passed the specified value.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+ The condition parameter value. Code after the method will be considered unreachable by diagnostics if the argument to
+ the associated parameter matches this value.
+
+
+
+ Gets the condition parameter value.
+
+
+
diff --git a/ExternalLibraries/Host/XP.Hardware.RaySource.Comet.Host.exe b/ExternalLibraries/Host/XP.Hardware.RaySource.Comet.Host.exe
new file mode 100644
index 0000000..dee81ce
Binary files /dev/null and b/ExternalLibraries/Host/XP.Hardware.RaySource.Comet.Host.exe differ
diff --git a/ExternalLibraries/Host/XP.Hardware.RaySource.Comet.Host.exe.config b/ExternalLibraries/Host/XP.Hardware.RaySource.Comet.Host.exe.config
new file mode 100644
index 0000000..c4d2f1f
--- /dev/null
+++ b/ExternalLibraries/Host/XP.Hardware.RaySource.Comet.Host.exe.config
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ExternalLibraries/Host/XP.Hardware.RaySource.Comet.Host.pdb b/ExternalLibraries/Host/XP.Hardware.RaySource.Comet.Host.pdb
new file mode 100644
index 0000000..fa83151
Binary files /dev/null and b/ExternalLibraries/Host/XP.Hardware.RaySource.Comet.Host.pdb differ
diff --git a/ExternalLibraries/Host/XP.Hardware.RaySource.Comet.Messages.dll b/ExternalLibraries/Host/XP.Hardware.RaySource.Comet.Messages.dll
new file mode 100644
index 0000000..66887b7
Binary files /dev/null and b/ExternalLibraries/Host/XP.Hardware.RaySource.Comet.Messages.dll differ
diff --git a/ExternalLibraries/Host/XP.Hardware.RaySource.Comet.Messages.pdb b/ExternalLibraries/Host/XP.Hardware.RaySource.Comet.Messages.pdb
new file mode 100644
index 0000000..6998920
Binary files /dev/null and b/ExternalLibraries/Host/XP.Hardware.RaySource.Comet.Messages.pdb differ
diff --git a/ExternalLibraries/Host/XP.Hardware.RaySource.Comet.dll b/ExternalLibraries/Host/XP.Hardware.RaySource.Comet.dll
new file mode 100644
index 0000000..325a7e3
Binary files /dev/null and b/ExternalLibraries/Host/XP.Hardware.RaySource.Comet.dll differ
diff --git a/ExternalLibraries/Host/XP.Hardware.RaySource.Comet.pdb b/ExternalLibraries/Host/XP.Hardware.RaySource.Comet.pdb
new file mode 100644
index 0000000..452d2e1
Binary files /dev/null and b/ExternalLibraries/Host/XP.Hardware.RaySource.Comet.pdb differ
diff --git a/ExternalLibraries/MORCODE.dll b/ExternalLibraries/MORCODE.dll
new file mode 100644
index 0000000..abefaca
Binary files /dev/null and b/ExternalLibraries/MORCODE.dll differ
diff --git a/ExternalLibraries/MvCameraControl.Net.XML b/ExternalLibraries/MvCameraControl.Net.XML
new file mode 100644
index 0000000..e79ec14
--- /dev/null
+++ b/ExternalLibraries/MvCameraControl.Net.XML
@@ -0,0 +1,18755 @@
+
+
+
+ MvCameraControl.Net
+
+
+
+
+ 排序方式
+
+
+
+
+ 按序列号排序
+
+
+
+
+ 按用户自定义名字排序
+
+
+
+
+ 按当前IP地址排序(升序)
+
+
+
+
+ 按当前IP地址排序(降序)
+
+
+
+
+ 动作命令信息
+
+
+
+
+ 设备密钥
+
+
+
+
+ 组键
+
+
+
+
+ 组掩码
+
+
+
+
+ 只有设置成1时Action Time才有效,非1时无效
+
+
+
+
+ 预定的时间,和主频有关
+
+
+
+
+ 广播包地址
+
+
+
+
+ 等待ACK的超时时间,如果为0表示不需要ACK
+
+
+
+
+ 只有设置成1时指定的网卡IP才有效,非1时无效
+
+
+
+
+ 指定的网卡IP
+
+
+
+
+ 动作命令返回信息
+
+
+
+
+ 设备IP
+
+
+
+
+ 状态码
+
+
+
+
+ 设备枚举类,支持枚举GigE Vision、USB3 Vision相机,及采集卡上的相机(GigE Vision、CameraLink、CoaXPress、XoFlink)
+
+
+
+
+ 枚举设备
+
+ 设备接口类型
+ 设备列表
+ 成功,返回MV_OK;失败,返回错误码
+
+ 设备接口类型为MV_GIGE_DEVICE时,枚举所有GigE设备,包含虚拟GigE设备和采集卡上的GigE设备。
+ 设备接口类型为MV_USB_DEVICE时,枚举所有USB设备,包含虚拟USB设备。
+
+ 设备列表的内存是在SDK内部分配的,调用该接口时会进行设备列表内存的释放和申请,避免多线程枚举操作。
+
+ 枚举到设备后,通过创建设备实例。
+
+
+
+
+ 枚举设备,支持枚举指定厂商的设备
+
+ 设备接口类型
+ 厂商名称
+ 设备列表
+ 成功,返回MV_OK;失败,返回错误码
+
+ 设备接口类型为MV_GIGE_DEVICE时,枚举所有GigE设备,包含虚拟GigE设备和采集卡上的GigE设备。
+ 设备接口类型为MV_USB_DEVICE时,枚举所有USB设备,包含虚拟USB设备。
+
+ 设备列表的内存是在SDK内部分配的,调用该接口时会进行设备列表内存的释放和申请,避免多线程枚举操作。
+
+ 枚举到设备后,通过创建设备实例。
+
+
+
+
+ 枚举设备, 可指定排序方式枚举、根据厂商名字过滤
+
+ 设备接口类型
+ 排序方式
+ 厂商名称
+ 设备列表
+ 成功,返回MV_OK;失败,返回错误码
+
+ 设备接口类型为MV_GIGE_DEVICE时,仅枚举网络上的网口相机,不包含虚拟GigE相机和采集卡上的相机
+ 设备接口类型为MV_USB_DEVICE时,枚举普通USB设备,不包含虚拟USB设备。
+
+ 设备列表的内存是在SDK内部分配的,调用该接口时会进行设备列表内存的释放和申请,避免多线程枚举操作。
+
+ 枚举到设备后,通过创建设备实例。
+
+
+
+
+ 判断设备是否可达
+
+ 设备信息
+ 访问权限
+ 可达,返回true;不可达,返回false
+
+
+
+ 设置GigE设备枚举超时时间,范围 1-UINT_MAX(包括1,不包括UINT_MAX)
+
+ 超时时间
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置枚举命令的回复包类型
+
+ 回复包类型(默认广播),0-单播,1-广播
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获取主机串口列表
+
+ 串口列表
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置在指定的串口上枚举设备
+
+ 串口列表
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 发出动作命令
+
+ 动作命令信息
+ 动作命令返回信息列表
+ 成功,返回MV_OK;失败,返回错误码
+
+ 仅GigEVision相机支持
+
+
+
+
+ 获取GigE设备组播状态
+
+ 设备信息
+ 组播状态(true:组播状态;false:非组播)
+ 成功,返回MV_OK;失败,返回错误码
+
+ 仅GigEVision相机支持
+
+
+
+
+ 将用户的设备信息格式转换为SDK的内部设备信息格式
+
+
+
+
+
+
+
+ 设备工厂类,用于创建设备实例
+
+
+
+
+ 创建设备对象
+
+ 设备信息
+ 成功-返回设备实例,失败-抛出异常
+
+
+
+ 通过设备IP地址创建设备,适用于GigE设备,不包含虚拟设备与采集卡设备
+
+ 设备IP地址
+ 网口IP地址
+ 成功-返回设备实例,失败-抛出异常
+
+
+
+ 通过GenTL设备信息创建设备句柄
+
+ 设备信息
+ 成功-返回设备实例,失败-抛出异常
+
+
+
+ 设备接口类型
+
+
+
+ GigE Vision 设备
+
+
+ USB3 Vision 设备
+
+
+ Camera Link 设备(串口)
+
+
+ 虚拟 GigE Vision 设备
+
+
+ 虚拟 USB3 Vision 设备
+
+
+ 网口采集卡下GigE Vision设备
+
+
+ Camera Link 设备
+
+
+ CoaXPress设备
+
+
+ XoFLink设备
+
+
+
+ 设备基本信息
+
+
+
+
+ 设备接口类型
+
+
+
+
+ 制造商信息
+
+
+
+
+ 设备型号
+
+
+
+
+ 设备版本
+
+
+
+
+ 设备序列号
+
+
+
+
+ 用户自定义名称
+
+
+
+
+ 设备类型信息,7 - 0 bit: 预留,15 - 8 bit:产品子类别,23 - 16 bit:产品类型,31 - 24bit:产品线(如: 0x01 标准产品;0x02 3D产品;0x03 智能ID产品)
+
+
+
+
+ GigE相机信息
+
+
+
+
+ GigE Vision协议主要版本
+
+
+
+
+ GigE Vision协议次要版本
+
+
+
+
+ 高MAC地址
+
+
+
+
+ 低MAC地址
+
+
+
+
+ IP配置选项
+
+
+
+
+ 当前IP配置
+
+
+
+
+ 当前IP地址
+
+
+
+
+ 当前子网掩码
+
+
+
+
+ 当前网关
+
+
+
+
+ 网口IP地址
+
+
+
+
+ 是否虚拟相机
+
+
+
+
+ 是否采集卡上的相机
+
+
+
+
+ USB相机信息
+
+
+
+
+ 控制输入端点
+
+
+
+
+ 控制输出端点
+
+
+
+
+ 流端点
+
+
+
+
+ 事件端点
+
+
+
+
+ 供应商ID号
+
+
+
+
+ 产品ID号
+
+
+
+
+ 设备索引号
+
+
+
+
+ 设备GUID号
+
+
+
+
+ 家族名字
+
+
+
+
+ 支持的USB协议
+
+
+
+
+ 设备地址
+
+
+
+
+ 是否虚拟相机
+
+
+
+
+ Camera Link串口设备信息
+
+
+
+
+ 端口号
+
+
+
+
+ 名称
+
+
+
+
+ CoaXPress设备信息
+
+
+
+
+ 相机ID
+
+
+
+
+ 采集卡ID
+
+
+
+
+ Camera Link设备信息
+
+
+
+
+ 相机ID
+
+
+
+
+ 采集卡ID
+
+
+
+
+ XoFLink设备信息
+
+
+
+
+ 相机ID
+
+
+
+
+ 采集卡ID
+
+
+
+
+ 设备访问权限,只支持GigE设备
+
+
+
+
+ 独占权限,其他APP只允许读CCP寄存器
+
+
+
+
+ 可以从5模式下抢占权限,然后以独占权限打开
+
+
+
+
+ 控制权限,其他APP允许读所有寄存器
+
+
+
+
+ 可以从5模式下抢占权限,然后以控制权限打开
+
+
+
+
+ 以可被抢占的控制权限打开
+
+
+
+
+ 可以从5模式下抢占权限,然后以可被抢占的控制权限打开
+
+
+
+
+ 读模式打开设备,适用于控制权限下
+
+
+
+
+ IP配置类型
+
+
+
+
+ 静态IP
+
+
+
+
+ DHCP自动获取IP
+
+
+
+
+ LLA(Link-local address),链路本地地址
+
+
+
+
+ GigE设备传输模式
+
+
+
+
+ 驱动模式
+
+
+
+
+ Socket模式
+
+
+
+
+ GigE设备网络传输的相关信息
+
+
+
+
+ 已接收数据大小 [统计StartGrabbing和StopGrabbing之间的数据量]
+
+
+
+
+ 丢失的包数量
+
+
+
+
+ 丢帧数量
+
+
+
+
+ 已接收的帧数
+
+
+
+
+ 请求重发包数
+
+
+
+
+ 重发包数
+
+
+
+
+ USB传输信息
+
+
+
+
+ 已接收数据大小 [Open和Close之间]
+
+
+
+
+ 已收到的帧数
+
+
+
+
+ 错误帧数
+
+
+
+
+ GigE传输类型
+
+
+
+
+ 单播
+
+
+
+
+ 组播
+
+
+
+
+ 局域网内广播
+
+
+
+
+ 子网内广播
+
+
+
+
+ 从相机获取
+
+
+
+
+ 用户自定义应用端接收图像数据Port号
+
+
+
+
+ 设置了单播,但本实例不接收图像数据
+
+
+
+
+ 组播模式,但本实例不接收图像数据
+
+
+
+
+ 设备异常类型
+
+
+
+
+ 设备断开连接
+
+
+
+
+ 设备异常消息
+
+
+
+
+ 消息类型
+
+
+
+
+ 提供设备通用的属性和接口
+
+
+
+
+ 打开设备,默认以独占权限打开
+
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 以指定访问权限打开设备,只支持GigE设备
+
+ 访问权限
+ 切换访问权限时的密钥
+ 成功,返回MV_OK;失败,返回错误码
+
+ 目前设备暂不支持MV_ACCESS_ExclusiveWithSwitch、MV_ACCESS_ControlWithSwitch、MV_ACCESS_ControlSwitchEnable、MV_ACCESS_ControlSwitchEnableWithKey这四种抢占模式。
+
+
+
+
+ 关闭设备
+
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设备本地升级
+
+ 升级文件路径
+ 成功,返回MV_OK;失败,返回错误码
+
+ 通过该接口可以将升级固件文件发送给设备进行升级。该接口需要等待升级固件文件成功传给设备端之后再返回,响应时间可能较长。
+
+
+
+
+ 获取升级进度
+
+ 升级进度
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 开启设备指定事件
+
+ 事件名称
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 关闭设备指定事件
+
+ 事件名称
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设备异常事件
+
+
+
+
+ 判断设备是否处于连接状态
+
+
+
+
+ 获取设备对应的图像采集对象
+
+
+
+
+ 获取设备对应的事件采集对象
+
+
+
+
+ 获取设备信息
+
+
+
+
+ 获取设备对应的参数配置对象
+
+
+
+
+ 获取格式转换对象
+
+
+
+
+ 获取用于图像处理的对象
+
+
+
+
+ 获取用于图像保存的对象
+
+
+
+
+ 获取用于解码图像的的对象
+
+
+
+
+ 获取录像对象
+
+
+
+
+ 获取图像和图形渲染对象
+
+
+
+
+ GigE设备专用接口
+
+
+
+
+ 获取最佳包大小
+
+ 最佳包大小
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 强制设备IP
+
+ IP地址
+ 子网掩码
+ 默认网关
+ 成功,返回MV_OK;失败,返回错误码
+
+ 强制设置设备网络参数(包括IP、子网掩码、默认网关),强制设置之后将需要重新创建设备句柄,仅GigE设备支持。
+ 如果设备为DHCP的状态,调用该接口强制设置设备网络参数之后设备将会重启。
+
+
+
+
+ 配置IP方式
+
+ IP配置类型
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置传输模式,默认为Driver模式
+
+ 网络传输模式
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获取网络传输信息
+
+ 网络传输信息
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置GVSP取流超时时间
+
+ 超时时间(MS),默认300ms,范围:>10ms
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获取GVSP取流超时时间
+
+ 超时时间(MS)
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置GVCP命令超时时间
+
+ 超时时间(MS),默认500ms,范围:0-10000ms
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获取GVCP命令超时时间
+
+ 超时时间(MS)
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置重传GVCP命令次数
+
+ 重传次数,范围:0-100
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获取重传GVCP命令次数
+
+ 重传次数
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置是否打开重发包,及重发包参数
+
+ 是否支持重发包
+ 最大重发比
+ 重发超时时间
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置重传命令最大尝试次数
+
+ 重传命令最大尝试次数,默认值20
+ 成功,返回MV_OK;失败,返回错误码
+
+ 该接口必须在调用开启重传包功能之后调用,否则失败且返回MV_E_CALLORDER。
+
+
+
+
+ 获取重传命令最大尝试次数
+
+ 传命令最大尝试次数
+ 成功,返回MV_OK;失败,返回错误码
+
+ 该接口必须在调用开启重传包功能之后调用,否则失败且返回MV_E_CALLORDER。
+
+
+
+
+ 设置同一重传包多次请求之间的时间间隔
+
+ 同一重传包多次请求之间的时间间隔,默认10ms
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获取同一重传包多次请求之间的时间间隔
+
+ 同一重传包多次请求之间的时间间隔(以毫秒为单位)
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置传输模式,可以为单播模式、组播模式等
+
+ 传输模式
+ 组播地址,组播模式下有意义
+ 组播端口,组播模式下有意义
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ USB设备专用接口
+
+
+
+
+ 设置U3V的传输包大小
+
+ 传输的包大小,单位:Byte,默认为1M,范围:Windows[0x400, 0x400000], Linux[0x400, 0x200000]
+ 成功,返回MV_OK;失败,返回错误码
+
+ 增加传输包大小可以适当降低取流时的CPU占用率。但不同的PC和不同USB扩展卡存在不同的兼容性,如果该参数设置过大可能会出现取不到图像的风险。
+
+
+
+
+ 获取U3V的传输包大小
+
+ 传输的包大小, 单位:Byte
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置U3V的传输通道个数
+
+ 传输通道个数,范围:1-10
+ 成功,返回MV_OK;失败,返回错误码
+
+ 可根据PC的性能、设备出图帧率、图像大小和内存使用率等因素对该参数进行调节。但不同的PC和不同的USB扩展卡存在不同的兼容性。
+
+
+
+
+ 获取U3V的传输通道个数
+
+ 传输通道个数
+ 成功,返回MV_OK;失败,返回错误码
+
+ 该接口用于获取当前的U3V异步取流节点个数,2000W设备的MONO8默认为3个,YUV为默认2个,RGB为默认1个,其它情况默认8个节点。
+
+
+
+
+ 设置U3V的事件缓存节点个数
+
+ 事件缓存节点个数,范围:1-64
+ 成功,返回MV_OK;失败,返回错误码
+
+ 该接口用于设置当前的U3V事件缓存节点个数,默认情况下为5个。
+
+
+
+
+ 设置U3V相机同步读写超时时间,范围为1000~UINT,默认1000 ms
+
+ 同步读写超时时间
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获取U3V相机同步读写超时时间
+
+ 同步读写超时时间
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获取主机从USB设备接收的数据统计信息,如已接收字节数、帧数
+
+ USB传输信息
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ Camera Link波特率
+
+
+
+
+ 9600
+
+
+
+
+ 19200
+
+
+
+
+ 38400
+
+
+
+
+ 57600
+
+
+
+
+ 115200
+
+
+
+
+ 230400
+
+
+
+
+ 460800
+
+
+
+
+ 921600
+
+
+
+
+ 最大值
+
+
+
+
+ Camera Link串口设备专用接口
+
+
+
+
+ 设置设备波特率
+
+ 波特率
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获取设备波特率
+
+ 波特率
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获取设备与主机间连接支持的波特率
+
+ 所支持波特率的或运算结果,单个波特率参考
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置串口操作等待时长
+
+ 串口操作的等待时长,单位为ms
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 错误码定义
+
+
+
+ 成功,无错误
+
+
+ 错误或无效的句柄
+
+
+ 不支持的功能
+
+
+ 缓存已满
+
+
+ 函数调用顺序错误
+
+
+ 错误的参数
+
+
+ 资源申请失败
+
+
+ 无数据
+
+
+ 前置条件有误,或运行环境已发生变化
+
+
+ 版本不匹配
+
+
+ 传入的内存空间不足
+
+
+ 异常图像,可能是丢包导致图像不完整
+
+
+ 动态导入DLL失败
+
+
+ 没有可输出的缓存
+
+
+ 加密错误
+
+
+ 未知的错误
+
+
+ 通用错误
+
+
+ 参数非法
+
+
+ 值超出范围
+
+
+ 属性
+
+
+ 运行环境有问题
+
+
+ 逻辑错误
+
+
+ 节点访问条件有误
+
+
+ 超时
+
+
+ 转换异常
+
+
+ GenICam未知错误
+
+
+ 命令不被设备支持
+
+
+ 访问的目标地址不存在
+
+
+ 目标地址不可写
+
+
+ 设备无访问权限
+
+
+ 设备忙,或网络断开
+
+
+ 网络包数据错误
+
+
+ 网络相关错误
+
+
+ 设备IP冲突
+
+
+ 读usb出错
+
+
+ 写usb出错
+
+
+ 设备异常
+
+
+ GenICam相关错误
+
+
+ 带宽不足
+
+
+ 驱动不匹配或者未装驱动
+
+
+ USB未知的错误
+
+
+ 升级固件不匹配
+
+
+ 升级固件语言不匹配
+
+
+ 升级冲突(设备已经在升级了再次请求升级即返回此错误)
+
+
+ 升级时设备内部出现错误
+
+
+ 升级时未知错误
+
+
+ 处理正确
+
+
+ 不确定类型错误
+
+
+ 能力集中存在无效参数
+
+
+ 内存地址为空
+
+
+ 内存对齐不满足要求
+
+
+ 内存空间大小不够
+
+
+ 内存空间大小不满足对齐要求
+
+
+ 内存地址不满足对齐要求
+
+
+ 图像格式不正确或者不支持
+
+
+ 图像宽高不正确或者超出范围
+
+
+ 图像宽高与step参数不匹配
+
+
+ 图像数据存储地址为空
+
+
+ 设置或者获取参数类型不正确
+
+
+ 设置或者获取参数的输入、输出结构体大小不正确
+
+
+ 处理类型不正确
+
+
+ 处理时输入、输出参数大小不正确
+
+
+ 子处理类型不正确
+
+
+ 子处理时输入、输出参数大小不正确
+
+
+ index参数不正确
+
+
+ value参数不正确或者超出范围
+
+
+ param_num参数不正确
+
+
+ 函数参数指针为空
+
+
+ 超过限定的最大内存
+
+
+ 回调函数出错
+
+
+ 加密错误
+
+
+ 算法库使用期限错误
+
+
+ 参数范围不正确
+
+
+ 数据大小不正确
+
+
+ 数据step不正确
+
+
+ cpu不支持优化代码中的指令集
+
+
+ 警告
+
+
+ 算法库超时
+
+
+ 算法版本号出错
+
+
+ 模型版本号出错
+
+
+ GPU内存分配错误
+
+
+ 文件不存在
+
+
+ 字符串为空
+
+
+ 图像解码器错误
+
+
+ 打开文件错误
+
+
+ 文件读取错误
+
+
+ 文件写错误
+
+
+ 文件读取大小错误
+
+
+ 文件类型错误
+
+
+ 模型类型错误
+
+
+ 分配内存错误
+
+
+ 线程绑核失败
+
+
+ 噪声特性图像格式错误
+
+
+ 噪声特性类型错误
+
+
+ 噪声特性个数错误
+
+
+ 噪声特性增益个数错误
+
+
+ 噪声曲线增益值输入错误
+
+
+ 噪声曲线柱数错误
+
+
+ 噪声估计初始化增益设置错误
+
+
+ 噪声估计未初始化
+
+
+ 颜色空间模式错误
+
+
+ 图像ROI个数错误
+
+
+ 图像ROI原点错误
+
+
+ 图像ROI大小错误
+
+
+ 输入的相机增益不存在(增益个数已达上限)
+
+
+ 输入的相机增益不在范围内
+
+
+ 输入的噪声特性内存大小错误
+
+
+
+ 设备event信息
+
+
+
+
+ Event名称
+
+
+
+
+ EventID
+
+
+
+
+ 流通道序号
+
+
+
+
+ 帧号 (暂无固件支持)
+
+
+
+
+ 时间戳
+
+
+
+
+ Event数据长度 (暂无固件支持)
+
+
+
+
+ Event数据,内部会进行一次拷贝,将非托管内存拷贝到托管内存 (暂无固件支持)
+
+
+
+
+ 设备事件
+
+
+
+
+ 事件信息
+
+
+
+
+ 提供设备事件订阅相关接口
+
+
+
+
+ 订阅事件
+
+ 事件名称
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 取消事件订阅
+
+ 事件名称
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 订阅所有事件
+
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 取消订阅所有事件
+
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设备事件
+
+
+
+
+ 通过GenTL枚举到的接口信息
+
+
+
+
+ GenTL接口ID
+
+
+
+
+ 传输层类型
+
+
+
+
+ 显示名称
+
+
+
+
+ GenTL的cti文件索引
+
+
+
+
+ 通过GenTL枚举到的设备信息
+
+
+
+
+ GenTL接口ID
+
+
+
+
+ 设备ID
+
+
+
+
+ 供应商名字
+
+
+
+
+ 型号名字
+
+
+
+
+ 传输层类型
+
+
+
+
+ 设备显示名称
+
+
+
+
+ 用户自定义名字
+
+
+
+
+ 序列号
+
+
+
+
+ 设备版本号
+
+
+
+
+ GenTL的cti文件索引
+
+
+
+
+ 提供GenTL相关接口
+
+
+
+
+ 通过GenTL枚举Interfaces
+
+ GenTL的cti文件路径
+ Interfaces列表
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 通过GenTL Interface枚举设备
+
+ Interface信息
+ 设备列表
+ 成功,返回MV_OK;失败,返回错误码
+
+ 枚举到设备后,通过创建设备实例。
+
+
+
+
+ 卸载cti库
+
+ 枚举卡时加载的cti文件路径
+ 成功,返回MV_OK;失败,返回错误码
+ 卸载前需要保证通过该cti枚举出的相机已全部关闭,否则报错前置条件错误。
+
+
+
+ 提供获取图像缓存、图像属性的接口
+
+
+
+
+ 转换为Bitmap
+
+ Bitmap对象,失败返回null
+
+
+
+ 图像数据指针(非托管内存)
+
+
+
+
+ 图像数据,内部会进行一次拷贝,将非托管内存拷贝到托管内存
+
+
+
+
+ 图像宽度
+
+
+
+
+ 图像高度
+
+
+
+
+ 像素格式
+
+
+
+
+ 图像大小
+
+
+
+
+ 图像解码
+
+
+
+
+ 无损解码
+
+ 输入图像及帧信息
+ 输出图像及帧信息。图像使用完之后需调用Dispose方法及时释放内存,防止内存快速上涨。
+ 成功,返回MV_OK;失败,返回错误码
+
+ 将从相机中取到的无损压缩码流解码成裸数据,同时支持解析当前相机实时图像的水印信息(如果输入的无损码流不是当前相机或者不是实时取流的,则水印解析可能异常)。
+ 若解码失败,请检查以下情况:(1)需要CPU支持 SSE AVX指令集(2)若当前帧异常(丢包等),可能导致解码异常(3)相机出图异常,即使不丢包也会异常。
+
+
+
+
+ 图像渲染模式
+
+
+
+
+ 默认模式,Windows:GDI,Linux:OpenGL
+
+
+
+
+ Direct3D,只支持Windows
+
+
+
+
+ OPENGL,只支持Windows
+
+
+
+
+ 颜色
+
+
+
+
+ 构造函数
+
+ 红色,根据像素颜色的相对深度,范围为[0.0 , 1.0],代表着[0, 255]的颜色深度
+ 绿色,根据像素颜色的相对深度,范围为[0.0 , 1.0],代表着[0, 255]的颜色深度
+ 蓝色,根据像素颜色的相对深度,范围为[0.0 , 1.0],代表着[0, 255]的颜色深度
+ 透明度,根据像素颜色的相对透明度,范围为[0.0 , 1.0] (此参数功能暂不支持)
+
+
+
+ 红色,根据像素颜色的相对深度,范围为[0.0 , 1.0],代表着[0, 255]的颜色深度
+
+
+
+
+ 绿色,根据像素颜色的相对深度,范围为[0.0 , 1.0],代表着[0, 255]的颜色深度
+
+
+
+
+ 蓝色,根据像素颜色的相对深度,范围为[0.0 , 1.0],代表着[0, 255]的颜色深度
+
+
+
+
+ 透明度,根据像素颜色的相对透明度,范围为[0.0 , 1.0] (此参数功能暂不支持)
+
+
+
+
+ 矩形
+
+
+
+
+ 构造函数
+
+ 矩形上边缘距离图像上边缘的距离,根据图像的相对位置,范围为[0.0 , 1.0]
+ 矩形下边缘距离图像下边缘的距离,根据图像的相对位置,范围为[0.0 , 1.0]
+ 矩形左边缘距离图像左边缘的距离,根据图像的相对位置,范围为[0.0 , 1.0]
+ 矩形右边缘距离图像右边缘的距离,根据图像的相对位置,范围为[0.0 , 1.0]
+
+
+
+ 矩形上边缘距离图像上边缘的距离,根据图像的相对位置,范围为[0.0 , 1.0]
+
+
+
+
+ 矩形下边缘距离图像下边缘的距离,根据图像的相对位置,范围为[0.0 , 1.0]
+
+
+
+
+ 矩形左边缘距离图像左边缘的距离,根据图像的相对位置,范围为[0.0 , 1.0]
+
+
+
+
+ 矩形右边缘距离图像右边缘的距离,根据图像的相对位置,范围为[0.0 , 1.0]
+
+
+
+
+ 点
+
+
+
+
+ 构造函数
+
+ 该点距离图像左边缘距离,根据图像的相对位置,范围为[0.0 , 1.0]
+ 该点距离图像上边缘距离,根据图像的相对位置,范围为[0.0 , 1.0]
+
+
+
+ 该点距离图像左边缘距离,根据图像的相对位置,范围为[0.0 , 1.0]
+
+
+
+
+ 该点距离图像上边缘距离,根据图像的相对位置,范围为[0.0 , 1.0]
+
+
+
+
+ 圆形
+
+
+
+
+ 构造函数
+
+ 圆心
+ 宽向半径,根据图像的相对位置[0, 1.0],半径与圆心的位置有关,需保证画出的圆在显示框范围之内,否则报错
+ 高向半径,根据图像的相对位置[0, 1.0],半径与圆心的位置有关,需保证画出的圆在显示框范围之内,否则报错
+
+
+
+ 圆心
+
+
+
+
+ 宽向半径,根据图像的相对位置[0, 1.0],半径与圆心的位置有关,需保证画出的圆在显示框范围之内,否则报错
+
+
+
+
+ 高向半径,根据图像的相对位置[0, 1.0],半径与圆心的位置有关,需保证画出的圆在显示框范围之内,否则报错
+
+
+
+
+ 线条
+
+
+
+
+ 线条的起始点坐标
+
+
+
+
+ 线条的终点坐标
+
+
+
+
+ 提供图像渲染、图形绘制接口
+
+
+
+
+ 显示一帧图像
+
+ 窗口句柄
+ 图像信息
+ 渲染模式
+ 成功,返回MV_OK;失败,返回错误码
+
+ 渲染方式可选择GDI或D3D,默认选择为GDI模式。渲染引擎仅在客户端不连接相机的情况下可以进行设置。GDI模式对电脑的显卡性能没有要求,适用于所有电脑。 D3D模式适用于安装显卡驱动且显卡内存大于1GB的电脑,该模式下客户端预览的图像效果会优于GDI模式下的图像效果。
+ 渲染模式为RenderMode.OPENGL时支持4G以上超大图渲染
+
+
+
+
+ 显示一帧图像
+
+ 窗口句柄
+ 图像数据指针
+ 图像数据长度
+ 图像宽
+ 图像高
+ 像素格式
+ 渲染模式
+ 成功,返回MV_OK;失败,返回错误码
+
+ 渲染方式可选择GDI或D3D,默认选择为GDI模式。渲染引擎仅在客户端不连接相机的情况下可以进行设置。GDI模式对电脑的显卡性能没有要求,适用于所有电脑。 D3D模式适用于安装显卡驱动且显卡内存大于1GB的电脑,该模式下客户端预览的图像效果会优于GDI模式下的图像效果。
+
+
+
+
+ 在图像上绘制矩形
+
+ 矩形框
+ 线条颜色
+ 线条宽度,只能是1或2
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 在图像上绘制圆形
+
+ 圆形信息
+ 线条颜色
+ 线条宽度,只能是1或2
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 在图像上绘制线条
+
+ 线条信息
+ 线条颜色
+ 线条宽度,只能是1或2
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 图像格式
+
+
+
+
+ BMP图像格式
+
+
+
+
+ JPEG图像格式
+
+
+
+
+ PNG图像格式
+
+
+
+
+ TIFF图像格式
+
+
+
+
+ 图像格式信息
+
+
+
+
+ 图像格式
+
+
+
+
+ JPEG编码质量(50-99],其他格式无效
+
+
+
+
+ 提供保存图像数据到文件的接口,支持BMP、JPG、PNG、TIFF格式图像
+
+
+
+
+ 保存图像到文件,支持BMP、JPG、PNG、TIFF格式图像
+
+ 文件路径
+ 图像数据
+ 图像格式信息
+ 图像插值方法
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 保存图像到缓存,支持BMP、JPG格式图像
+
+ 图像缓存
+ 转换后的图像数据长度
+ 图像数据
+ 图像格式信息
+ 图像插值方法
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 提供采集卡属性和接口
+
+
+
+
+ 打开采集卡
+
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 关闭采集卡
+
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设备本地升级
+
+ 升级文件路径
+ 成功,返回MV_OK;失败,返回错误码
+
+ 通过该接口可以将升级固件文件发送给设备进行升级。该接口需要等待升级固件文件成功传给设备端之后再返回,响应时间可能较长。
+
+
+
+
+ 获取升级进度
+
+ 升级进度
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 枚举采集卡上的相机
+
+ 相机列表
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 开启设备指定事件
+
+ 事件名称
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 关闭设备指定事件
+
+ 事件名称
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获取采集卡对应的参数配置对象
+
+
+
+
+ 获取采集卡对应的事件采集对象
+
+
+
+
+ 提供枚举采集卡接口
+
+
+
+
+ 枚举采集卡
+
+ 采集卡接口类型
+ 采集卡列表
+ 成功,返回MV_OK;失败,返回错误码
+
+ 枚举到采集卡后,通过创建采集卡实例。
+
+
+
+
+ 采集卡工厂类,创建采集卡实例
+
+
+
+
+ 根据采集卡信息创建采集卡实例
+
+ 采集卡信息
+ 成功-返回采集卡实例,失败-抛出异常
+
+
+
+ 根据采集卡ID创建采集卡实例
+
+ 采集卡ID
+ 成功-返回采集卡实例,失败-抛出异常
+
+
+
+ 采集卡接口类型定义
+
+
+
+
+ GigE Vision采集卡
+
+
+
+
+ Camera Link采集卡
+
+
+
+
+ CoaXPress采集卡
+
+
+
+
+ XoFLink采集卡
+
+
+
+
+ 采集卡信息
+
+
+
+
+ 采集卡接口类型,
+
+
+
+
+ 采集卡的PCIE插槽信息
+
+
+
+
+ 采集卡ID
+
+
+
+
+ 显示名称
+
+
+
+
+ 序列号
+
+
+
+
+ 型号
+
+
+
+
+ 厂商
+
+
+
+
+ 版本号
+
+
+
+
+ 自定义名称
+
+
+
+
+ 图像旋转角度
+
+
+
+
+ 90度
+
+
+
+
+ 180度
+
+
+
+
+ 270度
+
+
+
+
+ 图像翻转类型
+
+
+
+
+ 垂直翻转
+
+
+
+
+ 水平翻转
+
+
+
+
+ 图像重构方式
+
+
+
+
+ 源图像按行拆分成多张图像
+
+
+
+
+ 图像拼接方式
+
+
+
+
+ 垂直方向拼接
+
+
+
+
+ 提供图像处理相关接口,比如旋转、翻转、对比度、饱和度等
+
+
+
+
+ 图像旋转
+
+ 输入图像
+ 输出图像。图像使用完之后需调用Dispose方法及时释放内存,防止内存快速上涨。
+ 旋转角度
+ 成功,返回MV_OK;失败,返回错误码
+
+ 该接口只支持MONO8/RGB24/BGR24格式数据的90/180/270度旋转。
+
+
+
+
+ 图像翻转
+
+ 输入图像
+ 输出图像。图像使用完之后需调用Dispose方法及时释放内存,防止内存快速上涨。
+ 翻转类型
+ 成功,返回MV_OK;失败,返回错误码
+
+ 该接口只支持MONO8/RGB24/BGR24格式数据的垂直和水平翻转。
+
+
+
+
+ 图像对比度调节
+
+ 输入图像
+ 输出图像。图像使用完之后需调用Dispose方法及时释放内存,防止内存快速上涨。
+ 对比度值,[1, 10000]
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 重构图像(用于分时曝光功能)
+
+ 输入图像
+ 曝光个数(1-8]
+ 图像重构方式
+ 输出图像列表。图像使用完之后需调用Dispose方法及时释放内存,防止内存快速上涨。
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 重构图像(用于分时曝光功能,图像拆分后再拼接)
+
+ 输入图像
+ 曝光个数(1-8]
+ 图像重构的方式
+ 图像拼接的方式
+ 输出图像。图像使用完之后需调用Dispose方法及时释放内存,防止内存快速上涨。
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 内存块
+
+
+
+
+ 内存池
+
+
+
+
+ 关闭内存池,清空内部缓存
+
+
+
+
+ 归还内存块到内存池
+
+ 内存块
+ 是否手动释放
+
+
+
+ 更新内存块列表,释放过期内存。方法内部不加锁
+
+
+
+
+
+ 更新内存块的空闲时间并删除过期内存块。 方法内部不加锁
+
+
+
+
+
+
+ 打印统计信息
+
+
+
+
+ 初始化属性值,在构造函数中使用
+
+
+
+
+ 创建相机句柄
+
+
+ 错误码
+
+
+
+ 判断设备是否处于连接状态
+
+
+
+
+ 获取设备对应的图像采集对象
+
+
+
+
+ 获取设备信息
+
+
+
+
+ 获取设备对应的参数配置对象
+
+
+
+
+ 设置设备波特率
+
+ 波特率
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获取设备波特率
+
+ 波特率
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获取设备与主机间连接支持的波特率
+
+ 所支持波特率的或运算结果,单个波特率参考
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置串口操作等待时长
+
+ 串口操作的等待时长,单位为ms
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ Chunk数据
+
+
+
+
+ Chunk数据指针(非托管内存)
+
+
+
+
+ Chunk数据,内部会进行一次拷贝,将非托管内存拷贝到托管内存
+
+
+
+
+ ChunkID
+
+
+
+
+ Chunk数据长度
+
+
+
+
+ 图像帧里面的chunk信息
+
+
+
+
+ 通过ChunkID获取对应的ChunkData
+
+
+
+
+
+
+ 创建设备对象
+
+
+
+
+ 创建设备对象
+
+ 设备信息
+ 设备实例
+
+
+
+ 通过设备IP地址创建设备,适用于GigE设备
+
+ 设备IP地址
+ 网口IP地址
+ 设备实例
+
+
+
+ 通过GenTL设备信息创建设备句柄
+
+ 设备信息
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 采集卡类型
+
+
+
+
+ 未知采集卡
+
+
+
+
+ 虚拟采集卡
+
+
+
+
+ 自研采集卡
+
+
+
+
+ gige设备信息实现
+
+
+
+
+ 占用设备的主机ip
+
+
+
+
+ 组播ip
+
+
+
+
+ 组播port
+
+
+
+
+ 设备接口类型
+
+
+
+
+ 制造商信息
+
+
+
+
+ 制造商特殊信息
+
+
+
+
+ 设备型号
+
+
+
+
+ 设备版本
+
+
+
+
+ 设备序列号
+
+
+
+
+ 用户自定义名称
+
+
+
+
+ 设备类型信息,7 - 0 bit: 预留,15 - 8 bit:产品子类别,23 - 16 bit:产品类型,31 - 24bit:产品线(如: 0x01 标准产品;0x02 3D产品;0x03 智能ID产品)
+
+
+
+
+ GigE Vision协议主要版本
+
+
+
+
+ GigE Vision协议次要版本
+
+
+
+
+ 高MAC地址
+
+
+
+
+ 低MAC地址
+
+
+
+
+ IP配置选项
+
+
+
+
+ 当前IP配置
+
+
+
+
+ 当前IP地址
+
+
+
+
+ 当前子网掩码
+
+
+
+
+ 当前网关
+
+
+
+
+ 网口IP地址
+
+
+
+
+ 是否虚拟相机
+
+
+
+
+ 是否采集卡上的相机
+
+
+
+
+ USB设备信息类
+
+
+
+
+ 设备接口类型
+
+
+
+
+ 制造商信息
+
+
+
+
+ 设备型号
+
+
+
+
+ 设备版本
+
+
+
+
+ 设备序列号
+
+
+
+
+ 用户自定义名称
+
+
+
+
+ 设备类型信息,7 - 0 bit: 预留,15 - 8 bit:产品子类别,23 - 16 bit:产品类型,31 - 24bit:产品线(如: 0x01 标准产品;0x02 3D产品;0x03 智能ID产品)
+
+
+
+
+ 控制输入端点
+
+
+
+
+ 控制输出端点
+
+
+
+
+ 流端点
+
+
+
+
+ 事件端点
+
+
+
+
+ 供应商ID号
+
+
+
+
+ 产品ID号
+
+
+
+
+ 设备索引号
+
+
+
+
+ 设备GUID号
+
+
+
+
+ 家族名字
+
+
+
+
+ 供应商名称
+
+
+
+
+ 支持的USB协议
+
+
+
+
+ 设备地址
+
+
+
+
+ 是否虚拟相机
+
+
+
+
+ Camera Link串口设备信息
+
+
+
+
+ 设备接口类型
+
+
+
+
+ 制造商信息
+
+
+
+
+ 设备型号
+
+
+
+
+ 设备版本
+
+
+
+
+ 设备序列号
+
+
+
+
+ 用户自定义名称
+
+
+
+
+ 设备类型信息,7 - 0 bit: 预留,15 - 8 bit:产品子类别,23 - 16 bit:产品类型,31 - 24bit:产品线(如: 0x01 标准产品;0x02 3D产品;0x03 智能ID产品)
+
+
+
+
+ 端口号
+
+
+
+
+ 名称
+
+
+
+
+ CoaXPress设备信息
+
+
+
+
+ 设备接口类型
+
+
+
+
+ 制造商信息
+
+
+
+
+ 设备型号
+
+
+
+
+ 设备版本
+
+
+
+
+ 设备序列号
+
+
+
+
+ 用户自定义名称
+
+
+
+
+ 设备类型信息,7 - 0 bit: 预留,15 - 8 bit:产品子类别,23 - 16 bit:产品类型,31 - 24bit:产品线(如: 0x01 标准产品;0x02 3D产品;0x03 智能ID产品)
+
+
+
+
+ 相机ID
+
+
+
+
+ 采集卡ID
+
+
+
+
+ Camera Link设备信息
+
+
+
+
+ 设备接口类型
+
+
+
+
+ 制造商信息
+
+
+
+
+ 设备型号
+
+
+
+
+ 设备版本
+
+
+
+
+ 设备序列号
+
+
+
+
+ 用户自定义名称
+
+
+
+
+ 设备类型信息,7 - 0 bit: 预留,15 - 8 bit:产品子类别,23 - 16 bit:产品类型,31 - 24bit:产品线(如: 0x01 标准产品;0x02 3D产品;0x03 智能ID产品)
+
+
+
+
+ 相机ID
+
+
+
+
+ 采集卡ID
+
+
+
+
+ XoFLink设备信息
+
+
+
+
+ 设备接口类型
+
+
+
+
+ 制造商信息
+
+
+
+
+ 设备型号
+
+
+
+
+ 设备版本
+
+
+
+
+ 设备序列号
+
+
+
+
+ 用户自定义名称
+
+
+
+
+ 设备类型信息,7 - 0 bit: 预留,15 - 8 bit:产品子类别,23 - 16 bit:产品类型,31 - 24bit:产品线(如: 0x01 标准产品;0x02 3D产品;0x03 智能ID产品)
+
+
+
+
+ 相机ID
+
+
+
+
+ 采集卡ID
+
+
+
+
+ Event名称
+
+
+
+
+ EventID
+
+
+
+
+ 流通道序号
+
+
+
+
+ 帧号
+
+
+
+
+ 时间戳
+
+
+
+
+ Event数据长度
+
+
+
+
+ Event数据
+
+
+
+
+ GenTL接口ID
+
+
+
+
+ 传输层类型
+
+
+
+
+ 显示名称
+
+
+
+
+ GenTL的cti文件索引
+
+
+
+
+ GenTL接口ID
+
+
+
+
+ 设备ID
+
+
+
+
+ 供应商名字
+
+
+
+
+ 型号名字
+
+
+
+
+ 传输层类型
+
+
+
+
+ 设备显示名称
+
+
+
+
+ 用户自定义名字
+
+
+
+
+ 序列号
+
+
+
+
+ 设备版本号
+
+
+
+
+ GenTL的cti文件索引
+
+
+
+
+ 获取最佳包大小
+
+
+
+
+
+
+ 强制配置ip
+
+
+
+
+
+
+
+
+ 设置ip方式
+
+
+
+
+
+
+ 设置传输模式,默认为Driver模式
+
+ 网络传输模式
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获取网络传输信息
+
+ 网络传输信息
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置GVSP取流超时时间
+
+ 超时时间(MS),默认300ms,范围:>10ms
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获取GVSP取流超时时间
+
+ 超时时间(MS)
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置GVCP命令超时时间
+
+ 超时时间(MS),默认500ms,范围:0-10000ms
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获取GVCP命令超时时间
+
+ 超时时间(MS)
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置重传GVCP命令次数
+
+ 重传次数,范围:0-100
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获取重传GVCP命令次数
+
+ 重传次数
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置是否打开重发包,及重发包参数
+
+ 是否支持重发包
+ 最大重发比
+ 重发超时时间
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置重传命令最大尝试次数
+
+ 重传命令最大尝试次数,默认值20
+ 成功,返回MV_OK;失败,返回错误码
+
+ 该接口必须在调用开启重传包功能之后调用,否则失败且返回MV_E_CALLORDER。
+
+
+
+
+ 获取重传命令最大尝试次数
+
+ 传命令最大尝试次数
+ 成功,返回MV_OK;失败,返回错误码
+
+ 该接口必须在调用开启重传包功能之后调用,否则失败且返回MV_E_CALLORDER。
+
+
+
+
+ 设置同一重传包多次请求之间的时间间隔
+
+ 同一重传包多次请求之间的时间间隔,默认10ms
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获取同一重传包多次请求之间的时间间隔
+
+
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置传输模式,可以为单播模式、组播模式等
+
+
+ 组播地址,组播模式下有意义
+ 组播端口,组播模式下有意义
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 解码功能实现类
+
+
+
+
+ 判断像素是否为Mono格式
+
+
+
+
+
+
+ 判断图像格式是否为彩色格式
+
+
+
+
+
+
+ 获取图像大小
+
+ 图像宽度
+ 图像高度
+ 像素格式
+
+
+
+
+ 内存拷贝
+
+ 目标缓存
+ 源缓存
+ 拷贝大小
+
+
+
+ 将FrameOut转成MvCCDll的帧结构体
+
+
+
+
+
+
+
+ 将Byte数组转为String,使用UTF-8编码,并去掉结尾的'\0'
+
+
+
+
+
+
+ String字符串拷贝到byte[]
+
+
+
+
+
+
+ 判断字符数组是否为utf-8
+
+ 字符数组
+
+
+
+
+ 将枚举出来的设备信息转化为输出格式
+
+
+
+
+
+
+
+ 打开采集卡
+
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 关闭采集卡
+
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设备本地升级
+
+ 升级文件路径
+ 成功,返回MV_OK;失败,返回错误码
+
+ 通过该接口可以将升级固件文件发送给设备进行升级。该接口需要等待升级固件文件成功传给设备端之后再返回,响应时间可能较长。
+
+
+
+
+ 获取升级进度
+
+ 升级进度
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 枚举采集卡上的相机
+
+ 相机列表
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获取采集卡对应的参数配置对象
+
+
+
+
+ 采集卡接口类型,
+
+
+
+
+ 采集卡的PCIE插槽信息
+
+
+
+
+ 采集卡ID
+
+
+
+
+ 显示名称
+
+
+
+
+ 序列号
+
+
+
+
+ 型号
+
+
+
+
+ 厂商
+
+
+
+
+ 版本号
+
+
+
+
+ 自定义名称
+
+
+
+
+ MyCamera
+
+
+
+ ch GigE Vision采集卡 |en GigE Vision interface
+
+
+ ch Camera Link采集卡 |en Camera Link interface
+
+
+ ch CoaXPress采集卡 |en CoaXPress interface
+
+
+ ch XoFLink采集卡 |en XoFLink interface
+
+
+ Unknown Device Type, Reserved
+
+
+ GigE Device
+
+
+ 1394-a/b Device
+
+
+ USB3.0 Device
+
+
+ CameraLink Device
+
+
+ Virtual GigE Device
+
+
+ Virtual USB Device
+
+
+ GenTL GigE Device
+
+
+ GenTL CML Device
+
+
+ GenTL CXP Device
+
+
+ GenTL XOF Device
+
+
+
+ ch:信息结构体的最大缓存 | en: Max buffer size of information structs
+
+
+
+
+ 最大的相机数量
+
+
+
+
+ ch:最大Interface数量 | en:Max num of interfaces
+
+
+
+
+ ch:最大GenTL设备数量 | en:Max num of GenTL devices
+
+
+
+
+ XML节点描述最大长度
+
+
+
+
+ XML节点最大长度
+
+
+
+
+ XML节点最大数量
+
+
+
+
+ XML节点显示名最大数量
+
+
+
+
+ 枚举类型最大的EnumEntry个数
+
+
+
+
+ string类型节点值的最大长度
+
+
+
+
+ 最大父节点数
+
+
+
+
+ 最大节点描述长度
+
+
+
+
+ 参数导出允许配置的最大节点个数
+
+
+
+
+ 参数导入时节点导入失败的最大错误个数
+
+
+
+
+ 设备断开连接
+
+
+
+
+ SDK与驱动版本不匹配
+
+
+
+
+ 相机Event事件名称最大长度
+
+
+
+ 最大枚举条目对应的符号长度
+
+
+ 分时曝光时最多将源图像拆分的个数
+
+
+ 最大支持的串口数量
+
+
+
+ ch:最大支持的采集卡数量 | en:The maximum number of Frame Grabber interface supported
+
+
+
+
+ ch 静态 |en Static
+
+
+
+
+ ch DHCP |en DHCP
+
+
+
+
+ ch LLA |en LLA
+
+
+
+
+ 9600
+
+
+
+
+ 19200
+
+
+
+
+ 38400
+
+
+
+
+ 57600
+
+
+
+
+ 115200
+
+
+
+
+ 230400
+
+
+
+
+ 460800
+
+
+
+
+ 921600
+
+
+
+
+ ch 最大值 |en Auto Max
+
+
+
+
+ ch 网络流量和丢包信息 |en Network traffic and packet loss information
+
+
+
+
+ ch host接收到来自U3V设备的字节总数 |en The total number of bytes host received from U3V device
+
+
+
+
+ ch独占权限,其他APP只允许读CCP寄存器 |en Exclusive authority, other APP is only allowed to read the CCP register
+
+
+
+
+ ch 可以从5模式下抢占权限,然后以独占权限打开 |en You can seize the authority from the 5 mode, and then open with exclusive authority
+
+
+
+
+ ch 控制权限,其他APP允许读所有寄存器 |en Control authority, allows other APP reading all registers
+
+
+
+
+ ch 可以从5的模式下抢占权限,然后以控制权限打开 |en You can seize the authority from the 5 mode, and then open with control authority
+
+
+
+
+ ch 以可被抢占的控制权限打开 |en Open with seized control authority
+
+
+
+
+ ch 可以从5的模式下抢占权限,然后以可被抢占的控制权限打开 |en You can seize the authority from the 5 mode, and then open with seized control authority
+
+
+
+
+ ch 读模式打开设备,适用于控制权限下 |en Open with read mode and is available under control authority
+
+
+
+ 成功,无错误
+
+
+ 错误或无效的句柄
+
+
+ 不支持的功能
+
+
+ 缓存已满
+
+
+ 函数调用顺序错误
+
+
+ 错误的参数
+
+
+ 资源申请失败
+
+
+ 无数据
+
+
+ 前置条件有误,或运行环境已发生变化
+
+
+ 版本不匹配
+
+
+ 传入的内存空间不足
+
+
+ 异常图像,可能是丢包导致图像不完整
+
+
+ 动态导入DLL失败
+
+
+ 没有可输出的缓存
+
+
+ 加密错误
+
+
+ 打开文件出现错误
+
+
+ 未知的错误
+
+
+ 通用错误
+
+
+ 参数非法
+
+
+ 值超出范围
+
+
+ 属性
+
+
+ 运行环境有问题
+
+
+ 逻辑错误
+
+
+ 节点访问条件有误
+
+
+ 超时
+
+
+ 转换异常
+
+
+ GenICam未知错误
+
+
+ 命令不被设备支持
+
+
+ 访问的目标地址不存在
+
+
+ 目标地址不可写
+
+
+ 设备无访问权限
+
+
+ 设备忙,或网络断开
+
+
+ 网络包数据错误
+
+
+ 网络相关错误
+
+
+ 设备IP冲突
+
+
+ 读usb出错
+
+
+ 写usb出错
+
+
+ 设备异常
+
+
+ GenICam相关错误
+
+
+ 带宽不足
+
+
+ 驱动不匹配或者未装驱动
+
+
+ USB未知的错误
+
+
+ 升级固件不匹配
+
+
+ 升级固件语言不匹配
+
+
+ 升级冲突(设备已经在升级了再次请求升级即返回此错误)
+
+
+ 升级时设备内部出现错误
+
+
+ 升级时未知错误
+
+
+ 处理正确
+
+
+ 不确定类型错误
+
+
+ 能力集中存在无效参数
+
+
+ 内存地址为空
+
+
+ 内存对齐不满足要求
+
+
+ 内存空间大小不够
+
+
+ 内存空间大小不满足对齐要求
+
+
+ 内存地址不满足对齐要求
+
+
+ 图像格式不正确或者不支持
+
+
+ 图像宽高不正确或者超出范围
+
+
+ 图像宽高与step参数不匹配
+
+
+ 图像数据存储地址为空
+
+
+ 设置或者获取参数类型不正确
+
+
+ 设置或者获取参数的输入、输出结构体大小不正确
+
+
+ 处理类型不正确
+
+
+ 处理时输入、输出参数大小不正确
+
+
+ 子处理类型不正确
+
+
+ 子处理时输入、输出参数大小不正确
+
+
+ index参数不正确
+
+
+ value参数不正确或者超出范围
+
+
+ param_num参数不正确
+
+
+ 函数参数指针为空
+
+
+ 超过限定的最大内存
+
+
+ 回调函数出错
+
+
+ 加密错误
+
+
+ 算法库使用期限错误
+
+
+ 参数范围不正确
+
+
+ 数据大小不正确
+
+
+ 数据step不正确
+
+
+ cpu不支持优化代码中的指令集
+
+
+ 警告
+
+
+ 算法库超时
+
+
+ 算法版本号出错
+
+
+ 模型版本号出错
+
+
+ GPU内存分配错误
+
+
+ 文件不存在
+
+
+ 字符串为空
+
+
+ 图像解码器错误
+
+
+ 打开文件错误
+
+
+ 文件读取错误
+
+
+ 文件写错误
+
+
+ 文件读取大小错误
+
+
+ 文件类型错误
+
+
+ 模型类型错误
+
+
+ 分配内存错误
+
+
+ 线程绑核失败
+
+
+ 噪声特性图像格式错误
+
+
+ 噪声特性类型错误
+
+
+ 噪声特性个数错误
+
+
+ 噪声特性增益个数错误
+
+
+ 噪声曲线增益值输入错误
+
+
+ 噪声曲线柱数错误
+
+
+ 噪声估计初始化增益设置错误
+
+
+ 噪声估计未初始化
+
+
+ 颜色空间模式错误
+
+
+ 图像ROI个数错误
+
+
+ 图像ROI原点错误
+
+
+ 图像ROI大小错误
+
+
+ 输入的相机增益不存在(增益个数已达上限)
+
+
+ 输入的相机增益不在范围内
+
+
+ 输入的噪声特性内存大小错误
+
+
+
+ Byte array to struct
+
+ Byte array
+ Struct type
+ Struct object
+
+
+
+ Struct to Byte array
+
+ Struct object
+ Byte
+ Bytes
+
+
+
+ 判断字符数组是否为utf-8
+
+ 字符数组
+
+
+
+
+ Write Error Message
+
+ Message
+ ErrorNum
+
+
+
+ 获取枚举类型节点(支持的枚举个数扩展到256) V4.4.1新增
+
+
+
+
+ Grab callback
+
+ Image data
+ Frame info
+ User defined variable
+
+
+
+ Grab callback
+
+ Image data
+ Frame info
+ User defined variable
+
+
+
+ Xml Update callback(Interfaces not recommended)
+
+ Node type
+ Current node feature structure
+ Nodes list
+ User defined variable
+
+
+
+ Exception callback
+
+ Msg type
+ User defined variable
+
+
+
+ Event callback (Interfaces not recommended)
+
+ User defined ID
+ User defined variable
+
+
+
+ Event callback
+
+ Event Info
+ User defined variable
+
+
+
+ Stream Exception callback
+
+ Msg type
+ User defined variable
+
+
+
+ ch:采集卡信息列表 | en: Interface Information List
+
+
+
+
+ ch:在线设备数量 | en:Online Interface Number
+
+
+
+
+ ch:支持最多64个设备 | en:Support up to 64 Interfaces
+
+
+
+
+ ch:采集卡信息 | en: Interface information
+
+
+
+
+ ch: 采集卡类型; 低16位有效: bits(0~2)代表功能, bits(3~7)代表相机, bits(8-15)代表总线| en: Interface type
+
+
+
+
+ ch: 采集卡的PCIE插槽信息 | en: PCIe slot information of interface
+
+
+
+
+ ch: 采集卡ID | en: Interface ID
+
+
+
+
+ ch 显示名称 | en: Display name
+
+
+
+
+ ch 序列号 |en: Serial number
+
+
+
+
+ ch 型号 | en: model name
+
+
+
+
+ ch: 厂商 |en: manufacturer name
+
+
+
+
+ ch: 版本号| en: device version
+
+
+
+
+ ch: 自定义名称 |en: user defined name
+
+
+
+
+ ch 保留字段 | en Reserved
+
+
+
+
+ 排序方式
+
+
+
+
+ 按序列号排序
+
+
+
+
+ 按用户自定义名字排序
+
+
+
+
+ 按当前IP地址排序(升序)
+
+
+
+
+ 按当前IP地址排序(降序)
+
+
+
+
+ ch: GigE设备信息 | en: GigE device information
+
+
+
+
+ IP 配置选项
+
+
+
+
+ IP configuration:bit31-static bit30-dhcp bit29-lla
+
+
+
+
+ curtent ip
+
+
+
+
+ curtent subnet mask
+
+
+
+
+ current gateway
+
+
+
+
+ 制造商名
+
+
+
+
+ 型号名
+
+
+
+
+ 设备版本信息
+
+
+
+
+ 制造商特殊信息
+
+
+
+
+ 序列号
+
+
+
+
+ 用户自定义名
+
+
+
+
+ 网口IP地址
+
+
+
+
+ 预留
+
+
+
+
+ ch: GigE设备信息 | en: GigE device information
+
+
+
+
+ IP 配置选项
+
+
+
+
+ IP configuration:bit31-static bit30-dhcp bit29-lla
+
+
+
+
+ curtent ip
+
+
+
+
+ curtent subnet mask
+
+
+
+
+ current gateway
+
+
+
+
+ 制造商名
+
+
+
+
+ 型号名
+
+
+
+
+ 设备版本信息
+
+
+
+
+ 制造商特殊信息
+
+
+
+
+ 序列号
+
+
+
+
+ 用户自定义名
+
+
+
+
+ 网口IP地址
+
+
+
+
+ 预留
+
+
+
+
+ ch:USB3 设备信息 | en:USB3 device information
+
+
+
+
+ 控制输入端点
+
+
+
+
+ 控制输出端点
+
+
+
+
+ 流端点
+
+
+
+
+ 事件端点
+
+
+
+
+ 供应商ID号
+
+
+
+
+ 产品ID号
+
+
+
+
+ 设备索引号
+
+
+
+
+ 设备GUID号
+
+
+
+
+ 供应商名字
+
+
+
+
+ 型号名字
+
+
+
+
+ 家族名字
+
+
+
+
+ 设备版本号
+
+
+
+
+ 制造商名字
+
+
+
+
+ 序列号
+
+
+
+
+ 用户自定义名字
+
+
+
+
+ 支持的USB协议
+
+
+
+
+ 设备地址
+
+
+
+
+ 保留字节
+
+
+
+
+ ch:USB3 设备信息 | en:USB3 device information
+
+
+
+
+ 控制输入端点
+
+
+
+
+ 控制输出端点
+
+
+
+
+ 流端点
+
+
+
+
+ 事件端点
+
+
+
+
+ 供应商ID号
+
+
+
+
+ 产品ID号
+
+
+
+
+ 设备索引号
+
+
+
+
+ 设备GUID号
+
+
+
+
+ 供应商名字
+
+
+
+
+ 型号名字
+
+
+
+
+ 家族名字
+
+
+
+
+ 设备版本号
+
+
+
+
+ 制造商名字
+
+
+
+
+ 序列号
+
+
+
+
+ 用户自定义名字
+
+
+
+
+ 支持的USB协议
+
+
+
+
+ 设备地址
+
+
+
+
+ 保留字节
+
+
+
+
+ ch:CamLink设备信息 | en:CamLink device information
+
+
+
+
+ 端口号ID
+
+
+
+
+ 模型名
+
+
+
+
+ 家族名
+
+
+
+
+ 设备版本信息
+
+
+
+
+ 制造商名字
+
+
+
+
+ 序列号
+
+
+
+
+ 保留字节
+
+
+
+
+ ch:采集卡Camera Link相机信息 | en:Camera Link device information on frame grabber
+
+
+
+
+ ch 采集卡ID |en Interface ID of Frame Grabber
+
+
+
+
+ ch 供应商名字 |en Vendor name
+
+
+
+
+ ch 型号名字 |en Model name
+
+
+
+
+ ch 厂商信息 |en Manufacturer information
+
+
+
+
+ ch 相机版本 |en Device version
+
+
+
+
+ ch 序列号 |en Serial number
+
+
+
+
+ ch 用户自定义名字 |en User defined name
+
+
+
+
+ ch 相机ID |en Device ID
+
+
+
+
+ ch 保留字段 |en Reserved
+
+
+
+
+ ch:CoaXPress相机信息 | en:CoaXPress device information
+
+
+
+
+ ch 采集卡ID |en Interface ID of Frame Grabber
+
+
+
+
+ ch 供应商名字 |en Vendor name
+
+
+
+
+ ch 型号名字 |en Model name
+
+
+
+
+ ch 厂商信息 |en Manufacturer information
+
+
+
+
+ ch 相机版本 |en Device version
+
+
+
+
+ ch 序列号 |en Serial number
+
+
+
+
+ ch 用户自定义名字 |en User defined name
+
+
+
+
+ ch 相机ID |en Device ID
+
+
+
+
+ ch 保留字段 |en Reserved
+
+
+
+
+ ch:XoFLink相机信息 | en:XoFLink device information
+
+
+
+
+ ch 采集卡ID |en Interface ID of Frame Grabber
+
+
+
+
+ ch 供应商名字 |en Vendor name
+
+
+
+
+ ch 型号名字 |en Model name
+
+
+
+
+ ch 厂商信息 |en Manufacturer information
+
+
+
+
+ ch 相机版本 |en Device version
+
+
+
+
+ ch 序列号 |en Serial number
+
+
+
+
+ ch 用户自定义名字 |en User defined name
+
+
+
+
+ ch 相机ID |en Device ID
+
+
+
+
+ ch 保留字段 |en Reserved
+
+
+
+
+ ch:设备信息 | en:Device information
+
+
+
+
+ 主版本号
+
+
+
+
+ 次版本号
+
+
+
+
+ MAC高地址
+
+
+
+
+ MAC低地址
+
+
+
+
+ 设备传输层协议类型,e.g. MV_GIGE_DEVICE
+
+
+
+
+ ch 设备类型信息 | en Device Type Info
+
+
+
+
+ 保留字节
+
+
+
+
+ 设备类型
+
+
+
+
+ 构造函数
+
+ 输入任意数,因为不接受无参构造函数
+
+
+
+ ch:特定类型的设备信息 | en:Special devcie information
+
+
+
+
+ GigE
+
+
+
+
+ Camera Link
+
+
+
+
+ Usb
+
+
+
+
+ CML
+
+
+
+
+ CXP
+
+
+
+
+ XOF
+
+
+
+
+ 相机列表
+
+
+
+
+ 在线设备数量
+
+
+
+
+ 支持最多256个设备
+
+
+
+
+ ch:通过GenTL枚举到的Interface信息 | en:Interface Information with GenTL
+
+
+
+
+ GenTL接口ID
+
+
+
+
+ 传输层类型
+
+
+
+
+ 设备显示名称
+
+
+
+
+ GenTL的cti文件索引
+
+
+
+
+ 保留字节
+
+
+
+
+ ch:通过GenTL枚举到的设备信息列表 | en:Interface Information List with GenTL
+
+
+
+
+ ch:在线设备数量 | en:Online Interface Number
+
+
+
+
+ ch:支持最多256个设备 | en:Support up to 256 Interfaces
+
+
+
+
+ ch:通过GenTL枚举到的设备信息 | en:Device Information discovered by with GenTL
+
+
+
+
+ 采集卡ID
+
+
+
+
+ 设备ID
+
+
+
+
+ 供应商名字
+
+
+
+
+ 模型名
+
+
+
+
+ 传输类型
+
+
+
+
+ 显示名
+
+
+
+
+ 用户自定义名
+
+
+
+
+ 序列号
+
+
+
+
+ 设备版本信息
+
+
+
+
+ cti文件序号
+
+
+
+
+ 保留字节
+
+
+
+
+ ch:通过GenTL枚举到的设备信息 | en:Device Information discovered by with GenTL
+
+
+
+
+ 采集卡ID
+
+
+
+
+ 设备ID
+
+
+
+
+ 供应商名字
+
+
+
+
+ 模型名
+
+
+
+
+ 传输类型
+
+
+
+
+ 显示名
+
+
+
+
+ 用户自定义名
+
+
+
+
+ 序列号
+
+
+
+
+ 设备版本信息
+
+
+
+
+ cti文件序号
+
+
+
+
+ 保留字节
+
+
+
+
+ ch:GenTL设备列表 | en:GenTL devices list
+
+
+
+
+ 在线设备数量
+
+
+
+
+ 支持最多256个设备
+
+
+
+
+ Net Trans Info
+
+
+
+
+ 已接收数据大小 [统计StartGrabbing和StopGrabbing之间的数据量]
+
+
+
+
+ 丢帧数量
+
+
+
+
+ 接收帧数
+
+
+
+
+ 请求重发包数
+
+
+
+
+ 重发包数
+
+
+
+
+ Frame Out Info
+
+
+
+
+ 图像宽
+
+
+
+
+ 图像高
+
+
+
+
+ 像素格式
+
+
+
+
+ 帧号
+
+
+
+
+ 时间戳高32位
+
+
+
+
+ 时间戳低32位
+
+
+
+
+ 保留,8字节对齐
+
+
+
+
+ 主机生成的时间戳
+
+
+
+
+ 帧数据大小
+
+
+
+
+ 丢包数量
+
+
+
+
+ 保留字节
+
+
+
+
+ Chunk数据信息
+
+
+
+
+ Chunk数据
+
+
+
+
+ ChunkID
+
+
+
+
+ Chunk大小
+
+
+
+
+ 保留字节
+
+
+
+
+ Frame Out Info Ex
+
+
+
+
+ 图像宽
+
+
+
+
+ 图像高
+
+
+
+
+ 像素格式
+
+
+
+
+ 帧号
+
+
+
+
+ 时间戳高32位
+
+
+
+
+ 时间戳低32位
+
+
+
+
+ 保留,8字节对齐
+
+
+
+
+ 主机生成的时间戳
+
+
+
+
+ Frame大小
+
+
+
+
+ 秒数
+
+
+
+
+ 周期数
+
+
+
+
+ 周期偏移量
+
+
+
+
+ 增益
+
+
+
+
+ 曝光时间
+
+
+
+
+ 平均亮度
+
+
+
+
+ Red
+
+
+
+
+ Green
+
+
+
+
+ Blue
+
+
+
+
+ 帧计数器
+
+
+
+
+ 触发计数
+
+
+
+
+ 输入
+
+
+
+
+ 输出
+
+
+
+
+ 水平偏移量
+
+
+
+
+ 垂直偏移量
+
+
+
+
+ Chunk宽度
+
+
+
+
+ Chunk高度
+
+
+
+
+ 丢包数
+
+
+
+
+ 为解析的Chunk数量
+
+
+
+
+ 为解析的Chunk列表
+
+
+
+
+ 图像宽扩展
+
+
+
+
+ 图像高扩展
+
+
+
+
+ 帧长度扩展
+
+
+
+
+ 保留字节
+
+
+
+
+ 为解析的Chunk列表
+
+
+
+
+ 为解析的Chunk内容
+
+
+
+
+ 对齐结构体,无实际用途
+
+
+
+
+ 输出帧信息
+
+
+
+
+ 帧数据地址
+
+
+
+
+ 帧信息
+
+
+
+
+ 保留字节
+
+
+
+
+ 取流策略
+
+
+
+
+ 从旧到新一帧一帧的获取图像(默认为该策略)
+
+
+
+
+ 获取列表中最新的一帧图像(同时清除列表中的其余图像)
+
+
+
+
+ 获取列表中最新的图像,个数由OutputQueueSize决定,范围为1-ImageNodeNum,设置成1等同于LatestImagesOnly,设置成ImageNodeNum等同于OneByOne
+
+
+
+
+ 等待下一帧图像
+
+
+
+
+ 显示帧信息
+
+
+
+
+ 显示窗口的句柄
+
+
+
+
+ 显示的帧数据
+
+
+
+
+ 显示的帧数据大小
+
+
+
+
+ 图像宽
+
+
+
+
+ 图像高
+
+
+
+
+ 像素格式
+
+
+
+
+ 保留字节
+
+
+
+
+ 显示帧信息
+
+
+
+
+ 图像宽
+
+
+
+
+ 图像高
+
+
+
+
+ 像素格式
+
+
+
+
+ 显示的帧数据
+
+
+
+
+ 显示的帧数据大小
+
+
+
+
+ 图像渲染方式 0-默认模式(Windows GDI/Linux OPENGL), 1-D3D模式(Windows有效)
+
+
+
+
+ 保留字节
+
+
+
+
+ 图像信息
+
+
+
+
+ 图像宽
+
+
+
+
+ 图像高
+
+
+
+
+ 像素格式
+
+
+
+
+ 图像缓存
+
+
+
+
+ 图像缓存大小
+
+
+
+
+ 图像长度
+
+
+
+
+ 保留字节
+
+
+
+
+ ch:保存3D数据格式 | en:Save 3D file
+
+
+
+
+ 未定义数据格式
+
+
+
+
+ PLY数据格式
+
+
+
+
+ CSV数据格式
+
+
+
+
+ OBJ数据格式
+
+
+
+
+ 保存的点阵参数
+
+
+
+
+ [IN] 每一行点的数量
+
+
+
+
+ [IN] 行数
+
+
+
+
+ [IN] 输入数据的像素格式
+
+
+
+
+ [IN] 输入数据缓存
+
+
+
+
+ [IN] 输入数据大小
+
+
+
+
+ [OUT] 输出像素数据缓存
+
+
+
+
+ [IN] 提供的输出缓冲区大小(nLinePntNum * nLineNum * (16*3 + 4) + 2048)
+
+
+
+
+ [OUT] 输出像素数据缓存长度
+
+
+
+
+ 保存的点阵文件类型
+
+
+
+
+ 保留字节
+
+
+
+
+ 保存的图像格式
+
+
+
+
+ 未定义类型
+
+
+
+
+ Bmp图像格式
+
+
+
+
+ Jpeg图像格式
+
+
+
+
+ Png图像格式
+
+
+
+
+ Tif图像格式
+
+
+
+
+ 保存的图像参数
+
+
+
+
+ [IN] 输入数据缓存
+
+
+
+
+ [IN] 输入数据大小
+
+
+
+
+ [IN] 输入数据的像素格式
+
+
+
+
+ [IN] 图像宽
+
+
+
+
+ [IN] 图像高
+
+
+
+
+ [OUT] 输出图片缓存
+
+
+
+
+ [OUT] 输出图片大小
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ [IN] 输出图片格式
+
+
+
+
+ 保存的图像参数
+
+
+
+
+ [IN] 输入数据缓存
+
+
+
+
+ [IN] 输入数据大小
+
+
+
+
+ [IN] 输入数据的像素格式
+
+
+
+
+ [IN] 图像宽
+
+
+
+
+ [IN] 图像高
+
+
+
+
+ [OUT] 输出图片缓存
+
+
+
+
+ [OUT] 输出图片大小
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ [IN] 输出图片格式
+
+
+
+
+ [IN] 编码质量, (50-99]
+
+
+
+
+ [IN] Bayer的插值方法 0-快速 1-均衡 2-最优(如果传入其它值则默认为最优)
+
+
+
+
+ 保留字节
+
+
+
+
+ 保存的图像信息扩展
+
+
+
+
+ [IN] 输入数据缓存
+
+
+
+
+ [IN] 输入数据大小
+
+
+
+
+ [IN] 输入数据的像素格式
+
+
+
+
+ [IN] 图像宽
+
+
+
+
+ [IN] 图像高
+
+
+
+
+ [OUT] 输出图片缓存
+
+
+
+
+ [OUT] 输出图片大小
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ [IN] 输出图片格式
+
+
+
+
+ [IN] 编码质量, (50-99]
+
+
+
+
+ [IN] Bayer的插值方法 0-快速 1-均衡 2-最优(如果传入其它值则默认为最优)
+
+
+
+
+ 保留字节
+
+
+
+
+ 保存图像到文件的参数
+
+
+
+
+ [IN] 输入数据的像素格式
+
+
+
+
+ [IN] 输入数据缓存
+
+
+
+
+ [IN] 输入数据大小
+
+
+
+
+ [IN] 图像宽
+
+
+
+
+ [IN] 图像高
+
+
+
+
+ [IN] 输入图片格式
+
+
+
+
+ [IN] 编码质量, (0-100]
+
+
+
+
+ [IN] 输入文件路径
+
+
+
+
+ [IN] Bayer的插值方法 0-快速 1-均衡 2-最优(如果传入其它值则默认为最优)
+
+
+
+
+ 保留字节
+
+
+
+
+ 保存图像到文件信息扩展
+
+
+
+
+ [IN] 图像宽
+
+
+
+
+ [IN] 图像高
+
+
+
+
+ [IN] 输入数据的像素格式
+
+
+
+
+ [IN] 输入数据缓存
+
+
+
+
+ [IN] 输入数据大小
+
+
+
+
+ [IN] 输入图片格式
+
+
+
+
+ [IN] 输入文件路径
+
+
+
+
+ [IN] 编码质量, (0-100]
+
+
+
+
+ [IN] Bayer的插值方法 0-快速 1-均衡 2-最优(如果传入其它值则默认为最优)
+
+
+
+
+ 保留字节
+
+
+
+
+ 保存图片所需参数
+
+
+
+
+ [IN] 输入图片格式
+
+
+
+
+ [IN] 编码质量, (0-100]
+
+
+
+
+ [IN] Bayer的插值方法 0-快速 1-均衡 2-最优(如果传入其它值则默认为最优)
+
+
+
+
+ 保留字节
+
+
+
+
+ 旋转角度
+
+
+
+
+ 旋转90度
+
+
+
+
+ 旋转180度
+
+
+
+
+ 旋转270度
+
+
+
+
+ 旋转图像参数
+
+
+
+
+ [IN] 像素格式(仅支持Mono8/RGB24/BGR24)
+
+
+
+
+ [IN][OUT] 图像宽
+
+
+
+
+ [IN][OUT] 图像高
+
+
+
+
+ [IN] 输入数据缓存
+
+
+
+
+ [IN] 输入数据大小
+
+
+
+
+ [OUT] 输出图片缓存
+
+
+
+
+ [OUT] 输出图片大小
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ [IN] 旋转角度
+
+
+
+
+ 保留字节
+
+
+
+
+ 图像翻转类型
+
+
+
+
+ 垂直方向翻转
+
+
+
+
+ 水平方向翻转
+
+
+
+
+ 翻转图像参数
+
+
+
+
+ [IN] 像素格式(仅支持Mono8/RGB24/BGR24)
+
+
+
+
+ [IN] 图像宽
+
+
+
+
+ [IN] 图像高
+
+
+
+
+ [IN] 输入数据缓存
+
+
+
+
+ [IN] 输入数据大小
+
+
+
+
+ [OUT] 输出图片缓存
+
+
+
+
+ [OUT] 输出图片大小
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ [IN] 翻转类型
+
+
+
+
+ 保留字节
+
+
+
+
+ 像素转换参数
+
+
+
+
+ [IN] 图像宽
+
+
+
+
+ [IN] 图像高
+
+
+
+
+ [IN] 源像素格式
+
+
+
+
+ [IN] 输入数据缓存
+
+
+
+
+ [IN] 输入数据大小
+
+
+
+
+ [IN] 目标像素格式
+
+
+
+
+ [OUT] 输出数据缓存
+
+
+
+
+ [OUT] 输出数据大小
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ 保留字节
+
+
+
+
+ 图像像素转换信息扩展
+
+
+
+
+ [IN] 图像宽
+
+
+
+
+ [IN] 图像高
+
+
+
+
+ [IN] 源像素格式
+
+
+
+
+ [IN] 输入数据缓存
+
+
+
+
+ [IN] 输入数据大小
+
+
+
+
+ [IN] 目标像素格式
+
+
+
+
+ [OUT] 输出数据缓存
+
+
+
+
+ [OUT] 输出数据大小
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ 保留字节
+
+
+
+
+ Gamma类型
+
+
+
+
+ 不启用
+
+
+
+
+ GAMMA值
+
+
+
+
+ GAMMA曲线,8位需要的长度:256*sizeof(unsigned char)
+ 10位需要的长度:1024*sizeof(unsigned short)
+ 12位需要的长度:4096*sizeof(unsigned short)
+ 16位需要的长度:65536*sizeof(unsigned short)
+
+
+
+
+ 线性RGB转非线性RGB
+
+
+
+
+ 非线性RGB转线性RGB
+
+
+
+
+ Gamma参数
+
+
+
+
+ [IN] Gamma类型
+
+
+
+
+ [IN] Gamma值
+
+
+
+
+ [IN] Gamma曲线缓存
+
+
+
+
+ [IN] Gamma曲线长度
+
+
+
+
+ 保留字节
+
+
+
+
+ CCM参数
+
+
+
+
+ [IN] 是否启用CCM
+
+
+
+
+ [IN] CCM矩阵(-8192~8192)
+
+
+
+
+ 保留字节
+
+
+
+
+ CCM参数
+
+
+
+
+ [IN] 是否启用CCM
+
+
+
+
+ [IN] 量化3x3矩阵
+
+
+
+
+ [IN] 量化系数(2的整数幂)
+
+
+
+
+ 保留字节
+
+
+
+
+ CLUT参数
+
+
+
+
+ [IN] 是否启用CLUT
+
+
+
+
+ [IN] 量化系数(2的整数幂)
+
+
+
+
+ [IN] CLUT大小,建议值17
+
+
+
+
+ [OUT] 量化CLUT
+
+
+
+
+ [IN] 量化CLUT缓存大小(nCLUTSize*nCLUTSize*nCLUTSize*sizeof(int)*3)
+
+
+
+
+ 保留字节
+
+
+
+
+ 对比度调节参数
+
+
+
+
+ [IN] 图像宽度(最小8)
+
+
+
+
+ [IN] 图像高度(最小8)
+
+
+
+
+ [IN] 输入图像缓存
+
+
+
+
+ [IN] 输入图像缓存长度
+
+
+
+
+ [IN] 输入的像素格式
+
+
+
+
+ [OUT] 输出像素数据缓存
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ [OUT] 输出像素数据缓存长度
+
+
+
+
+ [IN] 对比度值,范围:[1, 10000]
+
+
+
+
+ 保留字节
+
+
+
+
+ 锐化参数
+
+
+
+
+ [IN] 图像宽度(最小8)
+
+
+
+
+ [IN] 图像高度(最小8)
+
+
+
+
+ [IN] 输入图像缓存
+
+
+
+
+ [IN] 输入图像缓存长度
+
+
+
+
+ [IN] 输入的像素格式
+
+
+
+
+ [OUT] 输出像素数据缓存
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ [OUT] 输出像素数据缓存长度
+
+
+
+
+ [IN] 锐度调节强度,范围:[0, 500]
+
+
+
+
+ [IN] 锐度调节半径(半径越大,耗时越长),范围:[1, 21]
+
+
+
+
+ [IN] 锐度调节阈值,范围:[0, 255]
+
+
+
+
+ 保留字节
+
+
+
+
+ 色彩校正参数(包括CCM和CLUT)
+
+
+
+
+ [IN] 图像宽度
+
+
+
+
+ [IN] 图像高度
+
+
+
+
+ [IN] 输入图像缓存
+
+
+
+
+ [IN] 输入图像缓存长度
+
+
+
+
+ [IN] 输入的像素格式
+
+
+
+
+ [OUT] 输出像素数据缓存
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ [OUT] 输出像素数据缓存长度
+
+
+
+
+ [IN] 输入有效图像位数,8 or 10 or 12 or 16
+
+
+
+
+ [IN] 输入Gamma信息
+
+
+
+
+ [IN] 输入CCM信息
+
+
+
+
+ [IN] 输入CLUT信息
+
+
+
+
+ 保留字节
+
+
+
+
+ 矩形ROI参数
+
+
+
+
+ [IN] 矩形左上角X轴坐标
+
+
+
+
+ [IN] 矩形左上角Y轴坐标
+
+
+
+
+ [IN] 矩形宽度
+
+
+
+
+ [IN] 矩形高度
+
+
+
+
+ 噪声估计参数
+
+
+
+
+ [IN] 图像宽度
+
+
+
+
+ [IN] 图像高度
+
+
+
+
+ [IN] 输入的像素格式
+
+
+
+
+ [IN] 输入图像缓存
+
+
+
+
+ [IN] 输入图像缓存长度
+
+
+
+
+ [IN] 图像ROI
+
+
+
+
+ [IN] ROI个数
+
+
+
+
+ [IN] 噪声阈值[0-4095]
+
+
+
+
+ [OUT] 输出噪声特性
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ [OUT] 输出噪声特性长度
+
+
+
+
+ 保留字节
+
+
+
+
+ 空域降噪参数
+
+
+
+
+ [IN] 图像宽度
+
+
+
+
+ [IN] 图像高度
+
+
+
+
+ [IN] 输入的像素格式
+
+
+
+
+ [IN] 输入图像缓存
+
+
+
+
+ [IN] 输入图像缓存长度
+
+
+
+
+ [OUT] 输出降噪后的数据
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ [OUT] 输出降噪后的数据长度
+
+
+
+
+ [IN] 输入噪声特性
+
+
+
+
+ [IN] 输入噪声特性长度
+
+
+
+
+ [IN] 降噪强度(0-100)
+
+
+
+
+ [IN] 锐化强度(0-32)
+
+
+
+
+ [IN] 噪声校正系数(0-1280)
+
+
+
+
+ [IN] 亮度校正系数(1-2000)
+
+
+
+
+ [IN] 色调校正系数(1-2000)
+
+
+
+
+ [IN] 亮度降噪强度(0-100)
+
+
+
+
+ [IN] 色调降噪强度(0-100)
+
+
+
+
+ [IN] 锐化强度(1-1000)
+
+
+
+
+ 保留字节
+
+
+
+
+ LSC标定参数
+
+
+
+
+ [IN] 图像宽度(16~65536)
+
+
+
+
+ [IN] 图像高度(16~65536)
+
+
+
+
+ [IN] 输入的像素格式
+
+
+
+
+ [IN] 输入图像缓存
+
+
+
+
+ [IN] 输入图像缓存长度
+
+
+
+
+ [OUT] 输出标定表缓存
+
+
+
+
+ [IN] 提供的标定表缓冲大小(nWidth*nHeight*sizeof(unsigned short))
+
+
+
+
+ [OUT] 输出标定表缓存长度
+
+
+
+
+ [IN] 宽度分块数
+
+
+
+
+ [IN] 高度分块数
+
+
+
+
+ [IN] 边缘填充系数,范围1~5
+
+
+
+
+ [IN] 标定方式,0-中心为基准
+ 1-最亮区域为基准
+ 2-目标亮度
+
+
+
+
+ [IN] 目标亮度(8bits,[0,255])
+ (10bits,[0,1023])
+ (12bits,[0,4095])
+ (16bits,[0,65535])
+
+
+
+
+ 保留字节
+
+
+
+
+ LSC校正参数
+
+
+
+
+ [IN] 图像宽度(16~65536)
+
+
+
+
+ [IN] 图像高度(16~65536)
+
+
+
+
+ [IN] 输入的像素格式
+
+
+
+
+ [IN] 输入图像缓存
+
+
+
+
+ [IN] 输入图像缓存长度
+
+
+
+
+ [OUT] 输出像素数据缓存
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ [OUT] 输出像素数据缓存长度
+
+
+
+
+ [IN] 输入校正表缓存
+
+
+
+
+ [IN] 输入校正表缓存长度
+
+
+
+
+ 保留字节
+
+
+
+
+ 噪声特性类型
+
+
+
+
+ 无效
+
+
+
+
+ 噪声曲线
+
+
+
+
+ 噪声水平
+
+
+
+
+ 默认值
+
+
+
+
+ 噪声基本信息
+
+
+
+
+ 版本
+
+
+
+
+ 噪声特性类型
+
+
+
+
+ 图像格式
+
+
+
+
+ 平均噪声水平
+
+
+
+
+ 曲线点数
+
+
+
+
+ 噪声曲线
+
+
+
+
+ 亮度曲线
+
+
+
+
+ 保留字节
+
+
+
+
+ 噪声估计参数
+
+
+
+
+ [IN] 图像宽(大于等于8)
+
+
+
+
+ [IN] 图像高(大于等于8)
+
+
+
+
+ [IN] 像素格式
+
+
+
+
+ [IN] 输入数据缓存
+
+
+
+
+ [IN] 输入数据大小
+
+
+
+
+ [IN] 噪声阈值(0-4095)
+
+
+
+
+ [IN] 用于存储噪声曲线和亮度曲线(需要外部分配,缓存大小:4096 * sizeof(int) * 2)
+
+
+
+
+ [OUT] 降噪特性信息
+
+
+
+
+ [IN] 线程数量,0表示算法库根据硬件自适应;1表示单线程(默认);大于1表示线程数目
+
+
+
+
+ 保留字节
+
+
+
+
+ 降噪参数
+
+
+
+
+ [IN] 图像宽(大于等于8)
+
+
+
+
+ [IN] 图像高(大于等于8)
+
+
+
+
+ [IN] 像素格式
+
+
+
+
+ [IN] 输入数据缓存
+
+
+
+
+ [IN] 输入数据大小
+
+
+
+
+ [OUT] 输出降噪后的数据
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ [OUT] 输出降噪后的数据长度
+
+
+
+
+ [IN] 降噪特性信息(来源于噪声估计)
+
+
+
+
+ [IN] 降噪强度(0-100)
+
+
+
+
+ [IN] 锐化强度(0-32)
+
+
+
+
+ [IN] 噪声校正系数(0-1280)
+
+
+
+
+ [IN] 线程数量,0表示算法库根据硬件自适应;1表示单线程(默认);大于1表示线程数目
+
+
+
+
+ 保留字节
+
+
+
+
+ 帧特殊信息
+
+
+
+
+ [OUT] 秒数
+
+
+
+
+ [OUT] 周期数
+
+
+
+
+ [OUT] 周期偏移量
+
+
+
+
+ [OUT] 增益
+
+
+
+
+ [OUT] 曝光时间
+
+
+
+
+ [OUT] 平均亮度
+
+
+
+
+ [OUT] 红色
+
+
+
+
+ [OUT] 绿色
+
+
+
+
+ [OUT] 蓝色
+
+
+
+
+ [OUT] 总帧数
+
+
+
+
+ [OUT] 触发计数
+
+
+
+
+ [OUT] 输入
+
+
+
+
+ [OUT] 输出
+
+
+
+
+ [OUT] 水平偏移量
+
+
+
+
+ [OUT] 垂直偏移量
+
+
+
+
+ [OUT] 水印宽
+
+
+
+
+ [OUT] 水印高
+
+
+
+
+ 保留字节
+
+
+
+
+ HB解码参数
+
+
+
+
+ [IN] 输入数据缓存
+
+
+
+
+ [IN] 输入数据大小
+
+
+
+
+ [OUT] 图像宽
+
+
+
+
+ [OUT] 图像高
+
+
+
+
+ [OUT] 输出数据缓存
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ [OUT] 输出数据大小
+
+
+
+
+ [OUT] 输出的像素格式
+
+
+
+
+ [OUT] 水印信息
+
+
+
+
+ 保留字节
+
+
+
+
+ 录像格式定义
+
+
+
+
+ 未定义格式
+
+
+
+
+ AVI格式
+
+
+
+
+ 录像参数
+
+
+
+
+ [IN] 输入数据的像素格式
+
+
+
+
+ [IN] 图像宽(指定目标参数时需为8的倍数)
+
+
+
+
+ [IN] 图像高(指定目标参数时需为8的倍数)
+
+
+
+
+ [IN] 帧率fps(大于1/16)
+
+
+
+
+ [IN] 码率kbps(128kbps-16Mbps)
+
+
+
+
+ [IN] 录像格式
+
+
+
+
+ [IN] 录像文件存放路径
+
+
+
+
+ 保留字节
+
+
+
+
+ 输入帧信息
+
+
+
+
+ [IN] 图像数据指针
+
+
+
+
+ [IN] 图像大小
+
+
+
+
+ 保留字节
+
+
+
+
+ 采集模式
+
+
+
+
+ 单帧模式
+
+
+
+
+ 多帧模式
+
+
+
+
+ 持续采集模式
+
+
+
+
+ 增益模式
+
+
+
+
+ 关闭
+
+
+
+
+ 一次
+
+
+
+
+ 连续
+
+
+
+
+ 曝光模式
+
+
+
+
+ Timed
+
+
+
+
+ TriggerWidth
+
+
+
+
+ 自动曝光模式
+
+
+
+
+ 关闭
+
+
+
+
+ 一次
+
+
+
+
+ 连续
+
+
+
+
+ 相机触发模式
+
+
+
+
+ 关闭
+
+
+
+
+ 打开
+
+
+
+
+ Gamma选择器
+
+
+
+
+ USER
+
+
+
+
+ SRGB
+
+
+
+
+ 自动白平衡
+
+
+
+
+ 关闭自动白平衡
+
+
+
+
+ 一次自动白平衡
+
+
+
+
+ 连续自动白平衡
+
+
+
+
+ 触发源
+
+
+
+
+ LINE0
+
+
+
+
+ LINE1
+
+
+
+
+ LINE2
+
+
+
+
+ LINE3
+
+
+
+
+ COUNTER0
+
+
+
+
+ SOFTWARE
+
+
+
+
+ FrequencyConverter
+
+
+
+
+ ALL MATHCH INFO
+
+
+
+
+ 需要输出的信息类型,e.g. MV_MATCH_TYPE_NET_DETECT
+
+
+
+
+ 输出的信息缓存,由调用者分配
+
+
+
+
+ 信息缓存的大小
+
+
+
+
+
+
+
+
+
+ 已接收数据大小 [统计StartGrabbing和StopGrabbing之间的数据量]
+
+
+
+
+ 丢失的包数量
+
+
+
+
+ 丢帧数量
+
+
+
+
+ 帧数
+
+
+
+
+ 请求重发包数
+
+
+
+
+ 重发包数
+
+
+
+
+ USB
+
+
+
+
+ 已接收数据大小 [统计OpenDevicce和CloseDevice之间的数据量]
+
+
+
+
+ 已收到的帧数
+
+
+
+
+ 错误帧数
+
+
+
+
+ 保留字节
+
+
+
+
+ 图像的基本信息
+
+
+
+
+ 宽度值
+
+
+
+
+ 宽度最小值
+
+
+
+
+ 宽度最大值
+
+
+
+
+ Width Inc
+
+
+
+
+ 高度值
+
+
+
+
+ 高度最小值
+
+
+
+
+ 高度最大值
+
+
+
+
+ Height Inc
+
+
+
+
+ 帧率
+
+
+
+
+ 最小帧率
+
+
+
+
+ 最大帧率
+
+
+
+
+ 当前的像素格式
+
+
+
+
+ 支持的像素格式种类
+
+
+
+
+ 像素列表
+
+
+
+
+ 保留字节
+
+
+
+
+ 节点是否可见的权限等级
+
+
+
+
+ Always visible
+
+
+
+
+ Visible for experts or Gurus
+
+
+
+
+ Visible for Gurus
+
+
+
+
+ Not Visible
+
+
+
+
+ Object is not yet initialized
+
+
+
+
+ 事件信息
+
+
+
+
+ 事件名
+
+
+
+
+ Event号
+
+
+
+
+ 流通到序号
+
+
+
+
+ 帧号高位
+
+
+
+
+ 帧号低位
+
+
+
+
+ 时间戳高位
+
+
+
+
+ 时间戳低位
+
+
+
+
+ Event数据
+
+
+
+
+ Event数据长度
+
+
+
+
+ 保留字节
+
+
+
+
+ 节点错误类型
+
+
+
+
+ 节点不存在
+
+
+
+
+ 访问条件错误,通常是节点不可读写
+
+
+
+
+ 写入越界,超出该节点支持的范围
+
+
+
+
+ 校验失败,通常是写入的值与文件中的值不匹配
+
+
+
+
+ 其它错误,可查阅日志
+
+
+
+
+ 节点错误信息
+
+
+
+
+ 节点名称
+
+
+
+
+ 错误类型
+
+
+
+
+ 保留字节
+
+
+
+
+ 错误信息列表
+
+
+
+
+ 错误个数
+
+
+
+
+ 错误信息
+
+
+
+
+ 保留字节
+
+
+
+
+ 节点名称
+
+
+
+
+ 节点名称
+
+
+
+
+ 保留字节
+
+
+
+
+ 节点列表
+
+
+
+
+ 错误信息
+
+
+
+
+ 节点个数
+
+
+
+
+ 保留字节
+
+
+
+
+ 文件存取
+
+
+
+
+ 用户文件名
+
+
+
+
+ 设备文件名
+
+
+
+
+ 保留字节
+
+
+
+
+ 文件存取
+
+
+
+
+ 用户文件数据缓存空间
+
+
+
+
+ 用户数据缓存大小
+
+
+
+
+ 文件实际缓存大小
+
+
+
+
+ 设备文件名
+
+
+
+
+ 保留字节
+
+
+
+
+ 文件存取进度
+
+
+
+
+ 已完成的长度
+
+
+
+
+ 总长度
+
+
+
+
+ 保留字节
+
+
+
+
+ GigE传输类型
+
+
+
+
+ 表示单播(默认)
+
+
+
+
+ 表示组播
+
+
+
+
+ 表示局域网内广播,暂不支持
+
+
+
+
+ 表示子网内广播,暂不支持
+
+
+
+
+ 表示从相机获取,暂不支持
+
+
+
+
+ 表示用户自定义应用端接收图像数据Port号
+
+
+
+
+ 表示设置了单播,但本实例不接收图像数据
+
+
+
+
+ 表示组播模式,但本实例不接收图像数据
+
+
+
+
+ 传输模式,可以为单播模式、组播模式等
+
+
+
+
+ 传输模式
+
+
+
+
+ 目标IP,组播模式下有意义
+
+
+
+
+ 目标Port,组播模式下有意义
+
+
+
+
+ 保留字节
+
+
+
+
+ 动作命令信息
+
+
+
+
+ 设备密钥
+
+
+
+
+ 组键
+
+
+
+
+ 组掩码
+
+
+
+
+ 只有设置成1时Action Time才有效,非1时无效
+
+
+
+
+ 预定的时间,和主频有关
+
+
+
+
+ 广播包地址
+
+
+
+
+ 等待ACK的超时时间,如果为0表示不需要ACK
+
+
+
+
+ 只有设置成1时指定的网卡IP才有效,非1时无效
+
+
+
+
+ 指定的网卡IP
+
+
+
+
+ 保留字节
+
+
+
+
+ 动作命令结果
+
+
+
+
+ IP address of the device
+
+
+
+
+ status code returned by the device
+
+
+
+
+ 保留字节
+
+
+
+
+ 动作命令结果列表
+
+
+
+
+ 返回值个数
+
+
+
+
+ 返回的结果
+
+
+
+
+ 每个节点对应的接口类型
+
+
+
+
+ IValue接口类型
+
+
+
+
+ IBase接口类型
+
+
+
+
+ IInteger接口类型
+
+
+
+
+ IBoolean接口类型
+
+
+
+
+ ICommand接口类型
+
+
+
+
+ IFloat接口类型
+
+
+
+
+ IString接口类型
+
+
+
+
+ IRegister接口类型
+
+
+
+
+ ICategory接口类型
+
+
+
+
+ IEnumeration接口类型
+
+
+
+
+ IEnumEntry接口类型
+
+
+
+
+ IPort接口类型
+
+
+
+
+ XML节点特点
+
+
+
+
+ 节点类型
+
+
+
+
+ 是否可见
+
+
+
+
+ 节点描述
+
+
+
+
+ 显示名称
+
+
+
+
+ 节点名
+
+
+
+
+ 提示
+
+
+
+
+ 保留字节
+
+
+
+
+ XML节点列表
+
+
+
+
+ 节点个数
+
+
+
+
+ 节点列表
+
+
+
+
+ 整型节点值
+
+
+
+
+ 当前值
+
+
+
+
+ 最大值
+
+
+
+
+ 最小值
+
+
+
+
+ Inc
+
+
+
+
+ 保留字节
+
+
+
+
+ 整型节点值
+
+
+
+
+ 当前值
+
+
+
+
+ 最大值
+
+
+
+
+ 最小值
+
+
+
+
+ Inc
+
+
+
+
+ 保留字节
+
+
+
+
+ 浮点型节点值
+
+
+
+
+ 当前值
+
+
+
+
+ 最大值
+
+
+
+
+ 最小值
+
+
+
+
+ 保留字节
+
+
+
+
+ 枚举型节点值
+
+
+
+
+ 当前值
+
+
+
+
+ 有效数据个数
+
+
+
+
+ 保留字节
+
+
+
+
+ 保留字节
+
+
+
+
+ 枚举型节点值
+
+
+
+
+ 当前值
+
+
+
+
+ 有效数据个数
+
+
+
+
+ 保留字节
+
+
+
+
+ 保留字节
+
+
+
+
+ 字符串型节点值
+
+
+
+
+ 当前值
+
+
+
+
+ 节点值的最大长度
+
+
+
+
+ 保留字节
+
+
+
+
+ 节点的读写性
+
+
+
+
+ 未实现
+
+
+
+
+ 不可获取
+
+
+
+
+ 只写
+
+
+
+
+ 只读
+
+
+
+
+ 可读可写
+
+
+
+
+ 未定义
+
+
+
+
+ 内部用于AccessMode循环检测
+
+
+
+
+ 整型节点
+
+
+
+
+ 节点名
+
+
+
+
+ 显示名称
+
+
+
+
+ 节点描述
+
+
+
+
+ 提示
+
+
+
+
+ 是否可见
+
+
+
+
+ 访问模式
+
+
+
+
+ 是否锁定。0-否;1-是
+
+
+
+
+ 当前值
+
+
+
+
+ 最小值
+
+
+
+
+ 最大值
+
+
+
+
+ 增量
+
+
+
+
+ 保留字节
+
+
+
+
+ 布尔型节点
+
+
+
+
+ 节点名
+
+
+
+
+ 显示名称
+
+
+
+
+ 节点描述
+
+
+
+
+ 提示
+
+
+
+
+ 是否可见
+
+
+
+
+ 访问模式
+
+
+
+
+ 是否锁定。0-否;1-是
+
+
+
+
+ 当前值
+
+
+
+
+ 保留字节
+
+
+
+
+ 命令型节点
+
+
+
+
+ 节点名
+
+
+
+
+ 显示名称
+
+
+
+
+ 节点描述
+
+
+
+
+ 提示
+
+
+
+
+ 是否可见
+
+
+
+
+ 访问模式
+
+
+
+
+ 是否锁定。0-否;1-是
+
+
+
+
+ 保留字节
+
+
+
+
+ 浮点型节点
+
+
+
+
+ 节点名
+
+
+
+
+ 显示名称
+
+
+
+
+ 节点描述
+
+
+
+
+ 提示
+
+
+
+
+ 是否可见
+
+
+
+
+ 访问模式
+
+
+
+
+ 是否锁定。0-否;1-是
+
+
+
+
+ 当前值
+
+
+
+
+ 最小值
+
+
+
+
+ 最大值
+
+
+
+
+ 增量
+
+
+
+
+ 保留字节
+
+
+
+
+ 字符串类型节点
+
+
+
+
+ 节点名
+
+
+
+
+ 显示名称
+
+
+
+
+ 节点描述
+
+
+
+
+ 提示
+
+
+
+
+ 是否可见
+
+
+
+
+ 访问模式
+
+
+
+
+ 是否锁定。0-否;1-是
+
+
+
+
+ 当前值
+
+
+
+
+ 保留字节
+
+
+
+
+ 寄存器型节点
+
+
+
+
+ 节点名
+
+
+
+
+ 显示名称
+
+
+
+
+ 节点描述
+
+
+
+
+ 提示
+
+
+
+
+ 是否可见
+
+
+
+
+ 访问模式
+
+
+
+
+ 是否锁定。0-否;1-是
+
+
+
+
+ 当前值
+
+
+
+
+ 保留字节
+
+
+
+
+ 类别属性
+
+
+
+
+ 节点描述
+
+
+
+
+ 显示名称
+
+
+
+
+ 节点名
+
+
+
+
+ 提示
+
+
+
+
+ 是否可见
+
+
+
+
+ 保留字节
+
+
+
+
+ EnumEntry属性节点
+
+
+
+
+ 节点名
+
+
+
+
+ 显示名称
+
+
+
+
+ 节点描述
+
+
+
+
+ 提示
+
+
+
+
+
+
+
+
+
+ 父节点数
+
+
+
+
+ 父节点列表
+
+
+
+
+ 是否可见
+
+
+
+
+ 当前值
+
+
+
+
+ 访问模式
+
+
+
+
+ 是否锁定。0-否;1-是
+
+
+
+
+ 保留字节
+
+
+
+
+ 节点描述
+
+
+
+
+ 节点描述
+
+
+
+
+ Enumeration属性节点
+
+
+
+
+ 是否可见
+
+
+
+
+ 节点描述
+
+
+
+
+ 显示名称
+
+
+
+
+ 节点名
+
+
+
+
+ 提示
+
+
+
+
+ Symbolic数
+
+
+
+
+ 当前Symbolic索引
+
+
+
+
+ Symbolic索引
+
+
+
+
+ 访问模式
+
+
+
+
+ 是否锁定。0-否;1-是
+
+
+
+
+ 当前值
+
+
+
+
+ 保留字节
+
+
+
+
+ Port属性节点
+
+
+
+
+ 是否可见
+
+
+
+
+ 节点描述
+
+
+
+
+ 显示名称
+
+
+
+
+ 节点名
+
+
+
+
+ 提示
+
+
+
+
+ 访问模式
+
+
+
+
+ 是否锁定。0-否;1-是
+
+
+
+
+ 保留字节
+
+
+
+ 辅助线颜色
+
+
+ [0.0 , 1.0]
+
+
+ [0.0 , 1.0]
+
+
+ [0.0 , 1.0]
+
+
+ [0.0 , 1.0]
+
+
+ 预留字节
+
+
+ 自定义点坐标
+
+
+ [0.0 , 1.0]
+
+
+ [0.0 , 1.0]
+
+
+ 预留字节
+
+
+ 矩形框区域信息
+
+
+ [0.0 , 1.0]
+
+
+ [0.0 , 1.0]
+
+
+ [0.0 , 1.0]
+
+
+ [0.0 , 1.0]
+
+
+ 辅助线颜色
+
+
+ 辅助线宽度
+
+
+ 预留字节
+
+
+ 圆形框区域信息
+
+
+ 圆心信息
+
+
+ 宽向半径,根据图像的相对位置[0, 1.0]
+
+
+ 高向半径,根据图像的相对位置[0, 1.0]
+
+
+ 辅助线颜色信息
+
+
+ 辅助线宽度
+
+
+ 预留字节
+
+
+ 线条辅助线信息
+
+
+ 线条辅助线的起始点坐标
+
+
+ 线条辅助线的终点坐标
+
+
+ 辅助线颜色信息
+
+
+ 辅助线宽度
+
+
+ 预留字节
+
+
+ 枚举类型指定条目信息
+
+
+ 指定值
+
+
+ 指定值对应的符号
+
+
+ 预留字节
+
+
+ U3V流异常类型
+
+
+ 异常的图像,该帧被丢弃
+
+
+ 缓存列表溢出,清除最旧的一帧
+
+
+ 缓存列表为空,该帧被丢弃
+
+
+ 断流恢复
+
+
+ 断流,恢复失败,取流被中止
+
+
+ 设备异常,取流被中止
+
+
+ 重构后的图像列表
+
+
+ 源图像宽
+
+
+ 源图像高
+
+
+ 像素格式
+
+
+ 输出数据缓存
+
+
+ 输出数据长度
+
+
+ 提供的输出缓冲区大小
+
+
+ 预留字节
+
+
+
+ 分时曝光的图像处理方式
+
+
+
+
+ 源图像按行拆分成多张图像
+
+
+
+
+ 源图像两行拆分成多张图像
+
+
+
+ 重构图像参数信息
+
+
+ 源图像宽
+
+
+ 源图像高
+
+
+ 像素格式
+
+
+ 输入数据缓存
+
+
+ 输入数据长度
+
+
+ 曝光个数(1-8]
+
+
+ 图像重构方式
+
+
+
+ 输出数据缓存信息
+
+
+
+ 预留字节
+
+
+ 串口信息
+
+
+
+ 串口号
+
+
+
+
+ 保留字节
+
+
+
+ 串口列表
+
+
+
+ 串口数量
+
+
+
+
+ 串口信息
+
+
+
+
+ 保留字节
+
+
+
+
+ 像素格式定义
+
+
+
+
+ 未定义像素格式
+
+
+
+
+ Mono1p
+
+
+
+
+ Mono2p
+
+
+
+
+ Mono4p
+
+
+
+
+ Mono8
+
+
+
+
+ Mono8_Signed
+
+
+
+
+ Mono10
+
+
+
+
+ Mono10_Packed
+
+
+
+
+ Mono12
+
+
+
+
+ Mono12_Packed
+
+
+
+
+ Mono14
+
+
+
+
+ Mono16
+
+
+
+
+ BayerGR8
+
+
+
+
+ BayerRG8
+
+
+
+
+ BayerGB8
+
+
+
+
+ BayerBG8
+
+
+
+
+ BayerRBGG8
+
+
+
+
+ BayerGR10
+
+
+
+
+ BayerRG10
+
+
+
+
+ BayerGB10
+
+
+
+
+ BayerBG10
+
+
+
+
+ BayerGR12
+
+
+
+
+ BayerRG12
+
+
+
+
+ BayerGB12
+
+
+
+
+ BayerBG12
+
+
+
+
+ BayerGR10_Packed
+
+
+
+
+ BayerRG10_Packed
+
+
+
+
+ BayerGB10_Packed
+
+
+
+
+ BayerBG10_Packed
+
+
+
+
+ BayerGR12_Packed
+
+
+
+ BayerRG12_Packed
+
+
+ BayerGB12_Packed
+
+
+ BayerBG12_Packed
+
+
+ BayerGR16
+
+
+ BayerRG16
+
+
+ BayerGB16
+
+
+ BayerBG16
+
+
+ RGB8_Packed
+
+
+ BGR8_Packed
+
+
+ RGBA8_Packed
+
+
+ BGRA8_Packed
+
+
+ RGB10_Packed
+
+
+ BGR10_Packed
+
+
+ RGB12_Packed
+
+
+ BGR12_Packed
+
+
+ RGB16_Packed
+
+
+ BGR16_Packed///
+
+
+ RGBA16_Packed
+
+
+ BGRA16_Packed
+
+
+ RGB10V1_Packe
+
+
+ RGB10V2_Packed
+
+
+ RGB12V1_Packed
+
+
+ RGB565_Packed
+
+
+ BGR565_Packed
+
+
+ YUV411_Packed
+
+
+ YUV422_Packed
+
+
+ YUV422_YUYV_Packed
+
+
+ YUV444_Packed
+
+
+ YCBCR8_CBYCR
+
+
+ YCBCR422_8
+
+
+ YCBCR422_8_CBYCRY
+
+
+ YCBCR411_8_CBYYCRYY
+
+
+ YCBCR601_8_CBYCR
+
+
+ YCBCR601_422_8
+
+
+ YCBCR601_422_8_CBYCRY
+
+
+ YCBCR601_411_8_CBYYCRYY
+
+
+ YCBCR709_8_CBYCR
+
+
+ YCBCR709_422_8
+
+
+ YCBCR709_422_8_CBYCRY
+
+
+ YCBCR709_411_8_CBYYCRYY
+
+
+ YUV420SP_NV12
+
+
+ YUV420SP_NV21
+
+
+ RGB8_Planar
+
+
+ RGB10_Planar
+
+
+ RGB12_Planar
+
+
+ RGB16_Planar
+
+
+ Jpeg
+
+
+ Coord3D_ABC32f
+
+
+ Coord3D_ABC32f_Planar
+
+
+ Coord3D_AC32f
+
+
+ COORD3D_DEPTH_PLUS_MASK
+
+
+ Coord3D_ABC32
+
+
+ Coord3D_AB32f
+
+
+ Coord3D_AB32
+
+
+ Coord3D_AC32f_64
+
+
+ Coord3D_AC32f_Planar
+
+
+ Coord3D_AC32
+
+
+ Coord3D_A32f
+
+
+ Coord3D_A32
+
+
+ Coord3D_C32f
+
+
+ Coord3D_C32
+
+
+ Coord3D_ABC16
+
+
+ Coord3D_C16
+
+
+ Float32
+
+
+ HB_Mono8
+
+
+ HB_Mono10
+
+
+ HB_Mono10_Packed
+
+
+ HB_Mono12
+
+
+ HB_Mono12_Packed
+
+
+ HB_Mono16
+
+
+ HB_BayerGR8
+
+
+ HB_BayerRG8
+
+
+ HB_BayerGB8
+
+
+ HB_BayerBG8
+
+
+ HB_BayerRBGG8
+
+
+ HB_BayerGR10
+
+
+ HB_BayerRG10
+
+
+ HB_BayerGB10
+
+
+ HB_BayerBG10
+
+
+ HB_BayerGR12
+
+
+ HB_BayerRG12
+
+
+ HB_BayerGB12
+
+
+ HB_BayerBG12
+
+
+ HB_BayerGR10_Packed
+
+
+ HB_BayerRG10_Packed
+
+
+ HB_BayerGB10_Packed
+
+
+ HB_BayerBG10_Packed
+
+
+ HB_BayerGR12_Packed
+
+
+ HB_BayerRG12_Packed
+
+
+ HB_BayerGB12_Packed
+
+
+ HB_BayerBG12_Packed
+
+
+ HB_YUV422_Packed
+
+
+ HB_YUV422_YUYV_Packed
+
+
+ HB_RGB8_Packed
+
+
+ HB_BGR8_Packed
+
+
+ HB_RGBA8_Packed
+
+
+ HB_BGRA8_Packed
+
+
+ HB_RGB16_Packed
+
+
+ HB_BGR16_Packed
+
+
+ HB_RGBA16_Packed
+
+
+ HB_BGRA16_Packed
+
+
+
+ 图像类,实现基本的图像属性和接口,实现图像克隆、ToBitmap。作为其他图像类的基类
+
+
+
+
+ 根据图像宽、高和像素格式创建对象,内部申请内存
+
+ 图像宽度
+ 图像高度
+ 像素格式
+ 相机句柄,用于ToBitmap时像素格式转换
+
+
+
+ 根据图像宽、高、像素格式、图像大小创建对象,内部申请内存
+
+ 图像宽度
+ 图像高度
+ 像素格式
+ 图像大小
+ 相机句柄,用于ToBitmap时像素格式转换
+
+
+
+ 根据图像宽、高、像素格式、图像大小创建对象,外部传入内存
+
+
+
+
+
+
+
+
+
+
+ 用于克隆
+
+
+
+
+
+ 构造空对象,内部变量由由子类初始化
+
+
+
+
+ 相机句柄,用于内部做格式转换等图像处理
+
+
+
+
+ 非托管内存指针
+
+
+
+
+ 图像数据,内部会进行一次拷贝,将非托管内存拷贝到托管内存
+
+
+
+
+ 从C库获取图像地址(GetImageBuffer或者回调),包装成Image,图像数据存放在非托管内存中
+
+
+
+
+ 使用传入的非托管内存创建新的对象
+
+
+
+
+
+
+ 设备句柄
+
+
+
+ 非托管内存指针
+
+
+
+
+ 图像数据,内部会进行一次拷贝,将非托管内存拷贝到托管内存
+
+
+
+
+ 基于内存池的Image对象,用于图像处理相关接口
+
+
+
+
+ 根据图像宽、高和像素格式创建对象,内部申请内存
+
+ 图像宽度
+ 图像高度
+ 像素格式
+ 相机句柄,用于ToBitmap时像素格式转换
+ 内存池
+
+
+
+ 根据图像宽、高、像素格式、图像大小创建对象,内部申请内存
+
+ 图像宽度
+ 图像高度
+ 像素格式
+ 相机句柄,用于ToBitmap时像素格式转换
+ 图像大小
+ 内存池
+
+
+
+ 根据图像宽、高、像素格式、图像大小创建对象,外部传入内存池内存
+
+
+
+
+
+
+
+
+
+
+
+ 整型参数实现类
+
+
+
+
+ 整形参数
+
+
+
+
+ 当前值
+
+
+
+
+ 最大值
+
+
+
+
+ 最小值
+
+
+
+
+ Increment
+
+
+
+
+ 枚举项参数
+
+
+
+
+ 枚举值
+
+
+
+
+ 枚举符号
+
+
+
+
+ 枚举类型实现类
+
+
+
+
+ 枚举类型参数
+
+
+
+
+ 当前枚举项
+
+
+
+
+ 支持的枚举类型个数
+
+
+
+
+ 支持的枚举项列表
+
+
+
+
+ float类型实现类
+
+
+
+
+ 浮点型参数
+
+
+
+
+ 当前值
+
+
+
+
+ 最大值
+
+
+
+
+ 最小值
+
+
+
+
+ String类型参数实现类
+
+
+
+
+ 字符串类型参数
+
+
+
+
+ 当前值
+
+
+
+
+ 最大长度
+
+
+
+
+ 参数导入时出错的节点信息
+
+
+
+
+ 参数导入导出时的节点错误信息
+
+
+
+
+ 节点名称
+
+
+
+
+ 错误类型
+
+
+
+
+ 节点名称
+
+
+
+
+ 错误信息
+
+
+
+
+ 参数实现类
+
+
+
+
+ 提供设备参数配置相关接口
+
+
+
+
+ 清除GenICam节点缓存
+
+ 成功,返回MV_OK;失败,返回错误码
+
+ 在加载工业相机节点时需要读取GenICam配置文件,该接口可以起到清除GenICam缓存的功能。
+
+
+
+
+ 获取Integer属性值
+
+ 属性键值,如获取宽度信息则为"Width"
+ 属性值
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置Integer型属性值
+
+ 属性键值,如设置宽度信息则为"Width"
+ 属性值
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获取Enumeration属性值
+
+ 属性键值,如获取像素格式信息则为"PixelFormat"
+ 属性值
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置Enumeration属性值
+
+ 属性键值,如设置像素格式信息则为"PixelFormat"
+ Enum型节点的值
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置Enumeration属性
+
+ 属性键值,如设置像素格式信息则为"PixelFormat"
+ EnumEntry的名称
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获取Float属性值
+
+ 属性键值
+ 属性值
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置Float型属性值
+
+ 属性键值
+ 属性值
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获取Boolean属性值
+
+ 属性键值
+ 属性值
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置Boolean型属性值
+
+ 属性键值
+ 属性值
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获取String属性值
+
+ 属性键值
+ 属性值
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置String型属性值
+
+ 属性键值
+ 属性值
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置Command型属性值
+
+ 属性键值
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 导入设备属性文件
+
+ 文件路径
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 导入设备属性文件并保存错误信息列表
+
+ 文件路径
+ 导入失败的节点信息
+ 成功,返回MV_OK;失败,返回错误码
+ 部分节点导入失败时也会返回MV_OK,通过nodeErrors返回导入失败的节点及错误原因
+
+
+
+ 保存设备属性到文件
+
+ 文件路径
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 通过设备寄存器地址读取寄存器
+
+ 待读取的内存地址,该地址可以从设备的Camera.xml文件中获取,形如xxx_RegAddr的xml节点值
+ 待读取的内存长度
+ 存放读到的内存值(GEV设备内存值是按照大端模式存储的,其它协议设备按照小端存储)
+ 成功,返回MV_OK;失败,返回错误码
+
+ 访问设备,读取某段寄存器的数据。
+
+
+
+
+ 通过设备寄存器地址写寄存器
+
+ 待写入的内存地址,该地址可以从设备的Camera.xml文件中获取,形如xxx_RegAddr的xml节点值
+ 待写入的内存长度
+ 待写入的内存值(注意GEV设备内存值要按照大端模式存储,其它协议设备按照小端存储)
+ 成功,返回MV_OK;失败,返回错误码
+
+ 访问设备,把一段数据写入某段寄存器。
+
+
+
+
+ 获取设备属性树XML
+
+ 设备xml
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获得当前节点的访问模式
+
+ 节点名称
+ 节点的访问模式
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获得当前节点的类型
+
+ 节点名称
+ 节点类型
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 从设备读取文件,保存为本地文件
+
+ 设备文件名
+ 本地文件路径
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 从设备读取文件,保存在内存
+
+ 设备文件名
+ 缓存
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 将文件写入设备
+
+ 设备文件名
+ 本地文件路径
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 将内存中的文件写入设备
+
+ 设备文件名
+ 缓存
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获取文件存取的进度
+
+ 已完成的长度
+ 总长度
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设备句柄
+
+
+
+
+ FileAccessRead到Byte数组时的默认文件大小
+
+
+
+
+ 构造函数
+
+
+
+
+
+ 提供像素格式转换相关接口
+
+
+
+
+ 设置图像插值算法类型
+
+ 图像插值算法
+ 成功,返回MV_OK;失败,返回错误码
+
+ 设置内部图像转换接口的Bayer插值算法类型参数,、使用的插值算法是该接口所设定的
+
+
+
+
+ 插值算法平滑使能设置
+
+ 平滑使能(默认关闭)
+ 成功,返回MV_OK;失败,返回错误码
+
+ 设置内部图像转换接口的Bayer插值平滑使能参数,、使用的插值算法是该接口所设定的。
+
+
+
+
+ 设置Bayer格式的Gamma值
+
+ Gamma值:0.1 ~ 4.0
+ 成功,返回MV_OK;失败,返回错误码
+
+ 设置该值后,、将Bayer8/10/12/16格式转成RGB24/48, RGBA32/64,BGR24/48,BGRA32/64时起效。
+
+
+
+
+ 设置Mono8/Bayer8/10/12/16格式的Gamma值
+
+ 像素格式
+ Gamma值:0.1 ~ 4.0
+ 成功,返回MV_OK;失败,返回错误码
+
+ 设置Mono8的gamma值后,再调用将Mono8转成Mono8时gamma值起效。
+ 设置Bayer8/10/12/16的gamma值后,、将Bayer8/10/12/16格式转成RGB24/48, RGBA32/64,BGR24/48,BGRA32/64时起效。
+ 该接口兼容接口,新增支持Mono8像素格式
+
+
+
+
+ 设置Bayer格式的Gamma信息
+
+ Gamma参数
+ 成功,返回MV_OK;失败,返回错误码
+
+ 设置该信息后,在、将Bayer8/10/12/16格式转成RGB24/48, RGBA32/64,BGR24/48,BGRA32/64时起效。
+
+
+
+
+ 设置Bayer格式的CCM使能和矩阵,量化系数默认1024
+
+ CCM参数
+ 成功,返回MV_OK;失败,返回错误码
+
+ 开启CCM并设置CCM矩阵后,在、将Bayer8/10/12/16格式转成RGB24/48, RGBA32/64,BGR24/48,BGRA32/64时起效。
+
+
+
+
+ 像素格式转换
+
+ 输入图像
+ 输出图像。图像使用完之后需调用Dispose方法及时释放内存,防止内存快速上涨。
+ 目标像素格式
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 像素格式转换
+
+ 输入图像
+ 输出图像缓存
+ 输出图像长度
+ 目标像素格式
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获取像素格式转换所需的缓存大小
+
+ 目标像素格式
+ 图像宽
+ 图像高
+ 缓存大小
+
+
+
+ 设备句柄, 用于内部做格式转换
+
+
+
+
+ 构造函数,内部创建内存池,只在ToBitmap中使用
+
+ 设备句柄
+
+
+
+ 构造函数
+
+ 设备句柄
+
+
+
+
+ 设置图像插值算法类型
+
+ 图像插值算法
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 插值算法平滑使能设置
+
+ 平滑使能(默认关闭)
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置Bayer格式的Gamma值
+
+ Gamma值:0.1 ~ 4.0
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置Mono8/Bayer8/10/12/16格式的Gamma值
+
+ 像素格式
+ Gamma值:0.1 ~ 4.0
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置Bayer格式的Gamma信息
+
+ Gamma参数
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置Bayer格式的CCM使能和矩阵,量化系数默认1024
+
+ CCM参数
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 将图像转换为指定格式,输出IImage图像
+
+ 输入图像
+ 输出图像
+ 目的像素格式
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 将图像转换为指定格式,输出Byte数组
+
+ 输入图像
+ 输出图像缓存
+ 输出图像长度
+ 目的像素格式
+ 成功,返回MV_OK;失败,返回错误码
+
+ outBuffer设置为null时, outDataLen会给出结果图像需要的缓存长度
+
+
+
+
+ 获取像素格式转换所需的缓存大小
+
+ 目标像素格式
+ 图像宽
+ 图像高
+ 缓存大小
+
+
+
+ SDk全局信息及操作接口
+
+
+
+
+ 获取SDK版本信息
+
+ SDK版本号,格式x.y.z.a
+
+
+
+ 初始化SDK
+
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 反初始化SDK,释放资源
+
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 图像数据和帧信息
+
+
+
+
+ 图像数据
+
+
+
+
+ 帧号
+
+
+
+
+ 设备时间戳
+
+
+
+
+ 主机时间戳
+
+
+
+
+ 帧长度
+
+
+
+
+ 设备水印时标
+
+
+
+
+ 周期数
+
+
+
+
+ 周期偏移量
+
+
+
+
+ 增益
+
+
+
+
+ 曝光时间
+
+
+
+
+ 平均亮度
+
+
+
+
+ 白平衡红色通道
+
+
+
+
+ 白平衡绿色通道
+
+
+
+
+ 白平衡蓝色通道
+
+
+
+
+ 总帧数
+
+
+
+
+ 触发计数
+
+
+
+
+ 输入
+
+
+
+
+ 输出
+
+
+
+
+ ROI区域,水平偏移量
+
+
+
+
+ ROI区域,垂直偏移量
+
+
+
+
+ 本帧丢包数
+
+
+
+
+ Chunk数据
+
+
+
+
+ 深拷贝
+
+
+
+
+
+ 相机句柄
+
+
+
+
+ 图像类
+
+
+
+
+ 提供取流相关接口
+
+
+
+
+ 设置SDK内部图像缓存节点个数,大于等于1
+
+ 缓存节点个数
+ 成功,返回MV_OK;失败,返回错误码
+
+ 调用该接口可以设置SDK内部图像缓存节点个数,在 IStreamGrabber.StartGrabbing() 前调用。
+ 不同相机因为取流方式不同,不调用SetImageNodeNum方法的情况下,不同相机默认缓存节点的个数不同:比如 双U内部分配默认3个节点。
+ SDK实际分配的节点个数 = SDK内部预分配的个数 + 用户分配的节点(SetImageNodeNum);
+
+
+
+
+ 获取当前图像缓存区的有效图像个数
+
+ 有效图像个数
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 开始取流
+
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 开始取流,支持设置取流策略
+
+ 策略枚举值
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置输出缓存个数(只有在 StreamGrabStrategy.LatestImages 策略下才有效,范围:1-ImageNodeNum)
+
+ 输出缓存个数
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 停止取流
+
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获取一帧图像
+
+ 等待超时时间
+ 图像数据和图像信息
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 释放图像缓存(此接口用于释放不再使用的图像缓存,与 IStreamGrabber.FreeImageBuffer() 配套使用)
+
+ 图像数据和图像数据
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 清除取流数据缓存
+
+ 成功,返回MV_OK;失败,返回错误码
+
+ 该接口允许用户在不停止取流的时候,就能清除缓存中不需要的图像。
+ 该接口在连续模式切触发模式后,可以清除历史数据。
+
+
+
+
+ 设备流异常事件,只有USB设备支持
+
+
+ 在StartGrabbing前调用
+
+
+
+
+ 采集一帧图像的事件,获取图像数据
+
+
+ 在StartGrabbing前调用
+
+
+
+
+ 内部回调图像回调函数
+
+
+
+
+
+
+
+ 内部流异常回调函数
+
+
+
+
+
+
+ 将MvCCDll中的帧结构体转为FrameOut类
+
+
+
+
+
+
+
+ USB流异常回调
+
+
+
+
+ 设置U3V的传输包大小
+
+ 传输的包大小,单位:Byte,默认为1M,范围:Windows[0x400, 0x400000], Linux[0x400, 0x200000]
+ 成功,返回MV_OK;失败,返回错误码
+
+ 增加传输包大小可以适当降低取流时的CPU占用率。但不同的PC和不同USB扩展卡存在不同的兼容性,如果该参数设置过大可能会出现取不到图像的风险。
+
+
+
+
+ 获取U3V的传输包大小
+
+ 传输的包大小, 单位:Byte
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 设置U3V的传输通道个数
+
+ 传输通道个数,范围:1-10
+ 成功,返回MV_OK;失败,返回错误码
+
+ 可根据PC的性能、设备出图帧率、图像大小和内存使用率等因素对该参数进行调节。但不同的PC和不同的USB扩展卡存在不同的兼容性。
+
+
+
+
+ 获取U3V的传输通道个数
+
+ 传输通道个数
+ 成功,返回MV_OK;失败,返回错误码
+
+ 该接口用于获取当前的U3V异步取流节点个数,2000W设备的MONO8默认为3个,YUV为默认2个,RGB为默认1个,其它情况默认8个节点。
+
+
+
+
+ 设置U3V的事件缓存节点个数
+
+ 事件缓存节点个数,范围:1-64
+ 成功,返回MV_OK;失败,返回错误码
+
+ 该接口用于设置当前的U3V事件缓存节点个数,默认情况下为5个。
+
+
+
+
+ 设置U3V相机同步读写超时时间,范围为1000~UINT,默认1000 ms
+
+ 同步读写超时时间
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获取U3V相机同步读写超时时间
+
+ 同步读写超时时间
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 获取主机从USB设备接收的数据统计信息,如已接收字节数、帧数
+
+ USB传输信息
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 录像功能实现类
+
+
+
+
+ 录像,将图片录制成AVI格式视频
+
+
+
+
+ 开始录像
+
+ 录像文件存放路径
+ 录像参数
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 输入录像数据
+
+ 图像数据
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 停止录像
+
+ 成功,返回MV_OK;失败,返回错误码
+
+
+
+ 异常信息
+
+
+
+
+ 错误码
+
+
+
+
+ Xml节点访问模式
+
+
+
+
+ 不可实现
+
+
+
+
+ 不可用
+
+
+
+
+ 只写
+
+
+
+
+ 只读
+
+
+
+
+ 读写
+
+
+
+
+ 未定义
+
+
+
+
+ 内部用于AccessMode循环检测
+
+
+
+
+ 每个节点对应的接口类型
+
+
+
+
+ Value
+
+
+
+
+ Base
+
+
+
+
+ Integer
+
+
+
+
+ Boolean
+
+
+
+
+ Command
+
+
+
+
+ Float
+
+
+
+
+ String
+
+
+
+
+ Register
+
+
+
+
+ Category
+
+
+
+
+ Enumeration
+
+
+
+
+ EnumEntry
+
+
+
+
+ Port
+
+
+
+
+ 节点错误信息的类型
+
+
+
+
+ 节点不存在
+
+
+
+
+ 访问条件错误,通常是节点不可读写
+
+
+
+
+ 写入越界,超出该节点支持的范围
+
+
+
+
+ 校验失败,通常是写入的值与文件中的值不匹配
+
+
+
+
+ 其它错误,可查阅日志
+
+
+
+
+ 图像插值算法类型
+
+
+
+
+ 快速
+
+
+
+
+ 均衡
+
+
+
+
+ 最优
+
+
+
+
+ 最优+
+
+
+
+
+ Gamma类型
+
+
+
+
+ 不启用
+
+
+
+
+ Gamma值
+
+
+
+
+ Gamma曲线
+ 8位,长度:256*sizeof(unsigned char)
+ 10位,长度:1024*sizeof(unsigned short)
+ 12位,长度:4096*sizeof(unsigned short)
+ 16位,长度:65536*sizeof(unsigned short)
+
+
+
+
+ linear RGB to sRGB
+
+
+
+
+ sRGB to linear RGB(仅色彩插值时支持,色彩校正时无效)
+
+
+
+
+ Gamma参数
+
+
+
+
+ Gamma类型
+
+
+
+
+ Gamma值[0.1, 4.0]
+
+
+
+
+ Gamma曲线缓存
+
+
+
+
+ Gamma曲线长度
+
+
+
+
+ CCM参数
+
+
+
+
+ 是否启用CCM
+
+
+
+
+ CCM矩阵[-65536~65536],必须是Int32[9]
+
+
+
+
+ 量化系数(2的整数幂,最大65536)
+
+
+
+
+ 流异常类型
+
+
+
+
+ 异常的图像,该帧被丢弃
+
+
+
+
+ 缓存列表溢出,清除最旧的一帧
+
+
+
+
+ 缓存列表为空,该帧被丢弃
+
+
+
+
+ 断流恢复
+
+
+
+
+ 断流,恢复失败,取流被中止
+
+
+
+
+ 设备异常,取流被中止
+
+
+
+
+ 流异常事件
+
+
+
+
+ 流异常类型
+
+
+
+
+ 取流策略
+
+
+
+
+ 从旧到新一帧一帧的获取图像(默认为该策略)
+
+
+
+
+ 获取列表中最新的一帧图像,同时清除列表中的其余图像
+
+
+
+
+ 从输出缓存列表中获取最新的OutputQueueSize帧图像,其中OutputQueueSize范围为1-ImageNodeNum,可用 SetOutputQueueSize()接口设置。ImageNodeNum默认为1,可调用SetImageNodeNum()接口设置。 OutputQueueSize设置成1等同于LatestImagesOnly策略,OutputQueueSize设置成ImageNodeNum等同于OneByOne策略。
+
+
+
+
+ 在调用取流接口时忽略输出缓存列表中所有图像,并等待设备即将生成的一帧图像。该策略只支持GigE设备,不支持U3V设备
+
+
+
+
+ 采集一帧图像的事件,用于获取图像数据和帧信息
+
+
+
+
+ 图像帧信息
+
+
+
+
+ 视频格式
+
+
+
+
+ AVI格式
+
+
+
+
+ 录像参数
+
+
+
+
+ 输入数据的像素格式
+
+
+
+
+ 图像宽(指定目标参数时需为2的倍数)
+
+
+
+
+ 图像高(指定目标参数时需为2的倍数)
+
+
+
+
+ 帧率fps(大于1/16)
+
+
+
+
+ 码率kbps(128-16*1024)
+
+
+
+
+ 录像格式
+
+
+
+
+ MyCamera
+
+
+
+ ch GigE Vision采集卡 |en GigE Vision interface
+
+
+ ch Camera Link采集卡 |en Camera Link interface
+
+
+ ch CoaXPress采集卡 |en CoaXPress interface
+
+
+ ch XoFLink采集卡 |en XoFLink interface
+
+
+ Unknown Device Type, Reserved
+
+
+ GigE Device
+
+
+ 1394-a/b Device
+
+
+ USB3.0 Device
+
+
+ CameraLink Device
+
+
+ Virtual GigE Device
+
+
+ Virtual USB Device
+
+
+ GenTL GigE Device
+
+
+ GenTL CML Device
+
+
+ GenTL CXP Device
+
+
+ GenTL XOF Device
+
+
+
+ ch:信息结构体的最大缓存 | en: Max buffer size of information structs
+
+
+
+
+ 最大的相机数量
+
+
+
+
+ ch:最大Interface数量 | en:Max num of interfaces
+
+
+
+
+ ch:最大GenTL设备数量 | en:Max num of GenTL devices
+
+
+
+
+ XML节点描述最大长度
+
+
+
+
+ XML节点最大长度
+
+
+
+
+ XML节点最大数量
+
+
+
+
+ XML节点显示名最大数量
+
+
+
+
+ string类型节点值的最大长度
+
+
+
+
+ 最大父节点数
+
+
+
+
+ 最大节点描述长度
+
+
+
+
+ 设备断开连接
+
+
+
+
+ SDK与驱动版本不匹配
+
+
+
+
+ 相机Event事件名称最大长度
+
+
+
+ 最大枚举条目对应的符号长度
+
+
+ 分时曝光时最多将源图像拆分的个数
+
+
+
+ ch:最大支持的采集卡数量 | en:The maximum number of Frame Grabber interface supported
+
+
+
+
+ ch 静态 |en Static
+
+
+
+
+ ch DHCP |en DHCP
+
+
+
+
+ ch LLA |en LLA
+
+
+
+
+ 9600
+
+
+
+
+ 19200
+
+
+
+
+ 38400
+
+
+
+
+ 57600
+
+
+
+
+ 115200
+
+
+
+
+ 230400
+
+
+
+
+ 460800
+
+
+
+
+ 921600
+
+
+
+
+ ch 最大值 |en Auto Max
+
+
+
+
+ ch 网络流量和丢包信息 |en Network traffic and packet loss information
+
+
+
+
+ ch host接收到来自U3V设备的字节总数 |en The total number of bytes host received from U3V device
+
+
+
+
+ ch独占权限,其他APP只允许读CCP寄存器 |en Exclusive authority, other APP is only allowed to read the CCP register
+
+
+
+
+ ch 可以从5模式下抢占权限,然后以独占权限打开 |en You can seize the authority from the 5 mode, and then open with exclusive authority
+
+
+
+
+ ch 控制权限,其他APP允许读所有寄存器 |en Control authority, allows other APP reading all registers
+
+
+
+
+ ch 可以从5的模式下抢占权限,然后以控制权限打开 |en You can seize the authority from the 5 mode, and then open with control authority
+
+
+
+
+ ch 以可被抢占的控制权限打开 |en Open with seized control authority
+
+
+
+
+ ch 可以从5的模式下抢占权限,然后以可被抢占的控制权限打开 |en You can seize the authority from the 5 mode, and then open with seized control authority
+
+
+
+
+ ch 读模式打开设备,适用于控制权限下 |en Open with read mode and is available under control authority
+
+
+
+ 成功,无错误
+
+
+ 错误或无效的句柄
+
+
+ 不支持的功能
+
+
+ 缓存已满
+
+
+ 函数调用顺序错误
+
+
+ 错误的参数
+
+
+ 资源申请失败
+
+
+ 无数据
+
+
+ 前置条件有误,或运行环境已发生变化
+
+
+ 版本不匹配
+
+
+ 传入的内存空间不足
+
+
+ 异常图像,可能是丢包导致图像不完整
+
+
+ 动态导入DLL失败
+
+
+ 没有可输出的缓存
+
+
+ 加密错误
+
+
+ 打开文件出现错误
+
+
+ 未知的错误
+
+
+ 通用错误
+
+
+ 参数非法
+
+
+ 值超出范围
+
+
+ 属性
+
+
+ 运行环境有问题
+
+
+ 逻辑错误
+
+
+ 节点访问条件有误
+
+
+ 超时
+
+
+ 转换异常
+
+
+ GenICam未知错误
+
+
+ 命令不被设备支持
+
+
+ 访问的目标地址不存在
+
+
+ 目标地址不可写
+
+
+ 设备无访问权限
+
+
+ 设备忙,或网络断开
+
+
+ 网络包数据错误
+
+
+ 网络相关错误
+
+
+ 设备IP冲突
+
+
+ 读usb出错
+
+
+ 写usb出错
+
+
+ 设备异常
+
+
+ GenICam相关错误
+
+
+ 带宽不足
+
+
+ 驱动不匹配或者未装驱动
+
+
+ USB未知的错误
+
+
+ 升级固件不匹配
+
+
+ 升级固件语言不匹配
+
+
+ 升级冲突(设备已经在升级了再次请求升级即返回此错误)
+
+
+ 升级时设备内部出现错误
+
+
+ 升级时未知错误
+
+
+ 处理正确
+
+
+ 不确定类型错误
+
+
+ 能力集中存在无效参数
+
+
+ 内存地址为空
+
+
+ 内存对齐不满足要求
+
+
+ 内存空间大小不够
+
+
+ 内存空间大小不满足对齐要求
+
+
+ 内存地址不满足对齐要求
+
+
+ 图像格式不正确或者不支持
+
+
+ 图像宽高不正确或者超出范围
+
+
+ 图像宽高与step参数不匹配
+
+
+ 图像数据存储地址为空
+
+
+ 设置或者获取参数类型不正确
+
+
+ 设置或者获取参数的输入、输出结构体大小不正确
+
+
+ 处理类型不正确
+
+
+ 处理时输入、输出参数大小不正确
+
+
+ 子处理类型不正确
+
+
+ 子处理时输入、输出参数大小不正确
+
+
+ index参数不正确
+
+
+ value参数不正确或者超出范围
+
+
+ param_num参数不正确
+
+
+ 函数参数指针为空
+
+
+ 超过限定的最大内存
+
+
+ 回调函数出错
+
+
+ 加密错误
+
+
+ 算法库使用期限错误
+
+
+ 参数范围不正确
+
+
+ 数据大小不正确
+
+
+ 数据step不正确
+
+
+ cpu不支持优化代码中的指令集
+
+
+ 警告
+
+
+ 算法库超时
+
+
+ 算法版本号出错
+
+
+ 模型版本号出错
+
+
+ GPU内存分配错误
+
+
+ 文件不存在
+
+
+ 字符串为空
+
+
+ 图像解码器错误
+
+
+ 打开文件错误
+
+
+ 文件读取错误
+
+
+ 文件写错误
+
+
+ 文件读取大小错误
+
+
+ 文件类型错误
+
+
+ 模型类型错误
+
+
+ 分配内存错误
+
+
+ 线程绑核失败
+
+
+ 噪声特性图像格式错误
+
+
+ 噪声特性类型错误
+
+
+ 噪声特性个数错误
+
+
+ 噪声特性增益个数错误
+
+
+ 噪声曲线增益值输入错误
+
+
+ 噪声曲线柱数错误
+
+
+ 噪声估计初始化增益设置错误
+
+
+ 噪声估计未初始化
+
+
+ 颜色空间模式错误
+
+
+ 图像ROI个数错误
+
+
+ 图像ROI原点错误
+
+
+ 图像ROI大小错误
+
+
+ 输入的相机增益不存在(增益个数已达上限)
+
+
+ 输入的相机增益不在范围内
+
+
+ 输入的噪声特性内存大小错误
+
+
+
+ Constructor
+
+
+
+
+ Destructor
+
+
+
+
+ 设备句柄
+
+
+
+
+ Initialize
+
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Finalize
+
+ Success, return MV_OK. Failure, return error code
+
+
+
+ 枚举采集卡设备信息
+
+ 采集卡类型
+ 设备信息
+ Success, return MV_OK. Failure, return error code
+
+
+
+ 创建采集卡设备句柄
+
+ 采集卡设备信息
+ Success, return MV_OK. Failure, return error code
+
+
+
+ 通过采集卡ID创建设备句柄
+
+ 采集卡ID
+ Success, return MV_OK. Failure, return error code
+
+
+
+ 打开采集卡设备
+
+ 采集卡信息配置文件(目前不支持传配置文件)
+
+
+
+
+ 关闭采集卡
+
+ Success, return MV_OK. Failure, return error code
+
+
+
+ 销毁采集卡句柄
+
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get Camera Handle
+
+
+
+
+
+ Get SDK Version
+
+ Always return 4 Bytes of version number |Main |Sub |Rev |Test|
+ 8bits 8bits 8bits 8bits
+
+
+
+
+ Get supported Transport Layer
+
+ Supported Transport Layer number
+
+
+
+ Enumerate Device
+
+ Enumerate TLs
+ Device List
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Enumerate device according to manufacture name
+
+ Enumerate TLs
+ Device List
+ Manufacture Name
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Enumerate device according to the specified ordering
+
+ Transmission layer of enumeration(All layer protocol type can input)
+ Device list
+ Manufacture Name
+ Sorting Method
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Is the device accessible
+
+ Device Information
+ Access Right
+ Access, return true. Not access, return false
+
+
+
+ Set SDK log path (Interfaces not recommended)
+ If the logging service MvLogServer is enabled, the interface is invalid and The logging service is enabled by default
+
+
+
+
+
+
+ Create Device
+
+ Device Information
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Create Device without log
+
+ Device Information
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Destroy Device
+
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Open Device
+
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Open Device
+
+ Access Right
+ Switch key of access right
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Close Device
+
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Is the device connected
+
+ Connected, return true. Not Connected or DIsconnected, return false
+
+
+
+ Register the image callback function
+
+ Callback function pointer
+ User defined variable
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Register the RGB image callback function
+
+ Callback function pointer
+ User defined variable
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Register the BGR image callback function
+
+ Callback function pointer
+ User defined variable
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Start Grabbing
+
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Stop Grabbing
+
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get one frame of RGB image, this function is using query to get data
+ query whether the internal cache has data, get data if there has, return error code if no data
+
+ Image data receiving buffer
+ Buffer size
+ Image information
+ Waiting timeout
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get one frame of BGR image, this function is using query to get data
+ query whether the internal cache has data, get data if there has, return error code if no data
+
+ Image data receiving buffer
+ Buffer size
+ Image information
+ Waiting timeout
+ Success, return MV_OK. Failure, return error cod
+
+
+
+ Get a frame of an image using an internal cache
+
+ Image data and image information
+ Waiting timeout
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Free image buffer(used with MV_CC_GetImageBuffer)
+
+ Image data and image information
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get a frame of an image
+
+ Image data receiving buffer
+ Buffer size
+ Image information
+ Waiting timeout
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Clear image Buffers to clear old data
+
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get the number of valid images in the current image buffer
+
+ The number of valid images in the current image buffer
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Display one frame image
+
+ Image information
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Display one frame image Ex
+
+ dispaly Handle
+ Image information
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Set the number of the internal image cache nodes in SDK(Greater than or equal to 1, to be called before the capture)
+
+ Number of cache nodes
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Set Grab Strategy
+
+ The value of grab strategy
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Set The Size of Output Queue(Only work under the strategy of MV_GrabStrategy_LatestImages,rang:1-ImageNodeNum)
+
+ The Size of Output Queue
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get device information(Called before start grabbing)
+
+ device information
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get various type of information
+
+ Various type of information
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get Integer value
+
+ Key value, for example, using "Width" to get width
+ Value of device features
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Set Integer value
+
+ Key value, for example, using "Width" to set width
+ Feature value to set
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get Enum value
+
+ Key value, for example, using "PixelFormat" to get pixel format
+ Value of device features
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Set Enum value
+
+ Key value, for example, using "PixelFormat" to set pixel format
+ Feature value to set
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get the symbolic of the specified value of the Enum type node
+
+ Key value, for example, using "PixelFormat" to set pixel format
+ Symbolic to get
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Set Enum value
+
+ Key value, for example, using "PixelFormat" to set pixel format
+ Feature String to set
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get Float value
+
+ Key value
+ Value of device features
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Set float value
+
+ Key value
+ Feature value to set
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get Boolean value
+
+ Key value
+ Value of device features
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Set Boolean value
+
+ Key value
+ Feature value to set
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get String value
+
+ Key value
+ Value of device features
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Set String value
+
+ Key value
+ Feature value to set
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Send Command
+
+ Key value
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Read Memory
+
+ Used as a return value, save the read-in memory value(Memory value is stored in accordance with the big end model)
+ Memory address to be read, which can be obtained from the Camera.xml file of the device, the form xml node value of xxx_RegAddr
+ Length of the memory to be read
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Write Memory
+
+ Memory value to be written ( Note the memory value to be stored in accordance with the big end model)
+ Memory address to be written, which can be obtained from the Camera.xml file of the device, the form xml node value of xxx_RegAddr
+ Length of the memory to be written
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Invalidate GenICam Nodes
+
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get camera feature tree XML
+
+ XML data receiving buffer
+ Buffer size
+ Actual data length
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get Access mode of cur node
+
+ Name of node
+ Access mode of the node
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get Interface Type of cur node
+
+ Name of node
+ Interface Type of the node
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Save camera feature
+
+ File name
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Load camera feature
+
+ File name
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Read the file from the camera
+
+ File access structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Read the file from the camera
+
+ File access structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Write the file to camera
+
+ File access structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Write the file to camera
+
+ File access structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get File Access Progress
+
+ File access Progress
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Device Local Upgrade
+
+ File path and name
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get Upgrade Progress
+
+ Value of Progress
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Register Exception Message CallBack, call after open device
+
+ Exception Message CallBack Function
+ User defined variable
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Register event callback, which is called after the device is opened
+
+ Event CallBack Function
+ User defined variable
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Register single event callback, which is called after the device is opened
+
+ Event name
+ Event CallBack Function
+ User defined variable
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Set enumerate device timeout
+
+ time out,default 100ms
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Force IP
+
+ IP to set
+ Subnet mask
+ Default gateway
+ Success, return MV_OK. Failure, return error code
+
+
+
+ IP configuration method
+
+ IP type, refer to MV_IP_CFG_x
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Set to use only one mode,type: MV_NET_TRANS_x. When do not set, priority is to use driver by default
+
+ Net transmission mode, refer to MV_NET_TRANS_x
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get net transmission information
+
+ Transmission information
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Setting the ACK mode of devices Discovery
+
+ ACK mode(Default-Broadcast),0-Unicast,1-Broadcast
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Set GVSP streaming timeout
+
+ Timeout, default 300ms, range: >10ms
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get GVSP streaming timeout
+
+ Timeout, ms as unit
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Set GVCP cammand timeout
+
+ Timeout, ms as unit, range: 0-10000
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get GVCP cammand timeout
+
+ Timeout, ms as unit
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Set the number of retry GVCP cammand
+
+ The number of retries,rang:0-100
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get the number of retry GVCP cammand
+
+ The number of retries
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get the optimal Packet Size, Only support GigE Camera
+
+ Optimal packet size
+
+
+
+ Set whethe to enable resend, and set resend
+
+ Enable resend
+ Max resend persent
+ Resend timeout
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Set the max resend retry times
+
+ The max times to retry resending lost packets,default 20
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get the max resend retry times
+
+ the max times to retry resending lost packets
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Set time interval between same resend requests
+
+ The time interval between same resend requests,default 10ms
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get time interval between same resend requests
+
+ The time interval between same resend requests
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Set transmission type,Unicast or Multicast
+
+ Struct of transmission type
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Issue Action Command
+
+ Action Command info
+ Action Command Result List
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get Multicast Status
+
+ Device Information
+ Status of Multicast
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Set device baudrate using one of the CL_BAUDRATE_XXXX value
+
+ Baudrate to set. Refer to the 'CameraParams.h' for parameter definitions, for example, #define MV_CAML_BAUDRATE_9600 0x00000001
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get device baudrate, using one of the CL_BAUDRATE_XXXX value
+
+ Return pointer of baud rate to user.
+ Refer to the 'CameraParams.h' for parameter definitions, for example, #define MV_CAML_BAUDRATE_9600 0x00000001
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get supported baudrates of the combined device and host interface
+
+ Return pointer of the supported baudrates to user. 'OR' operation results of the supported baudrates.
+ Refer to the 'CameraParams.h' for single value definitions, for example, #define MV_CAML_BAUDRATE_9600 0x00000001
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Sets the timeout for operations on the serial port
+
+ Timeout in [ms] for operations on the serial port.
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Set transfer size of U3V device
+
+ Transfer size,Byte,default:1M,rang:>=0x10000
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get transfer size of U3V device
+
+ Transfer size,Byte
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Set transfer ways of U3V device
+
+ Transfer ways,rang:1-10
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get transfer ways of U3V device
+
+ Transfer ways
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Register Stream Exception Message CallBack
+
+ Stream Exception Message CallBack Function
+ User defined variable
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Set the number of U3V device event cache nodes
+
+ Event Node Number
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Set U3V Camera Synchronisation timeout
+
+ Synchronisation time(ms), default 1000ms
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get U3V Camera Synchronisation timeout
+
+ Synchronisation time(ms), default 1000ms
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Enumerate interfaces by GenTL
+
+ Interface information list
+ Path of GenTL's cti file
+
+
+
+
+ Unload cti library
+
+ GenTL cti file path
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Enumerate Device Based On GenTL
+
+ Interface information
+ Device List
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Create Device Handle Based On GenTL Device Info
+
+ Device Information Structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Save image, support Bmp and Jpeg.
+
+ Save image parameters structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Save the image file, support Bmp、 Jpeg、Png and Tiff. Encoding quality(50-99]
+
+ Save the image file parameter structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Save 3D point data, support PLY、CSV and OBJ
+
+ Save 3D point data parameters structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Rotate Image
+
+ Rotate image parameter structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Flip Image
+
+ Flip image parameter structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Pixel format conversion
+
+ Convert Pixel Type parameter structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Interpolation algorithm type setting
+
+ Bayer interpolation method 0-Fast 1-Equilibrium 2-Optimal
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Filter type of the bell interpolation quality algorithm setting
+
+ Filter type enable
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Set Bayer Gamma value
+
+ Gamma value[0.1,4.0]
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Set Mono8/Bayer Gamma value
+
+ PixelType
+ Gamma value[0.1,4.0]
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Set Gamma param
+
+ Gamma parameter structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Set CCM param
+
+ CCM parameter structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Set CCM param
+
+ CCM parameter structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Adjust image contrast
+
+ Contrast parameter structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ High Bandwidth Decode
+
+ High Bandwidth Decode parameter structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Draw Rect Auxiliary Line
+
+ Rect Auxiliary Line Info
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Draw Circle Auxiliary Line
+
+ Circle Auxiliary Line Info
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Draw Line Auxiliary Line
+
+ Linear Auxiliary Line Info
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Start Record
+
+ Record param structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Input RAW data to Record
+
+ Record data structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Stop Record
+
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Open the GUI interface for getting or setting camera parameters
+
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Reconstruct Image(For time-division exposure function)
+
+ Reconstruct image parameters
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Byte array to struct
+
+ Byte array
+ Struct type
+ Struct object
+
+
+
+ 判断字符数组是否为utf-8
+
+ 字符数组
+
+
+
+
+ Write Error Message
+
+ Message
+ ErrorNum
+
+
+
+ Save image, support Bmp and Jpeg.
+
+ Save image parameters structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Save the image file, support Bmp、 Jpeg、Png and Tiff. Encoding quality(50-99]
+
+ Save the image file parameter structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Pixel format conversion
+
+ Convert Pixel Type parameter structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Get basic information of image (Interfaces not recommended)
+
+
+
+
+
+
+ Get GenICam proxy (Interfaces not recommended)
+
+
+
+
+
+ Get root node (Interfaces not recommended)
+
+
+
+
+
+
+ Get all children node of specific node from xml, root node is Root (Interfaces not recommended)
+
+
+
+
+
+
+
+ Get all children node of specific node from xml, root node is Root (Interfaces not recommended)
+
+
+
+
+
+
+
+ Get current node feature (Interfaces not recommended)
+
+
+
+
+
+
+
+ Update node (Interfaces not recommended)
+
+
+
+
+
+
+
+ Register update callback (Interfaces not recommended)
+
+
+
+
+
+
+
+ Noise estimate of Bayer format
+
+ Noise estimate parameter structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Spatial Denoise of Bayer format
+
+ Spatial Denoise parameter structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ This interface is abandoned, it is recommended to use the MV_CC_DisplayOneFrame
+
+
+
+
+
+
+ This interface is abandoned, it is recommended to use the MV_CC_GetOneFrameTimeOut
+
+
+
+
+
+
+
+
+ This interface is abandoned, it is recommended to use the MV_CC_GetOneFrameTimeOut
+
+
+
+
+
+
+
+
+ This interface is abandoned, it is recommended to use the MV_CC_SaveImageEx
+
+
+
+
+
+
+ This interface is abandoned, it is recommended to use the MV_GIGE_ForceIpEx
+
+
+
+
+
+
+ This interface is abandoned, it is recommended to use the MV_CC_RegisterEventCallBackEx
+
+
+
+
+
+
+
+ This interface is abandoned, it is recommended to use the MV_CC_GetIntValueEx
+
+
+
+
+
+
+
+ This interface is abandoned, it is recommended to use the MV_CC_SetIntValueEx
+
+
+
+
+
+
+
+ Set CLUT param
+
+ CLUT parameter structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Image sharpen
+
+ Sharpen parameter structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Color Correct(include CCM and CLUT)
+
+ Color Correct parameter structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Noise Estimate
+
+ Noise Estimate parameter structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ Spatial Denoise
+
+ Spatial Denoise parameter structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ LSC Calib
+
+ LSC Calib parameter structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ LSC Correct
+
+ LSC Correct parameter structure
+ Success, return MV_OK. Failure, return error code
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ Set PixelFormat
+
+ PixelFormat
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ Get Trigger Source
+
+ Trigger Source
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is replaced by general interface
+
+
+
+
+
+
+ This interface is abandoned, it is recommended to use the MV_CC_RegisterImageCallBackEx
+
+
+
+
+
+
+
+ Grab callback
+
+ Image data
+ Frame info
+ User defined variable
+
+
+
+ Grab callback
+
+ Image data
+ Frame info
+ User defined variable
+
+
+
+ Xml Update callback(Interfaces not recommended)
+
+ Node type
+ Current node feature structure
+ Nodes list
+ User defined variable
+
+
+
+ Exception callback
+
+ Msg type
+ User defined variable
+
+
+
+ Event callback (Interfaces not recommended)
+
+ User defined ID
+ User defined variable
+
+
+
+ Event callback
+
+ Event Info
+ User defined variable
+
+
+
+ Stream Exception callback
+
+ Msg type
+ User defined variable
+
+
+
+ ch:采集卡信息列表 | en: Interface Information List
+
+
+
+
+ ch:在线设备数量 | en:Online Interface Number
+
+
+
+
+ ch:支持最多64个设备 | en:Support up to 64 Interfaces
+
+
+
+
+ ch:采集卡信息 | en: Interface information
+
+
+
+
+ ch: 采集卡类型; 低16位有效: bits(0~2)代表功能, bits(3~7)代表相机, bits(8-15)代表总线| en: Interface type
+
+
+
+
+ ch: 采集卡的PCIE插槽信息 | en: PCIe slot information of interface
+
+
+
+
+ ch: 采集卡ID | en: Interface ID
+
+
+
+
+ ch 显示名称 | en: Display name
+
+
+
+
+ ch 序列号 |en: Serial number
+
+
+
+
+ ch 型号 | en: model name
+
+
+
+
+ ch: 厂商 |en: manufacturer name
+
+
+
+
+ ch: 版本号| en: device version
+
+
+
+
+ ch: 自定义名称 |en: user defined name
+
+
+
+
+ ch 保留字段 | en Reserved
+
+
+
+
+ 排序方式
+
+
+
+
+ 按序列号排序
+
+
+
+
+ 按用户自定义名字排序
+
+
+
+
+ 按当前IP地址排序(升序)
+
+
+
+
+ 按当前IP地址排序(降序)
+
+
+
+
+ ch: GigE设备信息 | en: GigE device information
+
+
+
+
+ IP 配置选项
+
+
+
+
+ IP configuration:bit31-static bit30-dhcp bit29-lla
+
+
+
+
+ curtent ip
+
+
+
+
+ curtent subnet mask
+
+
+
+
+ current gateway
+
+
+
+
+ 制造商名
+
+
+
+
+ 型号名
+
+
+
+
+ 设备版本信息
+
+
+
+
+ 制造商特殊信息
+
+
+
+
+ 序列号
+
+
+
+
+ 用户自定义名
+
+
+
+
+ 网口IP地址
+
+
+
+
+ 预留
+
+
+
+
+ ch: GigE设备信息 | en: GigE device information
+
+
+
+
+ IP 配置选项
+
+
+
+
+ IP configuration:bit31-static bit30-dhcp bit29-lla
+
+
+
+
+ curtent ip
+
+
+
+
+ curtent subnet mask
+
+
+
+
+ current gateway
+
+
+
+
+ 制造商名
+
+
+
+
+ 型号名
+
+
+
+
+ 设备版本信息
+
+
+
+
+ 制造商特殊信息
+
+
+
+
+ 序列号
+
+
+
+
+ 用户自定义名
+
+
+
+
+ 网口IP地址
+
+
+
+
+ 预留
+
+
+
+
+ ch:USB3 设备信息 | en:USB3 device information
+
+
+
+
+ 控制输入端点
+
+
+
+
+ 控制输出端点
+
+
+
+
+ 流端点
+
+
+
+
+ 事件端点
+
+
+
+
+ 供应商ID号
+
+
+
+
+ 产品ID号
+
+
+
+
+ 设备索引号
+
+
+
+
+ 设备GUID号
+
+
+
+
+ 供应商名字
+
+
+
+
+ 型号名字
+
+
+
+
+ 家族名字
+
+
+
+
+ 设备版本号
+
+
+
+
+ 制造商名字
+
+
+
+
+ 序列号
+
+
+
+
+ 用户自定义名字
+
+
+
+
+ 支持的USB协议
+
+
+
+
+ 保留字节
+
+
+
+
+ ch:USB3 设备信息 | en:USB3 device information
+
+
+
+
+ 控制输入端点
+
+
+
+
+ 控制输出端点
+
+
+
+
+ 流端点
+
+
+
+
+ 事件端点
+
+
+
+
+ 供应商ID号
+
+
+
+
+ 产品ID号
+
+
+
+
+ 设备索引号
+
+
+
+
+ 设备GUID号
+
+
+
+
+ 供应商名字
+
+
+
+
+ 型号名字
+
+
+
+
+ 家族名字
+
+
+
+
+ 设备版本号
+
+
+
+
+ 制造商名字
+
+
+
+
+ 序列号
+
+
+
+
+ 用户自定义名字
+
+
+
+
+ 支持的USB协议
+
+
+
+
+ 保留字节
+
+
+
+
+ ch:CamLink设备信息 | en:CamLink device information
+
+
+
+
+ 端口号ID
+
+
+
+
+ 模型名
+
+
+
+
+ 家族名
+
+
+
+
+ 设备版本信息
+
+
+
+
+ 制造商名字
+
+
+
+
+ 序列号
+
+
+
+
+ 保留字节
+
+
+
+
+ ch:采集卡Camera Link相机信息 | en:Camera Link device information on frame grabber
+
+
+
+
+ ch 采集卡ID |en Interface ID of Frame Grabber
+
+
+
+
+ ch 供应商名字 |en Vendor name
+
+
+
+
+ ch 型号名字 |en Model name
+
+
+
+
+ ch 厂商信息 |en Manufacturer information
+
+
+
+
+ ch 相机版本 |en Device version
+
+
+
+
+ ch 序列号 |en Serial number
+
+
+
+
+ ch 用户自定义名字 |en User defined name
+
+
+
+
+ ch 相机ID |en Device ID
+
+
+
+
+ ch 保留字段 |en Reserved
+
+
+
+
+ ch:CoaXPress相机信息 | en:CoaXPress device information
+
+
+
+
+ ch 采集卡ID |en Interface ID of Frame Grabber
+
+
+
+
+ ch 供应商名字 |en Vendor name
+
+
+
+
+ ch 型号名字 |en Model name
+
+
+
+
+ ch 厂商信息 |en Manufacturer information
+
+
+
+
+ ch 相机版本 |en Device version
+
+
+
+
+ ch 序列号 |en Serial number
+
+
+
+
+ ch 用户自定义名字 |en User defined name
+
+
+
+
+ ch 相机ID |en Device ID
+
+
+
+
+ ch 保留字段 |en Reserved
+
+
+
+
+ ch:XoFLink相机信息 | en:XoFLink device information
+
+
+
+
+ ch 采集卡ID |en Interface ID of Frame Grabber
+
+
+
+
+ ch 供应商名字 |en Vendor name
+
+
+
+
+ ch 型号名字 |en Model name
+
+
+
+
+ ch 厂商信息 |en Manufacturer information
+
+
+
+
+ ch 相机版本 |en Device version
+
+
+
+
+ ch 序列号 |en Serial number
+
+
+
+
+ ch 用户自定义名字 |en User defined name
+
+
+
+
+ ch 相机ID |en Device ID
+
+
+
+
+ ch 保留字段 |en Reserved
+
+
+
+
+ ch:设备信息 | en:Device information
+
+
+
+
+ 主版本号
+
+
+
+
+ 次版本号
+
+
+
+
+ MAC高地址
+
+
+
+
+ MAC低地址
+
+
+
+
+ 设备传输层协议类型,e.g. MV_GIGE_DEVICE
+
+
+
+
+ ch 设备类型信息 | en Device Type Info
+
+
+
+
+ 保留字节
+
+
+
+
+ 设备类型
+
+
+
+
+ 构造函数
+
+ 输入任意数,因为不接受无参构造函数
+
+
+
+ ch:特定类型的设备信息 | en:Special devcie information
+
+
+
+
+ GigE
+
+
+
+
+ Camera Link
+
+
+
+
+ Usb
+
+
+
+
+ CML
+
+
+
+
+ CXP
+
+
+
+
+ XOF
+
+
+
+
+ 相机列表
+
+
+
+
+ 在线设备数量
+
+
+
+
+ 支持最多256个设备
+
+
+
+
+ ch:通过GenTL枚举到的Interface信息 | en:Interface Information with GenTL
+
+
+
+
+ GenTL接口ID
+
+
+
+
+ 传输层类型
+
+
+
+
+ 设备显示名称
+
+
+
+
+ GenTL的cti文件索引
+
+
+
+
+ 保留字节
+
+
+
+
+ ch:通过GenTL枚举到的设备信息列表 | en:Interface Information List with GenTL
+
+
+
+
+ ch:在线设备数量 | en:Online Interface Number
+
+
+
+
+ ch:支持最多256个设备 | en:Support up to 256 Interfaces
+
+
+
+
+ ch:通过GenTL枚举到的设备信息 | en:Device Information discovered by with GenTL
+
+
+
+
+ 采集卡ID
+
+
+
+
+ 设备ID
+
+
+
+
+ 供应商名字
+
+
+
+
+ 模型名
+
+
+
+
+ 传输类型
+
+
+
+
+ 显示名
+
+
+
+
+ 用户自定义名
+
+
+
+
+ 序列号
+
+
+
+
+ 设备版本信息
+
+
+
+
+ cti文件序号
+
+
+
+
+ 保留字节
+
+
+
+
+ ch:通过GenTL枚举到的设备信息 | en:Device Information discovered by with GenTL
+
+
+
+
+ 采集卡ID
+
+
+
+
+ 设备ID
+
+
+
+
+ 供应商名字
+
+
+
+
+ 模型名
+
+
+
+
+ 传输类型
+
+
+
+
+ 显示名
+
+
+
+
+ 用户自定义名
+
+
+
+
+ 序列号
+
+
+
+
+ 设备版本信息
+
+
+
+
+ cti文件序号
+
+
+
+
+ 保留字节
+
+
+
+
+ ch:GenTL设备列表 | en:GenTL devices list
+
+
+
+
+ 在线设备数量
+
+
+
+
+ 支持最多256个设备
+
+
+
+
+ Net Trans Info
+
+
+
+
+ 已接收数据大小 [统计StartGrabbing和StopGrabbing之间的数据量]
+
+
+
+
+ 丢帧数量
+
+
+
+
+ 接收帧数
+
+
+
+
+ 请求重发包数
+
+
+
+
+ 重发包数
+
+
+
+
+ Frame Out Info
+
+
+
+
+ 图像宽
+
+
+
+
+ 图像高
+
+
+
+
+ 像素格式
+
+
+
+
+ 帧号
+
+
+
+
+ 时间戳高32位
+
+
+
+
+ 时间戳低32位
+
+
+
+
+ 保留,8字节对齐
+
+
+
+
+ 主机生成的时间戳
+
+
+
+
+ 帧数据大小
+
+
+
+
+ 丢包数量
+
+
+
+
+ 保留字节
+
+
+
+
+ Chunk数据信息
+
+
+
+
+ Chunk数据
+
+
+
+
+ ChunkID
+
+
+
+
+ Chunk大小
+
+
+
+
+ 保留字节
+
+
+
+
+ Frame Out Info Ex
+
+
+
+
+ 图像宽
+
+
+
+
+ 图像高
+
+
+
+
+ 像素格式
+
+
+
+
+ 帧号
+
+
+
+
+ 时间戳高32位
+
+
+
+
+ 时间戳低32位
+
+
+
+
+ 保留,8字节对齐
+
+
+
+
+ 主机生成的时间戳
+
+
+
+
+ Frame大小
+
+
+
+
+ 秒数
+
+
+
+
+ 周期数
+
+
+
+
+ 周期偏移量
+
+
+
+
+ 增益
+
+
+
+
+ 曝光时间
+
+
+
+
+ 平均亮度
+
+
+
+
+ Red
+
+
+
+
+ Green
+
+
+
+
+ Blue
+
+
+
+
+ 帧计数器
+
+
+
+
+ 触发计数
+
+
+
+
+ 输入
+
+
+
+
+ 输出
+
+
+
+
+ 水平偏移量
+
+
+
+
+ 垂直偏移量
+
+
+
+
+ Chunk宽度
+
+
+
+
+ Chunk高度
+
+
+
+
+ 丢包数
+
+
+
+
+ 为解析的Chunk数量
+
+
+
+
+ 为解析的Chunk列表
+
+
+
+
+ 图像宽扩展
+
+
+
+
+ 图像高扩展
+
+
+
+
+ 保留字节
+
+
+
+
+ 为解析的Chunk列表
+
+
+
+
+ 为解析的Chunk内容
+
+
+
+
+ 对齐结构体,无实际用途
+
+
+
+
+ 输出帧信息
+
+
+
+
+ 帧数据地址
+
+
+
+
+ 帧信息
+
+
+
+
+ 保留字节
+
+
+
+
+ 取流策略
+
+
+
+
+ 从旧到新一帧一帧的获取图像(默认为该策略)
+
+
+
+
+ 获取列表中最新的一帧图像(同时清除列表中的其余图像)
+
+
+
+
+ 获取列表中最新的图像,个数由OutputQueueSize决定,范围为1-ImageNodeNum,设置成1等同于LatestImagesOnly,设置成ImageNodeNum等同于OneByOne
+
+
+
+
+ 等待下一帧图像
+
+
+
+
+ 显示帧信息
+
+
+
+
+ 显示窗口的句柄
+
+
+
+
+ 显示的帧数据
+
+
+
+
+ 显示的帧数据大小
+
+
+
+
+ 图像宽
+
+
+
+
+ 图像高
+
+
+
+
+ 像素格式
+
+
+
+
+ 保留字节
+
+
+
+
+ 显示帧信息
+
+
+
+
+ 图像宽
+
+
+
+
+ 图像高
+
+
+
+
+ 像素格式
+
+
+
+
+ 显示的帧数据
+
+
+
+
+ 显示的帧数据大小
+
+
+
+
+ 保留字节
+
+
+
+
+ ch:保存3D数据格式 | en:Save 3D file
+
+
+
+
+ 未定义数据格式
+
+
+
+
+ PLY数据格式
+
+
+
+
+ CSV数据格式
+
+
+
+
+ OBJ数据格式
+
+
+
+
+ 保存的点阵参数
+
+
+
+
+ [IN] 每一行点的数量
+
+
+
+
+ [IN] 行数
+
+
+
+
+ [IN] 输入数据的像素格式
+
+
+
+
+ [IN] 输入数据缓存
+
+
+
+
+ [IN] 输入数据大小
+
+
+
+
+ [OUT] 输出像素数据缓存
+
+
+
+
+ [IN] 提供的输出缓冲区大小(nLinePntNum * nLineNum * (16*3 + 4) + 2048)
+
+
+
+
+ [OUT] 输出像素数据缓存长度
+
+
+
+
+ 保存的点阵文件类型
+
+
+
+
+ 保留字节
+
+
+
+
+ 保存的图像格式
+
+
+
+
+ 未定义类型
+
+
+
+
+ Bmp图像格式
+
+
+
+
+ Jpeg图像格式
+
+
+
+
+ Png图像格式
+
+
+
+
+ Tif图像格式
+
+
+
+
+ 保存的图像参数
+
+
+
+
+ [IN] 输入数据缓存
+
+
+
+
+ [IN] 输入数据大小
+
+
+
+
+ [IN] 输入数据的像素格式
+
+
+
+
+ [IN] 图像宽
+
+
+
+
+ [IN] 图像高
+
+
+
+
+ [OUT] 输出图片缓存
+
+
+
+
+ [OUT] 输出图片大小
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ [IN] 输出图片格式
+
+
+
+
+ 保存的图像参数
+
+
+
+
+ [IN] 输入数据缓存
+
+
+
+
+ [IN] 输入数据大小
+
+
+
+
+ [IN] 输入数据的像素格式
+
+
+
+
+ [IN] 图像宽
+
+
+
+
+ [IN] 图像高
+
+
+
+
+ [OUT] 输出图片缓存
+
+
+
+
+ [OUT] 输出图片大小
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ [IN] 输出图片格式
+
+
+
+
+ [IN] 编码质量, (50-99]
+
+
+
+
+ [IN] Bayer的插值方法 0-快速 1-均衡 2-最优(如果传入其它值则默认为最优)
+
+
+
+
+ 保留字节
+
+
+
+
+ 保存的图像信息扩展
+
+
+
+
+ [IN] 输入数据缓存
+
+
+
+
+ [IN] 输入数据大小
+
+
+
+
+ [IN] 输入数据的像素格式
+
+
+
+
+ [IN] 图像宽
+
+
+
+
+ [IN] 图像高
+
+
+
+
+ [OUT] 输出图片缓存
+
+
+
+
+ [OUT] 输出图片大小
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ [IN] 输出图片格式
+
+
+
+
+ [IN] 编码质量, (50-99]
+
+
+
+
+ [IN] Bayer的插值方法 0-快速 1-均衡 2-最优(如果传入其它值则默认为最优)
+
+
+
+
+ 保留字节
+
+
+
+
+ 保存图像到文件的参数
+
+
+
+
+ [IN] 输入数据的像素格式
+
+
+
+
+ [IN] 输入数据缓存
+
+
+
+
+ [IN] 输入数据大小
+
+
+
+
+ [IN] 图像宽
+
+
+
+
+ [IN] 图像高
+
+
+
+
+ [IN] 输入图片格式
+
+
+
+
+ [IN] 编码质量, (0-100]
+
+
+
+
+ [IN] 输入文件路径
+
+
+
+
+ [IN] Bayer的插值方法 0-快速 1-均衡 2-最优(如果传入其它值则默认为最优)
+
+
+
+
+ 保留字节
+
+
+
+
+ 保存图像到文件信息扩展
+
+
+
+
+ [IN] 图像宽
+
+
+
+
+ [IN] 图像高
+
+
+
+
+ [IN] 输入数据的像素格式
+
+
+
+
+ [IN] 输入数据缓存
+
+
+
+
+ [IN] 输入数据大小
+
+
+
+
+ [IN] 输入图片格式
+
+
+
+
+ [IN] 输入文件路径
+
+
+
+
+ [IN] 编码质量, (0-100]
+
+
+
+
+ [IN] Bayer的插值方法 0-快速 1-均衡 2-最优(如果传入其它值则默认为最优)
+
+
+
+
+ 保留字节
+
+
+
+
+ 旋转角度
+
+
+
+
+ 旋转90度
+
+
+
+
+ 旋转180度
+
+
+
+
+ 旋转270度
+
+
+
+
+ 旋转图像参数
+
+
+
+
+ [IN] 像素格式(仅支持Mono8/RGB24/BGR24)
+
+
+
+
+ [IN][OUT] 图像宽
+
+
+
+
+ [IN][OUT] 图像高
+
+
+
+
+ [IN] 输入数据缓存
+
+
+
+
+ [IN] 输入数据大小
+
+
+
+
+ [OUT] 输出图片缓存
+
+
+
+
+ [OUT] 输出图片大小
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ [IN] 旋转角度
+
+
+
+
+ 保留字节
+
+
+
+
+ 图像翻转类型
+
+
+
+
+ 垂直方向翻转
+
+
+
+
+ 水平方向翻转
+
+
+
+
+ 翻转图像参数
+
+
+
+
+ [IN] 像素格式(仅支持Mono8/RGB24/BGR24)
+
+
+
+
+ [IN] 图像宽
+
+
+
+
+ [IN] 图像高
+
+
+
+
+ [IN] 输入数据缓存
+
+
+
+
+ [IN] 输入数据大小
+
+
+
+
+ [OUT] 输出图片缓存
+
+
+
+
+ [OUT] 输出图片大小
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ [IN] 翻转类型
+
+
+
+
+ 保留字节
+
+
+
+
+ 像素转换参数
+
+
+
+
+ [IN] 图像宽
+
+
+
+
+ [IN] 图像高
+
+
+
+
+ [IN] 源像素格式
+
+
+
+
+ [IN] 输入数据缓存
+
+
+
+
+ [IN] 输入数据大小
+
+
+
+
+ [IN] 目标像素格式
+
+
+
+
+ [OUT] 输出数据缓存
+
+
+
+
+ [OUT] 输出数据大小
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ 保留字节
+
+
+
+
+ 图像像素转换信息扩展
+
+
+
+
+ [IN] 图像宽
+
+
+
+
+ [IN] 图像高
+
+
+
+
+ [IN] 源像素格式
+
+
+
+
+ [IN] 输入数据缓存
+
+
+
+
+ [IN] 输入数据大小
+
+
+
+
+ [IN] 目标像素格式
+
+
+
+
+ [OUT] 输出数据缓存
+
+
+
+
+ [OUT] 输出数据大小
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ 保留字节
+
+
+
+
+ Gamma类型
+
+
+
+
+ 不启用
+
+
+
+
+ GAMMA值
+
+
+
+
+ GAMMA曲线,8位需要的长度:256*sizeof(unsigned char)
+ 10位需要的长度:1024*sizeof(unsigned short)
+ 12位需要的长度:4096*sizeof(unsigned short)
+ 16位需要的长度:65536*sizeof(unsigned short)
+
+
+
+
+ 线性RGB转非线性RGB
+
+
+
+
+ 非线性RGB转线性RGB
+
+
+
+
+ Gamma参数
+
+
+
+
+ [IN] Gamma类型
+
+
+
+
+ [IN] Gamma值
+
+
+
+
+ [IN] Gamma曲线缓存
+
+
+
+
+ [IN] Gamma曲线长度
+
+
+
+
+ 保留字节
+
+
+
+
+ CCM参数
+
+
+
+
+ [IN] 是否启用CCM
+
+
+
+
+ [IN] CCM矩阵(-8192~8192)
+
+
+
+
+ 保留字节
+
+
+
+
+ CCM参数
+
+
+
+
+ [IN] 是否启用CCM
+
+
+
+
+ [IN] 量化3x3矩阵
+
+
+
+
+ [IN] 量化系数(2的整数幂)
+
+
+
+
+ 保留字节
+
+
+
+
+ CLUT参数
+
+
+
+
+ [IN] 是否启用CLUT
+
+
+
+
+ [IN] 量化系数(2的整数幂)
+
+
+
+
+ [IN] CLUT大小,建议值17
+
+
+
+
+ [OUT] 量化CLUT
+
+
+
+
+ [IN] 量化CLUT缓存大小(nCLUTSize*nCLUTSize*nCLUTSize*sizeof(int)*3)
+
+
+
+
+ 保留字节
+
+
+
+
+ 对比度调节参数
+
+
+
+
+ [IN] 图像宽度(最小8)
+
+
+
+
+ [IN] 图像高度(最小8)
+
+
+
+
+ [IN] 输入图像缓存
+
+
+
+
+ [IN] 输入图像缓存长度
+
+
+
+
+ [IN] 输入的像素格式
+
+
+
+
+ [OUT] 输出像素数据缓存
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ [OUT] 输出像素数据缓存长度
+
+
+
+
+ [IN] 对比度值,范围:[1, 10000]
+
+
+
+
+ 保留字节
+
+
+
+
+ 锐化参数
+
+
+
+
+ [IN] 图像宽度(最小8)
+
+
+
+
+ [IN] 图像高度(最小8)
+
+
+
+
+ [IN] 输入图像缓存
+
+
+
+
+ [IN] 输入图像缓存长度
+
+
+
+
+ [IN] 输入的像素格式
+
+
+
+
+ [OUT] 输出像素数据缓存
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ [OUT] 输出像素数据缓存长度
+
+
+
+
+ [IN] 锐度调节强度,范围:[0, 500]
+
+
+
+
+ [IN] 锐度调节半径(半径越大,耗时越长),范围:[1, 21]
+
+
+
+
+ [IN] 锐度调节阈值,范围:[0, 255]
+
+
+
+
+ 保留字节
+
+
+
+
+ 色彩校正参数(包括CCM和CLUT)
+
+
+
+
+ [IN] 图像宽度
+
+
+
+
+ [IN] 图像高度
+
+
+
+
+ [IN] 输入图像缓存
+
+
+
+
+ [IN] 输入图像缓存长度
+
+
+
+
+ [IN] 输入的像素格式
+
+
+
+
+ [OUT] 输出像素数据缓存
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ [OUT] 输出像素数据缓存长度
+
+
+
+
+ [IN] 输入有效图像位数,8 or 10 or 12 or 16
+
+
+
+
+ [IN] 输入Gamma信息
+
+
+
+
+ [IN] 输入CCM信息
+
+
+
+
+ [IN] 输入CLUT信息
+
+
+
+
+ 保留字节
+
+
+
+
+ 矩形ROI参数
+
+
+
+
+ [IN] 矩形左上角X轴坐标
+
+
+
+
+ [IN] 矩形左上角Y轴坐标
+
+
+
+
+ [IN] 矩形宽度
+
+
+
+
+ [IN] 矩形高度
+
+
+
+
+ 噪声估计参数
+
+
+
+
+ [IN] 图像宽度
+
+
+
+
+ [IN] 图像高度
+
+
+
+
+ [IN] 输入的像素格式
+
+
+
+
+ [IN] 输入图像缓存
+
+
+
+
+ [IN] 输入图像缓存长度
+
+
+
+
+ [IN] 图像ROI
+
+
+
+
+ [IN] ROI个数
+
+
+
+
+ [IN] 噪声阈值[0-4095]
+
+
+
+
+ [OUT] 输出噪声特性
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ [OUT] 输出噪声特性长度
+
+
+
+
+ 保留字节
+
+
+
+
+ 空域降噪参数
+
+
+
+
+ [IN] 图像宽度
+
+
+
+
+ [IN] 图像高度
+
+
+
+
+ [IN] 输入的像素格式
+
+
+
+
+ [IN] 输入图像缓存
+
+
+
+
+ [IN] 输入图像缓存长度
+
+
+
+
+ [OUT] 输出降噪后的数据
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ [OUT] 输出降噪后的数据长度
+
+
+
+
+ [IN] 输入噪声特性
+
+
+
+
+ [IN] 输入噪声特性长度
+
+
+
+
+ [IN] 降噪强度(0-100)
+
+
+
+
+ [IN] 锐化强度(0-32)
+
+
+
+
+ [IN] 噪声校正系数(0-1280)
+
+
+
+
+ [IN] 亮度校正系数(1-2000)
+
+
+
+
+ [IN] 色调校正系数(1-2000)
+
+
+
+
+ [IN] 亮度降噪强度(0-100)
+
+
+
+
+ [IN] 色调降噪强度(0-100)
+
+
+
+
+ [IN] 锐化强度(1-1000)
+
+
+
+
+ 保留字节
+
+
+
+
+ LSC标定参数
+
+
+
+
+ [IN] 图像宽度(16~65536)
+
+
+
+
+ [IN] 图像高度(16~65536)
+
+
+
+
+ [IN] 输入的像素格式
+
+
+
+
+ [IN] 输入图像缓存
+
+
+
+
+ [IN] 输入图像缓存长度
+
+
+
+
+ [OUT] 输出标定表缓存
+
+
+
+
+ [IN] 提供的标定表缓冲大小(nWidth*nHeight*sizeof(unsigned short))
+
+
+
+
+ [OUT] 输出标定表缓存长度
+
+
+
+
+ [IN] 宽度分块数
+
+
+
+
+ [IN] 高度分块数
+
+
+
+
+ [IN] 边缘填充系数,范围1~5
+
+
+
+
+ [IN] 标定方式,0-中心为基准
+ 1-最亮区域为基准
+ 2-目标亮度
+
+
+
+
+ [IN] 目标亮度(8bits,[0,255])
+ (10bits,[0,1023])
+ (12bits,[0,4095])
+ (16bits,[0,65535])
+
+
+
+
+ 保留字节
+
+
+
+
+ LSC校正参数
+
+
+
+
+ [IN] 图像宽度(16~65536)
+
+
+
+
+ [IN] 图像高度(16~65536)
+
+
+
+
+ [IN] 输入的像素格式
+
+
+
+
+ [IN] 输入图像缓存
+
+
+
+
+ [IN] 输入图像缓存长度
+
+
+
+
+ [OUT] 输出像素数据缓存
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ [OUT] 输出像素数据缓存长度
+
+
+
+
+ [IN] 输入校正表缓存
+
+
+
+
+ [IN] 输入校正表缓存长度
+
+
+
+
+ 保留字节
+
+
+
+
+ 噪声特性类型
+
+
+
+
+ 无效
+
+
+
+
+ 噪声曲线
+
+
+
+
+ 噪声水平
+
+
+
+
+ 默认值
+
+
+
+
+ 噪声基本信息
+
+
+
+
+ 版本
+
+
+
+
+ 噪声特性类型
+
+
+
+
+ 图像格式
+
+
+
+
+ 平均噪声水平
+
+
+
+
+ 曲线点数
+
+
+
+
+ 噪声曲线
+
+
+
+
+ 亮度曲线
+
+
+
+
+ 保留字节
+
+
+
+
+ 噪声估计参数
+
+
+
+
+ [IN] 图像宽(大于等于8)
+
+
+
+
+ [IN] 图像高(大于等于8)
+
+
+
+
+ [IN] 像素格式
+
+
+
+
+ [IN] 输入数据缓存
+
+
+
+
+ [IN] 输入数据大小
+
+
+
+
+ [IN] 噪声阈值(0-4095)
+
+
+
+
+ [IN] 用于存储噪声曲线和亮度曲线(需要外部分配,缓存大小:4096 * sizeof(int) * 2)
+
+
+
+
+ [OUT] 降噪特性信息
+
+
+
+
+ [IN] 线程数量,0表示算法库根据硬件自适应;1表示单线程(默认);大于1表示线程数目
+
+
+
+
+ 保留字节
+
+
+
+
+ 降噪参数
+
+
+
+
+ [IN] 图像宽(大于等于8)
+
+
+
+
+ [IN] 图像高(大于等于8)
+
+
+
+
+ [IN] 像素格式
+
+
+
+
+ [IN] 输入数据缓存
+
+
+
+
+ [IN] 输入数据大小
+
+
+
+
+ [OUT] 输出降噪后的数据
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ [OUT] 输出降噪后的数据长度
+
+
+
+
+ [IN] 降噪特性信息(来源于噪声估计)
+
+
+
+
+ [IN] 降噪强度(0-100)
+
+
+
+
+ [IN] 锐化强度(0-32)
+
+
+
+
+ [IN] 噪声校正系数(0-1280)
+
+
+
+
+ [IN] 线程数量,0表示算法库根据硬件自适应;1表示单线程(默认);大于1表示线程数目
+
+
+
+
+ 保留字节
+
+
+
+
+ 帧特殊信息
+
+
+
+
+ [OUT] 秒数
+
+
+
+
+ [OUT] 周期数
+
+
+
+
+ [OUT] 周期偏移量
+
+
+
+
+ [OUT] 增益
+
+
+
+
+ [OUT] 曝光时间
+
+
+
+
+ [OUT] 平均亮度
+
+
+
+
+ [OUT] 红色
+
+
+
+
+ [OUT] 绿色
+
+
+
+
+ [OUT] 蓝色
+
+
+
+
+ [OUT] 总帧数
+
+
+
+
+ [OUT] 触发计数
+
+
+
+
+ [OUT] 输入
+
+
+
+
+ [OUT] 输出
+
+
+
+
+ [OUT] 水平偏移量
+
+
+
+
+ [OUT] 垂直偏移量
+
+
+
+
+ [OUT] 水印宽
+
+
+
+
+ [OUT] 水印高
+
+
+
+
+ 保留字节
+
+
+
+
+ HB解码参数
+
+
+
+
+ [IN] 输入数据缓存
+
+
+
+
+ [IN] 输入数据大小
+
+
+
+
+ [OUT] 图像宽
+
+
+
+
+ [OUT] 图像高
+
+
+
+
+ [OUT] 输出数据缓存
+
+
+
+
+ [IN] 提供的输出缓冲区大小
+
+
+
+
+ [OUT] 输出数据大小
+
+
+
+
+ [OUT] 输出的像素格式
+
+
+
+
+ [OUT] 水印信息
+
+
+
+
+ 保留字节
+
+
+
+
+ 录像格式定义
+
+
+
+
+ 未定义格式
+
+
+
+
+ AVI格式
+
+
+
+
+ 录像参数
+
+
+
+
+ [IN] 输入数据的像素格式
+
+
+
+
+ [IN] 图像宽(指定目标参数时需为8的倍数)
+
+
+
+
+ [IN] 图像高(指定目标参数时需为8的倍数)
+
+
+
+
+ [IN] 帧率fps(大于1/16)
+
+
+
+
+ [IN] 码率kbps(128kbps-16Mbps)
+
+
+
+
+ [IN] 录像格式
+
+
+
+
+ [IN] 录像文件存放路径
+
+
+
+
+ 保留字节
+
+
+
+
+ 输入帧信息
+
+
+
+
+ [IN] 图像数据指针
+
+
+
+
+ [IN] 图像大小
+
+
+
+
+ 保留字节
+
+
+
+
+ 采集模式
+
+
+
+
+ 单帧模式
+
+
+
+
+ 多帧模式
+
+
+
+
+ 持续采集模式
+
+
+
+
+ 增益模式
+
+
+
+
+ 关闭
+
+
+
+
+ 一次
+
+
+
+
+ 连续
+
+
+
+
+ 曝光模式
+
+
+
+
+ Timed
+
+
+
+
+ TriggerWidth
+
+
+
+
+ 自动曝光模式
+
+
+
+
+ 关闭
+
+
+
+
+ 一次
+
+
+
+
+ 连续
+
+
+
+
+ 相机触发模式
+
+
+
+
+ 关闭
+
+
+
+
+ 打开
+
+
+
+
+ Gamma选择器
+
+
+
+
+ USER
+
+
+
+
+ SRGB
+
+
+
+
+ 自动白平衡
+
+
+
+
+ 关闭自动白平衡
+
+
+
+
+ 一次自动白平衡
+
+
+
+
+ 连续自动白平衡
+
+
+
+
+ 触发源
+
+
+
+
+ LINE0
+
+
+
+
+ LINE1
+
+
+
+
+ LINE2
+
+
+
+
+ LINE3
+
+
+
+
+ COUNTER0
+
+
+
+
+ SOFTWARE
+
+
+
+
+ FrequencyConverter
+
+
+
+
+ ALL MATHCH INFO
+
+
+
+
+ 需要输出的信息类型,e.g. MV_MATCH_TYPE_NET_DETECT
+
+
+
+
+ 输出的信息缓存,由调用者分配
+
+
+
+
+ 信息缓存的大小
+
+
+
+
+
+
+
+
+
+ 已接收数据大小 [统计StartGrabbing和StopGrabbing之间的数据量]
+
+
+
+
+ 丢失的包数量
+
+
+
+
+ 丢帧数量
+
+
+
+
+ 帧数
+
+
+
+
+ 请求重发包数
+
+
+
+
+ 重发包数
+
+
+
+
+ USB
+
+
+
+
+ 已接收数据大小 [统计OpenDevicce和CloseDevice之间的数据量]
+
+
+
+
+ 已收到的帧数
+
+
+
+
+ 错误帧数
+
+
+
+
+ 保留字节
+
+
+
+
+ 图像的基本信息
+
+
+
+
+ 宽度值
+
+
+
+
+ 宽度最小值
+
+
+
+
+ 宽度最大值
+
+
+
+
+ Width Inc
+
+
+
+
+ 高度值
+
+
+
+
+ 高度最小值
+
+
+
+
+ 高度最大值
+
+
+
+
+ Height Inc
+
+
+
+
+ 帧率
+
+
+
+
+ 最小帧率
+
+
+
+
+ 最大帧率
+
+
+
+
+ 当前的像素格式
+
+
+
+
+ 支持的像素格式种类
+
+
+
+
+ 像素列表
+
+
+
+
+ 保留字节
+
+
+
+
+ 节点是否可见的权限等级
+
+
+
+
+ Always visible
+
+
+
+
+ Visible for experts or Gurus
+
+
+
+
+ Visible for Gurus
+
+
+
+
+ Not Visible
+
+
+
+
+ Object is not yet initialized
+
+
+
+
+ 事件信息
+
+
+
+
+ 事件名
+
+
+
+
+ Event号
+
+
+
+
+ 流通到序号
+
+
+
+
+ 帧号高位
+
+
+
+
+ 帧号低位
+
+
+
+
+ 时间戳高位
+
+
+
+
+ 时间戳低位
+
+
+
+
+ Event数据
+
+
+
+
+ Event数据长度
+
+
+
+
+ 保留字节
+
+
+
+
+ 文件存取
+
+
+
+
+ 用户文件名
+
+
+
+
+ 设备文件名
+
+
+
+
+ 保留字节
+
+
+
+
+ 文件存取
+
+
+
+
+ 用户文件数据缓存空间
+
+
+
+
+ 用户数据缓存大小
+
+
+
+
+ 文件实际缓存大小
+
+
+
+
+ 设备文件名
+
+
+
+
+ 保留字节
+
+
+
+
+ 文件存取进度
+
+
+
+
+ 已完成的长度
+
+
+
+
+ 总长度
+
+
+
+
+ 保留字节
+
+
+
+
+ GigE传输类型
+
+
+
+
+ 表示单播(默认)
+
+
+
+
+ 表示组播
+
+
+
+
+ 表示局域网内广播,暂不支持
+
+
+
+
+ 表示子网内广播,暂不支持
+
+
+
+
+ 表示从相机获取,暂不支持
+
+
+
+
+ 表示用户自定义应用端接收图像数据Port号
+
+
+
+
+ 表示设置了单播,但本实例不接收图像数据
+
+
+
+
+ 表示组播模式,但本实例不接收图像数据
+
+
+
+
+ 传输模式,可以为单播模式、组播模式等
+
+
+
+
+ 传输模式
+
+
+
+
+ 目标IP,组播模式下有意义
+
+
+
+
+ 目标Port,组播模式下有意义
+
+
+
+
+ 保留字节
+
+
+
+
+ 动作命令信息
+
+
+
+
+ 设备密钥
+
+
+
+
+ 组键
+
+
+
+
+ 组掩码
+
+
+
+
+ 只有设置成1时Action Time才有效,非1时无效
+
+
+
+
+ 预定的时间,和主频有关
+
+
+
+
+ 广播包地址
+
+
+
+
+ 等待ACK的超时时间,如果为0表示不需要ACK
+
+
+
+
+ 保留字节
+
+
+
+
+ 动作命令结果
+
+
+
+
+ IP address of the device
+
+
+
+
+ status code returned by the device
+
+
+
+
+ 保留字节
+
+
+
+
+ 动作命令结果列表
+
+
+
+
+ 返回值个数
+
+
+
+
+ 返回的结果
+
+
+
+
+ 每个节点对应的接口类型
+
+
+
+
+ IValue接口类型
+
+
+
+
+ IBase接口类型
+
+
+
+
+ IInteger接口类型
+
+
+
+
+ IBoolean接口类型
+
+
+
+
+ ICommand接口类型
+
+
+
+
+ IFloat接口类型
+
+
+
+
+ IString接口类型
+
+
+
+
+ IRegister接口类型
+
+
+
+
+ ICategory接口类型
+
+
+
+
+ IEnumeration接口类型
+
+
+
+
+ IEnumEntry接口类型
+
+
+
+
+ IPort接口类型
+
+
+
+
+ XML节点特点
+
+
+
+
+ 节点类型
+
+
+
+
+ 是否可见
+
+
+
+
+ 节点描述
+
+
+
+
+ 显示名称
+
+
+
+
+ 节点名
+
+
+
+
+ 提示
+
+
+
+
+ 保留字节
+
+
+
+
+ XML节点列表
+
+
+
+
+ 节点个数
+
+
+
+
+ 节点列表
+
+
+
+
+ 整型节点值
+
+
+
+
+ 当前值
+
+
+
+
+ 最大值
+
+
+
+
+ 最小值
+
+
+
+
+ Inc
+
+
+
+
+ 保留字节
+
+
+
+
+ 整型节点值
+
+
+
+
+ 当前值
+
+
+
+
+ 最大值
+
+
+
+
+ 最小值
+
+
+
+
+ Inc
+
+
+
+
+ 保留字节
+
+
+
+
+ 浮点型节点值
+
+
+
+
+ 当前值
+
+
+
+
+ 最大值
+
+
+
+
+ 最小值
+
+
+
+
+ 保留字节
+
+
+
+
+ 枚举型节点值
+
+
+
+
+ 当前值
+
+
+
+
+ 有效数据个数
+
+
+
+
+ 保留字节
+
+
+
+
+ 保留字节
+
+
+
+
+ 字符串型节点值
+
+
+
+
+ 当前值
+
+
+
+
+ 节点值的最大长度
+
+
+
+
+ 保留字节
+
+
+
+
+ 节点的读写性
+
+
+
+
+ 未实现
+
+
+
+
+ 不可获取
+
+
+
+
+ 只写
+
+
+
+
+ 只读
+
+
+
+
+ 可读可写
+
+
+
+
+ 未定义
+
+
+
+
+ 内部用于AccessMode循环检测
+
+
+
+
+ 整型节点
+
+
+
+
+ 节点名
+
+
+
+
+ 显示名称
+
+
+
+
+ 节点描述
+
+
+
+
+ 提示
+
+
+
+
+ 是否可见
+
+
+
+
+ 访问模式
+
+
+
+
+ 是否锁定。0-否;1-是
+
+
+
+
+ 当前值
+
+
+
+
+ 最小值
+
+
+
+
+ 最大值
+
+
+
+
+ 增量
+
+
+
+
+ 保留字节
+
+
+
+
+ 布尔型节点
+
+
+
+
+ 节点名
+
+
+
+
+ 显示名称
+
+
+
+
+ 节点描述
+
+
+
+
+ 提示
+
+
+
+
+ 是否可见
+
+
+
+
+ 访问模式
+
+
+
+
+ 是否锁定。0-否;1-是
+
+
+
+
+ 当前值
+
+
+
+
+ 保留字节
+
+
+
+
+ 命令型节点
+
+
+
+
+ 节点名
+
+
+
+
+ 显示名称
+
+
+
+
+ 节点描述
+
+
+
+
+ 提示
+
+
+
+
+ 是否可见
+
+
+
+
+ 访问模式
+
+
+
+
+ 是否锁定。0-否;1-是
+
+
+
+
+ 保留字节
+
+
+
+
+ 浮点型节点
+
+
+
+
+ 节点名
+
+
+
+
+ 显示名称
+
+
+
+
+ 节点描述
+
+
+
+
+ 提示
+
+
+
+
+ 是否可见
+
+
+
+
+ 访问模式
+
+
+
+
+ 是否锁定。0-否;1-是
+
+
+
+
+ 当前值
+
+
+
+
+ 最小值
+
+
+
+
+ 最大值
+
+
+
+
+ 增量
+
+
+
+
+ 保留字节
+
+
+
+
+ 字符串类型节点
+
+
+
+
+ 节点名
+
+
+
+
+ 显示名称
+
+
+
+
+ 节点描述
+
+
+
+
+ 提示
+
+
+
+
+ 是否可见
+
+
+
+
+ 访问模式
+
+
+
+
+ 是否锁定。0-否;1-是
+
+
+
+
+ 当前值
+
+
+
+
+ 保留字节
+
+
+
+
+ 寄存器型节点
+
+
+
+
+ 节点名
+
+
+
+
+ 显示名称
+
+
+
+
+ 节点描述
+
+
+
+
+ 提示
+
+
+
+
+ 是否可见
+
+
+
+
+ 访问模式
+
+
+
+
+ 是否锁定。0-否;1-是
+
+
+
+
+ 当前值
+
+
+
+
+ 保留字节
+
+
+
+
+ 类别属性
+
+
+
+
+ 节点描述
+
+
+
+
+ 显示名称
+
+
+
+
+ 节点名
+
+
+
+
+ 提示
+
+
+
+
+ 是否可见
+
+
+
+
+ 保留字节
+
+
+
+
+ EnumEntry属性节点
+
+
+
+
+ 节点名
+
+
+
+
+ 显示名称
+
+
+
+
+ 节点描述
+
+
+
+
+ 提示
+
+
+
+
+
+
+
+
+
+ 父节点数
+
+
+
+
+ 父节点列表
+
+
+
+
+ 是否可见
+
+
+
+
+ 当前值
+
+
+
+
+ 访问模式
+
+
+
+
+ 是否锁定。0-否;1-是
+
+
+
+
+ 保留字节
+
+
+
+
+ 节点描述
+
+
+
+
+ 节点描述
+
+
+
+
+ Enumeration属性节点
+
+
+
+
+ 是否可见
+
+
+
+
+ 节点描述
+
+
+
+
+ 显示名称
+
+
+
+
+ 节点名
+
+
+
+
+ 提示
+
+
+
+
+ Symbolic数
+
+
+
+
+ 当前Symbolic索引
+
+
+
+
+ Symbolic索引
+
+
+
+
+ 访问模式
+
+
+
+
+ 是否锁定。0-否;1-是
+
+
+
+
+ 当前值
+
+
+
+
+ 保留字节
+
+
+
+
+ Port属性节点
+
+
+
+
+ 是否可见
+
+
+
+
+ 节点描述
+
+
+
+
+ 显示名称
+
+
+
+
+ 节点名
+
+
+
+
+ 提示
+
+
+
+
+ 访问模式
+
+
+
+
+ 是否锁定。0-否;1-是
+
+
+
+
+ 保留字节
+
+
+
+ 辅助线颜色
+
+
+ [0.0 , 1.0]
+
+
+ [0.0 , 1.0]
+
+
+ [0.0 , 1.0]
+
+
+ [0.0 , 1.0]
+
+
+ 预留字节
+
+
+ 自定义点坐标
+
+
+ [0.0 , 1.0]
+
+
+ [0.0 , 1.0]
+
+
+ 预留字节
+
+
+ 矩形框区域信息
+
+
+ [0.0 , 1.0]
+
+
+ [0.0 , 1.0]
+
+
+ [0.0 , 1.0]
+
+
+ [0.0 , 1.0]
+
+
+ 辅助线颜色
+
+
+ 辅助线宽度
+
+
+ 预留字节
+
+
+ 圆形框区域信息
+
+
+ 圆心信息
+
+
+ 宽向半径,根据图像的相对位置[0, 1.0]
+
+
+ 高向半径,根据图像的相对位置[0, 1.0]
+
+
+ 辅助线颜色信息
+
+
+ 辅助线宽度
+
+
+ 预留字节
+
+
+ 线条辅助线信息
+
+
+ 线条辅助线的起始点坐标
+
+
+ 线条辅助线的终点坐标
+
+
+ 辅助线颜色信息
+
+
+ 辅助线宽度
+
+
+ 预留字节
+
+
+ 枚举类型指定条目信息
+
+
+ 指定值
+
+
+ 指定值对应的符号
+
+
+ 预留字节
+
+
+ U3V流异常类型
+
+
+ 异常的图像,该帧被丢弃
+
+
+ 缓存列表溢出,清除最旧的一帧
+
+
+ 缓存列表为空,该帧被丢弃
+
+
+ 断流恢复
+
+
+ 断流,恢复失败,取流被中止
+
+
+ 设备异常,取流被中止
+
+
+ 重构后的图像列表
+
+
+ 源图像宽
+
+
+ 源图像高
+
+
+ 像素格式
+
+
+ 输出数据缓存
+
+
+ 输出数据长度
+
+
+ 提供的输出缓冲区大小
+
+
+ 预留字节
+
+
+
+ 分时曝光的图像处理方式
+
+
+
+
+ 源图像按行拆分成多张图像
+
+
+
+ 重构图像参数信息
+
+
+ 源图像宽
+
+
+ 源图像高
+
+
+ 像素格式
+
+
+ 输入数据缓存
+
+
+ 输入数据长度
+
+
+ 曝光个数(1-8]
+
+
+ 图像重构方式
+
+
+
+ 输出数据缓存信息
+
+
+
+ 预留字节
+
+
+
+ 像素格式定义
+
+
+
+
+ 未定义像素格式
+
+
+
+
+ Mono1p
+
+
+
+
+ Mono2p
+
+
+
+
+ Mono4p
+
+
+
+
+ Mono8
+
+
+
+
+ Mono8_Signed
+
+
+
+
+ Mono10
+
+
+
+
+ Mono10_Packed
+
+
+
+
+ Mono12
+
+
+
+
+ Mono12_Packed
+
+
+
+
+ Mono14
+
+
+
+
+ Mono16
+
+
+
+
+ BayerGR8
+
+
+
+
+ BayerRG8
+
+
+
+
+ BayerGB8
+
+
+
+
+ BayerBG8
+
+
+
+
+ BayerRBGG8
+
+
+
+
+ BayerGR10
+
+
+
+
+ BayerRG10
+
+
+
+
+ BayerGB10
+
+
+
+
+ BayerBG10
+
+
+
+
+ BayerGR12
+
+
+
+
+ BayerRG12
+
+
+
+
+ BayerGB12
+
+
+
+
+ BayerBG12
+
+
+
+
+ BayerGR10_Packed
+
+
+
+
+ BayerRG10_Packed
+
+
+
+
+ BayerGB10_Packed
+
+
+
+
+ BayerBG10_Packed
+
+
+
+
+ BayerGR12_Packed
+
+
+
+ BayerRG12_Packed
+
+
+ BayerGB12_Packed
+
+
+ BayerBG12_Packed
+
+
+ BayerGR16
+
+
+ BayerRG16
+
+
+ BayerGB16
+
+
+ BayerBG16
+
+
+ RGB8_Packed
+
+
+ BGR8_Packed
+
+
+ RGBA8_Packed
+
+
+ BGRA8_Packed
+
+
+ RGB10_Packed
+
+
+ BGR10_Packed
+
+
+ RGB12_Packed
+
+
+ BGR12_Packed
+
+
+ RGB16_Packed
+
+
+ BGR16_Packed///
+
+
+ RGBA16_Packed
+
+
+ BGRA16_Packed
+
+
+ RGB10V1_Packe
+
+
+ RGB10V2_Packed
+
+
+ RGB12V1_Packed
+
+
+ RGB565_Packed
+
+
+ BGR565_Packed
+
+
+ YUV411_Packed
+
+
+ YUV422_Packed
+
+
+ YUV422_YUYV_Packed
+
+
+ YUV444_Packed
+
+
+ YCBCR8_CBYCR
+
+
+ YCBCR422_8
+
+
+ YCBCR422_8_CBYCRY
+
+
+ YCBCR411_8_CBYYCRYY
+
+
+ YCBCR601_8_CBYCR
+
+
+ YCBCR601_422_8
+
+
+ YCBCR601_422_8_CBYCRY
+
+
+ YCBCR601_411_8_CBYYCRYY
+
+
+ YCBCR709_8_CBYCR
+
+
+ YCBCR709_422_8
+
+
+ YCBCR709_422_8_CBYCRY
+
+
+ YCBCR709_411_8_CBYYCRYY
+
+
+ YUV420SP_NV12
+
+
+ YUV420SP_NV21
+
+
+ RGB8_Planar
+
+
+ RGB10_Planar
+
+
+ RGB12_Planar
+
+
+ RGB16_Planar
+
+
+ Jpeg
+
+
+ Coord3D_ABC32f
+
+
+ Coord3D_ABC32f_Planar
+
+
+ Coord3D_AC32f
+
+
+ COORD3D_DEPTH_PLUS_MASK
+
+
+ Coord3D_ABC32
+
+
+ Coord3D_AB32f
+
+
+ Coord3D_AB32
+
+
+ Coord3D_AC32f_64
+
+
+ Coord3D_AC32f_Planar
+
+
+ Coord3D_AC32
+
+
+ Coord3D_A32f
+
+
+ Coord3D_A32
+
+
+ Coord3D_C32f
+
+
+ Coord3D_C32
+
+
+ Coord3D_ABC16
+
+
+ Coord3D_C16
+
+
+ Float32
+
+
+ HB_Mono8
+
+
+ HB_Mono10
+
+
+ HB_Mono10_Packed
+
+
+ HB_Mono12
+
+
+ HB_Mono12_Packed
+
+
+ HB_Mono16
+
+
+ HB_BayerGR8
+
+
+ HB_BayerRG8
+
+
+ HB_BayerGB8
+
+
+ HB_BayerBG8
+
+
+ HB_BayerRBGG8
+
+
+ HB_BayerGR10
+
+
+ HB_BayerRG10
+
+
+ HB_BayerGB10
+
+
+ HB_BayerBG10
+
+
+ HB_BayerGR12
+
+
+ HB_BayerRG12
+
+
+ HB_BayerGB12
+
+
+ HB_BayerBG12
+
+
+ HB_BayerGR10_Packed
+
+
+ HB_BayerRG10_Packed
+
+
+ HB_BayerGB10_Packed
+
+
+ HB_BayerBG10_Packed
+
+
+ HB_BayerGR12_Packed
+
+
+ HB_BayerRG12_Packed
+
+
+ HB_BayerGB12_Packed
+
+
+ HB_BayerBG12_Packed
+
+
+ HB_YUV422_Packed
+
+
+ HB_YUV422_YUYV_Packed
+
+
+ HB_RGB8_Packed
+
+
+ HB_BGR8_Packed
+
+
+ HB_RGBA8_Packed
+
+
+ HB_BGRA8_Packed
+
+
+ HB_RGB16_Packed
+
+
+ HB_BGR16_Packed
+
+
+ HB_RGBA16_Packed
+
+
+ HB_BGRA16_Packed
+
+
+
+ 像素格式
+
+
+
+
+ 未定义像素格式
+
+
+
+
+ Mono1p
+
+
+
+
+ Mono2p
+
+
+
+
+ Mono4p
+
+
+
+
+ Mono8
+
+
+
+
+ Mono8_Signed
+
+
+
+
+ Mono10
+
+
+
+
+ Mono10_Packed
+
+
+
+
+ Mono12
+
+
+
+
+ Mono12_Packed
+
+
+
+
+ Mono14
+
+
+
+
+ Mono16
+
+
+
+
+ BayerGR8
+
+
+
+
+ BayerRG8
+
+
+
+
+ BayerGB8
+
+
+
+
+ BayerBG8
+
+
+
+
+ BayerRBGG8
+
+
+
+
+ BayerGR10
+
+
+
+
+ BayerRG10
+
+
+
+
+ BayerGB10
+
+
+
+
+ BayerBG10
+
+
+
+
+ BayerGR12
+
+
+
+
+ BayerRG12
+
+
+
+
+ BayerGB12
+
+
+
+
+ BayerBG12
+
+
+
+
+ BayerGR10_Packed
+
+
+
+
+ BayerRG10_Packed
+
+
+
+
+ BayerGB10_Packed
+
+
+
+
+ BayerBG10_Packed
+
+
+
+
+ BayerGR12_Packed
+
+
+
+ BayerRG12_Packed
+
+
+ BayerGB12_Packed
+
+
+ BayerBG12_Packed
+
+
+ BayerGR16
+
+
+ BayerRG16
+
+
+ BayerGB16
+
+
+ BayerBG16
+
+
+ RGB8_Packed
+
+
+ BGR8_Packed
+
+
+ RGBA8_Packed
+
+
+ BGRA8_Packed
+
+
+ RGB10_Packed
+
+
+ BGR10_Packed
+
+
+ RGB12_Packed
+
+
+ BGR12_Packed
+
+
+ RGB16_Packed
+
+
+ BGR16_Packed///
+
+
+ RGBA16_Packed
+
+
+ BGRA16_Packed
+
+
+ RGB10V1_Packe
+
+
+ RGB10V2_Packed
+
+
+ RGB12V1_Packed
+
+
+ RGB565_Packed
+
+
+ BGR565_Packed
+
+
+ YUV411_Packed
+
+
+ YUV422_Packed
+
+
+ YUV422_YUYV_Packed
+
+
+ YUV444_Packed
+
+
+ YCBCR8_CBYCR
+
+
+ YCBCR422_8
+
+
+ YCBCR422_8_CBYCRY
+
+
+ YCBCR411_8_CBYYCRYY
+
+
+ YCBCR601_8_CBYCR
+
+
+ YCBCR601_422_8
+
+
+ YCBCR601_422_8_CBYCRY
+
+
+ YCBCR601_411_8_CBYYCRYY
+
+
+ YCBCR709_8_CBYCR
+
+
+ YCBCR709_422_8
+
+
+ YCBCR709_422_8_CBYCRY
+
+
+ YCBCR709_411_8_CBYYCRYY
+
+
+ YUV420SP_NV12
+
+
+ YUV420SP_NV21
+
+
+ RGB8_Planar
+
+
+ RGB10_Planar
+
+
+ RGB12_Planar
+
+
+ RGB16_Planar
+
+
+ Jpeg
+
+
+ Coord3D_ABC32f
+
+
+ Coord3D_ABC32f_Planar
+
+
+ Coord3D_AC32f
+
+
+ COORD3D_DEPTH_PLUS_MASK
+
+
+ Coord3D_ABC32
+
+
+ Coord3D_AB32f
+
+
+ Coord3D_AB32
+
+
+ Coord3D_AC32f_64
+
+
+ Coord3D_AC32f_Planar
+
+
+ Coord3D_AC32
+
+
+ Coord3D_A32f
+
+
+ Coord3D_A32
+
+
+ Coord3D_C32f
+
+
+ Coord3D_C32
+
+
+ Coord3D_ABC16
+
+
+ Coord3D_C16
+
+
+ Float32
+
+
+ HB_Mono8
+
+
+ HB_Mono10
+
+
+ HB_Mono10_Packed
+
+
+ HB_Mono12
+
+
+ HB_Mono12_Packed
+
+
+ HB_Mono16
+
+
+ HB_BayerGR8
+
+
+ HB_BayerRG8
+
+
+ HB_BayerGB8
+
+
+ HB_BayerBG8
+
+
+ HB_BayerRBGG8
+
+
+ HB_BayerGR10
+
+
+ HB_BayerRG10
+
+
+ HB_BayerGB10
+
+
+ HB_BayerBG10
+
+
+ HB_BayerGR12
+
+
+ HB_BayerRG12
+
+
+ HB_BayerGB12
+
+
+ HB_BayerBG12
+
+
+ HB_BayerGR10_Packed
+
+
+ HB_BayerRG10_Packed
+
+
+ HB_BayerGB10_Packed
+
+
+ HB_BayerBG10_Packed
+
+
+ HB_BayerGR12_Packed
+
+
+ HB_BayerRG12_Packed
+
+
+ HB_BayerGB12_Packed
+
+
+ HB_BayerBG12_Packed
+
+
+ HB_YUV422_Packed
+
+
+ HB_YUV422_YUYV_Packed
+
+
+ HB_RGB8_Packed
+
+
+ HB_BGR8_Packed
+
+
+ HB_RGBA8_Packed
+
+
+ HB_BGRA8_Packed
+
+
+ HB_RGB16_Packed
+
+
+ HB_BGR16_Packed
+
+
+ HB_RGBA16_Packed
+
+
+ HB_BGRA16_Packed
+
+
+
diff --git a/ExternalLibraries/MvCameraControl.Net.dll b/ExternalLibraries/MvCameraControl.Net.dll
new file mode 100644
index 0000000..a2e4c8b
Binary files /dev/null and b/ExternalLibraries/MvCameraControl.Net.dll differ
diff --git a/ExternalLibraries/PlcAddrDfn.xml b/ExternalLibraries/PlcAddrDfn.xml
new file mode 100644
index 0000000..ed5dbb3
--- /dev/null
+++ b/ExternalLibraries/PlcAddrDfn.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ExternalLibraries/Templates/Logo.png b/ExternalLibraries/Templates/Logo.png
new file mode 100644
index 0000000..5a4dc2c
Binary files /dev/null and b/ExternalLibraries/Templates/Logo.png differ
diff --git a/ExternalLibraries/Templates/Logo2.png b/ExternalLibraries/Templates/Logo2.png
new file mode 100644
index 0000000..9674cea
Binary files /dev/null and b/ExternalLibraries/Templates/Logo2.png differ
diff --git a/ExternalLibraries/Templates/StandardReportTemplate.json b/ExternalLibraries/Templates/StandardReportTemplate.json
new file mode 100644
index 0000000..64fb759
--- /dev/null
+++ b/ExternalLibraries/Templates/StandardReportTemplate.json
@@ -0,0 +1,222 @@
+{
+ "document": {
+ "pageSize": "A4",
+ "orientation": "Portrait",
+ "margins": { "top": 40, "bottom": 20, "left": 20, "right": 20 },
+ "header": {
+ "enabled": true,
+ "left": [
+ "${loc:Report_Title}",
+ "${loc:Report_Id}:${metadata.reportId} | ${loc:Report_Date}:${formatDate(metadata.inspectionDate)} | ${loc:Report_Sample}:${metadata.sampleName}"
+ ],
+ "rightImageKey": "companyLogo",
+ "fontSize": 7,
+ "color": "#666666",
+ "showLine": true
+ },
+ "footer": {
+ "enabled": true,
+ "left": ["${CompanyName}"],
+ "right": ["{currentPage} / {totalPages}"],
+ "fontSize": 8,
+ "color": "#666666",
+ "showLine": true
+ }
+ },
+ "pages": [
+ {
+ "type": "homepage",
+ "elements": [
+ {
+ "type": "row", "size": [170, 40], "positioning": "flow",
+ "children": [
+ {
+ "type": "column", "align": "left",
+ "children": [
+ { "type": "image", "dataKey": "companyLogo", "size": [50, 30], "align": "left" },
+ { "type": "text", "content": "${CompanyName}", "style": "companyName", "align": "left" }
+ ]
+ },
+ {
+ "type": "column", "align": "right",
+ "children": [
+ { "type": "image", "dataKey": "softwareLogo", "size": [15, 20], "align": "right" },
+ { "type": "text", "content": "${SoftwareName}", "style": "companyName", "align": "right" }
+ ]
+ }
+ ]
+ },
+ { "type": "spacer", "size": [170, 15], "positioning": "flow" },
+ { "type": "text", "content": "${loc:Report_Title}", "style": "title", "positioning": "flow" },
+ { "type": "spacer", "size": [170, 10], "positioning": "flow" },
+ { "type": "text", "content": "${loc:Report_Id}:${metadata.reportId}", "style": "homepageInfo", "positioning": "flow" },
+ { "type": "text", "content": "${loc:Report_Sample}:${metadata.sampleName}", "style": "homepageInfo", "positioning": "flow" },
+ { "type": "text", "content": "${loc:Report_Description}:${metadata.description}", "style": "homepageInfo", "positioning": "flow" },
+ { "type": "image", "dataKey": "workpieceImage", "size": [160, 110], "border": true, "align": "center", "style": "imageDefault", "positioning": "flow" },
+ { "type": "text", "content": "${loc:Report_Operator}:${metadata.operatorName}", "style": "homepageFooter", "positioning": "flow" },
+ { "type": "text", "content": "${loc:Report_Date}:${formatDate(metadata.inspectionDate)}", "style": "homepageFooter", "positioning": "flow" }
+ ]
+ },
+ {
+ "type": "summary",
+ "elements": [
+ { "type": "text", "content": "${loc:Report_Summary}", "style": "homepageHeading", "positioning": "flow" },
+ {
+ "type": "table", "dataKey": "summaryTable", "positioning": "flow", "size": [170, 0], "style": "tableDefault",
+ "columns": [
+ { "header": "${loc:Field_InspectionType}", "field": "inspectionType", "width": 50, "align": "left" },
+ { "header": "${loc:Field_Result}", "field": "classification", "width": 30, "align": "center", "colorRules": { "Pass": "#008000", "Fail": "#FF0000" } },
+ { "header": "${loc:Field_Status}", "field": "status", "width": 30, "align": "center", "colorRules": { "合格": "#008000", "PASS": "#008000", "不合格": "#FF0000", "FAIL": "#FF0000" } }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "metricData",
+ "elements": [
+ { "type": "text", "content": "${loc:Page_MetricData}", "style": "heading", "positioning": "flow" },
+ {
+ "type": "row", "size": [170, 100], "widths": [6, 4], "positioning": "flow",
+ "children": [
+ {
+ "type": "column", "align": "left",
+ "children": [
+ { "type": "image", "dataKey": "lineMeasurementImage", "size": [110, 90], "border": true, "align": "left" }
+ ]
+ },
+ {
+ "type": "column", "align": "left",
+ "children": [
+ { "type": "text", "content": "${loc:Measurement_Type}:${measurementType}", "style": "body", "align": "left" },
+ { "type": "text", "content": "${loc:Field_Point1}:${point1}", "style": "body", "align": "left" },
+ { "type": "text", "content": "${loc:Field_Point2}:${point2}", "style": "body", "align": "left" },
+ { "type": "text", "content": "${loc:Measurement_Distance}:${actualDistance} ${unit}", "style": "body", "align": "left" },
+ { "type": "text", "content": "${loc:Measurement_Angle}:${angle}°", "style": "body", "align": "left" }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "bgaInspection",
+ "elements": [
+ { "type": "text", "content": "${loc:Page_BgaInspection}", "style": "heading", "positioning": "flow" },
+ {
+ "type": "row", "size": [170, 100], "widths": [6, 4], "positioning": "flow",
+ "children": [
+ {
+ "type": "column", "align": "left",
+ "children": [
+ { "type": "image", "dataKey": "bgaInspectionImage", "size": [110, 90], "border": true, "align": "left" }
+ ]
+ },
+ {
+ "type": "column", "align": "left",
+ "children": [
+ { "type": "text", "content": "${loc:Bga_Count}:${bgaCount}", "style": "body", "align": "left" },
+ { "type": "text", "content": "${loc:Measurement_VoidRate}:${formatPercent(voidRate)}", "style": "body", "align": "left" },
+ { "type": "text", "content": "${loc:Measurement_FillRate}:${formatPercent(fillRate)}", "style": "body", "align": "left" },
+ { "type": "text", "content": "${loc:Bga_TotalArea}:${formatNumber(totalBgaArea, 2)}", "style": "body", "align": "left" },
+ { "type": "text", "content": "${loc:Bga_TotalVoidArea}:${formatNumber(totalVoidArea, 2)}", "style": "body", "align": "left" },
+ { "type": "text", "content": "${loc:Bga_VoidLimit}:${formatPercent(voidLimit)}", "style": "body", "align": "left" },
+ { "type": "text", "content": "${loc:Table_Classification}:${classification}", "style": "conclusion", "align": "left", "colorRules": { "Pass": "#008000", "Fail": "#FF0000" } }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "table", "dataKey": "bgaBallsTable", "positioning": "flow", "size": [170, 0], "style": "tableDefault",
+ "columns": [
+ { "header": "${loc:Bga_BallIndex}", "field": "index", "width": 25, "align": "center" },
+ { "header": "${loc:Table_VoidRate}", "field": "voidRate", "width": 40, "align": "center" },
+ { "header": "${loc:Table_Area}", "field": "area", "width": 40, "align": "center" },
+ { "header": "${loc:Table_Classification}", "field": "classification", "width": 35, "align": "center", "colorRules": { "Pass": "#008000", "Fail": "#FF0000" } }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "voidInspection",
+ "elements": [
+ { "type": "text", "content": "${loc:Page_VoidInspection}", "style": "heading", "positioning": "flow" },
+ {
+ "type": "row", "size": [170, 100], "widths": [6, 4], "positioning": "flow",
+ "children": [
+ {
+ "type": "column", "align": "left",
+ "children": [
+ { "type": "image", "dataKey": "voidInspectionImage", "size": [110, 90], "border": true, "align": "left" }
+ ]
+ },
+ {
+ "type": "column", "align": "left",
+ "children": [
+ { "type": "text", "content": "${loc:Void_RoiArea}:${formatNumber(roiArea, 2)}", "style": "body", "align": "left" },
+ { "type": "text", "content": "${loc:Void_TotalArea}:${formatNumber(totalVoidArea, 2)}", "style": "body", "align": "left" },
+ { "type": "text", "content": "${loc:Measurement_VoidRate}:${formatPercent(voidRate)}", "style": "body", "align": "left" },
+ { "type": "text", "content": "${loc:Void_Limit}:${formatPercent(voidLimit)}", "style": "body", "align": "left" },
+ { "type": "text", "content": "${loc:Void_Count}:${voidCount}", "style": "body", "align": "left" },
+ { "type": "text", "content": "${loc:Void_MaxArea}:${formatNumber(maxVoidArea, 2)}", "style": "body", "align": "left" },
+ { "type": "text", "content": "${loc:Table_Classification}:${classification}", "style": "conclusion", "align": "left", "colorRules": { "Pass": "#008000", "Fail": "#FF0000" } }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "table", "dataKey": "voidsTable", "positioning": "flow", "size": [170, 0], "style": "tableDefault",
+ "columns": [
+ { "header": "${loc:Table_Index}", "field": "index", "width": 20, "align": "center" },
+ { "header": "${loc:Table_Area}", "field": "area", "width": 35, "align": "center" },
+ { "header": "${loc:Table_AreaPercent}", "field": "areaPercent", "width": 35, "align": "center" },
+ { "header": "${loc:Table_CenterX}", "field": "centerX", "width": 30, "align": "center" },
+ { "header": "${loc:Table_CenterY}", "field": "centerY", "width": 30, "align": "center" }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "viaFillInspection",
+ "elements": [
+ { "type": "text", "content": "${loc:Page_ViaFillInspection}", "style": "heading", "positioning": "flow" },
+ {
+ "type": "row", "size": [170, 100], "widths": [6, 4], "positioning": "flow",
+ "children": [
+ {
+ "type": "column", "align": "left",
+ "children": [
+ { "type": "image", "dataKey": "viaFillImage", "size": [110, 90], "border": true, "align": "left" }
+ ]
+ },
+ {
+ "type": "column", "align": "left",
+ "children": [
+ { "type": "text", "content": "${loc:Fill_Rate}:${formatPercent(fillRate)}", "style": "body", "align": "left" },
+ { "type": "text", "content": "${loc:Measurement_VoidRate}:${formatPercent(voidRate)}", "style": "body", "align": "left" },
+ { "type": "text", "content": "${loc:Fill_FullDistance}:${formatNumber(fullDistance, 2)}", "style": "body", "align": "left" },
+ { "type": "text", "content": "${loc:Fill_FillDistance}:${formatNumber(fillDistance, 2)}", "style": "body", "align": "left" },
+ { "type": "text", "content": "${loc:Fill_THTLimit}:${formatPercent(thtLimit)}", "style": "body", "align": "left" },
+ { "type": "text", "content": "${loc:Table_Classification}:${classification}", "style": "conclusion", "align": "left", "colorRules": { "Pass": "#008000", "Fail": "#FF0000" } }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "styles": {
+ "title": { "font": "auto", "size": 28, "bold": true, "italic": false, "color": "#1a1a1a", "align": "center" },
+ "companyName": { "font": "auto", "size": 10, "bold": false, "italic": false, "color": "#333333", "align": "center" },
+ "homepageInfo": { "font": "auto", "size": 12, "bold": false, "italic": false, "color": "#333333", "align": "left", "paddingLeft": 10 },
+ "homepageFooter": { "font": "auto", "size": 12, "bold": false, "italic": false, "color": "#333333", "align": "center" },
+ "homepageHeading": { "font": "auto", "size": 14, "bold": true, "italic": false, "color": "#333333", "align": "left" },
+ "heading": { "font": "auto", "size": 16, "bold": true, "italic": false, "color": "#333333", "align": "left", "marginBottom": 3 },
+ "body": { "font": "auto", "size": 11, "bold": false, "italic": false, "color": "#333333", "align": "left" },
+ "bodyBold": { "font": "auto", "size": 11, "bold": true, "italic": false, "color": "#1a1a1a", "align": "left" },
+ "conclusion": { "font": "auto", "size": 12, "bold": true, "italic": false, "color": "#333333", "align": "left", "marginTop": 3 },
+ "imageDefault": { "font": "auto", "size": 12, "bold": false, "italic": false, "color": "#333333", "align": "center", "marginTop": 5, "marginBottom": 5 },
+ "tableHeader": { "font": "auto", "size": 10, "bold": true, "italic": false, "color": "#ffffff", "align": "center", "backgroundColor": "#4472C4" },
+ "tableDefault": { "font": "auto", "size": 10, "bold": false, "italic": false, "color": "#333333", "align": "center", "marginTop": 5 },
+ "tableCell": { "font": "auto", "size": 10, "bold": false, "italic": false, "color": "#333333", "align": "center" }
+ }
+}
diff --git a/ExternalLibraries/VarexDetDll.dll b/ExternalLibraries/VarexDetDll.dll
new file mode 100644
index 0000000..380bee9
Binary files /dev/null and b/ExternalLibraries/VarexDetDll.dll differ
diff --git a/ExternalLibraries/Y.Tracing.Configuration.txt b/ExternalLibraries/Y.Tracing.Configuration.txt
new file mode 100644
index 0000000..6b53ce9
--- /dev/null
+++ b/ExternalLibraries/Y.Tracing.Configuration.txt
@@ -0,0 +1,4 @@
+// Flag, ob die Trace-Meldungen asynchron zu protokolliern sind: 1 fr asynchron, 0 fr synchron.
+1
+// Kategorie Konfigurationen:
+FXDriver 0
diff --git a/ExternalLibraries/config.json b/ExternalLibraries/config.json
index 28f9fdf..0200def 100644
--- a/ExternalLibraries/config.json
+++ b/ExternalLibraries/config.json
@@ -1,4 +1,5 @@
{
"Language": "zh-CN",
- "LogLevel": "Debug"
+ "LogLevel": "Debug",
+ "CameraType": "Hikvision"
}
\ No newline at end of file
diff --git a/ExternalLibraries/fx.ini b/ExternalLibraries/fx.ini
new file mode 100644
index 0000000..b8e7598
--- /dev/null
+++ b/ExternalLibraries/fx.ini
@@ -0,0 +1,3907 @@
+;------------------------------------------------------------------------------
+; Help for Control/Value entries
+;
+; DataType= (FXDataType)
+; 0 FX_INT
+; 1 FX_LONG
+; 2 FX_UINT
+; 3 FX_ULONG
+; 4 FX_FLOAT
+; 5 FX_DOUBLE
+; 6 FX_BOOL
+; 7 FX_CENTTABLE
+; 8 FX_FOCUSTABLE
+; 9 FX_STRING
+; 10 FX_SHORT
+; 11 FX_USHORT
+; 12 FX_SCANTABLE
+; 13 FX_BYTE
+; 14 FX_UBYTE
+; 15 FX_TUBECURRENTTABLE
+; 16 FX_AXESPOSTABLE
+;
+; ValueType= (FXValueType)
+; 0 FX_ACTVAL
+; 1 FX_NOMVAL
+; 2 FX_MINVAL
+; 3 FX_MAXVAL
+; 4 FX_BOOLVAL
+; 5 FX_ERRORVAL
+;
+; Active=
+; 0 Variable will not be updated in process image of FXE DLLs
+; and can only accessed with explicit read/write
+; 1 Variable will be updated in process image of FXE DLLs
+; Notify=
+; 0: Application notifying will not be used for this variable
+; 1: Application notifying will be used for this variable
+
+;System- und Options-Ids:
+;Variablen, die in allen RPS-Konfigurationen vorkommen, erhalten die SysID 1 (FXE_SINGLESTAGE)
+;Variablen, die fr spezielle oder optionale RPS-Konfigurationen hinzukommen, z. B. fr Doppelstufen-Rhren, erhalten die
+;unten angegebene SysID. (Variablen, die nur fr Doppelstufenrhren verwendet werden, z. B. die SysID 2)
+;Wenn Variablen zwei oder mehreren speziellen RPS-Konfigurationen zugeordnet werden mssen, die sich gegenseitig ausschliessen,
+;z. B. Para-Variablen fr FOX und TIGER, mssen bei den Variablen die SysID-Eintrge bitweise geoderte Werte sein. Die Variablen der Para-Module
+;haben als ID z. B. 24 (0x10 | 0x20)
+;FXE_SINGLESTAGE 0x00000001L // Xray-Bit
+;FXE_DOUBLESTAGE 0x00000002L // Xray-Bit
+;FXE_SCANNING 0x00000004L // Xray-Bit
+;SYSTEM_FOX 0x00000008L // Xray-Bit
+;SYSTEM_TIGER 0x00000010L // Xray-Bit
+;SHUTTEROPTION 0x00000020L // Xray-Bit
+;TARGETREGOPTION 0x00000040L // Xray-Bit
+;SECONDCENTERING 0x00000080L // Xray-Bit
+;FFCOMDRIVER 0x00000100L // Xray-Bit
+;AUTOCOND_ENABLED 0x00004000L // Xray-Bit
+;MOT_IRIS 0x00000400L // Xray-Bit und Mani-Bit
+;FME 0x00000200L // Mani-Bit
+;SYSTEM_14 0x00000800L // Mani-Bit CougarFA oder System16
+;SYSTEM_15 0x00001000L // Mani-Bit CougarSMT
+;SYSTEM_COUGAR_XL 0x00002000L // Mani-Bit Cheetah
+;JOYCTRLOPTION 0x00100000L // Mani-Bit
+;------------------------------------------------------------------------------
+
+[VarPLCVarHAL_PLCVars]
+PLCVarID_0=2274
+PLCVarString_0=LaserCrossHair
+PLCVarID_1=2374
+PLCVarString_1=WarnLamp1Ok
+PLCVarID_2=2375
+PLCVarString_2=WarnLamp2Ok
+PLCVarID_3=2376
+PLCVarString_3=WarnLamp3Ok
+PLCVarID_4=2377
+PLCVarString_4=WarnLampDefect
+
+[XrayHAL]
+ReadFromProcessImage=1
+MaxAccVoltageTolerance=1.0
+MaxTubeCurrentTolerance=3.0
+MaxTargetCurrentTolerance=2.0
+EnableXrayOnAfterFlashover=0
+
+[ManiHAL]
+; Fr die Eigenschaft "Ready" der Schnittstelle IFFAxis wird hier standardmssig
+; AxisEnabled && AxisInitialized && !AxisIsNotToControl
+; && AxisDriveReady && !AxisDriveError && !AxisError
+; verwendet, es wird also NICHT abgefragt, ob die Achse verriegelt ist (AxisModulePresent)
+;Default fr AxisReadyBitMask: BitMaskAxisEnabled | BitMaskAxisInitialized | BitMaskAxisDriveReady
+;AxisReadyBitMask=
+;Default fr AxisNotReadyBitMask: BitMaskAxisIsNotToControl | BitMaskAxisDriveError | BitMaskAxisError
+;AxisNotReadyBitMask=
+ReadFromProcessImage=1
+; ErrorIfTryingToDriveLockedAxis: 0: Kein Fehler, 1: Fehlermeldung wenn verriegelte Achse versucht wird zu fahren
+ErrorIfTryingToDriveLockedAxis=0
+; LoadPosTolerance war vorher in config.prm einstellbar, es wurde aber wahrscheinlich immer Defaultwert 1 verwendet!
+LoadPosTolerance=1
+
+[ManiSysIDs]
+NumSysIDs=3
+SysID_0=8
+SysID_1=16
+SysID_2=4096
+
+; FOX
+[Detector_8]
+TransZ=5
+
+[Tube_8]
+TransZ=
+
+[Stage_8]
+TransX=0
+TransY=1
+TransZ=2
+RotX=4
+RotY=3
+
+; TIGER
+[Detector_16]
+; Detektor-Kippachse des TIGER kann eigentlich RotX oder RotY sein!
+RotX=3
+RotZ=4
+
+[Tube_16]
+TransZ=2
+
+[Stage_16]
+TransX=0
+TransY=1
+
+;Cougar(SMT)
+[Detector_4096]
+TransZ=3
+RotY=4
+
+[Tube_4096]
+TransZ=2
+
+[Stage_4096]
+TransX=0
+TransY=1
+RotX=5
+RotZ=5
+
+[PLCVersionIniFolderNames_CPU0]
+V380=V380-389
+
+[PLCVersionIniFolderNames_CPU1]
+V430=V420-429
+
+[PLCVERSIONVARIABLE_0]
+DisplayName=SoftwareVersionCPU0
+Descr=SYS_DM.SoftwareVersion
+SysID=769
+DataType=3
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=250
+ReadSyncDef=0
+
+[PLCVERSIONVARIABLE_1]
+DisplayName=SoftwareVersionCPU1
+Descr=sys_dm.SoftwareVersion
+SysID=1
+DataType=3
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=250
+ReadSyncDef=0
+
+[General]
+PLCInitTimeout=120000
+; Nur FXEControl
+FXEControlInitTimeout=30000
+; Nur FXEControl
+ShowFXEControlWithoutHWLink=0
+UseAFByImg=0
+LoadDetectorDlls=0
+UseScanVariables=0
+UseDbgVariables=1
+UseFXETestVariables=1
+UseALUVariables=0
+FirstSupportedVersion=380
+LastSupportedVersion=430
+; Nur FXEControl: Bezeichnet %-Wert des erreichten Tube-/Targetcurrent vom vorgegebenen (Timer)
+TimerCurrentInterruptionThresh=50
+; Nur FXEControl: Bezeichnet %-Wert der erreichten acc. Voltage vom vorgegebenen Wert (Timer)
+TimerVoltageInterruptionThresh=70
+; Nur FXEControl: Bezeichnet Dauer der zustzlichen Delaytime in ms zum Start des Timers nach erreichen der anderen Schwellwerte (Timer)
+TimerAdditionalDelay=0
+; automatisches Einschalten der Strahlung nach Ueberschlag (de)aktivieren
+UseAutoXRayOnAfterFlash=0
+; Datenmodule verbinden? ACHTUNG: Betrifft NICHT Para- und PCPara-Dms fr TIGER und FOX! Diese
+; mssen immer verbunden werden, wenn entspr. System vorliegt, sonst funktionieren nicht
+; alle Achsen-Funktionen
+ConnectDMs=1
+; Variable zur Ueberwachung der RPS (hier: 2014, kVIst)
+; Abschalten der Benachrichtigung bei RPS disconnected wenn RPSCheckVariableID <= 0
+RPSCheckVariableID=2014
+; Intervallzeit zur Ueberwachung der RPS in ms
+RPSCheckIntervall=10000
+Demoversion=0
+; Kundenversion: 0, Serviceversion: 1, Betriebsversion: 2, Testversion: 3 (Umschalter ASCII-PVI)
+AccessVersion=1
+; Apertures wird fr die Amp[1] bis Amp[3] Istwerte (Blendenstrme) verwendet
+Apertures=1
+TestFlashOver=0
+DebugMessages=0
+FilIncrement=0.02
+UseDataTypeVerification=1
+; Timeout nach Kaltstart in ms
+ColdStartWaitTime=120000
+; 0: no logging 1/2: log errors 3: log errors + show MessageBoxes
+LogLevel=2
+; relativer Pfad zum User Manual
+UserManualPath=C:\Program Files (x86)\Feinfocus\FXEControl_3.1.1.65\doc\Y.FXE-Control 3.1_v01r00_en_20102586.pdf
+
+[PLCCommunication]
+ModuleEventMask="EV="
+TaskEventMask="EV="
+; 09.11.2004: Gibt an, ob eine Slave-RPS-CPU vorliegen kann (z.Z. nur fuer Nano-FOX)
+SlaveCPU=0
+; 09.11.2004: Anzahl RPS-CPUs, maximale Anzahl CPUs ist 2
+CPUCount=1
+; 05.08.2014: Es knnen jetzt die IP und Base der CPUs direkt konfiguriert werden.
+; Zudem ist es mglich zwei Rhren anzusteuern.
+; Gibt an, ob die Konfigurationen fr HostAdress und HostBase aus der ini verwendet werden sollen,
+; oder die hart codierten aus der BRDriverDefs.
+UsePLCHostConfig=0
+; Wenn MultipleXrayDevices aktiv ist, dann muss CPUCount auf 1 stehen. Beim Start der FXEControl
+; wird ein Abfragedialog geffnet, welche Rhre angezeigt werden soll
+MultipleXrayDevices=0
+; Cpu0 muss immer die Adresse einer Rhre sein.
+; Die HostAdress entspricht der letzten Stelle der IP-Adresse der Rhre.
+Cpu0HostAdress=10
+; Parameter fr den Codierschalter an der PLC. Sollte in der Regel mit der HostAdress gleich sein,
+; kann aber auch unterschiedlich konfiguriert werden
+Cpu0HostBase=10
+; Beschreibung fr den Auswahldialog beim Start der FXEControl
+Cpu0Description=FXT 225.48 - CPU0 192.168.12.10
+; Cpu1 kann die Adresse einer Rhre oder eines Manipulators sein. Wenn nur UsePLCHostConfig und
+; CPUCount=2 ausgewhlt ist, dann muss es ein Manipulator sein.
+; Die HostAdress entspricht der letzten Stelle der IP adresse der Rhre.
+Cpu1HostAdress=11
+; Parameter fr den Codierschalter an der PLC. Sollte in der Regel mit der HostAdress gleich sein,
+; kann aber auch unterschiedlich konfiguriert werden.
+Cpu1HostBase=11
+; Beschreibung fr den Auswahldialog, der beim Start der FXEControl zur Auswahl der Rhre angezeigt wird.
+Cpu1Description=FXT 190.61 - CPU1 192.168.12.11
+
+[FFCom]
+;FFCOMDRIVER 256
+;ONLY_FFCOMDRIVER 257
+FFComSysID=0
+;FFComSysID=256
+InBufLength=256
+OutBufLength=256
+IDBufLength=4
+FloatPrecision=4
+WaitTimeout=500
+;WaitTimeout=4000
+; Timeouts nicht mehr direkt parametrisierbar, da abh. von RPS-Zykluszeit!
+; Dafr kann jetzt hier die verwendete RPS-Zykluszeit angegeben werden!
+PLCCycleTime=100
+SwitchFMEToFFComID=3501
+; Thread-Prioritten: 0: normal, 1: above normal, 2: highest, 15: "real time"
+; -1: below normal, -2: lowest, -15: idle
+ReadThreadPriority=2
+RequestThreadPriority=1
+AutoUpdThreadPriority=1
+LogComm=0
+LogRead=0
+LogWrite=0
+LogAutoUpd=0
+;RTS_CONTROL_DISABLE 0
+;RTS_CONTROL_ENABLE 1
+;RTS_CONTROL_HANDSHAKE 2
+;RTS_CONTROL_TOGGLE 3
+RTSMode=0
+UseCTSHandshake=0
+
+[XRayConstants]
+BitMaskBattery=2
+BitMaskWarmupDone=4
+BitMaskFilAdjDone=8
+BitMaskAutocentReady=16
+BitMaskAutocentBeamSearch=32
+BitMaskAutocentBeamFound=64
+BitMaskStartupDone=512
+BitMaskAutofuncRuns=1024
+BitMaskInterlockOn=2048
+BitMaskHSGOk=4096
+BitMaskVacuumOk=8192
+BitMaskAutocentRuns=16384
+BitMaskFilAdjRuns=32768
+BitMaskWarmupRuns=65536
+BitMaskStartupRuns=131072
+BitMaskXRayOn=262144
+BitMaskReadyForXRayOn=524288
+BitMaskXRayError=1048576
+
+[ManiConstants]
+AxesEnableBackside=1
+; Wenn RPS V.2.0 fuer FOX verwendet wird, PositionTolerance=0 setzen, ansonsten 5-10
+; theoretisch kann PositionTolerance fuer FOX auch bei alter RPS 0 gesetzt werden, das einzige
+; Problem ist BASIC-Acknowledge der FGUI, da PVI u.U. die nderungen der Ist-Pos. nicht mitbekommt
+PositionTolerance=1
+; Wenn RPS V.2.0 fuer FOX verwendet wird, UseManInPosForFOXBasicAckn=1 setzen, ansonsten 0
+; beim Cougar15 und TIGER mit RPS >= 2.6 gibt es die ManiInPos-Variable wieder nicht mehr,
+; daher dort auch Positionsvergleich machen!
+UseManInPosForFOXBasicAckn=0
+BitMaskAxisError=1
+BitMaskAxisEnabled=2
+BitMaskAxisInitialized=4
+BitMaskAxisReferenced=8
+BitMaskAxisRefMoving=16
+BitMaskAxisMoving=32
+BitMaskAxisDriveReady=64
+BitMaskAxisDriveError=128
+BitMaskAxisPosHWEnd=256
+BitMaskAxisRefHWEnd=512
+BitMaskAxisNegHWEnd=1024
+BitMaskAxisTriggerInput=2048
+BitMaskAxisModulePresent=4096
+BitMaskAxisInPosition=8192
+BitMaskAxisIsNotToControl=16384
+BitMaskAxisIsVirtual=32768
+; Bitmasken fr Manipulator-Statuswort:
+; 12.09.2005: Es ist z.Z. vllig unklar, was wie ab welcher RPS-Version
+; definiert ist! Was sind die Unterschiede zwischen TIGER mit RPS-Version 2.6
+; und Cougar15 mit Version 2.6, der eigentlich Version 2.7 haben sollte?
+BitMaskManiError=1
+BitMaskManiInitialized=4
+BitMaskManiReferenced=8
+BitMaskManiRefMoving=16
+BitMaskManiMoving=32
+BitMaskManiSingleAxisActive=64
+BitMaskManiAllAxesActive=128
+BitMaskManiNonPLCDriveDisabled=256
+BitMaskManiInLoadPos=512
+BitMaskManiLoadPosMoving=33554432
+BitMaskManiInPosition=8192
+BitMaskManiCPSStop=32768
+
+[MESSLOG]
+EnableAllConnectionsForTest=0
+MessLogTableFileIdx=52
+MinIntervallTime=100
+MinChangeIntervall=200
+
+[CONDITIONING]
+; Anz. Messpunkte fr berschlge; Messintervall [min] ergibt sich aus ConditTime / ConditTableSize
+ConditTableSize=72
+;Einheit: min. Wenn die Zeit zwischen 2 berschlgen > diesen Wert ist, wird die Kond. von der RPS beendet
+ConditIntervall=360
+;Einheit: min. Nach max. dieser Zeit wird die Konditionierung beendet
+ConditTimeout=3600
+; Max. Anz. Ueberschlaege, bevor Konditionierung (vom PC durch X-Ray off) abgebrochen wird
+MaxConditBreaks=250
+;Wartezeit nach Ueberschlag, nach der das Vakuum registriert wird [s]
+WaitAfterBreakTime=5
+
+[WOBBELING]
+;Default-Werte fuers wobbeln
+Step=10.0
+Hub=30.0
+
+[POSITIONINGTABLE]
+; fuer Cougar15:
+Description=g_tManiCtrlStartOld.tAxis
+ConnectParams="EV= VT=struct VL=0 AL=4"
+SysID=4376
+
+;LINK_ALL_START_POSITION( _T( "EV=ed VT=struct {. VT=u8 } {. VT=struct VN=11 } {.. VT=f32 } {.. VT=i32 } {.. VT=u8 }" )),
+;LINK_ALL_START_SPEED( _T( "EV=ed VT=struct {. VT=u8 } {. VT=struct VN=11 } {.. VT=f32 } {.. VT=i16 } {.. VT=u8 }" ));
+
+[MOVEAXESSTRUCT]
+; fuer Cougar15:
+Description=g_tManiCtrlStartOld
+;Das Verhalten von PVI ist hier etwas seltsam: Wird die Typinfo der Achsenstruktur ausgelesen, bekommt man immer die VL=112
+;und ein Alignment von 2, auch wenn im Connect-String 4 angegeben wird und auch die Strukturen mit #pragma pack( push, 4)
+;definiert werden (eigentlich kommt dann als Variablenlnge 136 raus). Es funktioniert auch alles fehlerfrei, wenn VL=0 angegeben wird!
+ConnectParams="EV= VT=struct VL=0 AL=4"
+;ConnectParams="EV= VT=struct VL=112 AL=4"
+;gendert 03.02.2004: Fahrbefehl jetzt synchron senden!
+WriteSyncDef=1
+SysID=4376
+
+[MANUALMOVEAXESSTRUCT]
+; fuer Cougar15:
+Description=g_tManiCtrlManuellOld
+ConnectParams="EV= VT=struct VL=0 AL=4"
+;gendert 03.02.2004: Fahrbefehl jetzt synchron senden!
+WriteSyncDef=1
+SysID=4368
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// erweiterte Control-Variablen
+;////////////////////////////////////////////////////////////////////////////////////////
+;condit wait. Nur explizit lesen (?!)
+[CONTROLVALUE_253]
+Descr=tCONwait
+DataType=3
+ValueType=1
+SysID=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=-1
+DisplayName=MaxTimeBetweenBreakdowns[ms]
+WriteSyncDef=0
+ReadSyncDef=0
+
+;Max. Spg. f. Konditionierung. Nur explizit lesen !
+[CONTROLVALUE_254]
+Descr=ConditioningData.condCycle[1].kVmax
+DataType=4
+ValueType=3
+SysID=1
+Active=0
+Notify=0
+Hysterese=1.0
+RefreshTime=1000
+DisplayName=ConditVoltageMax[kV]
+ReadSyncDef=0
+
+;Max. Strom f. Konditionierung. Nur explizit lesen !
+[CONTROLVALUE_255]
+Descr=ConditioningData.condCycle[1].current_uA
+DataType=4
+ValueType=3
+SysID=1
+Active=0
+Notify=0
+Hysterese=1.0
+RefreshTime=1000
+DisplayName=ConditCurrentMax[A]
+ReadSyncDef=0
+
+[CONTROLVALUE_256]
+Descr=HSG.FILwork
+DataType=4
+ValueType=1
+;wird nur noch fr alten Tiger (RPS < 2.6) bentigt !
+SysID=0
+Active=1
+Notify=1
+Hysterese=0.1
+RefreshTime=1200
+DisplayName=FilWorkCurrent[A]
+
+[CONTROLVALUE_257]
+Descr=I_fil
+DataType=4
+ValueType=1
+SysID=1
+Active=1
+Notify=1
+Hysterese=0.1
+RefreshTime=1200
+DisplayName=FilWorkArray[A]
+DataLen=10
+
+; Auswahl fuer zu aktualisierendes amp-DM
+[CONTROLVALUE_258]
+Descr=amp_modul
+DataType=10
+ValueType=1
+SysID=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=250
+DisplayName=AmpDMRefreshSel
+
+; Auswahl fuer zu aktualisierendes cent-DM
+[CONTROLVALUE_259]
+Descr=PC_stat.u16_CENT_DM_nr
+DataType=10
+ValueType=1
+SysID=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=250
+DisplayName=CentDMRefreshSel
+
+[CONTROLVALUE_260]
+Descr=Sys.Watchdog_enable
+DataType=10
+ValueType=1
+SysID=513
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=250
+DisplayName=WatchdogEnable[short]
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_261]
+Descr=PLC_stat.bo_Watchdog
+DataType=6
+ValueType=1
+SysID=513
+;24.06.2003: Watchdog ausgeschaltet wegen Fehler auf RPS! Hoher Laufzeitverbrauch dadurch,
+; dass Signal von RPS immer sofort wieder auf 1 zurckgesetzt wurde, nachdem in FXDrivers
+; 0 geschickt wurde!
+; 13.07.06: Wieder aktiviert, obwohl auf RPS immer noch nicht verbessert
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+DisplayName=WatchdogSignal[bool]
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_262]
+Descr=SYS_DM.seriennum
+SysID=1
+DataType=9
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+DataLen=16
+DisplayName=SerialNumber
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_263]
+Descr=SystemSettings.u32_workingminute_system
+DataType=3
+ValueType=1
+SysID=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=1000
+DisplayName=SystemCounter
+
+[CONTROLVALUE_264]
+Descr=SystemSettings.u32_workingminute_tube
+DataType=3
+ValueType=1
+SysID=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=1000
+DisplayName=TubeCounter
+
+[CONTROLVALUE_265]
+Descr=SystemSettings.u32_workingminute_filament
+DataType=3
+ValueType=1
+SysID=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=1000
+DisplayName=FilamentCounter
+
+[CONTROLVALUE_266]
+Descr=Condensor.Pmicro
+DataType=4
+ValueType=0
+SysID=2
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=700
+DisplayName=ConsModeMicroThrPow[W]
+ReadSyncDef=0
+
+[CONTROLVALUE_267]
+Descr=Condensor.Pnano
+DataType=4
+ValueType=0
+SysID=2
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=700
+DisplayName=ConsModeNanoThrPow[W]
+ReadSyncDef=0
+
+[CONTROLVALUE_268]
+Descr=PLC_cmd.reload_MODE_DM
+DataType=6
+ValueType=1
+SysID=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=100
+DisplayName=ModeChanged[bool]
+WriteSyncDef=1
+ReadSyncDef=0
+
+[CONTROLVALUE_269]
+Descr=PLC_cmd.reload_TARGET_DM
+DataType=6
+ValueType=1
+SysID=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=100
+DisplayName=TargetChanged[bool]
+WriteSyncDef=1
+ReadSyncDef=0
+
+[CONTROLVALUE_270]
+DisplayName=SoftwareVersion
+Descr=SYS_DM.SoftwareVersion
+SysID=769
+DataType=3
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=250
+ReadSyncDef=1
+
+[CONTROLVALUE_271]
+DisplayName=CoilOff
+Descr=Sys.coil_off
+SysID=1
+DataType=10
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+
+[CONTROLVALUE_272]
+DisplayName=FilAdjBaseCurrentNew
+Descr=PLC_stat.r32_newFilamentCurrentBase
+SysID=1
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.05
+RefreshTime=800
+
+[CONTROLVALUE_273]
+DisplayName=FilAdjBaseCurrentDiff
+Descr=PLC_stat.r32_diffToFilamentCurrentBase
+SysID=1
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.05
+RefreshTime=800
+
+[CONTROLVALUE_274]
+DisplayName=PositioningLaser
+Descr=Do_Laser
+;nd. 14.09.2004: Fuer TIGER, FOX, 15er und 16er! NICHT generell auf FXE!
+SysID=6168
+DataType=6
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1200
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_275]
+Descr=zoom
+SysID=1
+DataType=10
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+DisplayName=BVZoomLevel
+WriteSyncDef=0
+ReadSyncDef=0
+
+; 07.07.03: Reload-Variablen jetzt Control-Values, vorher ControlCommands
+; Hintergrund: 1-0 bergnge dieser Variablen knnen als Signal dafr
+; genommen werden, dass die neuen Werte tatschlich in die RPS-Variablenstrukturen
+; eingetragen wurden!
+[CONTROLVALUE_280]
+Descr=PC_cmd.TUBE_DM.read
+SysID=513
+DisplayName=ReloadTubeDM
+DataType=6
+ValueType=1
+Active=1
+Notify=0
+Hysterese=0
+RefreshTime=1000
+
+[CONTROLVALUE_281]
+Descr=PC_cmd.AMP_DM.read
+SysID=1
+DisplayName=ReloadAmpDM
+DataType=6
+ValueType=1
+Active=1
+Notify=0
+Hysterese=0
+RefreshTime=1000
+
+[CONTROLVALUE_282]
+Descr=PC_cmd.HSG_DM.read
+SysID=513
+DisplayName=ReloadHSGDM
+DataType=6
+ValueType=1
+Active=1
+Notify=0
+Hysterese=0
+RefreshTime=1000
+
+[CONTROLVALUE_283]
+Descr=PC_cmd.VAC_DM.read
+SysID=1
+DisplayName=ReloadVacuumDM
+DataType=6
+ValueType=1
+Active=1
+Notify=0
+Hysterese=0
+RefreshTime=1000
+
+[CONTROLVALUE_284]
+Descr=PC_cmd.COND_DM.read
+SysID=1
+DisplayName=ReloadConditDM
+DataType=6
+ValueType=1
+Active=1
+Notify=0
+Hysterese=0
+RefreshTime=1000
+
+[CONTROLVALUE_285]
+Descr=PC_cmd.SYS_DM.read
+SysID=513
+DisplayName=ReloadSystemDM
+DataType=6
+ValueType=1
+Active=1
+Notify=0
+Hysterese=0
+RefreshTime=1000
+
+[CONTROLVALUE_286]
+Descr=PC_cmd.FOCUS_DM.read
+SysID=1
+DisplayName=ReloadFocusDM
+DataType=6
+ValueType=1
+Active=1
+Notify=0
+Hysterese=0
+RefreshTime=1000
+
+[CONTROLVALUE_287]
+Descr=PC_cmd.CONS_DM.read
+SysID=2
+DisplayName=ReloadCondensorDM
+DataType=6
+ValueType=1
+Active=1
+Notify=0
+Hysterese=0
+RefreshTime=1000
+
+[CONTROLVALUE_288]
+Descr=cmd_read_shutter
+SysID=32
+DisplayName=ReloadShutterDM
+DataType=6
+ValueType=1
+Active=1
+Notify=0
+Hysterese=0
+RefreshTime=1000
+
+[CONTROLVALUE_289]
+Descr=PC_cmd.CENT_DM.read
+SysID=1
+DisplayName=ReloadCenteringDM
+DataType=6
+ValueType=1
+Active=1
+Notify=0
+Hysterese=0
+RefreshTime=1000
+
+[CONTROLVALUE_290]
+Descr=cmd_read_scan
+SysID=4
+DisplayName=ReloadScanDM
+DataType=6
+ValueType=1
+Active=1
+Notify=0
+Hysterese=0
+RefreshTime=1000
+
+[CONTROLVALUE_291]
+Descr=PC_cmd.TIREG_DM.read
+SysID=1
+DisplayName=ReloadTiRegDM
+DataType=6
+ValueType=1
+Active=1
+Notify=0
+Hysterese=0
+RefreshTime=1000
+
+[CONTROLVALUE_292]
+Descr=cmd_read_comconf
+DisplayName=ReloadComConfDM
+;22.11.2004: zunchst ausgeschaltet, bei nchster Version, wenn alle Systeme COMCONF-DM beinhalten, einbauen
+SysID=0
+;SysID=513
+DataType=6
+ValueType=1
+Active=1
+Notify=0
+Hysterese=0
+RefreshTime=1000
+
+[CONTROLVALUE_293]
+Descr=PC_cmd.INIT_DM
+SysID=1
+DisplayName=ReloadInitDM
+DataType=9
+ValueType=1
+Active=1
+Notify=0
+Hysterese=0
+RefreshTime=1000
+DataLen=10
+
+[CONTROLVALUE_294]
+DisplayName=ReloadAllDMs
+Descr=PC_cmd.ALL_DM.read
+SysID=1
+DataType=14
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=1000
+
+[CONTROLVALUE_295]
+DisplayName=UsageAmp1
+Descr=Amp[1].Verwendung
+SysID=1
+DataType=9
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+DataLen=16
+
+[CONTROLVALUE_296]
+DisplayName=UsageAmp2
+Descr=Amp[2].Verwendung
+SysID=34
+DataType=9
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+DataLen=16
+
+[CONTROLVALUE_297]
+DisplayName=UsageAmp3
+Descr=Amp[3].Verwendung
+SysID=34
+DataType=9
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+DataLen=16
+
+[CONTROLVALUE_298]
+DisplayName=DiTubeheadEnable
+Descr=Di_tubehead_enable
+SysID=1
+DataType=6
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=0
+
+[CONTROLVALUE_299]
+Descr=target.current_target_number
+DataType=11
+ValueType=1
+SysID=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=100
+DisplayName=Target
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_300]
+Descr=target.last_target_number
+DataType=11
+ValueType=1
+SysID=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=100
+DisplayName=TargetCount
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_301]
+DisplayName=TubeheadNumber
+Descr=Tubehead.current_tubehead_number
+SysID=1
+DataType=11
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1250
+
+[CONTROLVALUE_302]
+DisplayName=TubeheadCount
+Descr=Tubehead.last_tubehead_number
+SysID=1
+DataType=11
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=250
+
+[CONTROLVALUE_303]
+Descr=PLC_cmd.reload_TARGET_DM
+DataType=6
+ValueType=1
+SysID=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=100
+DisplayName=TubeheadChanged[bool]
+WriteSyncDef=1
+ReadSyncDef=0
+
+[CONTROLVALUE_304]
+Descr=iIrisMoveDir
+DataType=0
+ValueType=1
+SysID=1024
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=1000
+DisplayName=IrisMoveDir
+
+[CONTROLVALUE_305]
+Descr=iIrisSetPos
+DataType=0
+ValueType=1
+SysID=1024
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=1000
+DisplayName=IrisSetPos
+
+[CONTROLVALUE_306]
+Descr=iIrisCurPos
+DataType=0
+ValueType=0
+SysID=1024
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=IrisCurPos
+
+[CONTROLVALUE_307]
+Descr=iIrisCurPosActual
+DataType=10
+ValueType=0
+SysID=1024
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=IrisCurPosActual
+
+[CONTROLVALUE_308]
+Descr=Vacon
+DataType=6
+ValueType=1
+SysID=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=1000
+DisplayName=VacuumOn[bool]
+
+[CONTROLVALUE_309]
+Descr=EnableShutterOnIfManiMoves
+DataType=6
+ValueType=1
+SysID=32
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1000
+DisplayName=EnableShutterOnIfManiMoves[bool]
+
+[CONTROLVALUE_310]
+DisplayName=SoftwareVersionMani
+Descr=sys_dm.SoftwareVersion
+SysID=4120
+DataType=3
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=250
+ReadSyncDef=1
+
+[CONTROLVALUE_311]
+DisplayName=DetectorXRange
+Descr=DetectorXRangeNotDefinedYet
+SysID=0
+DataType=3
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=250
+ReadSyncDef=1
+
+[CONTROLVALUE_312]
+DisplayName=DetectorYRange
+Descr=DetectorXRangeNotDefinedYet
+SysID=0
+DataType=3
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=250
+ReadSyncDef=1
+
+[CONTROLVALUE_313]
+DisplayName=AxisCountReal
+Descr=g_tManiParameters.uMaxAxesReal
+SysID=4096
+DataType=11
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1250
+ReadSyncDef=0
+
+[CONTROLVALUE_314]
+DisplayName=FocusDetectorDist0
+Descr=FocusDetectorDist0NotDefinedYet
+SysID=0
+DataType=3
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+ReadSyncDef=0
+
+[CONTROLVALUE_315]
+Descr=PC_cmd.FIL_DM.read
+SysID=1
+DisplayName=ReloadFilDM
+DataType=6
+ValueType=1
+Active=1
+Notify=0
+Hysterese=0
+RefreshTime=1000
+
+[CONTROLVALUE_316]
+DisplayName=TrayOffset
+Descr=g_fTrayOffset
+TaskName=manimove
+DataType=4
+ValueType=1
+SysID=4112
+Active=1
+Notify=1
+RefreshTime=10000
+Hysterese=0.1
+
+[CONTROLVALUE_317]
+DisplayName=Magnification
+Descr=g_fMagnification
+TaskName=manimove
+DataType=4
+ValueType=0
+SysID=4112
+Active=1
+Notify=1
+RefreshTime=250
+Hysterese=0.1
+
+[CONTROLVALUE_318]
+DisplayName=DoorVersion
+Descr=g_tDoor.dwDoorVersion
+DataType=2
+ValueType=1
+SysID=4112
+Active=1
+Notify=0
+RefreshTime=2500
+Hysterese=0
+
+[CONTROLVALUE_319]
+DisplayName=FNCProgramRunning
+Descr=g_bFNC_Drive
+DataType=6
+ValueType=1
+SysID=4112
+; 20.05.08: Active, Notify=1 (fr Mani-HAL)
+Active=1
+Notify=1
+RefreshTime=2500
+Hysterese=0
+
+[CONTROLVALUE_320]
+DisplayName=EnableAIM
+Descr=g_bPC_AIM_Enable
+DataType=6
+ValueType=1
+;27.01.06: Auch fuer TIGER, da Aim dort jetzt auch auf RPS
+SysID=4112
+; 20.05.08: Active, Notify=1 (fr Mani-HAL)
+Active=1
+Notify=1
+RefreshTime=2500
+Hysterese=0
+
+[CONTROLVALUE_321]
+DisplayName=TeachNewPOI
+Descr=l_bXYJoystickDriveOff
+TaskName=joyctrl
+DataType=6
+ValueType=0
+SysID=16
+Active=1
+Notify=1
+RefreshTime=150
+Hysterese=0
+
+[CONTROLVALUE_322]
+DisplayName=CamAxisAttachedToRotAxis
+Descr=g_tCameraAxis.dwEnable
+TaskName=
+DataType=3
+ValueType=1
+SysID=16
+Active=1
+Notify=1
+RefreshTime=250
+Hysterese=0
+
+[CONTROLVALUE_333]
+Descr=l_ptDpr.bSampleHolder
+DataType=6
+ValueType=0
+SysID=4096
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=200
+DisplayName=SampleHolderPresent[bool]
+WriteSyncDef=1
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_334]
+Descr=l_ptDpr.bTurnTable
+DataType=6
+ValueType=0
+SysID=4096
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=200
+DisplayName=TurnTablePresent[bool]
+WriteSyncDef=1
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_335]
+Descr=g_tAIM_Mask.settings
+SysID=4120
+DisplayName=AIMSettings
+DataType=3
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1000
+
+[CONTROLVALUE_336]
+Descr=l_bCollProt_Activ
+SysID=4096
+DisplayName=CPS_Active
+DataType=6
+ValueType=0
+Active=1
+Notify=1
+RefreshTime=500
+TaskName=manimove
+Hysterese=0
+
+[CONTROLVALUE_337]
+Descr=g_bCollProtExists
+SysID=4120
+DisplayName=CPS_Exists
+DataType=6
+ValueType=0
+Active=1
+Notify=1
+RefreshTime=-1
+Hysterese=0
+
+[CONTROLVALUE_338]
+Descr=g_bPC_CollProt_Enable
+SysID=4120
+DisplayName=CPS_Enabled
+DataType=6
+ValueType=1
+Active=1
+Notify=1
+; 13.05.08: RefreshTime wegen Mani-HAL gendert von -1 auf 1000
+RefreshTime=1000
+Hysterese=0
+
+[CONTROLVALUE_339]
+Descr=g_bPC_PLCinitialized
+SysID=4120
+DisplayName=PLC_Initialized
+DataType=6
+ValueType=0
+Active=0
+Notify=0
+RefreshTime=-1
+Hysterese=0
+
+[CONTROLVALUE_340]
+Descr=l_ptDpr.atAxisValues[0].tAxisParameter.dwAxisConfig
+DataType=3
+ValueType=0
+SysID=4112
+Active=1
+Notify=0
+Hysterese=0
+RefreshTime=1000
+DisplayName=ConfigAxis1
+TaskName=pp_mast
+
+[CONTROLVALUE_341]
+Descr=l_ptDpr.atAxisValues[1].tAxisParameter.dwAxisConfig
+DataType=3
+ValueType=0
+SysID=4112
+Active=1
+Notify=0
+Hysterese=0
+RefreshTime=1000
+DisplayName=ConfigAxis2
+TaskName=pp_mast
+
+[CONTROLVALUE_342]
+Descr=l_ptDpr.atAxisValues[2].tAxisParameter.dwAxisConfig
+DataType=3
+ValueType=0
+SysID=4112
+Active=1
+Notify=0
+Hysterese=0
+RefreshTime=1000
+DisplayName=ConfigAxis3
+TaskName=pp_mast
+
+[CONTROLVALUE_343]
+Descr=l_ptDpr.atAxisValues[3].tAxisParameter.dwAxisConfig
+DataType=3
+ValueType=0
+SysID=4112
+Active=1
+Notify=0
+Hysterese=0
+RefreshTime=1000
+DisplayName=ConfigAxis4
+TaskName=pp_mast
+
+[CONTROLVALUE_344]
+Descr=l_ptDpr.atAxisValues[4].tAxisParameter.dwAxisConfig
+DataType=3
+ValueType=0
+SysID=4112
+Active=1
+Notify=0
+Hysterese=0
+RefreshTime=1000
+DisplayName=ConfigAxis5
+TaskName=pp_mast
+
+[CONTROLVALUE_345]
+Descr=l_ptDpr.atAxisValues[5].tAxisParameter.dwAxisConfig
+DataType=3
+ValueType=0
+Active=1
+Notify=0
+Hysterese=0
+RefreshTime=1000
+TaskName=pp_mast
+SysID=4112
+DisplayName=ConfigAxis6
+
+[CONTROLVALUE_346]
+Descr=l_ptDpr.atAxisValues[6].tAxisParameter.dwAxisConfig
+DataType=3
+ValueType=0
+SysID=4112
+Active=1
+Notify=0
+Hysterese=0
+RefreshTime=1000
+DisplayName=ConfigAxis7
+TaskName=pp_mast
+
+[CONTROLVALUE_347]
+Descr=l_ptDpr.atAxisValues[7].tAxisParameter.dwAxisConfig
+DataType=3
+ValueType=0
+SysID=4112
+Active=1
+Notify=0
+Hysterese=0
+RefreshTime=1000
+DisplayName=ConfigAxis8
+TaskName=pp_mast
+
+[CONTROLVALUE_348]
+Descr=l_ptDpr.atAxisValues[8].tAxisParameter.dwAxisConfig
+DataType=3
+ValueType=0
+SysID=4112
+Active=1
+Notify=0
+Hysterese=0
+RefreshTime=1000
+DisplayName=ConfigAxis9
+TaskName=pp_mast
+
+[CONTROLVALUE_349]
+Descr=l_ptDpr.atAxisValues[9].tAxisParameter.dwAxisConfig
+DataType=3
+ValueType=0
+SysID=4112
+Active=1
+Notify=0
+Hysterese=0
+RefreshTime=1000
+DisplayName=ConfigAxis10
+TaskName=pp_mast
+
+[CONTROLVALUE_350]
+Descr=g_tRelJoy.dwDirSwitch
+DisplayName=JoystickXYInverse
+DataType=3
+ValueType=1
+SysID=4112
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=1000
+
+[CONTROLVALUE_351]
+Descr=g_tRelJoy.dwEnable
+DisplayName=XYJoyDependOnRotEnable
+DataType=3
+ValueType=1
+SysID=16
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=1000
+
+[CONTROLVALUE_352]
+Descr=g_bServiceMode
+DisplayName=ManiServiceMode
+DataType=6
+ValueType=1
+SysID=4112
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=1000
+
+[CONTROLVALUE_356]
+DisplayName=ACT_AxisPresent
+Descr=l_ptDpr.bACTHolder
+SysID=4096
+DataType=6
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+TaskName=pp_mast
+
+[CONTROLVALUE_358]
+Descr=g_abEndlessRotDisabled
+DataType=6
+ValueType=1
+SysID=4096
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=1500
+;10 Achsen
+DataLen=10
+DisplayName=EndlessRotDisabledArray[bool]
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// Ampel-Variablen
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLVALUE_359]
+DisplayName=Wlamp1DemandState[0]
+Descr=l_tLampCmdInterface[0].cDemandState
+DataType=14
+ValueType=1
+SysID=4112
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=1000
+TaskName=sigtower
+
+[CONTROLVALUE_360]
+DisplayName=Wlamp1FlashPeriod[0]
+Descr=l_tLampCmdInterface[0].wFlashPeriod
+DataType=11
+ValueType=1
+SysID=4112
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=1000
+TaskName=sigtower
+
+[CONTROLVALUE_361]
+DisplayName=Wlamp1Set[0]
+Descr=l_tLampCmdInterface[0].bSetLamp
+DataType=6
+ValueType=1
+SysID=4112
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=1000
+TaskName=sigtower
+
+[CONTROLVALUE_362]
+DisplayName=Wlamp1DemandState[1]
+Descr=l_tLampCmdInterface[1].cDemandState
+DataType=14
+ValueType=1
+SysID=4112
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=1000
+TaskName=sigtower
+
+[CONTROLVALUE_363]
+DisplayName=Wlamp1FlashPeriod[1]
+Descr=l_tLampCmdInterface[1].wFlashPeriod
+DataType=11
+ValueType=1
+SysID=4112
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=1000
+TaskName=sigtower
+
+[CONTROLVALUE_364]
+DisplayName=Wlamp1Set[1]
+Descr=l_tLampCmdInterface[1].bSetLamp
+DataType=6
+ValueType=1
+SysID=4112
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=1000
+TaskName=sigtower
+
+[CONTROLVALUE_365]
+DisplayName=Wlamp1DemandState[2]
+Descr=l_tLampCmdInterface[2].cDemandState
+DataType=14
+ValueType=1
+SysID=4112
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=1000
+TaskName=sigtower
+
+[CONTROLVALUE_366]
+DisplayName=Wlamp1FlashPeriod[2]
+Descr=l_tLampCmdInterface[2].wFlashPeriod
+DataType=11
+ValueType=1
+SysID=4112
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=1000
+TaskName=sigtower
+
+[CONTROLVALUE_367]
+DisplayName=Wlamp1Set[2]
+Descr=l_tLampCmdInterface[2].bSetLamp
+DataType=6
+ValueType=1
+SysID=4112
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=1000
+TaskName=sigtower
+
+[CONTROLVALUE_368]
+DisplayName=Wlamp1DemandState[3]
+Descr=l_tLampCmdInterface[3].cDemandState
+DataType=14
+ValueType=1
+SysID=4112
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=1000
+TaskName=sigtower
+
+[CONTROLVALUE_369]
+DisplayName=Wlamp1FlashPeriod[3]
+Descr=l_tLampCmdInterface[3].wFlashPeriod
+DataType=11
+ValueType=1
+SysID=4112
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=1000
+TaskName=sigtower
+
+[CONTROLVALUE_370]
+DisplayName=Wlamp1Set[3]
+Descr=l_tLampCmdInterface[3].bSetLamp
+DataType=6
+ValueType=1
+SysID=4112
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=1000
+TaskName=sigtower
+
+[CONTROLVALUE_371]
+DisplayName=Wlamp1DemandState[4]
+Descr=l_tLampCmdInterface[4].cDemandState
+DataType=14
+ValueType=1
+SysID=4112
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=1000
+TaskName=sigtower
+
+[CONTROLVALUE_372]
+DisplayName=Wlamp1FlashPeriod[4]
+Descr=l_tLampCmdInterface[4].wFlashPeriod
+DataType=11
+ValueType=1
+SysID=4112
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=1000
+TaskName=sigtower
+
+[CONTROLVALUE_373]
+DisplayName=Wlamp1Set[4]
+Descr=l_tLampCmdInterface[4].bSetLamp
+DataType=6
+ValueType=1
+SysID=4112
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=1000
+TaskName=sigtower
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// Warnlampen-Variablen
+;////////////////////////////////////////////////////////////////////////////////////////
+;// Die Variablen fr die einzelnen Warnlampen sind unbrauchbar,
+;// immer auf 0 oder nur sehr kurzfristig 1 wenn Fehler
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLVALUE_374]
+DisplayName=WarnlampDefect
+Descr=Lamp_def
+DataType=6
+ValueType=1
+SysID=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1000
+
+[CONTROLVALUE_375]
+DisplayName=ManiInterlock
+Descr=l_ptDpr.bInterlock
+DataType=6
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=100
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_376]
+Descr=VAC_DM.version
+DataType=11
+ValueType=1
+SysID=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1000
+DisplayName=VacuumVersion
+ReadSyncDef=0
+
+[CONTROLVALUE_377]
+Descr=Vac.mess
+DataType=4
+ValueType=1
+SysID=1
+Active=1
+Notify=1
+Hysterese=0.2
+RefreshTime=1000
+DisplayName=VacuumNom[V]
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_378]
+Descr=HSG.Gridist
+DataType=4
+ValueType=1
+SysID=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1000
+DisplayName=GridVoltage[V]
+ReadSyncDef=0
+
+; nur explizit Lesen fr Autocond.
+[CONTROLVALUE_379]
+Descr=TUBE_DM.seriennum
+DataType=9
+ValueType=1
+SysID=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=1000
+DisplayName=SerialNumber
+ReadSyncDef=0
+DataLen=16
+
+[CONTROLVALUE_380]
+Descr=TUBE_DM.name
+DataType=9
+ValueType=1
+SysID=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=1000
+DisplayName=Name
+ReadSyncDef=0
+DataLen=16
+
+[CONTROLVALUE_381]
+Descr=Focus.f
+DataType=4
+ValueType=1
+SysID=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1000
+DisplayName=FocusCurAct
+ReadSyncDef=0
+
+[CONTROLVALUE_382]
+Descr=PC_cmd.i32_XrayTimer_set_time
+DataType=3
+ValueType=1
+SysID=769
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1000
+DisplayName=XrayTimer_set_time
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_383]
+Descr=PLC_stat.i32_XrayTimer_left_time
+DataType=3
+ValueType=1
+SysID=769
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1000
+DisplayName=XrayTimer_left_time
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_384]
+Descr=PLC_stat.u32_cond_character
+DataType=0
+ValueType=1
+SysID=769
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=100
+DisplayName=AutoCondenserStatus
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_385]
+Descr=PLC_stat.u32_filamentcorradjust
+DataType=0
+ValueType=1
+SysID=769
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=100
+DisplayName=FilamentCorrectionTestStatus
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_386]
+Descr=r32_calcFilCorr
+DataType=4
+ValueType=1
+SysID=769
+Active=1
+Hysterese=0
+RefreshTime=0
+DisplayName=FilamentCorrectionTestResult
+WriteSyncDef=0
+ReadSyncDef=0
+TaskName=filcorradj
+
+[CONTROLVALUE_387]
+Descr=PLC_stat.u32_Leckstromtest
+DataType=0
+ValueType=1
+SysID=769
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=100
+DisplayName=LeakageCurrentTestStatus
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_388]
+Descr=r32_mAist_Mittel
+DataType=4
+ValueType=1
+SysID=769
+Active=1
+Hysterese=0
+RefreshTime=0
+DisplayName=LeakageCurrentTestResultMean
+WriteSyncDef=0
+ReadSyncDef=0
+TaskName=Leckstrom
+
+[CONTROLVALUE_389]
+Descr=r32_kV_limit_no_leak
+DataType=4
+ValueType=1
+SysID=769
+Active=1
+Hysterese=0
+RefreshTime=0
+DisplayName=LeakageCurrentTestResultLimitNoLeak
+WriteSyncDef=0
+ReadSyncDef=0
+TaskName=Leckstrom
+
+[CONTROLVALUE_390]
+Descr=bo_leak_is_linear
+DataType=6
+ValueType=1
+SysID=769
+Active=1
+Hysterese=0
+RefreshTime=0
+DisplayName=LeakageCurrentTestResultLeakIsLinear
+WriteSyncDef=0
+ReadSyncDef=0
+TaskName=Leckstrom
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// NEUE VARIABLEN-PARAMETRISIERUNGEN HIER EINTRAGEN
+;////////////////////////////////////////////////////////////////////////////////////////
+; Variable zur Zuordnung der Variablen zu verschiedenen FXE-Typen und Systemen.
+; Nicht bentigte bzw. nicht auf der RPS vorhandene Variablen werden nicht ber PVI connected
+; Die Identifikation ist in dem String bitcodiert
+;////////////////////////////////////////////////////////////////////////////////////////
+[SYSTEMID_0]
+DisplayName=SysIDVariable1
+Descr=Sys.SysConfig
+SysID=769
+DataType=3
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=250
+ReadSyncDef=0
+
+[SYSTEMID_1]
+DisplayName=SysIDVariable2
+Descr=sys_dm.SysConfig
+SysID=1
+DataType=3
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=250
+ReadSyncDef=0
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// erweiterte Kommandos
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLCOMMAND_96]
+Descr=PC_cmd.focusCharacteristic.write_default
+SysID=1
+DisplayName=WriteDefFocusTable
+WriteSyncDef=0
+
+[CONTROLCOMMAND_97]
+Descr=PC_cmd.condensorCharacteristic.write_default
+SysID=2
+DisplayName=WriteDefCentTable
+WriteSyncDef=0
+
+[CONTROLCOMMAND_98]
+Descr=write_def_shut
+SysID=32
+DisplayName=WriteDefShutterTable
+WriteSyncDef=0
+
+[CONTROLCOMMAND_99]
+Descr=PC_cmd.reset_workinghour_system
+SysID=1
+DisplayName=DelSystemCounter
+
+[CONTROLCOMMAND_100]
+Descr=PC_cmd.reset_workinghour_tube
+SysID=1
+DisplayName=DelTubeCounter
+
+[CONTROLCOMMAND_101]
+Descr=PC_cmd.reset_workinghour_filament
+SysID=1
+DisplayName=DelFilamentCounter
+
+; mode-Datenmodul lesen, analog wie bei Kennlinien
+[CONTROLCOMMAND_102]
+Descr=PC_cmd.MODE_DM.read
+SysID=1
+DisplayName=ReadModeModule
+WriteSyncDef=0
+
+; target-Datenmodul lesen, analog wie bei Kennlinien
+[CONTROLCOMMAND_103]
+Descr=PC_cmd.TARGET_DM.read
+SysID=1
+DisplayName=ReadTargetModule
+WriteSyncDef=0
+
+; mode-Datenmodul lesen, analog wie bei Kennlinien
+[CONTROLCOMMAND_104]
+Descr=PC_cmd.MODE_DM.create_new
+SysID=1
+DisplayName=NewModeModule
+WriteSyncDef=0
+
+; target-Datenmodul lesen, analog wie bei Kennlinien
+[CONTROLCOMMAND_105]
+Descr=PC_cmd.TARGET_DM.create_new
+SysID=1
+DisplayName=NewTargetModule
+WriteSyncDef=0
+
+[CONTROLCOMMAND_106]
+Descr=PC_cmd.new_filament
+SysID=1
+DisplayName=NewFilament
+
+[CONTROLCOMMAND_107]
+Descr=PC_cmd.focusCharacteristic.read_default
+SysID=1
+DisplayName=LoadDefFocusTable
+WriteSyncDef=0
+
+[CONTROLCOMMAND_108]
+Descr=PC_cmd.condensorCharacteristic.read_default
+SysID=2
+DisplayName=LoadDefConsTable
+WriteSyncDef=0
+
+[CONTROLCOMMAND_109]
+Descr=read_def_shut
+SysID=32
+DisplayName=LoadDefShutterTable
+WriteSyncDef=0
+
+[CONTROLCOMMAND_111]
+Descr=PC_cmd.TubeCharacteristic.read
+SysID=512
+DisplayName=DelTubeCounter
+
+[CONTROLCOMMAND_112]
+Descr=PC_cmd.TubeCharacteristic.write
+SysID=512
+DisplayName=DelTubeCounter
+
+[CONTROLCOMMAND_113]
+Descr=PC_cmd.TubeCharacteristic.store_point
+SysID=512
+DisplayName=DelTubeCounter
+
+[CONTROLCOMMAND_114]
+Descr=PC_cmd.TubeCharacteristic.delete_point
+SysID=512
+DisplayName=DelTubeCounter
+
+[CONTROLCOMMAND_115]
+Descr=PC_cmd.TubeCharacteristic.delete_all_points
+SysID=512
+DisplayName=DelTubeCounter
+
+[CONTROLCOMMAND_116]
+Descr=PC_cmd.TubeCharacteristic.read_default
+SysID=512
+DisplayName=DelTubeCounter
+
+[CONTROLCOMMAND_117]
+Descr=PC_cmd.TubeCharacteristic.write_default
+SysID=512
+DisplayName=DelTubeCounter
+
+[CONTROLCOMMAND_118]
+Descr=PC_cmd.TUBEHEAD_DM.read
+SysID=1
+DisplayName=ReadTubheadModule
+
+[CONTROLCOMMAND_119]
+Descr=l_ptDpr.tManiCommands.bStartZentPosAll
+SysID=4120
+DisplayName=CenterAllAxes
+WriteSyncDef=0
+TaskName=pp_mast
+
+[CONTROLCOMMAND_120]
+Descr=l_ptDpr.tManiCommands.bStartLoadPosAll
+SysID=4120
+DisplayName=LoadPosAllAxes
+WriteSyncDef=0
+TaskName=pp_mast
+
+[CONTROLCOMMAND_121]
+Descr=cmd_opencom
+SysID=0
+DisplayName=OpenFFCom
+WriteSyncDef=1
+
+[CONTROLCOMMAND_122]
+Descr=cmd_closecom
+SysID=0
+DisplayName=CloseFFCom
+WriteSyncDef=1
+
+[CONTROLCOMMAND_124]
+DisplayName=PC_cmd.xraytimerON
+Descr=PC_cmd.xraytimerON
+SysID=1
+WriteSyncDef=0
+
+[CONTROLCOMMAND_125]
+DisplayName=PC_cmd.xraytimerOFF
+Descr=PC_cmd.xraytimerOFF
+SysID=1
+WriteSyncDef=0
+
+[CONTROLCOMMAND_126]
+DisplayName=PC_cmd.xraytimerReset
+Descr=PC_cmd.xraytimerReset
+SysID=1
+WriteSyncDef=0
+
+[CONTROLCOMMAND_127]
+Descr=PC_cmd.condensor_character_kV
+SysID=257
+DisplayName=DoAutocondenserKV
+WriteSyncDef=0
+
+[CONTROLCOMMAND_128]
+Descr=PC_cmd.condensor_character_singlemod
+SysID=257
+DisplayName=DoAutocondenserMod
+WriteSyncDef=0
+
+[CONTROLCOMMAND_129]
+Descr=PC_cmd.condensor_character_multimod
+SysID=257
+DisplayName=DoAutocondenserAll
+WriteSyncDef=0
+
+[CONTROLCOMMAND_130]
+Descr=PC_cmd.filamentcorradjust
+SysID=257
+DisplayName=DoFilamentCorrectionTest
+WriteSyncDef=0
+
+[CONTROLCOMMAND_131]
+Descr=PC_cmd.leckstromtest
+SysID=257
+DisplayName=DoLeakageCurrentTest
+WriteSyncDef=0
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// Debug-Variablen
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLVALUE_10000]
+Descr=Filament_Q20
+DataType=4
+ValueType=1
+SysID=1
+Active=0
+Notify=0
+Hysterese=0.5
+RefreshTime=250
+DisplayName=FilamentQ20
+
+[CONTROLVALUE_10001]
+Descr=Filament_Q50
+DataType=4
+ValueType=1
+SysID=1
+Active=0
+Notify=0
+Hysterese=0.5
+RefreshTime=250
+DisplayName=FilamentQ50
+
+[CONTROLVALUE_10002]
+Descr=Filament_Q100
+DataType=4
+ValueType=1
+SysID=1
+Active=0
+Notify=0
+Hysterese=0.5
+RefreshTime=250
+DisplayName=FilamentQ100
+
+[CONTROLVALUE_10003]
+Descr=Filament_Q250
+DataType=4
+ValueType=1
+SysID=1
+Active=0
+Notify=0
+Hysterese=0.5
+RefreshTime=250
+DisplayName=FilamentQ250
+
+[CONTROLVALUE_10004]
+Descr=Filament_Q500
+DataType=4
+ValueType=1
+SysID=1
+Active=0
+Notify=0
+Hysterese=0.5
+RefreshTime=250
+DisplayName=FilamentQ500
+
+[CONTROLVALUE_10005]
+Descr=Filament_Q1000
+DataType=4
+ValueType=1
+SysID=1
+Active=0
+Notify=0
+Hysterese=0.5
+RefreshTime=250
+DisplayName=FilamentQ1000
+
+[CONTROLVALUE_10006]
+Descr=Target_Ws_025
+DataType=4
+ValueType=1
+SysID=1
+Active=0
+Notify=0
+Hysterese=0.25
+RefreshTime=1000
+DisplayName=TargetJ025
+
+[CONTROLVALUE_10007]
+Descr=Target_Ws_05
+DataType=4
+ValueType=1
+SysID=1
+Active=0
+Notify=0
+Hysterese=0.5
+RefreshTime=1000
+DisplayName=TargetJ05
+
+[CONTROLVALUE_10008]
+Descr=Target_Ws_1
+DataType=4
+ValueType=1
+SysID=1
+Active=0
+Notify=0
+Hysterese=0.5
+RefreshTime=1000
+DisplayName=TargetJ1
+
+[CONTROLVALUE_10009]
+Descr=Target_Ws_2
+DataType=4
+ValueType=1
+SysID=1
+Active=0
+Notify=0
+Hysterese=0.5
+RefreshTime=1000
+DisplayName=TargetJ2
+
+[CONTROLVALUE_10010]
+Descr=Target_Ws_4
+DataType=4
+ValueType=1
+SysID=1
+Active=0
+Notify=0
+Hysterese=0.5
+RefreshTime=1000
+DisplayName=TargetJ4
+
+[CONTROLVALUE_10011]
+Descr=Target_Ws_6
+DataType=4
+ValueType=1
+SysID=1
+Active=0
+Notify=0
+Hysterese=0.5
+RefreshTime=1000
+DisplayName=TargetJ6
+
+[CONTROLVALUE_10012]
+Descr=Target_Ws_10
+DataType=4
+ValueType=1
+SysID=1
+Active=0
+Notify=0
+Hysterese=0.5
+RefreshTime=1000
+DisplayName=TargetJ10
+
+[CONTROLVALUE_10013]
+Descr=Sys_error
+DataType=11
+ValueType=0
+SysID=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1500
+DataLen=21
+DisplayName=SystemErrorArray
+
+[CONTROLVALUE_10014]
+Descr=HSG_error
+DataType=11
+ValueType=0
+SysID=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1500
+DataLen=21
+DisplayName=HSGErrorArray
+
+[CONTROLVALUE_10015]
+Descr=Tube_error
+DataType=11
+ValueType=0
+SysID=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1500
+DataLen=21
+DisplayName=TubeErrorArray
+
+[CONTROLVALUE_10016]
+Descr=Vac_error
+DataType=11
+ValueType=0
+SysID=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1500
+DataLen=21
+DisplayName=VacuumErrorArray
+
+[CONTROLVALUE_10017]
+Descr=Sys_err_count
+DataType=11
+ValueType=0
+SysID=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=4000
+DisplayName=SysErrorArrayIdx
+
+[CONTROLVALUE_10018]
+Descr=HSG_err_count
+DataType=11
+ValueType=0
+SysID=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=4000
+DisplayName=HSGErrorArrayIdx
+
+[CONTROLVALUE_10019]
+Descr=Tube_err_count
+DataType=11
+ValueType=0
+SysID=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=4000
+DisplayName=TubeErrorArrayIdx
+
+[CONTROLVALUE_10020]
+Descr=Vac_err_count
+DataType=11
+ValueType=0
+SysID=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=4000
+DisplayName=VacuumErrorArrayIdx
+
+[CONTROLVALUE_10021]
+DisplayName=LoadPositionEnable1
+; fr Cougar15:
+Descr=l_ptDpr.atAxisValues[0].tAxisParameter.dwLoadPos_Enab
+SysID=4120
+DataType=1
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+TaskName=pp_mast
+
+[CONTROLVALUE_10022]
+DisplayName=LoadPositionEnable2
+; fr Cougar15:
+Descr=l_ptDpr.atAxisValues[1].tAxisParameter.dwLoadPos_Enab
+SysID=4120
+DataType=1
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+TaskName=pp_mast
+
+[CONTROLVALUE_10023]
+DisplayName=LoadPositionEnable3
+; fr Cougar15:
+Descr=l_ptDpr.atAxisValues[2].tAxisParameter.dwLoadPos_Enab
+SysID=4120
+DataType=1
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+TaskName=pp_mast
+
+[CONTROLVALUE_10024]
+DisplayName=LoadPositionEnable4
+; fr Cougar15:
+Descr=l_ptDpr.atAxisValues[3].tAxisParameter.dwLoadPos_Enab
+SysID=4120
+DataType=1
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+TaskName=pp_mast
+
+[CONTROLVALUE_10025]
+DisplayName=LoadPositionEnable5
+; fr Cougar15:
+Descr=l_ptDpr.atAxisValues[4].tAxisParameter.dwLoadPos_Enab
+SysID=4120
+DataType=1
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+TaskName=pp_mast
+
+[CONTROLVALUE_10026]
+DisplayName=LoadPositionEnable6
+; fr Cougar15:
+Descr=l_ptDpr.atAxisValues[5].tAxisParameter.dwLoadPos_Enab
+SysID=4120
+DataType=1
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+TaskName=pp_mast
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// ACHSEN 7-10 VORERST NUR FUER COUGAR15!
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLVALUE_10027]
+DisplayName=LoadPositionEnable7
+; fr Cougar15:
+Descr=l_ptDpr.atAxisValues[6].tAxisParameter.dwLoadPos_Enab
+SysID=24
+DataType=1
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+TaskName=pp_mast
+
+[CONTROLVALUE_10028]
+DisplayName=LoadPositionEnable8
+; fr Cougar15:
+Descr=l_ptDpr.atAxisValues[7].tAxisParameter.dwLoadPos_Enab
+SysID=24
+DataType=1
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+TaskName=pp_mast
+
+[CONTROLVALUE_10029]
+DisplayName=LoadPositionEnable9
+; fr Cougar15:
+Descr=l_ptDpr.atAxisValues[8].tAxisParameter.dwLoadPos_Enab
+SysID=24
+DataType=1
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+TaskName=pp_mast
+
+[CONTROLVALUE_10030]
+DisplayName=LoadPositionEnable10
+; fr Cougar15:
+Descr=l_ptDpr.atAxisValues[9].tAxisParameter.dwLoadPos_Enab
+SysID=24
+DataType=1
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+TaskName=pp_mast
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// BELADEPOSITIONEN 1-6 VORERST NUR FUER TIGER!
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLVALUE_10031]
+DisplayName=LoadPosition1
+Descr=l_ptDpr.atAxisValues[0].tAxisParameter.fLoadPos
+SysID=4112
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+TaskName=pp_mast
+
+[CONTROLVALUE_10032]
+DisplayName=LoadPosition2
+Descr=l_ptDpr.atAxisValues[1].tAxisParameter.fLoadPos
+SysID=4112
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+TaskName=pp_mast
+
+[CONTROLVALUE_10033]
+DisplayName=LoadPosition3
+Descr=l_ptDpr.atAxisValues[2].tAxisParameter.fLoadPos
+SysID=4112
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+TaskName=pp_mast
+
+[CONTROLVALUE_10034]
+DisplayName=LoadPosition4
+Descr=l_ptDpr.atAxisValues[3].tAxisParameter.fLoadPos
+SysID=4112
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+TaskName=pp_mast
+
+[CONTROLVALUE_10035]
+DisplayName=LoadPosition5
+Descr=l_ptDpr.atAxisValues[4].tAxisParameter.fLoadPos
+SysID=4112
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+TaskName=pp_mast
+
+[CONTROLVALUE_10036]
+DisplayName=LoadPosition6
+Descr=l_ptDpr.atAxisValues[5].tAxisParameter.fLoadPos
+SysID=4112
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+TaskName=pp_mast
+
+[CONTROLVALUE_10037]
+DisplayName=LoadPosition7
+Descr=l_ptDpr.atAxisValues[6].tAxisParameter.fLoadPos
+SysID=4112
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+TaskName=pp_mast
+
+[CONTROLVALUE_10038]
+DisplayName=LoadPosition8
+Descr=l_ptDpr.atAxisValues[7].tAxisParameter.fLoadPos
+SysID=4112
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+TaskName=pp_mast
+
+[CONTROLVALUE_10039]
+DisplayName=LoadPosition9
+Descr=l_ptDpr.atAxisValues[8].tAxisParameter.fLoadPos
+SysID=4112
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+TaskName=pp_mast
+
+[CONTROLVALUE_10040]
+DisplayName=LoadPosition10
+Descr=l_ptDpr.atAxisValues[9].tAxisParameter.fLoadPos
+SysID=4112
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+TaskName=pp_mast
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// AxesWatch-Variablen
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLVALUE_10041]
+DisplayName=AxisEncValue[0]
+Descr=DC_nEncoder[0]
+SysID=4120
+DataType=10
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10042]
+DisplayName=AxisEncMastSlaveOffset[0]
+Descr=l_anMasterSlaveEncoderOffset[0]
+SysID=4120
+DataType=10
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10043]
+DisplayName=MasterSlaveDiff[0]
+Descr=l_afMasterSlaveDiff[0]
+SysID=4120
+DataType=4
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10044]
+DisplayName=MasterSlaveDiffMax[0]
+Descr=l_afMasterSlaveDiffMax[0]
+SysID=4120
+DataType=4
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10045]
+DisplayName=MastSlavRefMaxDiff[0]
+Descr=g_tAxesWatch.afMastSlavRefMaxDiff[0]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10046]
+DisplayName=MastSlavNormMaxDiff[0]
+Descr=g_tAxesWatch.afMastSlavNormMaxDiff[0]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10047]
+DisplayName=ScalingFactor[0]
+Descr=g_tAxesWatch.afScalingFactor[0]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10048]
+DisplayName=AxisEncValue[1]
+Descr=DC_nEncoder[1]
+SysID=4120
+DataType=10
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10049]
+DisplayName=AxisEncMastSlaveOffset[1]
+Descr=l_anMasterSlaveEncoderOffset[1]
+SysID=4120
+DataType=10
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10050]
+DisplayName=MasterSlaveDiff[1]
+Descr=l_afMasterSlaveDiff[1]
+SysID=4120
+DataType=4
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10051]
+DisplayName=MasterSlaveDiffMax[1]
+Descr=l_afMasterSlaveDiffMax[1]
+SysID=4120
+DataType=4
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10052]
+DisplayName=MastSlavRefMaxDiff[1]
+Descr=g_tAxesWatch.afMastSlavRefMaxDiff[1]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10053]
+DisplayName=MastSlavNormMaxDiff[1]
+Descr=g_tAxesWatch.afMastSlavNormMaxDiff[1]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10054]
+DisplayName=ScalingFactor[1]
+Descr=g_tAxesWatch.afScalingFactor[1]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10055]
+DisplayName=AxisEncValue[2]
+Descr=DC_nEncoder[2]
+SysID=4120
+DataType=10
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10056]
+DisplayName=AxisEncMastSlaveOffset[2]
+Descr=l_anMasterSlaveEncoderOffset[2]
+SysID=4120
+DataType=10
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10057]
+DisplayName=MasterSlaveDiff[2]
+Descr=l_afMasterSlaveDiff[2]
+SysID=4120
+DataType=4
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10058]
+DisplayName=MasterSlaveDiffMax[2]
+Descr=l_afMasterSlaveDiffMax[2]
+SysID=4120
+DataType=4
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10059]
+DisplayName=MastSlavRefMaxDiff[2]
+Descr=g_tAxesWatch.afMastSlavRefMaxDiff[2]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10060]
+DisplayName=MastSlavNormMaxDiff[2]
+Descr=g_tAxesWatch.afMastSlavNormMaxDiff[2]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10061]
+DisplayName=ScalingFactor[2]
+Descr=g_tAxesWatch.afScalingFactor[2]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10062]
+DisplayName=AxisEncValue[3]
+Descr=DC_nEncoder[3]
+SysID=4120
+DataType=10
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10063]
+DisplayName=AxisEncMastSlaveOffset[3]
+Descr=l_anMasterSlaveEncoderOffset[3]
+SysID=4120
+DataType=10
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10064]
+DisplayName=MasterSlaveDiff[3]
+Descr=l_afMasterSlaveDiff[3]
+SysID=4120
+DataType=4
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10065]
+DisplayName=MasterSlaveDiffMax[3]
+Descr=l_afMasterSlaveDiffMax[3]
+SysID=4120
+DataType=4
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10066]
+DisplayName=MastSlavRefMaxDiff[3]
+Descr=g_tAxesWatch.afMastSlavRefMaxDiff[3]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10067]
+DisplayName=MastSlavNormMaxDiff[3]
+Descr=g_tAxesWatch.afMastSlavNormMaxDiff[3]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10068]
+DisplayName=ScalingFactor[3]
+Descr=g_tAxesWatch.afScalingFactor[3]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10069]
+DisplayName=AxisEncValue[4]
+Descr=DC_nEncoder[4]
+SysID=4120
+DataType=10
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10070]
+DisplayName=AxisEncMastSlaveOffset[4]
+Descr=l_anMasterSlaveEncoderOffset[4]
+SysID=4120
+DataType=10
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10071]
+DisplayName=MasterSlaveDiff[4]
+Descr=l_afMasterSlaveDiff[4]
+SysID=4120
+DataType=4
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10072]
+DisplayName=MasterSlaveDiffMax[4]
+Descr=l_afMasterSlaveDiffMax[4]
+SysID=4120
+DataType=4
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10073]
+DisplayName=MastSlavRefMaxDiff[4]
+Descr=g_tAxesWatch.afMastSlavRefMaxDiff[4]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10074]
+DisplayName=MastSlavNormMaxDiff[4]
+Descr=g_tAxesWatch.afMastSlavNormMaxDiff[4]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10075]
+DisplayName=ScalingFactor[4]
+Descr=g_tAxesWatch.afScalingFactor[4]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10076]
+DisplayName=AxisEncValue[5]
+Descr=DC_nEncoder[5]
+SysID=4120
+DataType=10
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10077]
+DisplayName=AxisEncMastSlaveOffset[5]
+Descr=l_anMasterSlaveEncoderOffset[5]
+SysID=4120
+DataType=10
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10078]
+DisplayName=MasterSlaveDiff[5]
+Descr=l_afMasterSlaveDiff[5]
+SysID=4120
+DataType=4
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10079]
+DisplayName=MasterSlaveDiffMax[5]
+Descr=l_afMasterSlaveDiffMax[5]
+SysID=4120
+DataType=4
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10080]
+DisplayName=MastSlavRefMaxDiff[5]
+Descr=g_tAxesWatch.afMastSlavRefMaxDiff[5]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10081]
+DisplayName=MastSlavNormMaxDiff[5]
+Descr=g_tAxesWatch.afMastSlavNormMaxDiff[5]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10082]
+DisplayName=ScalingFactor[5]
+Descr=g_tAxesWatch.afScalingFactor[5]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10083]
+DisplayName=AxisEncValue[6]
+Descr=DC_nEncoder[6]
+SysID=4120
+DataType=10
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10084]
+DisplayName=AxisEncMastSlaveOffset[6]
+Descr=l_anMasterSlaveEncoderOffset[6]
+SysID=4120
+DataType=10
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10085]
+DisplayName=MasterSlaveDiff[6]
+Descr=l_afMasterSlaveDiff[6]
+SysID=4120
+DataType=4
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10086]
+DisplayName=MasterSlaveDiffMax[6]
+Descr=l_afMasterSlaveDiffMax[6]
+SysID=4120
+DataType=4
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10087]
+DisplayName=MastSlavRefMaxDiff[6]
+Descr=g_tAxesWatch.afMastSlavRefMaxDiff[6]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10088]
+DisplayName=MastSlavNormMaxDiff[6]
+Descr=g_tAxesWatch.afMastSlavNormMaxDiff[6]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10089]
+DisplayName=ScalingFactor[6]
+Descr=g_tAxesWatch.afScalingFactor[6]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10090]
+DisplayName=AxisEncValue[7]
+Descr=DC_nEncoder[7]
+SysID=4120
+DataType=10
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10091]
+DisplayName=AxisEncMastSlaveOffset[7]
+Descr=l_anMasterSlaveEncoderOffset[7]
+SysID=4120
+DataType=10
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10092]
+DisplayName=MasterSlaveDiff[7]
+Descr=l_afMasterSlaveDiff[7]
+SysID=4120
+DataType=4
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10093]
+DisplayName=MasterSlaveDiffMax[7]
+Descr=l_afMasterSlaveDiffMax[7]
+SysID=4120
+DataType=4
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10094]
+DisplayName=MastSlavRefMaxDiff[7]
+Descr=g_tAxesWatch.afMastSlavRefMaxDiff[7]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10095]
+DisplayName=MastSlavNormMaxDiff[7]
+Descr=g_tAxesWatch.afMastSlavNormMaxDiff[7]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10096]
+DisplayName=ScalingFactor[7]
+Descr=g_tAxesWatch.afScalingFactor[7]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10097]
+DisplayName=AxisEncValue[8]
+Descr=DC_nEncoder[8]
+SysID=4120
+DataType=10
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10098]
+DisplayName=AxisEncMastSlaveOffset[8]
+Descr=l_anMasterSlaveEncoderOffset[8]
+SysID=4120
+DataType=10
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10099]
+DisplayName=MasterSlaveDiff[8]
+Descr=l_afMasterSlaveDiff[8]
+SysID=4120
+DataType=4
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10100]
+DisplayName=MasterSlaveDiffMax[8]
+Descr=l_afMasterSlaveDiffMax[8]
+SysID=4120
+DataType=4
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10101]
+DisplayName=MastSlavRefMaxDiff[8]
+Descr=g_tAxesWatch.afMastSlavRefMaxDiff[8]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10102]
+DisplayName=MastSlavNormMaxDiff[8]
+Descr=g_tAxesWatch.afMastSlavNormMaxDiff[8]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10103]
+DisplayName=ScalingFactor[8]
+Descr=g_tAxesWatch.afScalingFactor[8]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10104]
+DisplayName=AxisEncValue[9]
+Descr=DC_nEncoder[9]
+SysID=4120
+DataType=10
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10105]
+DisplayName=AxisEncMastSlaveOffset[9]
+Descr=l_anMasterSlaveEncoderOffset[9]
+SysID=4120
+DataType=10
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10106]
+DisplayName=MasterSlaveDiff[9]
+Descr=l_afMasterSlaveDiff[9]
+SysID=4120
+DataType=4
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10107]
+DisplayName=MasterSlaveDiffMax[9]
+Descr=l_afMasterSlaveDiffMax[9]
+SysID=4120
+DataType=4
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=500
+TaskName=axeswtch
+
+[CONTROLVALUE_10108]
+DisplayName=MastSlavRefMaxDiff[9]
+Descr=g_tAxesWatch.afMastSlavRefMaxDiff[9]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10109]
+DisplayName=MastSlavNormMaxDiff[9]
+Descr=g_tAxesWatch.afMastSlavNormMaxDiff[9]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+[CONTROLVALUE_10110]
+DisplayName=ScalingFactor[9]
+Descr=g_tAxesWatch.afScalingFactor[9]
+SysID=4120
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=-1
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// Debug-Commands
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLCOMMAND_10000]
+Descr=del_Filament_Q
+SysID=1
+DisplayName=DelFilamentQ
+
+[CONTROLCOMMAND_10001]
+Descr=del_Target_Ws
+SysID=1
+DisplayName=DelTargetJ
+
+[CONTROLCOMMAND_10002]
+Descr=Sys_errorquit
+SysID=1
+DisplayName=ResetSysErrArray
+
+[CONTROLCOMMAND_10003]
+Descr=HSG_errorquit
+SysID=1
+DisplayName=ResetHSGErrArray
+
+[CONTROLCOMMAND_10004]
+Descr=Tube_errorquit
+SysID=1
+DisplayName=ResetTubeErrArray
+
+[CONTROLCOMMAND_10005]
+Descr=Vac_errorquit
+SysID=1
+DisplayName=ResetVacErrArray
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// erweiterte Test-Variablen
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLVALUE_15000]
+DisplayName=TMTApertureCurrentArray
+Descr=BlendeAbtast
+DataType=4
+ValueType=1
+SysID=1
+Active=0
+Notify=0
+Hysterese=0.1
+RefreshTime=1200
+DataLen=300
+
+[CONTROLVALUE_15001]
+DisplayName=TMTTargetCurrentArray
+Descr=TargetAbtast
+DataType=4
+ValueType=1
+SysID=1
+Active=0
+Notify=0
+Hysterese=0.1
+RefreshTime=1200
+DataLen=300
+
+[CONTROLVALUE_15002]
+DisplayName=TMTIntegrationCount
+Descr=burn_Anzahl
+SysID=1
+DataType=10
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=250
+
+[CONTROLVALUE_15003]
+DisplayName=TMTFocusVariation
+Descr=burn_Ifocus
+SysID=1
+DataType=4
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0.1
+RefreshTime=250
+
+[CONTROLVALUE_15004]
+DisplayName=TMTFocusIntervall
+Descr=burn_Ifocus_step
+SysID=1
+DataType=4
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0.1
+RefreshTime=250
+
+[CONTROLVALUE_15005]
+DisplayName=TMTUsedFocusPoints
+Descr=abtast_ende
+SysID=1
+DataType=10
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=250
+
+[CONTROLVALUE_15006]
+DisplayName=TMTActFocusPoint
+Descr=abtast_index
+SysID=1
+DataType=10
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=250
+
+[CONTROLVALUE_15007]
+DisplayName=TMTAccVoltage
+Descr=burn_kV
+SysID=1
+DataType=4
+ValueType=1
+Active=0
+Notify=0
+Hysterese=1.0
+RefreshTime=250
+
+[CONTROLVALUE_15008]
+DisplayName=TMTTubeCurrent
+Descr=burn_mA
+SysID=1
+DataType=4
+ValueType=1
+Active=0
+Notify=0
+Hysterese=1.0
+RefreshTime=250
+
+[CONTROLVALUE_15009]
+DisplayName=TMTResFocusOptMax
+Descr=Focus_opt_max
+SysID=1
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0.1
+RefreshTime=250
+
+[CONTROLVALUE_15010]
+DisplayName=TMTResFocusOptMin
+Descr=Focus_opt_min
+SysID=1
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0.1
+RefreshTime=250
+
+[CONTROLVALUE_15011]
+DisplayName=TMTResTargetAvgMax
+Descr=TargetAverage_max
+SysID=1
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0.1
+RefreshTime=250
+
+[CONTROLVALUE_15012]
+DisplayName=TMTResTargetAvgMin
+Descr=TargetAverage_min
+SysID=1
+DataType=4
+ValueType=0
+Active=0
+Notify=0
+Hysterese=0.1
+RefreshTime=250
+
+[CONTROLVALUE_15013]
+DisplayName=TMTResult
+Descr=TargetEinbrand
+SysID=1
+DataType=6
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+
+[CONTROLVALUE_15014]
+DisplayName=BeamScanPointsPerLine
+Descr=beamscan_anzahl
+;//Variable wurde nach local verschoben
+SysID=0
+DataType=11
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=250
+
+[CONTROLVALUE_15015]
+DisplayName=BeamScanLineReady
+Descr=beamscan_ready
+;//Variable wurde nach local verschoben
+SysID=0
+DataType=6
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=100
+
+[CONTROLVALUE_15016]
+DisplayName=BeamScanCurrentIntervall
+Descr=beamscan_step
+;//Variable wurde nach local verschoben
+SysID=0
+DataType=11
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=250
+
+[CONTROLVALUE_15017]
+DisplayName=BeamScanLineArray
+Descr=beamscan_target
+DataType=4
+ValueType=1
+;//Variable wurde nach local verschoben
+SysID=0
+Active=0
+Notify=0
+Hysterese=0.1
+RefreshTime=1000
+DataLen=501
+
+[CONTROLVALUE_15018]
+DisplayName=BeamScanXIndex
+Descr=beamscan_x
+;//Variable wurde nach local verschoben
+SysID=0
+DataType=11
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=250
+
+[CONTROLVALUE_15019]
+DisplayName=BeamScanYIndex
+Descr=beamscan_y
+;//Variable wurde nach local verschoben
+SysID=0
+DataType=11
+ValueType=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=250
+
+[CONTROLVALUE_15020]
+Descr=Tube.wobstep
+DataType=4
+ValueType=1
+SysID=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=1000
+DisplayName=WobbelStep
+
+[CONTROLVALUE_15021]
+Descr=I_tube_korr
+DataType=4
+ValueType=1
+SysID=0
+Active=0
+Notify=0
+Hysterese=0.5
+RefreshTime=1000
+DisplayName=TubeCorrCurArray[A]
+DataLen=11
+
+[CONTROLVALUE_15022]
+Descr=Tube.hub
+DataType=4
+ValueType=1
+SysID=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=1000
+DisplayName=WobbelAmplitude
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// Commandos fuer erweiterte Testfunktionen
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLCOMMAND_15000]
+Descr=PC_cmd.burn
+DisplayName=StartTargetMaterialTest
+SysID=1
+
+[CONTROLCOMMAND_15001]
+Descr=PC_cmd.beamscan
+DisplayName=StartBeamScan
+SysID=1
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// Stati fuer erweiterte Testfunktionen
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLSTATUS_15000]
+DisplayName=TMTRunning
+Descr=PLC_stat.bo_burn_is_running
+SysID=1
+Active=1
+Notify=1
+RefreshTime=250
+
+[CONTROLSTATUS_15001]
+DisplayName=BeamScanRunning
+Descr=PLC_stat.bo_beamscan_is_running
+SysID=1
+Active=1
+Notify=1
+RefreshTime=250
+
+[CPUTYPES]
+I386="CP340 CP360 CP380 CP570 CP1483 CP1484 CP1583"
+68000="IF260 CP260 CP430 CP476"
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// DATENMODULE
+;////////////////////////////////////////////////////////////////////////////////////////
+; 26.06.2003: ModuleNameIdxMethod
+; 0: alter Mechanismus (ModuleCount aus ini-Datei, 1-dim. Index)
+; 1: [init-DM-Eintrag] (statisch, 1 Modul pro Init, z. B. hsg, tube)
+; 2: [init-DM-Eintrag / Init-Anz.] (statisch, mehrere Module pro Init, z. B. amp, cent)
+; 3: [Anz. init-DMs bzw. tubeheads (sollte gleich sein)] (statisch)
+; 4: [Tubeheads] (1-dim., dyn.)
+; 5: [Targets] (2-dim., dyn.)
+; 6: [Modes] (3-dim., dyn.)
+; Wenn ModuleNameIdxMethod=1 (z.B. cent, amp) dann wird der ModuleCount aus dem Eintrag im letzten init-dm ermittelt,
+; es mssen dann diese Anz. Module angezeigt werden.
+; Wenn ModuleNameIdxMethod=0 wird ModuleCount=0/1 gesetzt, es wird nur ein Modul angezeigt (und es gibt dann auch nur EINE
+; Strukturvariable!)
+; bei dyn. Modulen (mode, target) ergibt sich die anzuzeigende Anz. Module aus dem Wert der entspr. Variablen
+; (z.B. cons_max, target_max)
+;////////////////////////////////////////////////////////////////////////////////////////
+; INIT-Datenmodule:
+; Diese liefern die Informationen darber, wieviele der anderen DMs insgesamt auf der RPS
+; vorhanden und welche gerade aktiv sind. Momentan soll es fr jeden Rhrenkopf ein init-Datenmodul
+; geben. ber einen dig. Eingang wird der jeweilige Rhrenkopf von der RPS erkannt --> Zu-
+; weisung der Rhrenkopf-Nummer. Entspr. dieser Nummber wird ein init-DM angesprochen, in
+; welchem hinterlegt ist, welche DMs aktiviert werden sollen.
+; Definition/Konvention: IM LETZTEN init-DM steht die ANZAHL der fr jeden Typ auf der RPS
+; vorhandenen DMs!
+; init-DMs mssen nicht ber eine PC-Applikation angezeigt/konfiguriert werden!
+;////////////////////////////////////////////////////////////////////////////////////////
+[INITDM]
+DisplayName=InitDM
+SysID=1
+
+[TUBEHEADDM]
+DisplayName=TubeheadDM
+SysID=1
+
+[TARGETDM]
+DisplayName=TargetDM
+SysID=1
+
+[TargetDM_Names]
+Descr=target.Name[%d]
+DataType=9
+ValueType=1
+SysID=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=2000
+DataLen=41
+
+[MODEDM]
+DisplayName=ModeDM
+SysID=1
+
+[ModeDM_Names]
+Descr=Mode.Name[%d]
+DataType=9
+ValueType=1
+SysID=1
+Active=0
+Notify=0
+Hysterese=0
+RefreshTime=2000
+DataLen=16
+
+[FILDM]
+DisplayName=FilDM
+SysID=1
+
+[TUBEDM]
+DisplayName=TubeDM
+SysID=513
+
+[AMPDM]
+DisplayName=AmpDM
+SysID=1
+
+[HSGDM]
+DisplayName=HSGDM
+SysID=513
+
+[VACDM]
+DisplayName=VacDM
+SysID=1
+
+[CONDDM]
+DisplayName=CondDM
+SysID=1
+
+[SYSDM]
+DisplayName=SysDM
+SysID=513
+
+[FOCUSDM]
+DisplayName=FocusDM
+SysID=1
+
+[CONSDM]
+DisplayName=ConsDM
+SysID=2
+
+[SHUTDM]
+DisplayName=ShutDM
+SysID=32
+
+[CENTDM]
+DisplayName=CentDM
+SysID=1
+
+[TREGDM]
+DisplayName=TRegDM
+SysID=64
+
+[SYSMANIDM]
+DisplayName=SysManiDM
+SysID=4120
+
+[PARA_DM]
+DisplayName=ParaDM
+SysID=4120
+
+[GEODM]
+DisplayName=GeoDM
+SysID=4120
+
+[REFDM]
+DisplayName=RefDM
+SysID=4120
+
+[DOORDM]
+DisplayName=DoorDM
+SysID=4120
+
+[MOTIRISDM]
+DisplayName=MotIrisDM
+SysID=1024
+
+[JSPEEDDM]
+DisplayName=JSpeedDM
+SysID=4120
+
+[AXESWATCHDM]
+DisplayName=AxesWatchDM
+SysID=4120
+
+[LOADPOSDM]
+DisplayName=LoadPosDM
+SysID=4120
+
+[MANIPARADM]
+DisplayName=ManiParaDM
+SysID=4120
+
+[TURNTABLEDM]
+DisplayName=TurntableDM
+SysID=4120
+
+[CAMAXISDM]
+DisplayName=CamAxisDM
+SysID=4120
+
+[ACTAXISDM]
+DisplayName=ACTAxisDM
+SysID=4120
+
+[AIMMASKDM]
+DisplayName=AimMaskDM
+SysID=4120
+
+[RELJOYDM]
+DisplayName=RelJoyDM
+SysID=4120
diff --git a/ExternalLibraries/fx_user.ini b/ExternalLibraries/fx_user.ini
new file mode 100644
index 0000000..7b8197f
--- /dev/null
+++ b/ExternalLibraries/fx_user.ini
@@ -0,0 +1,4359 @@
+[FOCUSTABLE0]
+Description=FocusCharacteristic.i_t_table
+SysID=1
+
+[FOCUSTABLE1]
+Description=CondensorCharacteristic.i_t_table
+SysID=2
+
+[FOCUSTABLE2]
+Description=k_shut
+SysID=32
+
+[CENTERINGTABLE0]
+Description=CenteringCharacteristic[0].x_y_t_table
+SysID=1
+
+[CENTERINGTABLE1]
+Description=CenteringCharacteristic[1].x_y_t_table
+SysID=128
+
+[TUBECURRENTTABLE]
+Description=TubecurrentCharacteristic.i_t_table
+ElementCount=250
+SysID=512
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// VALUES
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLVALUE_0]
+Descr=PC_cmd.r32_TubeVoltage_kV
+DataType=4
+ValueType=1
+SysID=769
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=1000
+DisplayName=AccVoltageNom[kV]
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_1]
+Descr=PC_cmd.r32_TubeCurrent_uA
+DataType=4
+ValueType=1
+SysID=769
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=1200
+DisplayName=TubeCurrentNom[A]
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_2]
+Descr=ISOwatt
+DataType=4
+ValueType=1
+SysID=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=500
+DisplayName=IsowattPower[W]
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_3]
+Descr=Sys.errornum
+DataType=11
+ValueType=5
+SysID=513
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+DisplayName=SystemErrorNumber
+ReadSyncDef=0
+
+[CONTROLVALUE_4]
+Descr=Tube.kVmax
+DataType=4
+ValueType=3
+SysID=769
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=1000
+DisplayName=AccVoltageMax[kV]
+ReadSyncDef=0
+
+[CONTROLVALUE_5]
+Descr=PLC_stat.r32_TubeVoltage_kV_min
+DataType=4
+;ConnectID for FFCom
+ConID=2005
+ValueType=2
+SysID=769
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=1000
+DisplayName=AccVoltageMin[kV]
+ReadSyncDef=0
+
+[CONTROLVALUE_6]
+Descr=Tube.mAmax
+DataType=4
+ValueType=3
+SysID=769
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=1000
+DisplayName=TubeCurrentMax[A]
+ReadSyncDef=0
+
+[CONTROLVALUE_7]
+Descr=HSG.FILmax
+DataType=4
+ValueType=3
+SysID=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=1000
+DisplayName=FilCurrentMax[A]
+ReadSyncDef=0
+
+[CONTROLVALUE_8]
+Descr=HSG.errornum
+DataType=11
+ValueType=5
+SysID=513
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+DisplayName=HSGErrorNumber
+ReadSyncDef=0
+
+[CONTROLVALUE_9]
+Descr=TUBE_DM.kVmax
+DataType=4
+ValueType=1
+SysID=1
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=2000
+DisplayName=TubeDM_AccVoltMax[kV]
+ReadSyncDef=0
+
+[CONTROLVALUE_10]
+Descr=TUBE_DM.mAmax
+DataType=4
+ValueType=1
+SysID=1
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=2000
+DisplayName=TubeDM_TubeCurMax[A]
+ReadSyncDef=0
+
+[CONTROLVALUE_11]
+Descr=Mode.Target_Pmax
+DataType=4
+ValueType=3
+SysID=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=1000
+DisplayName=IsowattPowerMax[W]
+ReadSyncDef=0
+
+[CONTROLVALUE_12]
+Descr=Tube.errornum
+DataType=11
+ValueType=5
+SysID=513
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+DisplayName=TubeErrorNumber
+ReadSyncDef=0
+
+[CONTROLVALUE_13]
+Descr=PLC_stat.r32_TubeVoltage_kV_max
+DataType=4
+ValueType=3
+SysID=769
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=1000
+DisplayName=Warmup_AccVoltMax[kV]
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_14]
+Descr=PLC_stat.r32_TubeVoltage_kV_ist
+DataType=4
+ValueType=0
+SysID=769
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=500
+DisplayName=AccVoltageAct[kV]
+ReadSyncDef=0
+
+[CONTROLVALUE_15]
+Descr=PLC_stat.r32_TubeCurrent_uA_ist
+DataType=4
+ValueType=0
+SysID=769
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=500
+DisplayName=TubeCurrentAct[A]
+ReadSyncDef=0
+
+[CONTROLVALUE_16]
+Descr=Targetleistung
+DataType=4
+ValueType=0
+SysID=257
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=800
+DisplayName=TargetPowerAct[W]
+ReadSyncDef=0
+
+[CONTROLVALUE_17]
+Descr=FILsoll
+DataType=4
+ValueType=1
+SysID=1
+Active=1
+Notify=1
+Hysterese=0.1
+RefreshTime=1200
+DisplayName=FilCurrentNom[A]
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_18]
+Descr=HSG.FIList
+DataType=4
+ValueType=0
+SysID=1
+Active=1
+Notify=1
+Hysterese=0.4
+RefreshTime=1000
+DisplayName=FilCurrentAct[V]
+ReadSyncDef=0
+
+[CONTROLVALUE_19]
+Descr=PC_cmd.r32_focussoll
+DataType=4
+ValueType=1
+SysID=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=1200
+DisplayName=FocusCurrentNom[mA]
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_20]
+Descr=Focus.fmax
+DataType=4
+ValueType=3
+SysID=1
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=1000
+DisplayName=FocusCurrentMax[mA]
+ReadSyncDef=0
+
+[CONTROLVALUE_21]
+Descr=Condensor.csoll
+DataType=4
+ValueType=1
+SysID=2
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=1200
+DisplayName=CondensCurrentNom[mA]
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_22]
+Descr=Condensor.cmax
+DataType=4
+ValueType=3
+SysID=2
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=1000
+DisplayName=CondensCurrentMax[mA]
+ReadSyncDef=0
+
+[CONTROLVALUE_23]
+Descr=Shutter.isoll
+DataType=4
+ValueType=1
+SysID=32
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=1200
+DisplayName=ShutterCurrentNom[mA]
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_24]
+Descr=Shutter.imax
+DataType=4
+ValueType=3
+SysID=32
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=1000
+DisplayName=ShutterCurrentMax[mA]
+ReadSyncDef=0
+
+[CONTROLVALUE_25]
+Descr=Shutter_on
+DataType=6
+ValueType=1
+SysID=288
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=ShutterOn[bool]
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_26]
+Descr=Cent[0].xsoll
+DataType=4
+ValueType=1
+SysID=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=1200
+DisplayName=CentCurrentX1Nom[mA]
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_27]
+Descr=Cent[0].ysoll
+DataType=4
+ValueType=1
+SysID=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=1200
+DisplayName=CentCurrentY1Nom[mA]
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_28]
+Descr=Cent[0].xmax
+DataType=4
+ValueType=3
+SysID=1
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=1000
+DisplayName=CentCurrentX1Max[mA]
+ReadSyncDef=0
+
+[CONTROLVALUE_29]
+Descr=Cent[0].ymax
+DataType=4
+ValueType=3
+SysID=1
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=1000
+DisplayName=CentCurrentY1Max[mA]
+ReadSyncDef=0
+
+[CONTROLVALUE_30]
+Descr=Cent[1].xsoll
+DataType=4
+ValueType=1
+SysID=128
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=1200
+DisplayName=CentCurrentX2Nom[mA]
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_31]
+Descr=Cent[1].ysoll
+DataType=4
+ValueType=1
+SysID=128
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=1200
+DisplayName=CentCurrentY2Nom[mA]
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_32]
+Descr=Cent[1].xmax
+DataType=4
+ValueType=3
+SysID=128
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=1000
+DisplayName=CentCurrentX2Max[mA]
+ReadSyncDef=0
+
+[CONTROLVALUE_33]
+Descr=Cent[1].ymax
+DataType=4
+ValueType=3
+SysID=128
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=1000
+DisplayName=CentCurrentY2Max[mA]
+ReadSyncDef=0
+
+[CONTROLVALUE_34]
+Descr=Amp[1].ist
+DataType=4
+ValueType=0
+SysID=257
+Active=1
+Notify=1
+Hysterese=0.3
+RefreshTime=500
+DisplayName=TargetCurrentAct[A]
+ReadSyncDef=0
+
+[CONTROLVALUE_35]
+Descr=Amp[1].imax
+DataType=4
+ValueType=1
+SysID=1
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=1000
+DisplayName=TargetCurrentMax[A]
+ReadSyncDef=0
+
+[CONTROLVALUE_36]
+Descr=Ptarget_max
+DataType=4
+ValueType=1
+SysID=1
+Active=1
+Notify=1
+Hysterese=0.1
+RefreshTime=700
+DisplayName=TargetPowerMax[W]
+ReadSyncDef=0
+
+[CONTROLVALUE_37]
+Descr=Amp[2].ist
+DataType=4
+ValueType=0
+SysID=34
+Active=1
+Notify=1
+Hysterese=0.3
+RefreshTime=500
+DisplayName=CondensApertureCurAct[A]
+ReadSyncDef=0
+
+[CONTROLVALUE_38]
+Descr=Amp[2].imax
+DataType=4
+ValueType=1
+SysID=34
+Active=0
+Notify=0
+Hysterese=1.0
+RefreshTime=1000
+DisplayName=CondensApertureCurMax[A]
+ReadSyncDef=0
+
+[CONTROLVALUE_39]
+Descr=Amp[3].ist
+DataType=4
+ValueType=0
+;06.12.2002: Amp3-Variablen only for scanning!
+SysID=34
+Active=1
+Notify=1
+Hysterese=0.3
+RefreshTime=500
+DisplayName=ObjApertureCurAct[A]
+ReadSyncDef=0
+
+[CONTROLVALUE_40]
+Descr=Amp[3].imax
+DataType=4
+ValueType=1
+;06.12.2002: Amp3-Variablen only for scanning!
+SysID=34
+Active=0
+Notify=0
+Hysterese=1.0
+RefreshTime=1000
+DisplayName=ObjApertureCurMax[A]
+ReadSyncDef=0
+
+[CONTROLVALUE_41]
+Descr=Ui_Vac
+DataType=10
+ValueType=0
+SysID=1
+Active=1
+Notify=1
+Hysterese=0.2
+RefreshTime=500
+DisplayName=VacuumAct[V]
+ReadSyncDef=0
+
+[CONTROLVALUE_42]
+Descr=Vac.soll
+DataType=4
+ValueType=1
+SysID=1
+Active=1
+Notify=1
+Hysterese=0.2
+RefreshTime=500
+DisplayName=VacuumNom[V]
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_43]
+Descr=Vac.errornum
+DataType=11
+ValueType=5
+SysID=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1000
+DisplayName=VacuumErrorNumber
+ReadSyncDef=0
+
+[CONTROLVALUE_44]
+Descr=Ti_max
+DataType=10
+ValueType=3
+SysID=64
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1250
+DisplayName=TarCurMaxReg[A_as_short]
+ReadSyncDef=0
+
+[CONTROLVALUE_45]
+Descr=Tireg.i_min
+DataType=10
+ValueType=2
+SysID=64
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1250
+DisplayName=TarCurMinReg[A_as_short]
+ReadSyncDef=0
+
+[CONTROLVALUE_46]
+Descr=PLC_stat.bo_TXI
+; Nano-Fox sometimes DataType = 6 or 10
+DataType=6
+ValueType=0
+SysID=320
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=TargetCurRegEnabled[int]
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_47]
+Descr=Mode.current_mode_number
+DataType=11
+ValueType=1
+SysID=257
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=100
+DisplayName=Mode
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_48]
+Descr=Mode.last_mode_number
+DataType=11
+ValueType=1
+SysID=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=100
+DisplayName=ModeCount
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_49]
+Descr=Condensor.P_target_automatic
+DataType=6
+ValueType=1
+SysID=258
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1250
+DisplayName=SwitchAutoModeOn[int]
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_50]
+DisplayName=ActModeName
+Descr=Mode.current_mode_name
+SysID=1
+DataType=9
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=100
+DataLen=16
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_51]
+DisplayName=ActTargetName
+Descr=target.current_target_name
+SysID=1
+DataType=9
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=-1
+DataLen=41
+
+[CONTROLVALUE_52]
+DisplayName=ActTubeheadName
+Descr=Tubehead.current_tubehead_name
+SysID=1
+DataType=9
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=-1
+DataLen=16
+
+[CONTROLVALUE_53]
+Descr=PLC_cmd.reload_focusCharacteristic
+DataType=6
+ValueType=1
+SysID=1
+; Do NOT set Active to 0 here !
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=FocusTableChanged[bool]
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_54]
+Descr=PLC_cmd.reload_condensorCharacteristic
+DataType=6
+ValueType=1
+SysID=2
+; Do NOT set Active to 0 here !
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=CondensTableChanged[bool]
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_55]
+Descr=PLC_cmd.reload_centeringCharacteristic
+DataType=6
+ValueType=1
+SysID=1
+; Do NOT set Active to 0 here !
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=CentTableChanged[bool]
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_56]
+;wird ab FXEControl 3.0 nicht mehr verwendet
+Descr=HSG.FIL_auto_adjust
+DataType=6
+ValueType=1
+SysID=0
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=EnableAutomaticFilAdj[bool]
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_57]
+;wird ab FXEControl 3.0 nicht mehr verwendet
+Descr=Tube.cent_auto_adjust
+DataType=6
+ValueType=1
+SysID=0
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=EnableAutomaticACkV[bool]
+WriteSyncDef=0
+ReadSyncDef=0
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// ACHSEN-VARIABLEN
+;////////////////////////////////////////////////////////////////////////////////////////
+;// ACHSE1
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLVALUE_58]
+Descr=l_ptDpr.atAxisValues[0].dwAchsStatus
+DataType=3
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=StatuswordAxis1
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_59]
+Descr=l_ptDpr.atAxisValues[0].fIstPos
+DataType=4
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=ActualPositionAxis1
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_60]
+Descr=l_ptDpr.atAxisValues[0].fIstGeschw
+DataType=4
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=250
+DisplayName=ActualSpeedAxis1
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_61]
+Descr=l_ptDpr.atAxisValues[0].dwErrNummer
+DataType=3
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1250
+DisplayName=ErrorNumberAxis1
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_62]
+Descr=l_ptDpr.atAxisValues[0].uErrAnzahl
+DataType=11
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1250
+DisplayName=ErrorCountAxis1
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_63]
+Descr=g_tManiCtrlStartOld.tAxis[0].SollPos
+DataType=1
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+DisplayName=DemandPositionAxis1
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_64]
+DisplayName=MinPositionAxis1
+Descr=l_ptDpr.atAxisValueLimits[0].fNewNegSW_End
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_65]
+DisplayName=MaxPositionAxis1
+Descr=l_ptDpr.atAxisValueLimits[0].fNewPosSW_End
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_66]
+Descr=g_tManiCtrlStartOld.tAxis[0].SollGeschw
+DataType=4
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=500
+DisplayName=DemandSpeedAxis1
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_67]
+DisplayName=MinSpeedAxis1
+Descr=l_ptDpr.atAxisValueLimits[0].fMin_Geschw
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_68]
+DisplayName=MaxSpeedAxis1
+Descr=l_ptDpr.atAxisValueLimits[0].fMax_Geschw
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_69]
+Descr=g_tManiCtrlStart.tAxis[0].fSollBeschl
+DataType=4
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=500
+DisplayName=DemandAccelerationAxis1
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_70]
+DisplayName=MaxAccelerationAxis1
+Descr=l_ptDpr.atAxisValueLimits[0].fMax_Beschl
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_71]
+Descr=g_tManiCtrlManuellOld.tAxis[0].Override
+DataType=10
+ValueType=1
+;only TIGER (and Cougar15?)
+SysID=4112
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+DisplayName=SpeedFactorAxis1
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_72]
+DisplayName=StepsPerTurnAxis1
+Descr=l_ptDpr.atAxisValues[0].tAxisParameter.fMotSchritte
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.1
+RefreshTime=2000
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_73]
+DisplayName=DistPerTurnAxis1
+Descr=l_ptDpr.atAxisValues[0].tAxisParameter.fEinheiten
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.1
+RefreshTime=2000
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_74]
+Descr=l_ptDpr.atAxisValues[0].tAxisParameter.szAchsname
+SysID=4120
+DataType=9
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+DataLen=16
+DisplayName=NameAxis1
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_75]
+Descr=g_tManiParameters.tAxisDescription[0].szAxesScale
+SysID=4120
+DataType=9
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+DataLen=16
+DisplayName=UnitAxis1
+;Nano-Fox:
+TaskName=
+ReadSyncDef=0
+
+[CONTROLVALUE_76]
+Descr=l_ptDpr.atAxisValues[0].bJoystickEnable
+DataType=6
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=JoystickEnableAxis1
+WriteSyncDef=0
+ReadSyncDef=0
+TaskName=pp_mast
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// ACHSE2
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLVALUE_77]
+Descr=l_ptDpr.atAxisValues[1].dwAchsStatus
+DataType=3
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=StatuswordAxis2
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_78]
+Descr=l_ptDpr.atAxisValues[1].fIstPos
+DataType=4
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=ActualPositionAxis2
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_79]
+Descr=l_ptDpr.atAxisValues[1].fIstGeschw
+DataType=4
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=250
+DisplayName=ActualSpeedAxis2
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_80]
+Descr=l_ptDpr.atAxisValues[1].dwErrNummer
+DataType=3
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1250
+DisplayName=ErrorNumberAxis2
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_81]
+Descr=l_ptDpr.atAxisValues[1].uErrAnzahl
+DataType=11
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1250
+DisplayName=ErrorCountAxis2
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_82]
+Descr=g_tManiCtrlStartOld.tAxis[1].SollPos
+DataType=1
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+DisplayName=DemandPositionAxis2
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_83]
+DisplayName=MinPositionAxis2
+Descr=l_ptDpr.atAxisValueLimits[1].fNewNegSW_End
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_84]
+DisplayName=MaxPositionAxis2
+Descr=l_ptDpr.atAxisValueLimits[1].fNewPosSW_End
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_85]
+Descr=g_tManiCtrlStartOld.tAxis[1].SollGeschw
+DataType=4
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=500
+DisplayName=DemandSpeedAxis2
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_86]
+DisplayName=MinSpeedAxis2
+Descr=l_ptDpr.atAxisValueLimits[1].fMin_Geschw
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_87]
+DisplayName=MaxSpeedAxis2
+Descr=l_ptDpr.atAxisValueLimits[1].fMax_Geschw
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_88]
+Descr=g_tManiCtrlStart.tAxis[1].fSollBeschl
+DataType=4
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=500
+DisplayName=DemandAccelerationAxis2
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_89]
+DisplayName=MaxAccelerationAxis2
+Descr=l_ptDpr.atAxisValueLimits[1].fMax_Beschl
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_90]
+Descr=g_tManiCtrlManuellOld.tAxis[1].Override
+DataType=10
+ValueType=1
+;only TIGER (and Cougar15?)
+SysID=4112
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+DisplayName=SpeedFactorAxis2
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_91]
+DisplayName=StepsPerTurnAxis2
+Descr=l_ptDpr.atAxisValues[1].tAxisParameter.fMotSchritte
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.1
+RefreshTime=2000
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_92]
+DisplayName=DistPerTurnAxis2
+Descr=l_ptDpr.atAxisValues[1].tAxisParameter.fEinheiten
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.1
+RefreshTime=2000
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_93]
+Descr=l_ptDpr.atAxisValues[1].tAxisParameter.szAchsname
+SysID=4120
+DataType=9
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+DataLen=16
+DisplayName=NameAxis2
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_94]
+Descr=g_tManiParameters.tAxisDescription[1].szAxesScale
+SysID=4120
+DataType=9
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+DataLen=16
+DisplayName=UnitAxis2
+;Nano-Fox:
+TaskName=
+ReadSyncDef=0
+
+[CONTROLVALUE_95]
+Descr=l_ptDpr.atAxisValues[1].bJoystickEnable
+DataType=6
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=JoystickEnableAxis2
+WriteSyncDef=0
+ReadSyncDef=0
+TaskName=pp_mast
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// ACHSE3
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLVALUE_96]
+Descr=l_ptDpr.atAxisValues[2].dwAchsStatus
+DataType=3
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=StatuswordAxis3
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_97]
+Descr=l_ptDpr.atAxisValues[2].fIstPos
+DataType=4
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=ActualPositionAxis3
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_98]
+Descr=l_ptDpr.atAxisValues[2].fIstGeschw
+DataType=4
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=250
+DisplayName=ActualSpeedAxis3
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_99]
+Descr=l_ptDpr.atAxisValues[2].dwErrNummer
+DataType=3
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1250
+DisplayName=ErrorNumberAxis3
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_100]
+Descr=l_ptDpr.atAxisValues[2].uErrAnzahl
+DataType=11
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1250
+DisplayName=ErrorCountAxis3
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_101]
+Descr=g_tManiCtrlStartOld.tAxis[2].SollPos
+DataType=1
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+DisplayName=DemandPositionAxis3
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_102]
+DisplayName=MinPositionAxis3
+Descr=l_ptDpr.atAxisValueLimits[2].fNewNegSW_End
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_103]
+DisplayName=MaxPositionAxis3
+Descr=l_ptDpr.atAxisValueLimits[2].fNewPosSW_End
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_104]
+Descr=g_tManiCtrlStartOld.tAxis[2].SollGeschw
+DataType=4
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=500
+DisplayName=DemandSpeedAxis3
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_105]
+DisplayName=MinSpeedAxis3
+Descr=l_ptDpr.atAxisValueLimits[2].fMin_Geschw
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_106]
+DisplayName=MaxSpeedAxis3
+Descr=l_ptDpr.atAxisValueLimits[2].fMax_Geschw
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_107]
+Descr=g_tManiCtrlStart.tAxis[2].fSollBeschl
+DataType=4
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=500
+DisplayName=DemandAccelerationAxis3
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_108]
+DisplayName=MaxAccelerationAxis3
+Descr=l_ptDpr.atAxisValueLimits[2].fMax_Beschl
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_109]
+Descr=g_tManiCtrlManuellOld.tAxis[2].Override
+DataType=10
+ValueType=1
+;only TIGER (and Cougar15?)
+SysID=4112
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+DisplayName=SpeedFactorAxis3
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_110]
+DisplayName=StepsPerTurnAxis3
+Descr=l_ptDpr.atAxisValues[2].tAxisParameter.fMotSchritte
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.1
+RefreshTime=2000
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_111]
+DisplayName=DistPerTurnAxis3
+Descr=l_ptDpr.atAxisValues[2].tAxisParameter.fEinheiten
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.1
+RefreshTime=2000
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_112]
+Descr=l_ptDpr.atAxisValues[2].tAxisParameter.szAchsname
+SysID=4120
+DataType=9
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+DataLen=16
+DisplayName=NameAxis3
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_113]
+Descr=g_tManiParameters.tAxisDescription[2].szAxesScale
+SysID=4120
+DataType=9
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+DataLen=16
+DisplayName=UnitAxis3
+;Nano-Fox:
+TaskName=
+ReadSyncDef=0
+
+[CONTROLVALUE_114]
+Descr=l_ptDpr.atAxisValues[2].bJoystickEnable
+DataType=6
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=JoystickEnableAxis3
+WriteSyncDef=0
+ReadSyncDef=0
+TaskName=pp_mast
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// ACHSE4
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLVALUE_115]
+Descr=l_ptDpr.atAxisValues[3].dwAchsStatus
+DataType=3
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=StatuswordAxis4
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_116]
+Descr=l_ptDpr.atAxisValues[3].fIstPos
+DataType=4
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=ActualPositionAxis4
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_117]
+Descr=l_ptDpr.atAxisValues[3].fIstGeschw
+DataType=4
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=250
+DisplayName=ActualSpeedAxis4
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_118]
+Descr=l_ptDpr.atAxisValues[3].dwErrNummer
+DataType=3
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1250
+DisplayName=ErrorNumberAxis4
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_119]
+Descr=l_ptDpr.atAxisValues[3].uErrAnzahl
+DataType=11
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1250
+DisplayName=ErrorCountAxis4
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_120]
+Descr=g_tManiCtrlStartOld.tAxis[3].SollPos
+DataType=1
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+DisplayName=DemandPositionAxis4
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_121]
+DisplayName=MinPositionAxis4
+Descr=l_ptDpr.atAxisValueLimits[3].fNewNegSW_End
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_122]
+DisplayName=MaxPositionAxis4
+Descr=l_ptDpr.atAxisValueLimits[3].fNewPosSW_End
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_123]
+Descr=g_tManiCtrlStartOld.tAxis[3].SollGeschw
+DataType=4
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=500
+DisplayName=DemandSpeedAxis4
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_124]
+DisplayName=MinSpeedAxis4
+Descr=l_ptDpr.atAxisValueLimits[3].fMin_Geschw
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_125]
+DisplayName=MaxSpeedAxis4
+Descr=l_ptDpr.atAxisValueLimits[3].fMax_Geschw
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_126]
+Descr=g_tManiCtrlStart.tAxis[3].fSollBeschl
+DataType=4
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=500
+DisplayName=DemandAccelerationAxis4
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_127]
+DisplayName=MaxAccelerationAxis4
+Descr=l_ptDpr.atAxisValueLimits[3].fMax_Beschl
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_128]
+Descr=g_tManiCtrlManuellOld.tAxis[3].Override
+DataType=10
+ValueType=1
+;only TIGER (and Cougar15?)
+SysID=4112
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+DisplayName=SpeedFactorAxis4
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_129]
+DisplayName=StepsPerTurnAxis4
+Descr=l_ptDpr.atAxisValues[3].tAxisParameter.fMotSchritte
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.1
+RefreshTime=2000
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_130]
+DisplayName=DistPerTurnAxis4
+Descr=l_ptDpr.atAxisValues[3].tAxisParameter.fEinheiten
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.1
+RefreshTime=2000
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_131]
+Descr=l_ptDpr.atAxisValues[3].tAxisParameter.szAchsname
+SysID=4120
+DataType=9
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+DataLen=16
+DisplayName=NameAxis4
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_132]
+Descr=g_tManiParameters.tAxisDescription[3].szAxesScale
+SysID=4120
+DataType=9
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+DataLen=16
+DisplayName=UnitAxis4
+;Nano-Fox:
+TaskName=
+ReadSyncDef=0
+
+[CONTROLVALUE_133]
+Descr=l_ptDpr.atAxisValues[3].bJoystickEnable
+DataType=6
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=JoystickEnableAxis4
+WriteSyncDef=0
+ReadSyncDef=0
+TaskName=pp_mast
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// ACHSE5
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLVALUE_134]
+Descr=l_ptDpr.atAxisValues[4].dwAchsStatus
+DataType=3
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=StatuswordAxis5
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_135]
+Descr=l_ptDpr.atAxisValues[4].fIstPos
+DataType=4
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=ActualPositionAxis5
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_136]
+Descr=l_ptDpr.atAxisValues[4].fIstGeschw
+DataType=4
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=250
+DisplayName=ActualSpeedAxis5
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_137]
+Descr=l_ptDpr.atAxisValues[4].dwErrNummer
+DataType=3
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1250
+DisplayName=ErrorNumberAxis5
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_138]
+Descr=l_ptDpr.atAxisValues[4].uErrAnzahl
+DataType=11
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1250
+DisplayName=ErrorCountAxis5
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_139]
+Descr=g_tManiCtrlStartOld.tAxis[4].SollPos
+DataType=1
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+DisplayName=DemandPositionAxis5
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_140]
+DisplayName=MinPositionAxis5
+Descr=l_ptDpr.atAxisValueLimits[4].fNewNegSW_End
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_141]
+DisplayName=MaxPositionAxis5
+Descr=l_ptDpr.atAxisValueLimits[4].fNewPosSW_End
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_142]
+Descr=g_tManiCtrlStartOld.tAxis[4].SollGeschw
+DataType=4
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=500
+DisplayName=DemandSpeedAxis5
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_143]
+DisplayName=MinSpeedAxis5
+Descr=l_ptDpr.atAxisValueLimits[4].fMin_Geschw
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_144]
+DisplayName=MaxSpeedAxis5
+Descr=l_ptDpr.atAxisValueLimits[4].fMax_Geschw
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_145]
+Descr=g_tManiCtrlStart.tAxis[4].fSollBeschl
+DataType=4
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=500
+DisplayName=DemandAccelerationAxis5
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_146]
+DisplayName=MaxAccelerationAxis5
+Descr=l_ptDpr.atAxisValueLimits[4].fMax_Beschl
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_147]
+Descr=g_tManiCtrlManuellOld.tAxis[4].Override
+DataType=10
+ValueType=1
+;only TIGER (and Cougar15?)
+SysID=4112
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+DisplayName=SpeedFactorAxis5
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_148]
+DisplayName=StepsPerTurnAxis5
+Descr=l_ptDpr.atAxisValues[4].tAxisParameter.fMotSchritte
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.1
+RefreshTime=2000
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_149]
+DisplayName=DistPerTurnAxis5
+Descr=l_ptDpr.atAxisValues[4].tAxisParameter.fEinheiten
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.1
+RefreshTime=2000
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_150]
+Descr=l_ptDpr.atAxisValues[4].tAxisParameter.szAchsname
+SysID=4120
+DataType=9
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+DataLen=16
+DisplayName=NameAxis5
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_151]
+Descr=g_tManiParameters.tAxisDescription[4].szAxesScale
+SysID=4120
+DataType=9
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+DataLen=16
+DisplayName=UnitAxis5
+;Nano-Fox:
+TaskName=
+ReadSyncDef=0
+
+[CONTROLVALUE_152]
+Descr=l_ptDpr.atAxisValues[4].bJoystickEnable
+DataType=6
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=JoystickEnableAxis5
+WriteSyncDef=0
+ReadSyncDef=0
+TaskName=pp_mast
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// ACHSE6
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLVALUE_153]
+Descr=l_ptDpr.atAxisValues[5].dwAchsStatus
+DataType=3
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=StatuswordAxis6
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_154]
+Descr=l_ptDpr.atAxisValues[5].fIstPos
+DataType=4
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=ActualPositionAxis6
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_155]
+Descr=l_ptDpr.atAxisValues[5].fIstGeschw
+DataType=4
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=250
+DisplayName=ActualSpeedAxis6
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_156]
+Descr=l_ptDpr.atAxisValues[5].dwErrNummer
+DataType=3
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1250
+DisplayName=ErrorNumberAxis6
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_157]
+Descr=l_ptDpr.atAxisValues[5].uErrAnzahl
+DataType=11
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1250
+DisplayName=ErrorCountAxis6
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_158]
+Descr=g_tManiCtrlStartOld.tAxis[5].SollPos
+DataType=1
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+DisplayName=DemandPositionAxis6
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_159]
+DisplayName=MinPositionAxis6
+Descr=l_ptDpr.atAxisValueLimits[5].fNewNegSW_End
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_160]
+DisplayName=MaxPositionAxis6
+Descr=l_ptDpr.atAxisValueLimits[5].fNewPosSW_End
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_161]
+Descr=g_tManiCtrlStartOld.tAxis[5].SollGeschw
+DataType=4
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=500
+DisplayName=DemandSpeedAxis6
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_162]
+DisplayName=MinSpeedAxis6
+Descr=l_ptDpr.atAxisValueLimits[5].fMin_Geschw
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_163]
+DisplayName=MaxSpeedAxis6
+Descr=l_ptDpr.atAxisValueLimits[5].fMax_Geschw
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_164]
+Descr=g_tManiCtrlStart.tAxis[5].fSollBeschl
+DataType=4
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=500
+DisplayName=DemandAccelerationAxis6
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_165]
+DisplayName=MaxAccelerationAxis6
+Descr=l_ptDpr.atAxisValueLimits[5].fMax_Beschl
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_166]
+Descr=g_tManiCtrlManuellOld.tAxis[5].Override
+DataType=10
+ValueType=1
+;only TIGER (and Cougar15?)
+SysID=4112
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+DisplayName=SpeedFactorAxis6
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_167]
+DisplayName=StepsPerTurnAxis6
+Descr=l_ptDpr.atAxisValues[5].tAxisParameter.fMotSchritte
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.1
+RefreshTime=2000
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_168]
+DisplayName=DistPerTurnAxis6
+Descr=l_ptDpr.atAxisValues[5].tAxisParameter.fEinheiten
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.1
+RefreshTime=2000
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_169]
+Descr=l_ptDpr.atAxisValues[5].tAxisParameter.szAchsname
+SysID=4120
+DataType=9
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+DataLen=16
+DisplayName=NameAxis6
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_170]
+Descr=g_tManiParameters.tAxisDescription[5].szAxesScale
+SysID=4120
+DataType=9
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+DataLen=16
+DisplayName=UnitAxis6
+;Nano-Fox:
+TaskName=
+ReadSyncDef=0
+
+[CONTROLVALUE_171]
+Descr=l_ptDpr.atAxisValues[5].bJoystickEnable
+DataType=6
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=JoystickEnableAxis6
+WriteSyncDef=0
+ReadSyncDef=0
+TaskName=pp_mast
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// ACHSE7
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLVALUE_172]
+Descr=l_ptDpr.atAxisValues[6].dwAchsStatus
+DataType=3
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=StatuswordAxis7
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_173]
+Descr=l_ptDpr.atAxisValues[6].fIstPos
+DataType=4
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=ActualPositionAxis7
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_174]
+Descr=l_ptDpr.atAxisValues[6].fIstGeschw
+DataType=4
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=250
+DisplayName=ActualSpeedAxis7
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_175]
+Descr=l_ptDpr.atAxisValues[6].dwErrNummer
+DataType=3
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1250
+DisplayName=ErrorNumberAxis7
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_176]
+Descr=l_ptDpr.atAxisValues[6].uErrAnzahl
+DataType=11
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1250
+DisplayName=ErrorCountAxis7
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_177]
+Descr=g_tManiCtrlStartOld.tAxis[6].SollPos
+DataType=1
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+DisplayName=DemandPositionAxis7
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_178]
+DisplayName=MinPositionAxis7
+Descr=l_ptDpr.atAxisValueLimits[6].fNewNegSW_End
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_179]
+DisplayName=MaxPositionAxis7
+Descr=l_ptDpr.atAxisValueLimits[6].fNewPosSW_End
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_180]
+Descr=g_tManiCtrlStartOld.tAxis[6].SollGeschw
+DataType=4
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=500
+DisplayName=DemandSpeedAxis7
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_181]
+DisplayName=MinSpeedAxis7
+Descr=l_ptDpr.atAxisValueLimits[6].fMin_Geschw
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_182]
+DisplayName=MaxSpeedAxis7
+Descr=l_ptDpr.atAxisValueLimits[6].fMax_Geschw
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_183]
+Descr=g_tManiCtrlStart.tAxis[6].fSollBeschl
+DataType=4
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=500
+DisplayName=DemandAccelerationAxis7
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_184]
+DisplayName=MaxAccelerationAxis7
+Descr=l_ptDpr.atAxisValueLimits[6].fMax_Beschl
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_185]
+Descr=g_tManiCtrlManuellOld.tAxis[6].Override
+DataType=10
+ValueType=1
+;only TIGER (and Cougar15?)
+SysID=4112
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+DisplayName=SpeedFactorAxis7
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_186]
+DisplayName=StepsPerTurnAxis7
+Descr=l_ptDpr.atAxisValues[6].tAxisParameter.fMotSchritte
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.1
+RefreshTime=2000
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_187]
+DisplayName=DistPerTurnAxis7
+Descr=l_ptDpr.atAxisValues[6].tAxisParameter.fEinheiten
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.1
+RefreshTime=2000
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_188]
+Descr=l_ptDpr.atAxisValues[6].tAxisParameter.szAchsname
+SysID=4120
+DataType=9
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+DataLen=16
+DisplayName=NameAxis7
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_189]
+Descr=g_tManiParameters.tAxisDescription[6].szAxesScale
+SysID=4120
+DataType=9
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+DataLen=16
+DisplayName=UnitAxis7
+;Nano-Fox:
+TaskName=
+ReadSyncDef=0
+
+[CONTROLVALUE_190]
+Descr=l_ptDpr.atAxisValues[6].bJoystickEnable
+DataType=6
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=JoystickEnableAxis7
+WriteSyncDef=0
+ReadSyncDef=0
+TaskName=pp_mast
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// ACHSE8
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLVALUE_191]
+Descr=l_ptDpr.atAxisValues[7].dwAchsStatus
+DataType=3
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=StatuswordAxis8
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_192]
+Descr=l_ptDpr.atAxisValues[7].fIstPos
+DataType=4
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=ActualPositionAxis8
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_193]
+Descr=l_ptDpr.atAxisValues[7].fIstGeschw
+DataType=4
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=250
+DisplayName=ActualSpeedAxis8
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_194]
+Descr=l_ptDpr.atAxisValues[7].dwErrNummer
+DataType=3
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1250
+DisplayName=ErrorNumberAxis8
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_195]
+Descr=l_ptDpr.atAxisValues[7].uErrAnzahl
+DataType=11
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1250
+DisplayName=ErrorCountAxis8
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_196]
+Descr=g_tManiCtrlStartOld.tAxis[7].SollPos
+DataType=1
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+DisplayName=DemandPositionAxis8
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_197]
+DisplayName=MinPositionAxis8
+Descr=l_ptDpr.atAxisValueLimits[7].fNewNegSW_End
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_198]
+DisplayName=MaxPositionAxis8
+Descr=l_ptDpr.atAxisValueLimits[7].fNewPosSW_End
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_199]
+Descr=g_tManiCtrlStartOld.tAxis[7].SollGeschw
+DataType=4
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=500
+DisplayName=DemandSpeedAxis8
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_200]
+DisplayName=MinSpeedAxis8
+Descr=l_ptDpr.atAxisValueLimits[7].fMin_Geschw
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_201]
+DisplayName=MaxSpeedAxis8
+Descr=l_ptDpr.atAxisValueLimits[7].fMax_Geschw
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_202]
+Descr=g_tManiCtrlStart.tAxis[7].fSollBeschl
+DataType=4
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=500
+DisplayName=DemandAccelerationAxis8
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_203]
+DisplayName=MaxAccelerationAxis8
+Descr=l_ptDpr.atAxisValueLimits[7].fMax_Beschl
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_204]
+Descr=g_tManiCtrlManuellOld.tAxis[7].Override
+DataType=10
+ValueType=1
+;only TIGER (and Cougar15?)
+SysID=4112
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+DisplayName=SpeedFactorAxis8
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_205]
+DisplayName=StepsPerTurnAxis8
+Descr=l_ptDpr.atAxisValues[7].tAxisParameter.fMotSchritte
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.1
+RefreshTime=2000
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_206]
+DisplayName=DistPerTurnAxis8
+Descr=l_ptDpr.atAxisValues[7].tAxisParameter.fEinheiten
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.1
+RefreshTime=2000
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_207]
+Descr=l_ptDpr.atAxisValues[7].tAxisParameter.szAchsname
+SysID=4120
+DataType=9
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+DataLen=16
+DisplayName=NameAxis8
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_208]
+Descr=g_tManiParameters.tAxisDescription[7].szAxesScale
+SysID=4120
+DataType=9
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+DataLen=16
+DisplayName=UnitAxis8
+;Nano-Fox:
+TaskName=
+ReadSyncDef=0
+
+[CONTROLVALUE_209]
+Descr=l_ptDpr.atAxisValues[7].bJoystickEnable
+DataType=6
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=JoystickEnableAxis8
+WriteSyncDef=0
+ReadSyncDef=0
+TaskName=pp_mast
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// ACHSE9
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLVALUE_210]
+Descr=l_ptDpr.atAxisValues[8].dwAchsStatus
+DataType=3
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=StatuswordAxis9
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_211]
+Descr=l_ptDpr.atAxisValues[8].fIstPos
+DataType=4
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=ActualPositionAxis9
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_212]
+Descr=l_ptDpr.atAxisValues[8].fIstGeschw
+DataType=4
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=250
+DisplayName=ActualSpeedAxis9
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_213]
+Descr=l_ptDpr.atAxisValues[8].dwErrNummer
+DataType=3
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1250
+DisplayName=ErrorNumberAxis9
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_214]
+Descr=l_ptDpr.atAxisValues[8].uErrAnzahl
+DataType=11
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1250
+DisplayName=ErrorCountAxis9
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_215]
+Descr=g_tManiCtrlStartOld.tAxis[8].SollPos
+DataType=1
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+DisplayName=DemandPositionAxis9
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_216]
+DisplayName=MinPositionAxis9
+Descr=l_ptDpr.atAxisValueLimits[8].fNewNegSW_End
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_217]
+DisplayName=MaxPositionAxis9
+Descr=l_ptDpr.atAxisValueLimits[8].fNewPosSW_End
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_218]
+Descr=g_tManiCtrlStartOld.tAxis[8].SollGeschw
+DataType=4
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=500
+DisplayName=DemandSpeedAxis9
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_219]
+DisplayName=MinSpeedAxis9
+Descr=l_ptDpr.atAxisValueLimits[8].fMin_Geschw
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_220]
+DisplayName=MaxSpeedAxis9
+Descr=l_ptDpr.atAxisValueLimits[8].fMax_Geschw
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_221]
+Descr=g_tManiCtrlStart.tAxis[8].fSollBeschl
+DataType=4
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=500
+DisplayName=DemandAccelerationAxis9
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_222]
+DisplayName=MaxAccelerationAxis9
+Descr=l_ptDpr.atAxisValueLimits[8].fMax_Beschl
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_223]
+Descr=g_tManiCtrlManuellOld.tAxis[8].Override
+DataType=10
+ValueType=1
+;only TIGER (and Cougar15?)
+SysID=4112
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+DisplayName=SpeedFactorAxis9
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_224]
+DisplayName=StepsPerTurnAxis9
+Descr=l_ptDpr.atAxisValues[8].tAxisParameter.fMotSchritte
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.1
+RefreshTime=2000
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_225]
+DisplayName=DistPerTurnAxis9
+Descr=l_ptDpr.atAxisValues[8].tAxisParameter.fEinheiten
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.1
+RefreshTime=2000
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_226]
+Descr=l_ptDpr.atAxisValues[8].tAxisParameter.szAchsname
+SysID=4120
+DataType=9
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+DataLen=16
+DisplayName=NameAxis9
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_227]
+Descr=g_tManiParameters.tAxisDescription[8].szAxesScale
+SysID=4120
+DataType=9
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+DataLen=16
+DisplayName=UnitAxis9
+;Nano-Fox:
+TaskName=
+ReadSyncDef=0
+
+[CONTROLVALUE_228]
+Descr=l_ptDpr.atAxisValues[8].bJoystickEnable
+DataType=6
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=JoystickEnableAxis9
+WriteSyncDef=0
+ReadSyncDef=0
+TaskName=pp_mast
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// ACHSE10
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLVALUE_229]
+Descr=l_ptDpr.atAxisValues[9].dwAchsStatus
+DataType=3
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=StatuswordAxis10
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_230]
+Descr=l_ptDpr.atAxisValues[9].fIstPos
+DataType=4
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=ActualPositionAxis10
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_231]
+Descr=l_ptDpr.atAxisValues[9].fIstGeschw
+DataType=4
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=250
+DisplayName=ActualSpeedAxis10
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_232]
+Descr=l_ptDpr.atAxisValues[9].dwErrNummer
+DataType=3
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1250
+DisplayName=ErrorNumberAxis10
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_233]
+Descr=l_ptDpr.atAxisValues[9].uErrAnzahl
+DataType=11
+ValueType=0
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1250
+DisplayName=ErrorCountAxis10
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_234]
+Descr=g_tManiCtrlStartOld.tAxis[9].SollPos
+DataType=1
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+DisplayName=DemandPositionAxis10
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_235]
+DisplayName=MinPositionAxis10
+Descr=l_ptDpr.atAxisValueLimits[9].fNewNegSW_End
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_236]
+DisplayName=MaxPositionAxis10
+Descr=l_ptDpr.atAxisValueLimits[9].fNewPosSW_End
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_237]
+Descr=g_tManiCtrlStartOld.tAxis[9].SollGeschw
+DataType=4
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=500
+DisplayName=DemandSpeedAxis10
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_238]
+DisplayName=MinSpeedAxis10
+Descr=l_ptDpr.atAxisValueLimits[9].fMin_Geschw
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_239]
+DisplayName=MaxSpeedAxis10
+Descr=l_ptDpr.atAxisValueLimits[9].fMax_Geschw
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_240]
+Descr=g_tManiCtrlStart.tAxis[9].fSollBeschl
+DataType=4
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=1.0
+RefreshTime=500
+DisplayName=DemandAccelerationAxis10
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_241]
+DisplayName=MaxAccelerationAxis10
+Descr=l_ptDpr.atAxisValueLimits[9].fMax_Beschl
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.5
+RefreshTime=2000
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_242]
+Descr=g_tManiCtrlManuellOld.tAxis[9].Override
+DataType=10
+ValueType=1
+;only TIGER (and Cougar15?)
+SysID=4112
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=500
+DisplayName=SpeedFactorAxis10
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_243]
+DisplayName=StepsPerTurnAxis10
+Descr=l_ptDpr.atAxisValues[9].tAxisParameter.fMotSchritte
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.1
+RefreshTime=2000
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_244]
+DisplayName=DistPerTurnAxis10
+Descr=l_ptDpr.atAxisValues[9].tAxisParameter.fEinheiten
+SysID=4120
+DataType=4
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0.1
+RefreshTime=2000
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_245]
+Descr=l_ptDpr.atAxisValues[9].tAxisParameter.szAchsname
+SysID=4120
+DataType=9
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+DataLen=16
+DisplayName=NameAxis10
+TaskName=pp_mast
+ReadSyncDef=0
+
+[CONTROLVALUE_246]
+Descr=g_tManiParameters.tAxisDescription[9].szAxesScale
+SysID=4120
+DataType=9
+ValueType=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=2000
+DataLen=16
+DisplayName=UnitAxis10
+;Nano-Fox:
+TaskName=
+ReadSyncDef=0
+
+[CONTROLVALUE_247]
+Descr=l_ptDpr.atAxisValues[9].bJoystickEnable
+DataType=6
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=JoystickEnableAxis10
+WriteSyncDef=0
+ReadSyncDef=0
+TaskName=pp_mast
+
+[CONTROLVALUE_248]
+DisplayName=AxisCountAll
+Descr=g_tManiParameters.uMaxAxes
+SysID=4120
+DataType=11
+ValueType=0
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=1250
+ReadSyncDef=0
+
+[CONTROLVALUE_249]
+Descr=PLC_stat.bo_flash_detected
+DataType=6
+ValueType=1
+SysID=1
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=250
+DisplayName=Breakdown[bool]
+ReadSyncDef=0
+
+[CONTROLVALUE_250]
+Descr=sys_status
+DataType=3
+ValueType=1
+SysID=769
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=100
+DisplayName=XRayStatus[BitArray]
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_251]
+Descr=g_dwManipulatorStatus
+DataType=3
+ValueType=1
+SysID=4120
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=20
+DisplayName=ManipulatorStatus[BitArray]
+WriteSyncDef=0
+ReadSyncDef=0
+
+[CONTROLVALUE_252]
+Descr=filter_nr
+DataType=10
+ValueType=1
+;SysID=4376
+; currently not implemented on Mani-RPS (relevant for Aim und collision area)
+SysID=0
+Active=1
+Notify=1
+Hysterese=0
+RefreshTime=100
+DisplayName=TubeFilterNumber
+WriteSyncDef=0
+ReadSyncDef=0
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// STATI
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLSTATUS_0]
+Descr=PLC_stat.bo_Xray_on
+SysID=513
+Active=1
+Notify=1
+RefreshTime=150
+DisplayName=IsXRayOn
+
+[CONTROLSTATUS_1]
+Descr=PLC_stat.bo_startup_is_running
+SysID=1
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=IsStartingUp
+
+[CONTROLSTATUS_2]
+Descr=PLC_stat.bo_warmup_is_running
+SysID=513
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=IsWarmingUp
+
+[CONTROLSTATUS_3]
+Descr=warmup
+SysID=513
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=IsWarmupDone
+
+[CONTROLSTATUS_4]
+Descr=PLC_stat.bo_filamentadjust_is_running
+SysID=1
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=IsFilamentAdjusting
+
+[CONTROLSTATUS_5]
+Descr=PLC_stat.bo_autocenter_kV_is_running
+SysID=1
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=IsAutocenteringKV
+
+[CONTROLSTATUS_6]
+Descr=PLC_stat.bo_autocenter_all_is_running
+SysID=1
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=IsAutocenteringAll
+
+[CONTROLSTATUS_7]
+Descr=PLC_stat.bo_conditioning_is_running
+SysID=1
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=IsConditioning
+
+[CONTROLSTATUS_8]
+Descr=PLC_stat.bo_wobbeln_is_active
+SysID=1
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=IsSweepModeOn
+
+[CONTROLSTATUS_9]
+Descr=PLC_stat.bo_interlock
+SysID=769
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=IsInterlockOn
+
+[CONTROLSTATUS_10]
+Descr=Tube.defoc
+SysID=257
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=IsMicrofocusModeOff
+
+[CONTROLSTATUS_11]
+Descr=PLC_stat.bo_Isowatt
+SysID=1
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=IsIsowattOn
+
+[CONTROLSTATUS_12]
+Descr=HSG.ok
+SysID=513
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=IsHSGOk
+
+[CONTROLSTATUS_13]
+Descr=kVok
+SysID=1
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=IsAccVoltageOk
+
+[CONTROLSTATUS_14]
+Descr=mAok
+SysID=1
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=IsTubeCurrentOk
+
+[CONTROLSTATUS_15]
+Descr=Vac.ok
+SysID=1
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=IsVacuumOk
+
+[CONTROLSTATUS_16]
+Descr=Target_reg
+SysID=320
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=IsTargetRegulationOn
+
+[CONTROLSTATUS_17]
+;wird ab FXEControl 3.0 nicht mehr verwendet
+Descr=want_FIL_adjust
+SysID=0
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=AutomaticFilAdj
+
+[CONTROLSTATUS_18]
+;wird ab FXEControl 3.0 nicht mehr verwendet
+Descr=want_cent_adjust
+SysID=0
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=AutomaticACkV
+
+[CONTROLSTATUS_19]
+Descr=PLC_stat.bo_offsetadjust_is_running
+SysID=1
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=AmpOffsetAdjust
+
+[CONTROLSTATUS_20]
+Descr=TP_HSGwarmup.Q
+SysID=768
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=GeneratorWarmup
+TaskName=system
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// ACHSEN-ZUSTNDE
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLSTATUS_21]
+Descr=Door_open
+SysID=4120
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=IsDoorOpen
+
+[CONTROLSTATUS_22]
+Descr=Door_closed
+SysID=4120
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=IsDoorClosed
+
+[CONTROLSTATUS_23]
+; 09.08.05: ab RPS V. 2.6 gibt es keine Variable namens "Beladepos" mehr. Im Moment weiss keiner ob sie nur umbenannt wurde
+; oder ob es sie gar nicht mehr gibt (auer vielleicht Armin, der ist im Urlaub)
+; sie ist aber NOTWENDIG fr FNCBasic-Fahrbefehle, wenn eine Beladefahrt definiert ist,
+; da sonst kein Acknowledge kommt wenn von FNC aus Fahrbefehl abgeschickt wird und Beladefahrt gerade
+; ausgefhrt wird!
+; Notlsung: Es wird die gleiche Variable wie fr den Befehl genommen, die soll laut Benjamin so lange auf true stehen
+; wie die Beladefahrt luft. Das FNC sollte aber nochmal daraufhin getestet werden!
+; Man knnte auch das Manipulator-Statuswort verwenden, dort muss diese Information auch hinterlegt werden; Problem ist
+; nur, da unschne Abfragen notwendig sind, da die PC-Software abwrtskompatibel sein soll (if RPS-Version>=2.6)
+; 13.09.05: Ab Version 2.7 soll wieder eine Zustandsvariable eingebaut sein!
+Descr=Beladepos
+SysID=0
+Active=1
+Notify=1
+RefreshTime=50
+DisplayName=DrivingToLoadPos
+TaskName=pp_mast
+
+[CONTROLSTATUS_24]
+Descr=PLC_stat.bo_xraytimer_on
+SysID=1
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=cmd_Xraytimer_on
+
+[CONTROLSTATUS_25]
+Descr=PLC_stat.bo_xraytimer_Reset
+SysID=1
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=cmd_Xraytimer_reset
+
+[CONTROLSTATUS_26]
+Descr=PLC_stat.bo_cond_Character_kV_is_running
+SysID=257
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=AutoCondenserKv
+
+[CONTROLSTATUS_27]
+Descr=PLC_stat.bo_cond_Character_SM_is_running
+SysID=257
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=AutoCondenserMod
+
+[CONTROLSTATUS_28]
+Descr=PLC_stat.bo_cond_Character_MM_is_running
+SysID=257
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=AutoCondenserAll
+
+[CONTROLSTATUS_29]
+Descr=PLC_stat.bo_filamentcorradjust_is_running
+SysID=257
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=FilamentCorrectionTest
+
+[CONTROLSTATUS_30]
+Descr=PLC_stat.bo_leckstrom_is_running
+SysID=257
+Active=1
+Notify=1
+RefreshTime=250
+DisplayName=LeakageCurrentTest
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// COMMANDS
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLCOMMAND_0]
+Descr=PC_cmd.xrayON
+SysID=769
+DisplayName=SwitchXRayOn
+WriteSyncDef=0
+
+[CONTROLCOMMAND_1]
+Descr=PC_cmd.xrayOFF
+SysID=769
+DisplayName=SwitchXRayOff
+WriteSyncDef=0
+
+[CONTROLCOMMAND_2]
+Descr=PC_cmd.startUP
+SysID=257
+DisplayName=StartUp
+WriteSyncDef=0
+
+[CONTROLCOMMAND_3]
+Descr=PC_cmd.warmUP
+SysID=769
+DisplayName=WarmUp
+WriteSyncDef=0
+
+[CONTROLCOMMAND_4]
+Descr=PC_cmd.isoON
+SysID=1
+DisplayName=SwitchIsowattOn
+WriteSyncDef=0
+
+[CONTROLCOMMAND_5]
+Descr=PC_cmd.isoOFF
+SysID=1
+DisplayName=SwitchIsowattOff
+WriteSyncDef=0
+
+[CONTROLCOMMAND_6]
+Descr=PC_cmd.filamentadjust
+SysID=257
+DisplayName=DoFilamentAdj
+WriteSyncDef=0
+
+[CONTROLCOMMAND_7]
+Descr=PC_cmd.autocentkV
+SysID=257
+DisplayName=DoAutocenterKV
+WriteSyncDef=0
+
+[CONTROLCOMMAND_8]
+Descr=PC_cmd.autocentALL
+SysID=257
+DisplayName=DoAutocenterAll
+WriteSyncDef=0
+
+[CONTROLCOMMAND_9]
+Descr=PC_cmd.conditioning
+SysID=1
+DisplayName=DoConditioning
+WriteSyncDef=0
+
+[CONTROLCOMMAND_10]
+Descr=PC_cmd.wobbelON
+SysID=1
+DisplayName=SwitchSweepModeOn
+WriteSyncDef=0
+
+[CONTROLCOMMAND_11]
+Descr=PC_cmd.wobbelOFF
+SysID=1
+DisplayName=SwitchSweepModeOff
+WriteSyncDef=0
+
+[CONTROLCOMMAND_12]
+Descr=PC_cmd.focusCharacteristic.read
+SysID=1
+DisplayName=ReadFocusTable
+WriteSyncDef=0
+
+[CONTROLCOMMAND_13]
+Descr=PC_cmd.focusCharacteristic.write
+SysID=1
+DisplayName=WriteFocusTable
+WriteSyncDef=0
+
+[CONTROLCOMMAND_14]
+Descr=PC_cmd.focusCharacteristic.store_point
+SysID=1
+DisplayName=StoreFocusTablePoint
+WriteSyncDef=0
+
+[CONTROLCOMMAND_15]
+Descr=PC_cmd.focusCharacteristic.delete_point
+SysID=1
+DisplayName=DelFocusTablePoint
+WriteSyncDef=0
+
+[CONTROLCOMMAND_16]
+Descr=PC_cmd.focusCharacteristic.delete_all_points
+SysID=1
+DisplayName=DelAllFocusTablePoints
+WriteSyncDef=0
+
+[CONTROLCOMMAND_17]
+Descr=PC_cmd.condensorCharacteristic.read
+SysID=2
+DisplayName=ReadCondensorTable
+WriteSyncDef=0
+
+[CONTROLCOMMAND_18]
+Descr=PC_cmd.condensorCharacteristic.write
+SysID=2
+DisplayName=WriteCondensorTable
+WriteSyncDef=0
+
+[CONTROLCOMMAND_19]
+Descr=PC_cmd.condensorCharacteristic.store_point
+SysID=2
+DisplayName=StoreCondensorTablePoint
+WriteSyncDef=0
+
+[CONTROLCOMMAND_20]
+Descr=PC_cmd.condensorCharacteristic.delete_point
+SysID=2
+DisplayName=DeleteCondensTablePoint
+WriteSyncDef=0
+
+[CONTROLCOMMAND_21]
+Descr=PC_cmd.condensorCharacteristic.delete_all_points
+SysID=2
+DisplayName=DelAllCondensTablePoints
+WriteSyncDef=0
+
+[CONTROLCOMMAND_22]
+Descr=readshut
+SysID=32
+DisplayName=ReadShutterTable
+WriteSyncDef=0
+
+[CONTROLCOMMAND_23]
+Descr=writeshut
+SysID=32
+DisplayName=WriteShutterTable
+WriteSyncDef=0
+
+[CONTROLCOMMAND_24]
+Descr=storeshut
+SysID=32
+DisplayName=StoreShutterTablePoint
+WriteSyncDef=0
+
+[CONTROLCOMMAND_25]
+Descr=delshut_kV
+SysID=32
+DisplayName=DelShutterTablePoint
+WriteSyncDef=0
+
+[CONTROLCOMMAND_26]
+Descr=delshut_all
+SysID=32
+DisplayName=DelAllShutterTablePoints
+WriteSyncDef=0
+
+[CONTROLCOMMAND_27]
+Descr=PC_cmd.centeringCharacteristic[0].write
+SysID=1
+DisplayName=WriteCenteringTable1
+WriteSyncDef=0
+
+[CONTROLCOMMAND_28]
+Descr=PC_cmd.centeringCharacteristic[0].read
+SysID=1
+DisplayName=ReadCenteringTable1
+WriteSyncDef=0
+
+[CONTROLCOMMAND_29]
+Descr=PC_cmd.centeringCharacteristic[0].store_point
+SysID=1
+DisplayName=StoreCenteringTable1Point
+WriteSyncDef=0
+
+[CONTROLCOMMAND_30]
+Descr=PC_cmd.centeringCharacteristic[0].delete_point
+SysID=1
+DisplayName=DelCenteringTable1Point
+WriteSyncDef=0
+
+[CONTROLCOMMAND_31]
+Descr=PC_cmd.centeringCharacteristic[0].delete_all_points
+SysID=1
+DisplayName=DelAllCentTable1Points
+WriteSyncDef=0
+
+[CONTROLCOMMAND_32]
+Descr=PC_cmd.centeringCharacteristic[1].write
+SysID=128
+DisplayName=WriteCenteringTable2
+WriteSyncDef=0
+
+[CONTROLCOMMAND_33]
+Descr=PC_cmd.centeringCharacteristic[1].read
+SysID=128
+DisplayName=ReadCenteringTable2
+WriteSyncDef=0
+
+[CONTROLCOMMAND_34]
+Descr=PC_cmd.centeringCharacteristic[1].store_point
+SysID=128
+DisplayName=StoreCentTable2Point
+WriteSyncDef=0
+
+[CONTROLCOMMAND_35]
+Descr=PC_cmd.centeringCharacteristic[1].delete_point
+SysID=128
+DisplayName=DelCentTable2Point
+WriteSyncDef=0
+
+[CONTROLCOMMAND_36]
+Descr=PC_cmd.centeringCharacteristic[1].delete_all_points
+SysID=128
+DisplayName=DelAllCentTable2Points
+WriteSyncDef=0
+
+[CONTROLCOMMAND_37]
+Descr=PC_cmd.Ti_reg_on
+SysID=320
+DisplayName=SwitchTargetCurRegOn
+WriteSyncDef=0
+
+[CONTROLCOMMAND_38]
+Descr=PC_cmd.Ti_reg_off
+SysID=320
+DisplayName=SwitchTargetCurRegOff
+WriteSyncDef=0
+
+[CONTROLCOMMAND_39]
+Descr=PC_cmd.offsetadjust
+SysID=64
+DisplayName=AdjustAmpOffset
+WriteSyncDef=0
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// ACHSEN-,MANIPULATOR-COMMANDS
+;////////////////////////////////////////////////////////////////////////////////////////
+;// ALLGEMEIN
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLCOMMAND_40]
+Descr=PC_doortast
+SysID=4120
+DisplayName=ExecuteDoorSwitch
+WriteSyncDef=0
+
+[CONTROLCOMMAND_41]
+Descr=l_ptDpr.tManiCommands.bInitAxisAll
+SysID=4120
+DisplayName=InitAllAxis
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_42]
+Descr=l_ptDpr.tManiCommands.bDeInitAxisAll
+SysID=4120
+DisplayName=ExitAllAxis
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_43]
+Descr=l_ptDpr.tManiCommands.bStartReferenceAll
+SysID=4120
+DisplayName=ReferenceAllAxis
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_44]
+Descr=l_ptDpr.tManiCommands.bStopPositionAll
+SysID=4120
+DisplayName=StopAllAxis
+WriteSyncDef=1
+DataType=6
+TaskName=pp_mast
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// ACHSE1
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLCOMMAND_46]
+Descr=l_ptDpr.atAxisCommands[0].bInitAxis
+SysID=4120
+DisplayName=InitAxis1
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_47]
+Descr=l_ptDpr.atAxisCommands[0].bDeInitAxis
+SysID=4120
+DisplayName=ExitAxis1
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_48]
+Descr=l_ptDpr.atAxisCommands[0].bStartReference
+SysID=4120
+DisplayName=ReferenceAxis1
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_49]
+Descr=l_ptDpr.atAxisCommands[0].bStopPosition
+SysID=4120
+DisplayName=StopPositioningAxis1
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_50]
+Descr=l_ptDpr.atAxisCommands[0].bClearErrors
+SysID=4120
+DisplayName=ErrorQuitAxis1
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// ACHSE2
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLCOMMAND_51]
+Descr=l_ptDpr.atAxisCommands[1].bInitAxis
+SysID=4120
+DisplayName=InitAxis2
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_52]
+Descr=l_ptDpr.atAxisCommands[1].bDeInitAxis
+SysID=4120
+DisplayName=ExitAxis2
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_53]
+Descr=l_ptDpr.atAxisCommands[1].bStartReference
+SysID=4120
+DisplayName=ReferenceAxis2
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_54]
+Descr=l_ptDpr.atAxisCommands[1].bStopPosition
+SysID=4120
+DisplayName=StopPositioningAxis2
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_55]
+Descr=l_ptDpr.atAxisCommands[1].bClearErrors
+SysID=4120
+DisplayName=ErrorQuitAxis2
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// ACHSE3
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLCOMMAND_56]
+Descr=l_ptDpr.atAxisCommands[2].bInitAxis
+SysID=4120
+DisplayName=InitAxis3
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_57]
+Descr=l_ptDpr.atAxisCommands[2].bDeInitAxis
+SysID=4120
+DisplayName=ExitAxis3
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_58]
+Descr=l_ptDpr.atAxisCommands[2].bStartReference
+SysID=4120
+DisplayName=ReferenceAxis3
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_59]
+Descr=l_ptDpr.atAxisCommands[2].bStopPosition
+SysID=4120
+DisplayName=StopPositioningAxis3
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_60]
+Descr=l_ptDpr.atAxisCommands[2].bClearErrors
+SysID=4120
+DisplayName=ErrorQuitAxis3
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// ACHSE4
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLCOMMAND_61]
+Descr=l_ptDpr.atAxisCommands[3].bInitAxis
+SysID=4120
+DisplayName=InitAxis4
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_62]
+Descr=l_ptDpr.atAxisCommands[3].bDeInitAxis
+SysID=4120
+DisplayName=ExitAxis4
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_63]
+Descr=l_ptDpr.atAxisCommands[3].bStartReference
+SysID=4120
+DisplayName=ReferenceAxis4
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_64]
+Descr=l_ptDpr.atAxisCommands[3].bStopPosition
+SysID=4120
+DisplayName=StopPositioningAxis4
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_65]
+Descr=l_ptDpr.atAxisCommands[3].bClearErrors
+SysID=4120
+DisplayName=ErrorQuitAxis4
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// ACHSE5
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLCOMMAND_66]
+Descr=l_ptDpr.atAxisCommands[4].bInitAxis
+SysID=4120
+DisplayName=InitAxis5
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_67]
+Descr=l_ptDpr.atAxisCommands[4].bDeInitAxis
+SysID=4120
+DisplayName=ExitAxis5
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_68]
+Descr=l_ptDpr.atAxisCommands[4].bStartReference
+SysID=4120
+DisplayName=ReferenceAxis5
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_69]
+Descr=l_ptDpr.atAxisCommands[4].bStopPosition
+SysID=4120
+DisplayName=StopPositioningAxis5
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_70]
+Descr=l_ptDpr.atAxisCommands[4].bClearErrors
+SysID=4120
+DisplayName=ErrorQuitAxis5
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// ACHSE6
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLCOMMAND_71]
+Descr=l_ptDpr.atAxisCommands[5].bInitAxis
+SysID=4120
+DisplayName=InitAxis6
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_72]
+Descr=l_ptDpr.atAxisCommands[5].bDeInitAxis
+SysID=4120
+DisplayName=ExitAxis6
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_73]
+Descr=l_ptDpr.atAxisCommands[5].bStartReference
+SysID=4120
+DisplayName=ReferenceAxis6
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_74]
+Descr=l_ptDpr.atAxisCommands[5].bStopPosition
+SysID=4120
+DisplayName=StopPositioningAxis6
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_75]
+Descr=l_ptDpr.atAxisCommands[5].bClearErrors
+SysID=4120
+DisplayName=ErrorQuitAxis6
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// ACHSE7
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLCOMMAND_76]
+Descr=l_ptDpr.atAxisCommands[6].bInitAxis
+SysID=4096
+DisplayName=InitAxis7
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_77]
+Descr=l_ptDpr.atAxisCommands[6].bDeInitAxis
+SysID=4096
+DisplayName=ExitAxis7
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_78]
+Descr=l_ptDpr.atAxisCommands[6].bStartReference
+SysID=4096
+DisplayName=ReferenceAxis7
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_79]
+Descr=l_ptDpr.atAxisCommands[6].bStopPosition
+SysID=4096
+DisplayName=StopPositioningAxis7
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_80]
+Descr=l_ptDpr.atAxisCommands[6].bClearErrors
+SysID=4096
+DisplayName=ErrorQuitAxis7
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// ACHSE8
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLCOMMAND_81]
+Descr=l_ptDpr.atAxisCommands[7].bInitAxis
+SysID=4096
+DisplayName=InitAxis8
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_82]
+Descr=l_ptDpr.atAxisCommands[7].bDeInitAxis
+SysID=4096
+DisplayName=ExitAxis8
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_83]
+Descr=l_ptDpr.atAxisCommands[7].bStartReference
+SysID=4096
+DisplayName=ReferenceAxis8
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_84]
+Descr=l_ptDpr.atAxisCommands[7].bStopPosition
+SysID=4096
+DisplayName=StopPositioningAxis8
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_85]
+Descr=l_ptDpr.atAxisCommands[7].bClearErrors
+SysID=4096
+DisplayName=ErrorQuitAxis8
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// ACHSE9
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLCOMMAND_86]
+Descr=l_ptDpr.atAxisCommands[8].bInitAxis
+SysID=4096
+DisplayName=InitAxis9
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_87]
+Descr=l_ptDpr.atAxisCommands[8].bDeInitAxis
+SysID=4096
+DisplayName=ExitAxis9
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_88]
+Descr=l_ptDpr.atAxisCommands[8].bStartReference
+SysID=4096
+DisplayName=ReferenceAxis9
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_89]
+Descr=l_ptDpr.atAxisCommands[8].bStopPosition
+SysID=4096
+DisplayName=StopPositioningAxis9
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_90]
+Descr=l_ptDpr.atAxisCommands[8].bClearErrors
+SysID=4096
+DisplayName=ErrorQuitAxis9
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+;////////////////////////////////////////////////////////////////////////////////////////
+;// ACHSE10
+;////////////////////////////////////////////////////////////////////////////////////////
+[CONTROLCOMMAND_91]
+Descr=l_ptDpr.atAxisCommands[9].bInitAxis
+SysID=4096
+DisplayName=InitAxis10
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_92]
+Descr=l_ptDpr.atAxisCommands[9].bDeInitAxis
+SysID=4096
+DisplayName=ExitAxis10
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_93]
+Descr=l_ptDpr.atAxisCommands[9].bStartReference
+SysID=4096
+DisplayName=ReferenceAxis10
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_94]
+Descr=l_ptDpr.atAxisCommands[9].bStopPosition
+SysID=4096
+DisplayName=StopPositioningAxis10
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
+
+[CONTROLCOMMAND_95]
+Descr=l_ptDpr.atAxisCommands[9].bClearErrors
+SysID=4096
+DisplayName=ErrorQuitAxis10
+WriteSyncDef=0
+DataType=6
+TaskName=pp_mast
diff --git a/ExternalLibraries/xisl.dll b/ExternalLibraries/xisl.dll
new file mode 100644
index 0000000..9141737
Binary files /dev/null and b/ExternalLibraries/xisl.dll differ
diff --git a/ReleaseFiles/App.config b/ReleaseFiles/App.config
index 7123378..dfda658 100644
--- a/ReleaseFiles/App.config
+++ b/ReleaseFiles/App.config
@@ -11,6 +11,11 @@
+
+
+
+
+
@@ -66,7 +71,6 @@
-
@@ -78,14 +82,13 @@
-
-
-
+
+
@@ -163,6 +166,10 @@
+
+
+
+
diff --git a/ReleaseFiles/Host/BR.AN.PviServices.dll b/ReleaseFiles/Host/BR.AN.PviServices.dll
new file mode 100644
index 0000000..8742a64
Binary files /dev/null and b/ReleaseFiles/Host/BR.AN.PviServices.dll differ
diff --git a/ReleaseFiles/Host/Newtonsoft.Json.dll b/ReleaseFiles/Host/Newtonsoft.Json.dll
new file mode 100644
index 0000000..341d08f
Binary files /dev/null and b/ReleaseFiles/Host/Newtonsoft.Json.dll differ
diff --git a/ReleaseFiles/Host/Newtonsoft.Json.xml b/ReleaseFiles/Host/Newtonsoft.Json.xml
new file mode 100644
index 0000000..2c981ab
--- /dev/null
+++ b/ReleaseFiles/Host/Newtonsoft.Json.xml
@@ -0,0 +1,11363 @@
+
+
+
+ Newtonsoft.Json
+
+
+
+
+ Represents a BSON Oid (object id).
+
+
+
+
+ Gets or sets the value of the Oid.
+
+ The value of the Oid.
+
+
+
+ Initializes a new instance of the class.
+
+ The Oid value.
+
+
+
+ Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data.
+
+
+
+
+ Gets or sets a value indicating whether binary data reading should be compatible with incorrect Json.NET 3.5 written binary.
+
+
+ true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false.
+
+
+
+
+ Gets or sets a value indicating whether the root object will be read as a JSON array.
+
+
+ true if the root object will be read as a JSON array; otherwise, false.
+
+
+
+
+ Gets or sets the used when reading values from BSON.
+
+ The used when reading values from BSON.
+
+
+
+ Initializes a new instance of the class.
+
+ The containing the BSON data to read.
+
+
+
+ Initializes a new instance of the class.
+
+ The containing the BSON data to read.
+
+
+
+ Initializes a new instance of the class.
+
+ The containing the BSON data to read.
+ if set to true the root object will be read as a JSON array.
+ The used when reading values from BSON.
+
+
+
+ Initializes a new instance of the class.
+
+ The containing the BSON data to read.
+ if set to true the root object will be read as a JSON array.
+ The used when reading values from BSON.
+
+
+
+ Reads the next JSON token from the underlying .
+
+
+ true if the next token was read successfully; false if there are no more tokens to read.
+
+
+
+
+ Changes the reader's state to .
+ If is set to true, the underlying is also closed.
+
+
+
+
+ Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data.
+
+
+
+
+ Gets or sets the used when writing values to BSON.
+ When set to no conversion will occur.
+
+ The used when writing values to BSON.
+
+
+
+ Initializes a new instance of the class.
+
+ The to write to.
+
+
+
+ Initializes a new instance of the class.
+
+ The to write to.
+
+
+
+ Flushes whatever is in the buffer to the underlying and also flushes the underlying stream.
+
+
+
+
+ Writes the end.
+
+ The token.
+
+
+
+ Writes a comment /*...*/ containing the specified text.
+
+ Text to place inside the comment.
+
+
+
+ Writes the start of a constructor with the given name.
+
+ The name of the constructor.
+
+
+
+ Writes raw JSON.
+
+ The raw JSON to write.
+
+
+
+ Writes raw JSON where a value is expected and updates the writer's state.
+
+ The raw JSON to write.
+
+
+
+ Writes the beginning of a JSON array.
+
+
+
+
+ Writes the beginning of a JSON object.
+
+
+
+
+ Writes the property name of a name/value pair on a JSON object.
+
+ The name of the property.
+
+
+
+ Closes this writer.
+ If is set to true, the underlying is also closed.
+ If is set to true, the JSON is auto-completed.
+
+
+
+
+ Writes a value.
+ An error will raised if the value cannot be written as a single JSON token.
+
+ The value to write.
+
+
+
+ Writes a null value.
+
+
+
+
+ Writes an undefined value.
+
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a [] value.
+
+ The [] value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a [] value that represents a BSON object id.
+
+ The Object ID value to write.
+
+
+
+ Writes a BSON regex.
+
+ The regex pattern.
+ The regex options.
+
+
+
+ Specifies how constructors are used when initializing objects during deserialization by the .
+
+
+
+
+ First attempt to use the public default constructor, then fall back to a single parameterized constructor, then to the non-public default constructor.
+
+
+
+
+ Json.NET will use a non-public default constructor before falling back to a parameterized constructor.
+
+
+
+
+ Converts a binary value to and from a base 64 string value.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Converts a to and from JSON and BSON.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Creates a custom object.
+
+ The object type to convert.
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Creates an object which will then be populated by the serializer.
+
+ Type of the object.
+ The created object.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Gets a value indicating whether this can write JSON.
+
+
+ true if this can write JSON; otherwise, false.
+
+
+
+
+ Converts a to and from JSON.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified value type.
+
+ Type of the value.
+
+ true if this instance can convert the specified value type; otherwise, false.
+
+
+
+
+ Converts a to and from JSON.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified value type.
+
+ Type of the value.
+
+ true if this instance can convert the specified value type; otherwise, false.
+
+
+
+
+ Provides a base class for converting a to and from JSON.
+
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Converts a F# discriminated union type to and from JSON.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Converts an Entity Framework to and from JSON.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Converts an to and from JSON.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Gets a value indicating whether this can write JSON.
+
+
+ true if this can write JSON; otherwise, false.
+
+
+
+
+ Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z").
+
+
+
+
+ Gets or sets the date time styles used when converting a date to and from JSON.
+
+ The date time styles used when converting a date to and from JSON.
+
+
+
+ Gets or sets the date time format used when converting a date to and from JSON.
+
+ The date time format used when converting a date to and from JSON.
+
+
+
+ Gets or sets the culture used when converting a date to and from JSON.
+
+ The culture used when converting a date to and from JSON.
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Converts a to and from a JavaScript Date constructor (e.g. new Date(52231943)).
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing property value of the JSON that is being converted.
+ The calling serializer.
+ The object value.
+
+
+
+ Converts a to and from JSON.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Converts a to and from JSON and BSON.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Converts an to and from its name string value.
+
+
+
+
+ Gets or sets a value indicating whether the written enum text should be camel case.
+ The default value is false.
+
+ true if the written enum text will be camel case; otherwise, false.
+
+
+
+ Gets or sets the naming strategy used to resolve how enum text is written.
+
+ The naming strategy used to resolve how enum text is written.
+
+
+
+ Gets or sets a value indicating whether integer values are allowed when serializing and deserializing.
+ The default value is true.
+
+ true if integers are allowed when serializing and deserializing; otherwise, false.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class.
+
+ true if the written enum text will be camel case; otherwise, false.
+
+
+
+ Initializes a new instance of the class.
+
+ The naming strategy used to resolve how enum text is written.
+ true if integers are allowed when serializing and deserializing; otherwise, false.
+
+
+
+ Initializes a new instance of the class.
+
+ The of the used to write enum text.
+
+
+
+ Initializes a new instance of the class.
+
+ The of the used to write enum text.
+
+ The parameter list to use when constructing the described by .
+ If null, the default constructor is used.
+ When non-null, there must be a constructor defined in the that exactly matches the number,
+ order, and type of these parameters.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The of the used to write enum text.
+
+ The parameter list to use when constructing the described by .
+ If null, the default constructor is used.
+ When non-null, there must be a constructor defined in the that exactly matches the number,
+ order, and type of these parameters.
+
+ true if integers are allowed when serializing and deserializing; otherwise, false.
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Converts a to and from Unix epoch time
+
+
+
+
+ Gets or sets a value indicating whether the dates before Unix epoch
+ should converted to and from JSON.
+
+
+ true to allow converting dates before Unix epoch to and from JSON;
+ false to throw an exception when a date being converted to or from JSON
+ occurred before Unix epoch. The default value is false.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+ true to allow converting dates before Unix epoch to and from JSON;
+ false to throw an exception when a date being converted to or from JSON
+ occurred before Unix epoch. The default value is false.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing property value of the JSON that is being converted.
+ The calling serializer.
+ The object value.
+
+
+
+ Converts a to and from a string (e.g. "1.2.3.4").
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing property value of the JSON that is being converted.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Converts XML to and from JSON.
+
+
+
+
+ Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produced multiple root elements.
+
+ The name of the deserialized root element.
+
+
+
+ Gets or sets a value to indicate whether to write the Json.NET array attribute.
+ This attribute helps preserve arrays when converting the written XML back to JSON.
+
+ true if the array attribute is written to the XML; otherwise, false.
+
+
+
+ Gets or sets a value indicating whether to write the root JSON object.
+
+ true if the JSON root object is omitted; otherwise, false.
+
+
+
+ Gets or sets a value indicating whether to encode special characters when converting JSON to XML.
+ If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify
+ XML namespaces, attributes or processing directives. Instead special characters are encoded and written
+ as part of the XML element name.
+
+ true if special characters are encoded; otherwise, false.
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The calling serializer.
+ The value.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Checks if the is a namespace attribute.
+
+ Attribute name to test.
+ The attribute name prefix if it has one, otherwise an empty string.
+ true if attribute name is for a namespace attribute, otherwise false.
+
+
+
+ Determines whether this instance can convert the specified value type.
+
+ Type of the value.
+
+ true if this instance can convert the specified value type; otherwise, false.
+
+
+
+
+ Specifies how dates are formatted when writing JSON text.
+
+
+
+
+ Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z".
+
+
+
+
+ Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/".
+
+
+
+
+ Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text.
+
+
+
+
+ Date formatted strings are not parsed to a date type and are read as strings.
+
+
+
+
+ Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to .
+
+
+
+
+ Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to .
+
+
+
+
+ Specifies how to treat the time value when converting between string and .
+
+
+
+
+ Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time.
+
+
+
+
+ Treat as a UTC. If the object represents a local time, it is converted to a UTC.
+
+
+
+
+ Treat as a local time if a is being converted to a string.
+ If a string is being converted to , convert to a local time if a time zone is specified.
+
+
+
+
+ Time zone information should be preserved when converting.
+
+
+
+
+ The default JSON name table implementation.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets a string containing the same characters as the specified range of characters in the given array.
+
+ The character array containing the name to find.
+ The zero-based index into the array specifying the first character of the name.
+ The number of characters in the name.
+ A string containing the same characters as the specified range of characters in the given array.
+
+
+
+ Adds the specified string into name table.
+
+ The string to add.
+ This method is not thread-safe.
+ The resolved string.
+
+
+
+ Specifies default value handling options for the .
+
+
+
+
+
+
+
+
+ Include members where the member value is the same as the member's default value when serializing objects.
+ Included members are written to JSON. Has no effect when deserializing.
+
+
+
+
+ Ignore members where the member value is the same as the member's default value when serializing objects
+ so that it is not written to JSON.
+ This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers,
+ decimals and floating point numbers; and false for booleans). The default value ignored can be changed by
+ placing the on the property.
+
+
+
+
+ Members with a default value but no JSON will be set to their default value when deserializing.
+
+
+
+
+ Ignore members where the member value is the same as the member's default value when serializing objects
+ and set members to their default value when deserializing.
+
+
+
+
+ Specifies float format handling options when writing special floating point numbers, e.g. ,
+ and with .
+
+
+
+
+ Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity".
+
+
+
+
+ Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity.
+ Note that this will produce non-valid JSON.
+
+
+
+
+ Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a of property.
+
+
+
+
+ Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text.
+
+
+
+
+ Floating point numbers are parsed to .
+
+
+
+
+ Floating point numbers are parsed to .
+
+
+
+
+ Specifies formatting options for the .
+
+
+
+
+ No special formatting is applied. This is the default.
+
+
+
+
+ Causes child objects to be indented according to the and settings.
+
+
+
+
+ Provides an interface for using pooled arrays.
+
+ The array type content.
+
+
+
+ Rent an array from the pool. This array must be returned when it is no longer needed.
+
+ The minimum required length of the array. The returned array may be longer.
+ The rented array from the pool. This array must be returned when it is no longer needed.
+
+
+
+ Return an array to the pool.
+
+ The array that is being returned.
+
+
+
+ Provides an interface to enable a class to return line and position information.
+
+
+
+
+ Gets a value indicating whether the class can return line information.
+
+
+ true if and can be provided; otherwise, false.
+
+
+
+
+ Gets the current line number.
+
+ The current line number or 0 if no line information is available (for example, when returns false).
+
+
+
+ Gets the current line position.
+
+ The current line position or 0 if no line information is available (for example, when returns false).
+
+
+
+ Instructs the how to serialize the collection.
+
+
+
+
+ Gets or sets a value indicating whether null items are allowed in the collection.
+
+ true if null items are allowed in the collection; otherwise, false.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class with a flag indicating whether the array can contain null items.
+
+ A flag indicating whether the array can contain null items.
+
+
+
+ Initializes a new instance of the class with the specified container Id.
+
+ The container Id.
+
+
+
+ Instructs the to use the specified constructor when deserializing that object.
+
+
+
+
+ Instructs the how to serialize the object.
+
+
+
+
+ Gets or sets the id.
+
+ The id.
+
+
+
+ Gets or sets the title.
+
+ The title.
+
+
+
+ Gets or sets the description.
+
+ The description.
+
+
+
+ Gets or sets the collection's items converter.
+
+ The collection's items converter.
+
+
+
+ The parameter list to use when constructing the described by .
+ If null, the default constructor is used.
+ When non-null, there must be a constructor defined in the that exactly matches the number,
+ order, and type of these parameters.
+
+
+
+ [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })]
+
+
+
+
+
+ Gets or sets the of the .
+
+ The of the .
+
+
+
+ The parameter list to use when constructing the described by .
+ If null, the default constructor is used.
+ When non-null, there must be a constructor defined in the that exactly matches the number,
+ order, and type of these parameters.
+
+
+
+ [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })]
+
+
+
+
+
+ Gets or sets a value that indicates whether to preserve object references.
+
+
+ true to keep object reference; otherwise, false. The default is false.
+
+
+
+
+ Gets or sets a value that indicates whether to preserve collection's items references.
+
+
+ true to keep collection's items object references; otherwise, false. The default is false.
+
+
+
+
+ Gets or sets the reference loop handling used when serializing the collection's items.
+
+ The reference loop handling.
+
+
+
+ Gets or sets the type name handling used when serializing the collection's items.
+
+ The type name handling.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class with the specified container Id.
+
+ The container Id.
+
+
+
+ Provides methods for converting between .NET types and JSON types.
+
+
+
+
+
+
+
+ Gets or sets a function that creates default .
+ Default settings are automatically used by serialization methods on ,
+ and and on .
+ To serialize without using any default settings create a with
+ .
+
+
+
+
+ Represents JavaScript's boolean value true as a string. This field is read-only.
+
+
+
+
+ Represents JavaScript's boolean value false as a string. This field is read-only.
+
+
+
+
+ Represents JavaScript's null as a string. This field is read-only.
+
+
+
+
+ Represents JavaScript's undefined as a string. This field is read-only.
+
+
+
+
+ Represents JavaScript's positive infinity as a string. This field is read-only.
+
+
+
+
+ Represents JavaScript's negative infinity as a string. This field is read-only.
+
+
+
+
+ Represents JavaScript's NaN as a string. This field is read-only.
+
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation using the specified.
+
+ The value to convert.
+ The format the date will be converted to.
+ The time zone handling when the date is converted to a string.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation using the specified.
+
+ The value to convert.
+ The format the date will be converted to.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ The string delimiter character.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ The string delimiter character.
+ The string escape handling.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Serializes the specified object to a JSON string.
+
+ The object to serialize.
+ A JSON string representation of the object.
+
+
+
+ Serializes the specified object to a JSON string using formatting.
+
+ The object to serialize.
+ Indicates how the output should be formatted.
+
+ A JSON string representation of the object.
+
+
+
+
+ Serializes the specified object to a JSON string using a collection of .
+
+ The object to serialize.
+ A collection of converters used while serializing.
+ A JSON string representation of the object.
+
+
+
+ Serializes the specified object to a JSON string using formatting and a collection of .
+
+ The object to serialize.
+ Indicates how the output should be formatted.
+ A collection of converters used while serializing.
+ A JSON string representation of the object.
+
+
+
+ Serializes the specified object to a JSON string using .
+
+ The object to serialize.
+ The used to serialize the object.
+ If this is null, default serialization settings will be used.
+
+ A JSON string representation of the object.
+
+
+
+
+ Serializes the specified object to a JSON string using a type, formatting and .
+
+ The object to serialize.
+ The used to serialize the object.
+ If this is null, default serialization settings will be used.
+
+ The type of the value being serialized.
+ This parameter is used when is to write out the type name if the type of the value does not match.
+ Specifying the type is optional.
+
+
+ A JSON string representation of the object.
+
+
+
+
+ Serializes the specified object to a JSON string using formatting and .
+
+ The object to serialize.
+ Indicates how the output should be formatted.
+ The used to serialize the object.
+ If this is null, default serialization settings will be used.
+
+ A JSON string representation of the object.
+
+
+
+
+ Serializes the specified object to a JSON string using a type, formatting and .
+
+ The object to serialize.
+ Indicates how the output should be formatted.
+ The used to serialize the object.
+ If this is null, default serialization settings will be used.
+
+ The type of the value being serialized.
+ This parameter is used when is to write out the type name if the type of the value does not match.
+ Specifying the type is optional.
+
+
+ A JSON string representation of the object.
+
+
+
+
+ Deserializes the JSON to a .NET object.
+
+ The JSON to deserialize.
+ The deserialized object from the JSON string.
+
+
+
+ Deserializes the JSON to a .NET object using .
+
+ The JSON to deserialize.
+
+ The used to deserialize the object.
+ If this is null, default serialization settings will be used.
+
+ The deserialized object from the JSON string.
+
+
+
+ Deserializes the JSON to the specified .NET type.
+
+ The JSON to deserialize.
+ The of object being deserialized.
+ The deserialized object from the JSON string.
+
+
+
+ Deserializes the JSON to the specified .NET type.
+
+ The type of the object to deserialize to.
+ The JSON to deserialize.
+ The deserialized object from the JSON string.
+
+
+
+ Deserializes the JSON to the given anonymous type.
+
+
+ The anonymous type to deserialize to. This can't be specified
+ traditionally and must be inferred from the anonymous type passed
+ as a parameter.
+
+ The JSON to deserialize.
+ The anonymous type object.
+ The deserialized anonymous type from the JSON string.
+
+
+
+ Deserializes the JSON to the given anonymous type using .
+
+
+ The anonymous type to deserialize to. This can't be specified
+ traditionally and must be inferred from the anonymous type passed
+ as a parameter.
+
+ The JSON to deserialize.
+ The anonymous type object.
+
+ The used to deserialize the object.
+ If this is null, default serialization settings will be used.
+
+ The deserialized anonymous type from the JSON string.
+
+
+
+ Deserializes the JSON to the specified .NET type using a collection of .
+
+ The type of the object to deserialize to.
+ The JSON to deserialize.
+ Converters to use while deserializing.
+ The deserialized object from the JSON string.
+
+
+
+ Deserializes the JSON to the specified .NET type using .
+
+ The type of the object to deserialize to.
+ The object to deserialize.
+
+ The used to deserialize the object.
+ If this is null, default serialization settings will be used.
+
+ The deserialized object from the JSON string.
+
+
+
+ Deserializes the JSON to the specified .NET type using a collection of .
+
+ The JSON to deserialize.
+ The type of the object to deserialize.
+ Converters to use while deserializing.
+ The deserialized object from the JSON string.
+
+
+
+ Deserializes the JSON to the specified .NET type using .
+
+ The JSON to deserialize.
+ The type of the object to deserialize to.
+
+ The used to deserialize the object.
+ If this is null, default serialization settings will be used.
+
+ The deserialized object from the JSON string.
+
+
+
+ Populates the object with values from the JSON string.
+
+ The JSON to populate values from.
+ The target object to populate values onto.
+
+
+
+ Populates the object with values from the JSON string using .
+
+ The JSON to populate values from.
+ The target object to populate values onto.
+
+ The used to deserialize the object.
+ If this is null, default serialization settings will be used.
+
+
+
+
+ Serializes the to a JSON string.
+
+ The node to serialize.
+ A JSON string of the .
+
+
+
+ Serializes the to a JSON string using formatting.
+
+ The node to serialize.
+ Indicates how the output should be formatted.
+ A JSON string of the .
+
+
+
+ Serializes the to a JSON string using formatting and omits the root object if is true.
+
+ The node to serialize.
+ Indicates how the output should be formatted.
+ Omits writing the root object.
+ A JSON string of the .
+
+
+
+ Deserializes the from a JSON string.
+
+ The JSON string.
+ The deserialized .
+
+
+
+ Deserializes the from a JSON string nested in a root element specified by .
+
+ The JSON string.
+ The name of the root element to append when deserializing.
+ The deserialized .
+
+
+
+ Deserializes the from a JSON string nested in a root element specified by
+ and writes a Json.NET array attribute for collections.
+
+ The JSON string.
+ The name of the root element to append when deserializing.
+
+ A value to indicate whether to write the Json.NET array attribute.
+ This attribute helps preserve arrays when converting the written XML back to JSON.
+
+ The deserialized .
+
+
+
+ Deserializes the from a JSON string nested in a root element specified by ,
+ writes a Json.NET array attribute for collections, and encodes special characters.
+
+ The JSON string.
+ The name of the root element to append when deserializing.
+
+ A value to indicate whether to write the Json.NET array attribute.
+ This attribute helps preserve arrays when converting the written XML back to JSON.
+
+
+ A value to indicate whether to encode special characters when converting JSON to XML.
+ If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify
+ XML namespaces, attributes or processing directives. Instead special characters are encoded and written
+ as part of the XML element name.
+
+ The deserialized .
+
+
+
+ Serializes the to a JSON string.
+
+ The node to convert to JSON.
+ A JSON string of the .
+
+
+
+ Serializes the to a JSON string using formatting.
+
+ The node to convert to JSON.
+ Indicates how the output should be formatted.
+ A JSON string of the .
+
+
+
+ Serializes the to a JSON string using formatting and omits the root object if is true.
+
+ The node to serialize.
+ Indicates how the output should be formatted.
+ Omits writing the root object.
+ A JSON string of the .
+
+
+
+ Deserializes the from a JSON string.
+
+ The JSON string.
+ The deserialized .
+
+
+
+ Deserializes the from a JSON string nested in a root element specified by .
+
+ The JSON string.
+ The name of the root element to append when deserializing.
+ The deserialized .
+
+
+
+ Deserializes the from a JSON string nested in a root element specified by
+ and writes a Json.NET array attribute for collections.
+
+ The JSON string.
+ The name of the root element to append when deserializing.
+
+ A value to indicate whether to write the Json.NET array attribute.
+ This attribute helps preserve arrays when converting the written XML back to JSON.
+
+ The deserialized .
+
+
+
+ Deserializes the from a JSON string nested in a root element specified by ,
+ writes a Json.NET array attribute for collections, and encodes special characters.
+
+ The JSON string.
+ The name of the root element to append when deserializing.
+
+ A value to indicate whether to write the Json.NET array attribute.
+ This attribute helps preserve arrays when converting the written XML back to JSON.
+
+
+ A value to indicate whether to encode special characters when converting JSON to XML.
+ If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify
+ XML namespaces, attributes or processing directives. Instead special characters are encoded and written
+ as part of the XML element name.
+
+ The deserialized .
+
+
+
+ Converts an object to and from JSON.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Gets a value indicating whether this can read JSON.
+
+ true if this can read JSON; otherwise, false.
+
+
+
+ Gets a value indicating whether this can write JSON.
+
+ true if this can write JSON; otherwise, false.
+
+
+
+ Converts an object to and from JSON.
+
+ The object type to convert.
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read. If there is no existing value then null will be used.
+ The existing value has a value.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Instructs the to use the specified when serializing the member or class.
+
+
+
+
+ Gets the of the .
+
+ The of the .
+
+
+
+ The parameter list to use when constructing the described by .
+ If null, the default constructor is used.
+
+
+
+
+ Initializes a new instance of the class.
+
+ Type of the .
+
+
+
+ Initializes a new instance of the class.
+
+ Type of the .
+ Parameter list to use when constructing the . Can be null.
+
+
+
+ Represents a collection of .
+
+
+
+
+ Instructs the how to serialize the collection.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class with the specified container Id.
+
+ The container Id.
+
+
+
+ The exception thrown when an error occurs during JSON serialization or deserialization.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class
+ with a specified error message.
+
+ The error message that explains the reason for the exception.
+
+
+
+ Initializes a new instance of the class
+ with a specified error message and a reference to the inner exception that is the cause of this exception.
+
+ The error message that explains the reason for the exception.
+ The exception that is the cause of the current exception, or null if no inner exception is specified.
+
+
+
+ Initializes a new instance of the class.
+
+ The that holds the serialized object data about the exception being thrown.
+ The that contains contextual information about the source or destination.
+ The parameter is null.
+ The class name is null or is zero (0).
+
+
+
+ Instructs the to deserialize properties with no matching class member into the specified collection
+ and write values during serialization.
+
+
+
+
+ Gets or sets a value that indicates whether to write extension data when serializing the object.
+
+
+ true to write extension data when serializing the object; otherwise, false. The default is true.
+
+
+
+
+ Gets or sets a value that indicates whether to read extension data when deserializing the object.
+
+
+ true to read extension data when deserializing the object; otherwise, false. The default is true.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Instructs the not to serialize the public field or public read/write property value.
+
+
+
+
+ Base class for a table of atomized string objects.
+
+
+
+
+ Gets a string containing the same characters as the specified range of characters in the given array.
+
+ The character array containing the name to find.
+ The zero-based index into the array specifying the first character of the name.
+ The number of characters in the name.
+ A string containing the same characters as the specified range of characters in the given array.
+
+
+
+ Instructs the how to serialize the object.
+
+
+
+
+ Gets or sets the member serialization.
+
+ The member serialization.
+
+
+
+ Gets or sets the missing member handling used when deserializing this object.
+
+ The missing member handling.
+
+
+
+ Gets or sets how the object's properties with null values are handled during serialization and deserialization.
+
+ How the object's properties with null values are handled during serialization and deserialization.
+
+
+
+ Gets or sets a value that indicates whether the object's properties are required.
+
+
+ A value indicating whether the object's properties are required.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class with the specified member serialization.
+
+ The member serialization.
+
+
+
+ Initializes a new instance of the class with the specified container Id.
+
+ The container Id.
+
+
+
+ Instructs the to always serialize the member with the specified name.
+
+
+
+
+ Gets or sets the type used when serializing the property's collection items.
+
+ The collection's items type.
+
+
+
+ The parameter list to use when constructing the described by .
+ If null, the default constructor is used.
+ When non-null, there must be a constructor defined in the that exactly matches the number,
+ order, and type of these parameters.
+
+
+
+ [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })]
+
+
+
+
+
+ Gets or sets the of the .
+
+ The of the .
+
+
+
+ The parameter list to use when constructing the described by .
+ If null, the default constructor is used.
+ When non-null, there must be a constructor defined in the that exactly matches the number,
+ order, and type of these parameters.
+
+
+
+ [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })]
+
+
+
+
+
+ Gets or sets the null value handling used when serializing this property.
+
+ The null value handling.
+
+
+
+ Gets or sets the default value handling used when serializing this property.
+
+ The default value handling.
+
+
+
+ Gets or sets the reference loop handling used when serializing this property.
+
+ The reference loop handling.
+
+
+
+ Gets or sets the object creation handling used when deserializing this property.
+
+ The object creation handling.
+
+
+
+ Gets or sets the type name handling used when serializing this property.
+
+ The type name handling.
+
+
+
+ Gets or sets whether this property's value is serialized as a reference.
+
+ Whether this property's value is serialized as a reference.
+
+
+
+ Gets or sets the order of serialization of a member.
+
+ The numeric order of serialization.
+
+
+
+ Gets or sets a value indicating whether this property is required.
+
+
+ A value indicating whether this property is required.
+
+
+
+
+ Gets or sets the name of the property.
+
+ The name of the property.
+
+
+
+ Gets or sets the reference loop handling used when serializing the property's collection items.
+
+ The collection's items reference loop handling.
+
+
+
+ Gets or sets the type name handling used when serializing the property's collection items.
+
+ The collection's items type name handling.
+
+
+
+ Gets or sets whether this property's collection items are serialized as a reference.
+
+ Whether this property's collection items are serialized as a reference.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class with the specified name.
+
+ Name of the property.
+
+
+
+ Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data.
+
+
+
+
+ Asynchronously reads the next JSON token from the source.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns true if the next token was read successfully; false if there are no more tokens to read.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously skips the children of the current token.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously reads the next JSON token from the source as a [].
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the []. This result will be null at the end of an array.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously reads the next JSON token from the source as a .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the . This result will be null at the end of an array.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Specifies the state of the reader.
+
+
+
+
+ A read method has not been called.
+
+
+
+
+ The end of the file has been reached successfully.
+
+
+
+
+ Reader is at a property.
+
+
+
+
+ Reader is at the start of an object.
+
+
+
+
+ Reader is in an object.
+
+
+
+
+ Reader is at the start of an array.
+
+
+
+
+ Reader is in an array.
+
+
+
+
+ The method has been called.
+
+
+
+
+ Reader has just read a value.
+
+
+
+
+ Reader is at the start of a constructor.
+
+
+
+
+ Reader is in a constructor.
+
+
+
+
+ An error occurred that prevents the read operation from continuing.
+
+
+
+
+ The end of the file has been reached successfully.
+
+
+
+
+ Gets the current reader state.
+
+ The current reader state.
+
+
+
+ Gets or sets a value indicating whether the source should be closed when this reader is closed.
+
+
+ true to close the source when this reader is closed; otherwise false. The default is true.
+
+
+
+
+ Gets or sets a value indicating whether multiple pieces of JSON content can
+ be read from a continuous stream without erroring.
+
+
+ true to support reading multiple pieces of JSON content; otherwise false.
+ The default is false.
+
+
+
+
+ Gets the quotation mark character used to enclose the value of a string.
+
+
+
+
+ Gets or sets how time zones are handled when reading JSON.
+
+
+
+
+ Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON.
+
+
+
+
+ Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text.
+
+
+
+
+ Gets or sets how custom date formatted strings are parsed when reading JSON.
+
+
+
+
+ Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a .
+ A null value means there is no maximum.
+ The default value is 64.
+
+
+
+
+ Gets the type of the current JSON token.
+
+
+
+
+ Gets the text value of the current JSON token.
+
+
+
+
+ Gets the .NET type for the current JSON token.
+
+
+
+
+ Gets the depth of the current token in the JSON document.
+
+ The depth of the current token in the JSON document.
+
+
+
+ Gets the path of the current JSON token.
+
+
+
+
+ Gets or sets the culture used when reading JSON. Defaults to .
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Reads the next JSON token from the source.
+
+ true if the next token was read successfully; false if there are no more tokens to read.
+
+
+
+ Reads the next JSON token from the source as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the source as a .
+
+ A . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the source as a [].
+
+ A [] or null if the next JSON token is null. This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the source as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the source as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the source as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the source as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the source as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Skips the children of the current token.
+
+
+
+
+ Sets the current token.
+
+ The new token.
+
+
+
+ Sets the current token and value.
+
+ The new token.
+ The value.
+
+
+
+ Sets the current token and value.
+
+ The new token.
+ The value.
+ A flag indicating whether the position index inside an array should be updated.
+
+
+
+ Sets the state based on current token type.
+
+
+
+
+ Releases unmanaged and - optionally - managed resources.
+
+ true to release both managed and unmanaged resources; false to release only unmanaged resources.
+
+
+
+ Changes the reader's state to .
+ If is set to true, the source is also closed.
+
+
+
+
+ The exception thrown when an error occurs while reading JSON text.
+
+
+
+
+ Gets the line number indicating where the error occurred.
+
+ The line number indicating where the error occurred.
+
+
+
+ Gets the line position indicating where the error occurred.
+
+ The line position indicating where the error occurred.
+
+
+
+ Gets the path to the JSON where the error occurred.
+
+ The path to the JSON where the error occurred.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class
+ with a specified error message.
+
+ The error message that explains the reason for the exception.
+
+
+
+ Initializes a new instance of the class
+ with a specified error message and a reference to the inner exception that is the cause of this exception.
+
+ The error message that explains the reason for the exception.
+ The exception that is the cause of the current exception, or null if no inner exception is specified.
+
+
+
+ Initializes a new instance of the class.
+
+ The that holds the serialized object data about the exception being thrown.
+ The that contains contextual information about the source or destination.
+ The parameter is null.
+ The class name is null or is zero (0).
+
+
+
+ Initializes a new instance of the class
+ with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception.
+
+ The error message that explains the reason for the exception.
+ The path to the JSON where the error occurred.
+ The line number indicating where the error occurred.
+ The line position indicating where the error occurred.
+ The exception that is the cause of the current exception, or null if no inner exception is specified.
+
+
+
+ Instructs the to always serialize the member, and to require that the member has a value.
+
+
+
+
+ The exception thrown when an error occurs during JSON serialization or deserialization.
+
+
+
+
+ Gets the line number indicating where the error occurred.
+
+ The line number indicating where the error occurred.
+
+
+
+ Gets the line position indicating where the error occurred.
+
+ The line position indicating where the error occurred.
+
+
+
+ Gets the path to the JSON where the error occurred.
+
+ The path to the JSON where the error occurred.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class
+ with a specified error message.
+
+ The error message that explains the reason for the exception.
+
+
+
+ Initializes a new instance of the class
+ with a specified error message and a reference to the inner exception that is the cause of this exception.
+
+ The error message that explains the reason for the exception.
+ The exception that is the cause of the current exception, or null if no inner exception is specified.
+
+
+
+ Initializes a new instance of the class.
+
+ The that holds the serialized object data about the exception being thrown.
+ The that contains contextual information about the source or destination.
+ The parameter is null.
+ The class name is null or is zero (0).
+
+
+
+ Initializes a new instance of the class
+ with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception.
+
+ The error message that explains the reason for the exception.
+ The path to the JSON where the error occurred.
+ The line number indicating where the error occurred.
+ The line position indicating where the error occurred.
+ The exception that is the cause of the current exception, or null if no inner exception is specified.
+
+
+
+ Serializes and deserializes objects into and from the JSON format.
+ The enables you to control how objects are encoded into JSON.
+
+
+
+
+ Occurs when the errors during serialization and deserialization.
+
+
+
+
+ Gets or sets the used by the serializer when resolving references.
+
+
+
+
+ Gets or sets the used by the serializer when resolving type names.
+
+
+
+
+ Gets or sets the used by the serializer when resolving type names.
+
+
+
+
+ Gets or sets the used by the serializer when writing trace messages.
+
+ The trace writer.
+
+
+
+ Gets or sets the equality comparer used by the serializer when comparing references.
+
+ The equality comparer.
+
+
+
+ Gets or sets how type name writing and reading is handled by the serializer.
+ The default value is .
+
+
+ should be used with caution when your application deserializes JSON from an external source.
+ Incoming types should be validated with a custom
+ when deserializing with a value other than .
+
+
+
+
+ Gets or sets how a type name assembly is written and resolved by the serializer.
+ The default value is .
+
+ The type name assembly format.
+
+
+
+ Gets or sets how a type name assembly is written and resolved by the serializer.
+ The default value is .
+
+ The type name assembly format.
+
+
+
+ Gets or sets how object references are preserved by the serializer.
+ The default value is .
+
+
+
+
+ Gets or sets how reference loops (e.g. a class referencing itself) is handled.
+ The default value is .
+
+
+
+
+ Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization.
+ The default value is .
+
+
+
+
+ Gets or sets how null values are handled during serialization and deserialization.
+ The default value is .
+
+
+
+
+ Gets or sets how default values are handled during serialization and deserialization.
+ The default value is .
+
+
+
+
+ Gets or sets how objects are created during deserialization.
+ The default value is .
+
+ The object creation handling.
+
+
+
+ Gets or sets how constructors are used during deserialization.
+ The default value is .
+
+ The constructor handling.
+
+
+
+ Gets or sets how metadata properties are used during deserialization.
+ The default value is .
+
+ The metadata properties handling.
+
+
+
+ Gets a collection that will be used during serialization.
+
+ Collection that will be used during serialization.
+
+
+
+ Gets or sets the contract resolver used by the serializer when
+ serializing .NET objects to JSON and vice versa.
+
+
+
+
+ Gets or sets the used by the serializer when invoking serialization callback methods.
+
+ The context.
+
+
+
+ Indicates how JSON text output is formatted.
+ The default value is .
+
+
+
+
+ Gets or sets how dates are written to JSON text.
+ The default value is .
+
+
+
+
+ Gets or sets how time zones are handled during serialization and deserialization.
+ The default value is .
+
+
+
+
+ Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON.
+ The default value is .
+
+
+
+
+ Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text.
+ The default value is .
+
+
+
+
+ Gets or sets how special floating point numbers, e.g. ,
+ and ,
+ are written as JSON text.
+ The default value is .
+
+
+
+
+ Gets or sets how strings are escaped when writing JSON text.
+ The default value is .
+
+
+
+
+ Gets or sets how and values are formatted when writing JSON text,
+ and the expected date format when reading JSON text.
+ The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK".
+
+
+
+
+ Gets or sets the culture used when reading JSON.
+ The default value is .
+
+
+
+
+ Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a .
+ A null value means there is no maximum.
+ The default value is 64.
+
+
+
+
+ Gets a value indicating whether there will be a check for additional JSON content after deserializing an object.
+ The default value is false.
+
+
+ true if there will be a check for additional JSON content after deserializing an object; otherwise, false.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Creates a new instance.
+ The will not use default settings
+ from .
+
+
+ A new instance.
+ The will not use default settings
+ from .
+
+
+
+
+ Creates a new instance using the specified .
+ The will not use default settings
+ from .
+
+ The settings to be applied to the .
+
+ A new instance using the specified .
+ The will not use default settings
+ from .
+
+
+
+
+ Creates a new instance.
+ The will use default settings
+ from .
+
+
+ A new instance.
+ The will use default settings
+ from .
+
+
+
+
+ Creates a new instance using the specified .
+ The will use default settings
+ from as well as the specified .
+
+ The settings to be applied to the .
+
+ A new instance using the specified .
+ The will use default settings
+ from as well as the specified .
+
+
+
+
+ Populates the JSON values onto the target object.
+
+ The that contains the JSON structure to read values from.
+ The target object to populate values onto.
+
+
+
+ Populates the JSON values onto the target object.
+
+ The that contains the JSON structure to read values from.
+ The target object to populate values onto.
+
+
+
+ Deserializes the JSON structure contained by the specified .
+
+ The that contains the JSON structure to deserialize.
+ The being deserialized.
+
+
+
+ Deserializes the JSON structure contained by the specified
+ into an instance of the specified type.
+
+ The containing the object.
+ The of object being deserialized.
+ The instance of being deserialized.
+
+
+
+ Deserializes the JSON structure contained by the specified
+ into an instance of the specified type.
+
+ The containing the object.
+ The type of the object to deserialize.
+ The instance of being deserialized.
+
+
+
+ Deserializes the JSON structure contained by the specified
+ into an instance of the specified type.
+
+ The containing the object.
+ The of object being deserialized.
+ The instance of being deserialized.
+
+
+
+ Serializes the specified and writes the JSON structure
+ using the specified .
+
+ The used to write the JSON structure.
+ The to serialize.
+
+
+
+ Serializes the specified and writes the JSON structure
+ using the specified .
+
+ The used to write the JSON structure.
+ The to serialize.
+
+ The type of the value being serialized.
+ This parameter is used when is to write out the type name if the type of the value does not match.
+ Specifying the type is optional.
+
+
+
+
+ Serializes the specified and writes the JSON structure
+ using the specified .
+
+ The used to write the JSON structure.
+ The to serialize.
+
+ The type of the value being serialized.
+ This parameter is used when is Auto to write out the type name if the type of the value does not match.
+ Specifying the type is optional.
+
+
+
+
+ Serializes the specified and writes the JSON structure
+ using the specified .
+
+ The used to write the JSON structure.
+ The to serialize.
+
+
+
+ Specifies the settings on a object.
+
+
+
+
+ Gets or sets how reference loops (e.g. a class referencing itself) are handled.
+ The default value is .
+
+ Reference loop handling.
+
+
+
+ Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization.
+ The default value is .
+
+ Missing member handling.
+
+
+
+ Gets or sets how objects are created during deserialization.
+ The default value is .
+
+ The object creation handling.
+
+
+
+ Gets or sets how null values are handled during serialization and deserialization.
+ The default value is .
+
+ Null value handling.
+
+
+
+ Gets or sets how default values are handled during serialization and deserialization.
+ The default value is .
+
+ The default value handling.
+
+
+
+ Gets or sets a collection that will be used during serialization.
+
+ The converters.
+
+
+
+ Gets or sets how object references are preserved by the serializer.
+ The default value is .
+
+ The preserve references handling.
+
+
+
+ Gets or sets how type name writing and reading is handled by the serializer.
+ The default value is .
+
+
+ should be used with caution when your application deserializes JSON from an external source.
+ Incoming types should be validated with a custom
+ when deserializing with a value other than .
+
+ The type name handling.
+
+
+
+ Gets or sets how metadata properties are used during deserialization.
+ The default value is .
+
+ The metadata properties handling.
+
+
+
+ Gets or sets how a type name assembly is written and resolved by the serializer.
+ The default value is .
+
+ The type name assembly format.
+
+
+
+ Gets or sets how a type name assembly is written and resolved by the serializer.
+ The default value is .
+
+ The type name assembly format.
+
+
+
+ Gets or sets how constructors are used during deserialization.
+ The default value is .
+
+ The constructor handling.
+
+
+
+ Gets or sets the contract resolver used by the serializer when
+ serializing .NET objects to JSON and vice versa.
+
+ The contract resolver.
+
+
+
+ Gets or sets the equality comparer used by the serializer when comparing references.
+
+ The equality comparer.
+
+
+
+ Gets or sets the used by the serializer when resolving references.
+
+ The reference resolver.
+
+
+
+ Gets or sets a function that creates the used by the serializer when resolving references.
+
+ A function that creates the used by the serializer when resolving references.
+
+
+
+ Gets or sets the used by the serializer when writing trace messages.
+
+ The trace writer.
+
+
+
+ Gets or sets the used by the serializer when resolving type names.
+
+ The binder.
+
+
+
+ Gets or sets the used by the serializer when resolving type names.
+
+ The binder.
+
+
+
+ Gets or sets the error handler called during serialization and deserialization.
+
+ The error handler called during serialization and deserialization.
+
+
+
+ Gets or sets the used by the serializer when invoking serialization callback methods.
+
+ The context.
+
+
+
+ Gets or sets how and values are formatted when writing JSON text,
+ and the expected date format when reading JSON text.
+ The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK".
+
+
+
+
+ Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a .
+ A null value means there is no maximum.
+ The default value is 64.
+
+
+
+
+ Indicates how JSON text output is formatted.
+ The default value is .
+
+
+
+
+ Gets or sets how dates are written to JSON text.
+ The default value is .
+
+
+
+
+ Gets or sets how time zones are handled during serialization and deserialization.
+ The default value is .
+
+
+
+
+ Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON.
+ The default value is .
+
+
+
+
+ Gets or sets how special floating point numbers, e.g. ,
+ and ,
+ are written as JSON.
+ The default value is .
+
+
+
+
+ Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text.
+ The default value is .
+
+
+
+
+ Gets or sets how strings are escaped when writing JSON text.
+ The default value is .
+
+
+
+
+ Gets or sets the culture used when reading JSON.
+ The default value is .
+
+
+
+
+ Gets a value indicating whether there will be a check for additional content after deserializing an object.
+ The default value is false.
+
+
+ true if there will be a check for additional content after deserializing an object; otherwise, false.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class
+ using values copied from the passed in .
+
+
+
+
+ Represents a reader that provides fast, non-cached, forward-only access to JSON text data.
+
+
+
+
+ Asynchronously reads the next JSON token from the source.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns true if the next token was read successfully; false if there are no more tokens to read.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously reads the next JSON token from the source as a [].
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the []. This result will be null at the end of an array.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously reads the next JSON token from the source as a .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the . This result will be null at the end of an array.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Initializes a new instance of the class with the specified .
+
+ The containing the JSON data to read.
+
+
+
+ Gets or sets the reader's property name table.
+
+
+
+
+ Gets or sets the reader's character buffer pool.
+
+
+
+
+ Reads the next JSON token from the underlying .
+
+
+ true if the next token was read successfully; false if there are no more tokens to read.
+
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the underlying as a .
+
+ A . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the underlying as a [].
+
+ A [] or null if the next JSON token is null. This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Changes the reader's state to .
+ If is set to true, the underlying is also closed.
+
+
+
+
+ Gets a value indicating whether the class can return line information.
+
+
+ true if and can be provided; otherwise, false.
+
+
+
+
+ Gets the current line number.
+
+
+ The current line number or 0 if no line information is available (for example, returns false).
+
+
+
+
+ Gets the current line position.
+
+
+ The current line position or 0 if no line information is available (for example, returns false).
+
+
+
+
+ Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data.
+
+
+
+
+ Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the JSON value delimiter.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the specified end token.
+
+ The end token to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously closes this writer.
+ If is set to true, the destination is also closed.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the end of the current JSON object or array.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes indent characters.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes an indent space.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes raw JSON without changing the writer's state.
+
+ The raw JSON to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a null value.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the property name of a name/value pair of a JSON object.
+
+ The name of the property.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the property name of a name/value pair of a JSON object.
+
+ The name of the property.
+ A flag to indicate whether the text should be escaped when it is written as a JSON property name.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the beginning of a JSON array.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the beginning of a JSON object.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the start of a constructor with the given name.
+
+ The name of the constructor.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes an undefined value.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the given white space.
+
+ The string of white space characters.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a [] value.
+
+ The [] value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a comment /*...*/ containing the specified text.
+
+ Text to place inside the comment.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the end of an array.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the end of a constructor.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the end of a JSON object.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes raw JSON where a value is expected and updates the writer's state.
+
+ The raw JSON to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Gets or sets the writer's character array pool.
+
+
+
+
+ Gets or sets how many s to write for each level in the hierarchy when is set to .
+
+
+
+
+ Gets or sets which character to use to quote attribute values.
+
+
+
+
+ Gets or sets which character to use for indenting when is set to .
+
+
+
+
+ Gets or sets a value indicating whether object names will be surrounded with quotes.
+
+
+
+
+ Initializes a new instance of the class using the specified .
+
+ The to write to.
+
+
+
+ Flushes whatever is in the buffer to the underlying and also flushes the underlying .
+
+
+
+
+ Closes this writer.
+ If is set to true, the underlying is also closed.
+ If is set to true, the JSON is auto-completed.
+
+
+
+
+ Writes the beginning of a JSON object.
+
+
+
+
+ Writes the beginning of a JSON array.
+
+
+
+
+ Writes the start of a constructor with the given name.
+
+ The name of the constructor.
+
+
+
+ Writes the specified end token.
+
+ The end token to write.
+
+
+
+ Writes the property name of a name/value pair on a JSON object.
+
+ The name of the property.
+
+
+
+ Writes the property name of a name/value pair on a JSON object.
+
+ The name of the property.
+ A flag to indicate whether the text should be escaped when it is written as a JSON property name.
+
+
+
+ Writes indent characters.
+
+
+
+
+ Writes the JSON value delimiter.
+
+
+
+
+ Writes an indent space.
+
+
+
+
+ Writes a value.
+ An error will raised if the value cannot be written as a single JSON token.
+
+ The value to write.
+
+
+
+ Writes a null value.
+
+
+
+
+ Writes an undefined value.
+
+
+
+
+ Writes raw JSON.
+
+ The raw JSON to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a [] value.
+
+ The [] value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a comment /*...*/ containing the specified text.
+
+ Text to place inside the comment.
+
+
+
+ Writes the given white space.
+
+ The string of white space characters.
+
+
+
+ Specifies the type of JSON token.
+
+
+
+
+ This is returned by the if a read method has not been called.
+
+
+
+
+ An object start token.
+
+
+
+
+ An array start token.
+
+
+
+
+ A constructor start token.
+
+
+
+
+ An object property name.
+
+
+
+
+ A comment.
+
+
+
+
+ Raw JSON.
+
+
+
+
+ An integer.
+
+
+
+
+ A float.
+
+
+
+
+ A string.
+
+
+
+
+ A boolean.
+
+
+
+
+ A null token.
+
+
+
+
+ An undefined token.
+
+
+
+
+ An object end token.
+
+
+
+
+ An array end token.
+
+
+
+
+ A constructor end token.
+
+
+
+
+ A Date.
+
+
+
+
+ Byte data.
+
+
+
+
+
+ Represents a reader that provides validation.
+
+
+ JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+ Sets an event handler for receiving schema validation errors.
+
+
+
+
+ Gets the text value of the current JSON token.
+
+
+
+
+
+ Gets the depth of the current token in the JSON document.
+
+ The depth of the current token in the JSON document.
+
+
+
+ Gets the path of the current JSON token.
+
+
+
+
+ Gets the quotation mark character used to enclose the value of a string.
+
+
+
+
+
+ Gets the type of the current JSON token.
+
+
+
+
+
+ Gets the .NET type for the current JSON token.
+
+
+
+
+
+ Initializes a new instance of the class that
+ validates the content returned from the given .
+
+ The to read from while validating.
+
+
+
+ Gets or sets the schema.
+
+ The schema.
+
+
+
+ Gets the used to construct this .
+
+ The specified in the constructor.
+
+
+
+ Changes the reader's state to .
+ If is set to true, the underlying is also closed.
+
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of .
+
+
+
+ Reads the next JSON token from the underlying as a [].
+
+
+ A [] or null if the next JSON token is null.
+
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of .
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of .
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of .
+
+
+
+ Reads the next JSON token from the underlying as a .
+
+ A . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of .
+
+
+
+ Reads the next JSON token from the underlying .
+
+
+ true if the next token was read successfully; false if there are no more tokens to read.
+
+
+
+
+ Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data.
+
+
+
+
+ Asynchronously closes this writer.
+ If is set to true, the destination is also closed.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the specified end token.
+
+ The end token to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes indent characters.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the JSON value delimiter.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes an indent space.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes raw JSON without changing the writer's state.
+
+ The raw JSON to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the end of the current JSON object or array.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the end of an array.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the end of a constructor.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the end of a JSON object.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a null value.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the property name of a name/value pair of a JSON object.
+
+ The name of the property.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the property name of a name/value pair of a JSON object.
+
+ The name of the property.
+ A flag to indicate whether the text should be escaped when it is written as a JSON property name.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the beginning of a JSON array.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a comment /*...*/ containing the specified text.
+
+ Text to place inside the comment.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes raw JSON where a value is expected and updates the writer's state.
+
+ The raw JSON to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the start of a constructor with the given name.
+
+ The name of the constructor.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the beginning of a JSON object.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the current token.
+
+ The to read the token from.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the current token.
+
+ The to read the token from.
+ A flag indicating whether the current token's children should be written.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the token and its value.
+
+ The to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the token and its value.
+
+ The to write.
+
+ The value to write.
+ A value is only required for tokens that have an associated value, e.g. the property name for .
+ null can be passed to the method for tokens that don't have a value, e.g. .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a [] value.
+
+ The [] value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes an undefined value.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously writes the given white space.
+
+ The string of white space characters.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Asynchronously ets the state of the .
+
+ The being written.
+ The value being written.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asynchronicity.
+
+
+
+ Gets or sets a value indicating whether the destination should be closed when this writer is closed.
+
+
+ true to close the destination when this writer is closed; otherwise false. The default is true.
+
+
+
+
+ Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed.
+
+
+ true to auto-complete the JSON when this writer is closed; otherwise false. The default is true.
+
+
+
+
+ Gets the top.
+
+ The top.
+
+
+
+ Gets the state of the writer.
+
+
+
+
+ Gets the path of the writer.
+
+
+
+
+ Gets or sets a value indicating how JSON text output should be formatted.
+
+
+
+
+ Gets or sets how dates are written to JSON text.
+
+
+
+
+ Gets or sets how time zones are handled when writing JSON text.
+
+
+
+
+ Gets or sets how strings are escaped when writing JSON text.
+
+
+
+
+ Gets or sets how special floating point numbers, e.g. ,
+ and ,
+ are written to JSON text.
+
+
+
+
+ Gets or sets how and values are formatted when writing JSON text.
+
+
+
+
+ Gets or sets the culture used when writing JSON. Defaults to .
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Flushes whatever is in the buffer to the destination and also flushes the destination.
+
+
+
+
+ Closes this writer.
+ If is set to true, the destination is also closed.
+ If is set to true, the JSON is auto-completed.
+
+
+
+
+ Writes the beginning of a JSON object.
+
+
+
+
+ Writes the end of a JSON object.
+
+
+
+
+ Writes the beginning of a JSON array.
+
+
+
+
+ Writes the end of an array.
+
+
+
+
+ Writes the start of a constructor with the given name.
+
+ The name of the constructor.
+
+
+
+ Writes the end constructor.
+
+
+
+
+ Writes the property name of a name/value pair of a JSON object.
+
+ The name of the property.
+
+
+
+ Writes the property name of a name/value pair of a JSON object.
+
+ The name of the property.
+ A flag to indicate whether the text should be escaped when it is written as a JSON property name.
+
+
+
+ Writes the end of the current JSON object or array.
+
+
+
+
+ Writes the current token and its children.
+
+ The to read the token from.
+
+
+
+ Writes the current token.
+
+ The to read the token from.
+ A flag indicating whether the current token's children should be written.
+
+
+
+ Writes the token and its value.
+
+ The to write.
+
+ The value to write.
+ A value is only required for tokens that have an associated value, e.g. the property name for .
+ null can be passed to the method for tokens that don't have a value, e.g. .
+
+
+
+
+ Writes the token.
+
+ The to write.
+
+
+
+ Writes the specified end token.
+
+ The end token to write.
+
+
+
+ Writes indent characters.
+
+
+
+
+ Writes the JSON value delimiter.
+
+
+
+
+ Writes an indent space.
+
+
+
+
+ Writes a null value.
+
+
+
+
+ Writes an undefined value.
+
+
+
+
+ Writes raw JSON without changing the writer's state.
+
+ The raw JSON to write.
+
+
+
+ Writes raw JSON where a value is expected and updates the writer's state.
+
+ The raw JSON to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a [] value.
+
+ The [] value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+ An error will raised if the value cannot be written as a single JSON token.
+
+ The value to write.
+
+
+
+ Writes a comment /*...*/ containing the specified text.
+
+ Text to place inside the comment.
+
+
+
+ Writes the given white space.
+
+ The string of white space characters.
+
+
+
+ Releases unmanaged and - optionally - managed resources.
+
+ true to release both managed and unmanaged resources; false to release only unmanaged resources.
+
+
+
+ Sets the state of the .
+
+ The being written.
+ The value being written.
+
+
+
+ The exception thrown when an error occurs while writing JSON text.
+
+
+
+
+ Gets the path to the JSON where the error occurred.
+
+ The path to the JSON where the error occurred.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class
+ with a specified error message.
+
+ The error message that explains the reason for the exception.
+
+
+
+ Initializes a new instance of the class
+ with a specified error message and a reference to the inner exception that is the cause of this exception.
+
+ The error message that explains the reason for the exception.
+ The exception that is the cause of the current exception, or null if no inner exception is specified.
+
+
+
+ Initializes a new instance of the class.
+
+ The that holds the serialized object data about the exception being thrown.
+ The that contains contextual information about the source or destination.
+ The parameter is null.
+ The class name is null or is zero (0).
+
+
+
+ Initializes a new instance of the class
+ with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception.
+
+ The error message that explains the reason for the exception.
+ The path to the JSON where the error occurred.
+ The exception that is the cause of the current exception, or null if no inner exception is specified.
+
+
+
+ Specifies how JSON comments are handled when loading JSON.
+
+
+
+
+ Ignore comments.
+
+
+
+
+ Load comments as a with type .
+
+
+
+
+ Specifies how duplicate property names are handled when loading JSON.
+
+
+
+
+ Replace the existing value when there is a duplicate property. The value of the last property in the JSON object will be used.
+
+
+
+
+ Ignore the new value when there is a duplicate property. The value of the first property in the JSON object will be used.
+
+
+
+
+ Throw a when a duplicate property is encountered.
+
+
+
+
+ Contains the LINQ to JSON extension methods.
+
+
+
+
+ Returns a collection of tokens that contains the ancestors of every token in the source collection.
+
+ The type of the objects in source, constrained to .
+ An of that contains the source collection.
+ An of that contains the ancestors of every token in the source collection.
+
+
+
+ Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection.
+
+ The type of the objects in source, constrained to .
+ An of that contains the source collection.
+ An of that contains every token in the source collection, the ancestors of every token in the source collection.
+
+
+
+ Returns a collection of tokens that contains the descendants of every token in the source collection.
+
+ The type of the objects in source, constrained to .
+ An of that contains the source collection.
+ An of that contains the descendants of every token in the source collection.
+
+
+
+ Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection.
+
+ The type of the objects in source, constrained to .
+ An of that contains the source collection.
+ An of that contains every token in the source collection, and the descendants of every token in the source collection.
+
+
+
+ Returns a collection of child properties of every object in the source collection.
+
+ An of that contains the source collection.
+ An of that contains the properties of every object in the source collection.
+
+
+
+ Returns a collection of child values of every object in the source collection with the given key.
+
+ An of that contains the source collection.
+ The token key.
+ An of that contains the values of every token in the source collection with the given key.
+
+
+
+ Returns a collection of child values of every object in the source collection.
+
+ An of that contains the source collection.
+ An of that contains the values of every token in the source collection.
+
+
+
+ Returns a collection of converted child values of every object in the source collection with the given key.
+
+ The type to convert the values to.
+ An of that contains the source collection.
+ The token key.
+ An that contains the converted values of every token in the source collection with the given key.
+
+
+
+ Returns a collection of converted child values of every object in the source collection.
+
+ The type to convert the values to.
+ An of that contains the source collection.
+ An that contains the converted values of every token in the source collection.
+
+
+
+ Converts the value.
+
+ The type to convert the value to.
+ A cast as a of .
+ A converted value.
+
+
+
+ Converts the value.
+
+ The source collection type.
+ The type to convert the value to.
+ A cast as a of .
+ A converted value.
+
+
+
+ Returns a collection of child tokens of every array in the source collection.
+
+ The source collection type.
+ An of that contains the source collection.
+ An of that contains the values of every token in the source collection.
+
+
+
+ Returns a collection of converted child tokens of every array in the source collection.
+
+ An of that contains the source collection.
+ The type to convert the values to.
+ The source collection type.
+ An that contains the converted values of every token in the source collection.
+
+
+
+ Returns the input typed as .
+
+ An of that contains the source collection.
+ The input typed as .
+
+
+
+ Returns the input typed as .
+
+ The source collection type.
+ An of that contains the source collection.
+ The input typed as .
+
+
+
+ Represents a collection of objects.
+
+ The type of token.
+
+
+
+ Gets the of with the specified key.
+
+
+
+
+
+ Represents a JSON array.
+
+
+
+
+
+
+
+ Writes this token to a asynchronously.
+
+ A into which this method will write.
+ The token to monitor for cancellation requests.
+ A collection of which will be used when writing the token.
+ A that represents the asynchronous write operation.
+
+
+
+ Asynchronously loads a from a .
+
+ A that will be read for the content of the .
+ If this is null, default load settings will be used.
+ The token to monitor for cancellation requests. The default value is .
+ A representing the asynchronous load. The property contains the JSON that was read from the specified .
+
+
+
+ Asynchronously loads a from a .
+
+ A that will be read for the content of the .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ The token to monitor for cancellation requests. The default value is .
+ A representing the asynchronous load. The property contains the JSON that was read from the specified .
+
+
+
+ Gets the container's children tokens.
+
+ The container's children tokens.
+
+
+
+ Gets the node type for this .
+
+ The type.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class from another object.
+
+ A object to copy from.
+
+
+
+ Initializes a new instance of the class with the specified content.
+
+ The contents of the array.
+
+
+
+ Initializes a new instance of the class with the specified content.
+
+ The contents of the array.
+
+
+
+ Loads an from a .
+
+ A that will be read for the content of the .
+ A that contains the JSON that was read from the specified .
+
+
+
+ Loads an from a .
+
+ A that will be read for the content of the .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ A that contains the JSON that was read from the specified .
+
+
+
+ Load a from a string that contains JSON.
+
+ A that contains JSON.
+ A populated from the string that contains JSON.
+
+
+
+
+
+
+ Load a from a string that contains JSON.
+
+ A that contains JSON.
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ A populated from the string that contains JSON.
+
+
+
+
+
+
+ Creates a from an object.
+
+ The object that will be used to create .
+ A with the values of the specified object.
+
+
+
+ Creates a from an object.
+
+ The object that will be used to create .
+ The that will be used to read the object.
+ A with the values of the specified object.
+
+
+
+ Writes this token to a .
+
+ A into which this method will write.
+ A collection of which will be used when writing the token.
+
+
+
+ Gets the with the specified key.
+
+ The with the specified key.
+
+
+
+ Gets or sets the at the specified index.
+
+
+
+
+
+ Determines the index of a specific item in the .
+
+ The object to locate in the .
+
+ The index of if found in the list; otherwise, -1.
+
+
+
+
+ Inserts an item to the at the specified index.
+
+ The zero-based index at which should be inserted.
+ The object to insert into the .
+
+ is not a valid index in the .
+
+
+
+
+ Removes the item at the specified index.
+
+ The zero-based index of the item to remove.
+
+ is not a valid index in the .
+
+
+
+
+ Returns an enumerator that iterates through the collection.
+
+
+ A of that can be used to iterate through the collection.
+
+
+
+
+ Adds an item to the .
+
+ The object to add to the .
+
+
+
+ Removes all items from the .
+
+
+
+
+ Determines whether the contains a specific value.
+
+ The object to locate in the .
+
+ true if is found in the ; otherwise, false.
+
+
+
+
+ Copies the elements of the to an array, starting at a particular array index.
+
+ The array.
+ Index of the array.
+
+
+
+ Gets a value indicating whether the is read-only.
+
+ true if the is read-only; otherwise, false.
+
+
+
+ Removes the first occurrence of a specific object from the .
+
+ The object to remove from the .
+
+ true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original .
+
+
+
+
+ Represents a JSON constructor.
+
+
+
+
+ Writes this token to a asynchronously.
+
+ A into which this method will write.
+ The token to monitor for cancellation requests.
+ A collection of which will be used when writing the token.
+ A that represents the asynchronous write operation.
+
+
+
+ Asynchronously loads a from a .
+
+ A that will be read for the content of the .
+ The token to monitor for cancellation requests. The default value is .
+
+ A that represents the asynchronous load. The
+ property returns a that contains the JSON that was read from the specified .
+
+
+
+ Asynchronously loads a from a .
+
+ A that will be read for the content of the .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ The token to monitor for cancellation requests. The default value is .
+
+ A that represents the asynchronous load. The
+ property returns a that contains the JSON that was read from the specified .
+
+
+
+ Gets the container's children tokens.
+
+ The container's children tokens.
+
+
+
+ Gets or sets the name of this constructor.
+
+ The constructor name.
+
+
+
+ Gets the node type for this .
+
+ The type.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class from another object.
+
+ A object to copy from.
+
+
+
+ Initializes a new instance of the class with the specified name and content.
+
+ The constructor name.
+ The contents of the constructor.
+
+
+
+ Initializes a new instance of the class with the specified name and content.
+
+ The constructor name.
+ The contents of the constructor.
+
+
+
+ Initializes a new instance of the class with the specified name.
+
+ The constructor name.
+
+
+
+ Writes this token to a .
+
+ A into which this method will write.
+ A collection of which will be used when writing the token.
+
+
+
+ Gets the with the specified key.
+
+ The with the specified key.
+
+
+
+ Loads a from a .
+
+ A that will be read for the content of the .
+ A that contains the JSON that was read from the specified .
+
+
+
+ Loads a from a .
+
+ A that will be read for the content of the .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ A that contains the JSON that was read from the specified .
+
+
+
+ Represents a token that can contain other tokens.
+
+
+
+
+ Occurs when the list changes or an item in the list changes.
+
+
+
+
+ Occurs before an item is added to the collection.
+
+
+
+
+ Occurs when the items list of the collection has changed, or the collection is reset.
+
+
+
+
+ Gets the container's children tokens.
+
+ The container's children tokens.
+
+
+
+ Raises the event.
+
+ The instance containing the event data.
+
+
+
+ Raises the event.
+
+ The instance containing the event data.
+
+
+
+ Raises the event.
+
+ The instance containing the event data.
+
+
+
+ Gets a value indicating whether this token has child tokens.
+
+
+ true if this token has child values; otherwise, false.
+
+
+
+
+ Get the first child token of this token.
+
+
+ A containing the first child token of the .
+
+
+
+
+ Get the last child token of this token.
+
+
+ A containing the last child token of the .
+
+
+
+
+ Returns a collection of the child tokens of this token, in document order.
+
+
+ An of containing the child tokens of this , in document order.
+
+
+
+
+ Returns a collection of the child values of this token, in document order.
+
+ The type to convert the values to.
+
+ A containing the child values of this , in document order.
+
+
+
+
+ Returns a collection of the descendant tokens for this token in document order.
+
+ An of containing the descendant tokens of the .
+
+
+
+ Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order.
+
+ An of containing this token, and all the descendant tokens of the .
+
+
+
+ Adds the specified content as children of this .
+
+ The content to be added.
+
+
+
+ Adds the specified content as the first children of this .
+
+ The content to be added.
+
+
+
+ Creates a that can be used to add tokens to the .
+
+ A that is ready to have content written to it.
+
+
+
+ Replaces the child nodes of this token with the specified content.
+
+ The content.
+
+
+
+ Removes the child nodes from this token.
+
+
+
+
+ Merge the specified content into this .
+
+ The content to be merged.
+
+
+
+ Merge the specified content into this using .
+
+ The content to be merged.
+ The used to merge the content.
+
+
+
+ Gets the count of child JSON tokens.
+
+ The count of child JSON tokens.
+
+
+
+ Represents a collection of objects.
+
+ The type of token.
+
+
+
+ An empty collection of objects.
+
+
+
+
+ Initializes a new instance of the struct.
+
+ The enumerable.
+
+
+
+ Returns an enumerator that can be used to iterate through the collection.
+
+
+ A that can be used to iterate through the collection.
+
+
+
+
+ Gets the of with the specified key.
+
+
+
+
+
+ Determines whether the specified is equal to this instance.
+
+ The to compare with this instance.
+
+ true if the specified is equal to this instance; otherwise, false.
+
+
+
+
+ Determines whether the specified is equal to this instance.
+
+ The to compare with this instance.
+
+ true if the specified is equal to this instance; otherwise, false.
+
+
+
+
+ Returns a hash code for this instance.
+
+
+ A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table.
+
+
+
+
+ Represents a JSON object.
+
+
+
+
+
+
+
+ Writes this token to a asynchronously.
+
+ A into which this method will write.
+ The token to monitor for cancellation requests.
+ A collection of which will be used when writing the token.
+ A that represents the asynchronous write operation.
+
+
+
+ Asynchronously loads a from a .
+
+ A that will be read for the content of the .
+ The token to monitor for cancellation requests. The default value is .
+
+ A that represents the asynchronous load. The
+ property returns a that contains the JSON that was read from the specified .
+
+
+
+ Asynchronously loads a from a .
+
+ A that will be read for the content of the .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ The token to monitor for cancellation requests. The default value is .
+
+ A that represents the asynchronous load. The
+ property returns a that contains the JSON that was read from the specified .
+
+
+
+ Gets the container's children tokens.
+
+ The container's children tokens.
+
+
+
+ Occurs when a property value changes.
+
+
+
+
+ Occurs when a property value is changing.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class from another object.
+
+ A object to copy from.
+
+
+
+ Initializes a new instance of the class with the specified content.
+
+ The contents of the object.
+
+
+
+ Initializes a new instance of the class with the specified content.
+
+ The contents of the object.
+
+
+
+ Gets the node type for this .
+
+ The type.
+
+
+
+ Gets an of of this object's properties.
+
+ An of of this object's properties.
+
+
+
+ Gets a with the specified name.
+
+ The property name.
+ A with the specified name or null.
+
+
+
+ Gets the with the specified name.
+ The exact name will be searched for first and if no matching property is found then
+ the will be used to match a property.
+
+ The property name.
+ One of the enumeration values that specifies how the strings will be compared.
+ A matched with the specified name or null.
+
+
+
+ Gets a of of this object's property values.
+
+ A of of this object's property values.
+
+
+
+ Gets the with the specified key.
+
+ The with the specified key.
+
+
+
+ Gets or sets the with the specified property name.
+
+
+
+
+
+ Loads a from a .
+
+ A that will be read for the content of the .
+ A that contains the JSON that was read from the specified .
+
+ is not valid JSON.
+
+
+
+
+ Loads a from a .
+
+ A that will be read for the content of the .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ A that contains the JSON that was read from the specified .
+
+ is not valid JSON.
+
+
+
+
+ Load a from a string that contains JSON.
+
+ A that contains JSON.
+ A populated from the string that contains JSON.
+
+ is not valid JSON.
+
+
+
+
+
+
+
+ Load a from a string that contains JSON.
+
+ A that contains JSON.
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ A populated from the string that contains JSON.
+
+ is not valid JSON.
+
+
+
+
+
+
+
+ Creates a from an object.
+
+ The object that will be used to create .
+ A with the values of the specified object.
+
+
+
+ Creates a from an object.
+
+ The object that will be used to create .
+ The that will be used to read the object.
+ A with the values of the specified object.
+
+
+
+ Writes this token to a .
+
+ A into which this method will write.
+ A collection of which will be used when writing the token.
+
+
+
+ Gets the with the specified property name.
+
+ Name of the property.
+ The with the specified property name.
+
+
+
+ Gets the with the specified property name.
+ The exact property name will be searched for first and if no matching property is found then
+ the will be used to match a property.
+
+ Name of the property.
+ One of the enumeration values that specifies how the strings will be compared.
+ The with the specified property name.
+
+
+
+ Tries to get the with the specified property name.
+ The exact property name will be searched for first and if no matching property is found then
+ the will be used to match a property.
+
+ Name of the property.
+ The value.
+ One of the enumeration values that specifies how the strings will be compared.
+ true if a value was successfully retrieved; otherwise, false.
+
+
+
+ Adds the specified property name.
+
+ Name of the property.
+ The value.
+
+
+
+ Determines whether the JSON object has the specified property name.
+
+ Name of the property.
+ true if the JSON object has the specified property name; otherwise, false.
+
+
+
+ Removes the property with the specified name.
+
+ Name of the property.
+ true if item was successfully removed; otherwise, false.
+
+
+
+ Tries to get the with the specified property name.
+
+ Name of the property.
+ The value.
+ true if a value was successfully retrieved; otherwise, false.
+
+
+
+ Returns an enumerator that can be used to iterate through the collection.
+
+
+ A that can be used to iterate through the collection.
+
+
+
+
+ Raises the event with the provided arguments.
+
+ Name of the property.
+
+
+
+ Raises the event with the provided arguments.
+
+ Name of the property.
+
+
+
+ Returns the responsible for binding operations performed on this object.
+
+ The expression tree representation of the runtime value.
+
+ The to bind this object.
+
+
+
+
+ Represents a JSON property.
+
+
+
+
+ Writes this token to a asynchronously.
+
+ A into which this method will write.
+ The token to monitor for cancellation requests.
+ A collection of which will be used when writing the token.
+ A that represents the asynchronous write operation.
+
+
+
+ Asynchronously loads a from a .
+
+ A that will be read for the content of the .
+ The token to monitor for cancellation requests. The default value is .
+ A representing the asynchronous creation. The
+ property returns a that contains the JSON that was read from the specified .
+
+
+
+ Asynchronously loads a from a .
+
+ A that will be read for the content of the .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ The token to monitor for cancellation requests. The default value is .
+ A representing the asynchronous creation. The
+ property returns a that contains the JSON that was read from the specified .
+
+
+
+ Gets the container's children tokens.
+
+ The container's children tokens.
+
+
+
+ Gets the property name.
+
+ The property name.
+
+
+
+ Gets or sets the property value.
+
+ The property value.
+
+
+
+ Initializes a new instance of the class from another object.
+
+ A object to copy from.
+
+
+
+ Gets the node type for this .
+
+ The type.
+
+
+
+ Initializes a new instance of the class.
+
+ The property name.
+ The property content.
+
+
+
+ Initializes a new instance of the class.
+
+ The property name.
+ The property content.
+
+
+
+ Writes this token to a .
+
+ A into which this method will write.
+ A collection of which will be used when writing the token.
+
+
+
+ Loads a from a .
+
+ A that will be read for the content of the .
+ A that contains the JSON that was read from the specified .
+
+
+
+ Loads a from a .
+
+ A that will be read for the content of the .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ A that contains the JSON that was read from the specified .
+
+
+
+ Represents a view of a .
+
+
+
+
+ Initializes a new instance of the class.
+
+ The name.
+
+
+
+ When overridden in a derived class, returns whether resetting an object changes its value.
+
+
+ true if resetting the component changes its value; otherwise, false.
+
+ The component to test for reset capability.
+
+
+
+ When overridden in a derived class, gets the current value of the property on a component.
+
+
+ The value of a property for a given component.
+
+ The component with the property for which to retrieve the value.
+
+
+
+ When overridden in a derived class, resets the value for this property of the component to the default value.
+
+ The component with the property value that is to be reset to the default value.
+
+
+
+ When overridden in a derived class, sets the value of the component to a different value.
+
+ The component with the property value that is to be set.
+ The new value.
+
+
+
+ When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted.
+
+
+ true if the property should be persisted; otherwise, false.
+
+ The component with the property to be examined for persistence.
+
+
+
+ When overridden in a derived class, gets the type of the component this property is bound to.
+
+
+ A that represents the type of component this property is bound to.
+ When the or
+
+ methods are invoked, the object specified might be an instance of this type.
+
+
+
+
+ When overridden in a derived class, gets a value indicating whether this property is read-only.
+
+
+ true if the property is read-only; otherwise, false.
+
+
+
+
+ When overridden in a derived class, gets the type of the property.
+
+
+ A that represents the type of the property.
+
+
+
+
+ Gets the hash code for the name of the member.
+
+
+
+ The hash code for the name of the member.
+
+
+
+
+ Represents a raw JSON string.
+
+
+
+
+ Asynchronously creates an instance of with the content of the reader's current token.
+
+ The reader.
+ The token to monitor for cancellation requests. The default value is .
+ A representing the asynchronous creation. The
+ property returns an instance of with the content of the reader's current token.
+
+
+
+ Initializes a new instance of the class from another object.
+
+ A object to copy from.
+
+
+
+ Initializes a new instance of the class.
+
+ The raw json.
+
+
+
+ Creates an instance of with the content of the reader's current token.
+
+ The reader.
+ An instance of with the content of the reader's current token.
+
+
+
+ Specifies the settings used when cloning JSON.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets a flag that indicates whether to copy annotations when cloning a .
+ The default value is true.
+
+
+ A flag that indicates whether to copy annotations when cloning a .
+
+
+
+
+ Specifies the settings used when loading JSON.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets how JSON comments are handled when loading JSON.
+ The default value is .
+
+ The JSON comment handling.
+
+
+
+ Gets or sets how JSON line info is handled when loading JSON.
+ The default value is .
+
+ The JSON line info handling.
+
+
+
+ Gets or sets how duplicate property names in JSON objects are handled when loading JSON.
+ The default value is .
+
+ The JSON duplicate property name handling.
+
+
+
+ Specifies the settings used when merging JSON.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the method used when merging JSON arrays.
+
+ The method used when merging JSON arrays.
+
+
+
+ Gets or sets how null value properties are merged.
+
+ How null value properties are merged.
+
+
+
+ Gets or sets the comparison used to match property names while merging.
+ The exact property name will be searched for first and if no matching property is found then
+ the will be used to match a property.
+
+ The comparison used to match property names while merging.
+
+
+
+ Specifies the settings used when selecting JSON.
+
+
+
+
+ Gets or sets a timeout that will be used when executing regular expressions.
+
+ The timeout that will be used when executing regular expressions.
+
+
+
+ Gets or sets a flag that indicates whether an error should be thrown if
+ no tokens are found when evaluating part of the expression.
+
+
+ A flag that indicates whether an error should be thrown if
+ no tokens are found when evaluating part of the expression.
+
+
+
+
+ Represents an abstract JSON token.
+
+
+
+
+ Writes this token to a asynchronously.
+
+ A into which this method will write.
+ The token to monitor for cancellation requests.
+ A collection of which will be used when writing the token.
+ A that represents the asynchronous write operation.
+
+
+
+ Writes this token to a asynchronously.
+
+ A into which this method will write.
+ A collection of which will be used when writing the token.
+ A that represents the asynchronous write operation.
+
+
+
+ Asynchronously creates a from a .
+
+ An positioned at the token to read into this .
+ The token to monitor for cancellation requests. The default value is .
+
+ A that represents the asynchronous creation. The
+ property returns a that contains
+ the token and its descendant tokens
+ that were read from the reader. The runtime type of the token is determined
+ by the token type of the first token encountered in the reader.
+
+
+
+
+ Asynchronously creates a from a .
+
+ An positioned at the token to read into this .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ The token to monitor for cancellation requests. The default value is .
+
+ A that represents the asynchronous creation. The
+ property returns a that contains
+ the token and its descendant tokens
+ that were read from the reader. The runtime type of the token is determined
+ by the token type of the first token encountered in the reader.
+
+
+
+
+ Asynchronously creates a from a .
+
+ A positioned at the token to read into this .
+ The token to monitor for cancellation requests. The default value is .
+
+ A that represents the asynchronous creation. The
+ property returns a that contains the token and its descendant tokens
+ that were read from the reader. The runtime type of the token is determined
+ by the token type of the first token encountered in the reader.
+
+
+
+
+ Asynchronously creates a from a .
+
+ A positioned at the token to read into this .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ The token to monitor for cancellation requests. The default value is .
+
+ A that represents the asynchronous creation. The
+ property returns a that contains the token and its descendant tokens
+ that were read from the reader. The runtime type of the token is determined
+ by the token type of the first token encountered in the reader.
+
+
+
+
+ Gets a comparer that can compare two tokens for value equality.
+
+ A that can compare two nodes for value equality.
+
+
+
+ Gets or sets the parent.
+
+ The parent.
+
+
+
+ Gets the root of this .
+
+ The root of this .
+
+
+
+ Gets the node type for this .
+
+ The type.
+
+
+
+ Gets a value indicating whether this token has child tokens.
+
+
+ true if this token has child values; otherwise, false.
+
+
+
+
+ Compares the values of two tokens, including the values of all descendant tokens.
+
+ The first to compare.
+ The second to compare.
+ true if the tokens are equal; otherwise false.
+
+
+
+ Gets the next sibling token of this node.
+
+ The that contains the next sibling token.
+
+
+
+ Gets the previous sibling token of this node.
+
+ The that contains the previous sibling token.
+
+
+
+ Gets the path of the JSON token.
+
+
+
+
+ Adds the specified content immediately after this token.
+
+ A content object that contains simple content or a collection of content objects to be added after this token.
+
+
+
+ Adds the specified content immediately before this token.
+
+ A content object that contains simple content or a collection of content objects to be added before this token.
+
+
+
+ Returns a collection of the ancestor tokens of this token.
+
+ A collection of the ancestor tokens of this token.
+
+
+
+ Returns a collection of tokens that contain this token, and the ancestors of this token.
+
+ A collection of tokens that contain this token, and the ancestors of this token.
+
+
+
+ Returns a collection of the sibling tokens after this token, in document order.
+
+ A collection of the sibling tokens after this tokens, in document order.
+
+
+
+ Returns a collection of the sibling tokens before this token, in document order.
+
+ A collection of the sibling tokens before this token, in document order.
+
+
+
+ Gets the with the specified key.
+
+ The with the specified key.
+
+
+
+ Gets the with the specified key converted to the specified type.
+
+ The type to convert the token to.
+ The token key.
+ The converted token value.
+
+
+
+ Get the first child token of this token.
+
+ A containing the first child token of the .
+
+
+
+ Get the last child token of this token.
+
+ A containing the last child token of the .
+
+
+
+ Returns a collection of the child tokens of this token, in document order.
+
+ An of containing the child tokens of this , in document order.
+
+
+
+ Returns a collection of the child tokens of this token, in document order, filtered by the specified type.
+
+ The type to filter the child tokens on.
+ A containing the child tokens of this , in document order.
+
+
+
+ Returns a collection of the child values of this token, in document order.
+
+ The type to convert the values to.
+ A containing the child values of this , in document order.
+
+
+
+ Removes this token from its parent.
+
+
+
+
+ Replaces this token with the specified token.
+
+ The value.
+
+
+
+ Writes this token to a .
+
+ A into which this method will write.
+ A collection of which will be used when writing the token.
+
+
+
+ Returns the indented JSON for this token.
+
+
+ ToString() returns a non-JSON string value for tokens with a type of .
+ If you want the JSON for all token types then you should use .
+
+
+ The indented JSON for this token.
+
+
+
+
+ Returns the JSON for this token using the given formatting and converters.
+
+ Indicates how the output should be formatted.
+ A collection of s which will be used when writing the token.
+ The JSON for this token using the given formatting and converters.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to [].
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from [] to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Creates a for this token.
+
+ A that can be used to read this token and its descendants.
+
+
+
+ Creates a from an object.
+
+ The object that will be used to create .
+ A with the value of the specified object.
+
+
+
+ Creates a from an object using the specified .
+
+ The object that will be used to create .
+ The that will be used when reading the object.
+ A with the value of the specified object.
+
+
+
+ Creates an instance of the specified .NET type from the .
+
+ The object type that the token will be deserialized to.
+ The new object created from the JSON value.
+
+
+
+ Creates an instance of the specified .NET type from the .
+
+ The object type that the token will be deserialized to.
+ The new object created from the JSON value.
+
+
+
+ Creates an instance of the specified .NET type from the using the specified .
+
+ The object type that the token will be deserialized to.
+ The that will be used when creating the object.
+ The new object created from the JSON value.
+
+
+
+ Creates an instance of the specified .NET type from the using the specified .
+
+ The object type that the token will be deserialized to.
+ The that will be used when creating the object.
+ The new object created from the JSON value.
+
+
+
+ Creates a from a .
+
+ A positioned at the token to read into this .
+
+ A that contains the token and its descendant tokens
+ that were read from the reader. The runtime type of the token is determined
+ by the token type of the first token encountered in the reader.
+
+
+
+
+ Creates a from a .
+
+ An positioned at the token to read into this .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+
+ A that contains the token and its descendant tokens
+ that were read from the reader. The runtime type of the token is determined
+ by the token type of the first token encountered in the reader.
+
+
+
+
+ Load a from a string that contains JSON.
+
+ A that contains JSON.
+ A populated from the string that contains JSON.
+
+
+
+ Load a from a string that contains JSON.
+
+ A that contains JSON.
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ A populated from the string that contains JSON.
+
+
+
+ Creates a from a .
+
+ A positioned at the token to read into this .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+
+ A that contains the token and its descendant tokens
+ that were read from the reader. The runtime type of the token is determined
+ by the token type of the first token encountered in the reader.
+
+
+
+
+ Creates a from a .
+
+ A positioned at the token to read into this .
+
+ A that contains the token and its descendant tokens
+ that were read from the reader. The runtime type of the token is determined
+ by the token type of the first token encountered in the reader.
+
+
+
+
+ Selects a using a JSONPath expression. Selects the token that matches the object path.
+
+
+ A that contains a JSONPath expression.
+
+ A , or null.
+
+
+
+ Selects a using a JSONPath expression. Selects the token that matches the object path.
+
+
+ A that contains a JSONPath expression.
+
+ A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression.
+ A .
+
+
+
+ Selects a using a JSONPath expression. Selects the token that matches the object path.
+
+
+ A that contains a JSONPath expression.
+
+ The used to select tokens.
+ A .
+
+
+
+ Selects a collection of elements using a JSONPath expression.
+
+
+ A that contains a JSONPath expression.
+
+ An of that contains the selected elements.
+
+
+
+ Selects a collection of elements using a JSONPath expression.
+
+
+ A that contains a JSONPath expression.
+
+ A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression.
+ An of that contains the selected elements.
+
+
+
+ Selects a collection of elements using a JSONPath expression.
+
+
+ A that contains a JSONPath expression.
+
+ The used to select tokens.
+ An of that contains the selected elements.
+
+
+
+ Returns the responsible for binding operations performed on this object.
+
+ The expression tree representation of the runtime value.
+
+ The to bind this object.
+
+
+
+
+ Returns the responsible for binding operations performed on this object.
+
+ The expression tree representation of the runtime value.
+
+ The to bind this object.
+
+
+
+
+ Creates a new instance of the . All child tokens are recursively cloned.
+
+ A new instance of the .
+
+
+
+ Creates a new instance of the . All child tokens are recursively cloned.
+
+ A object to configure cloning settings.
+ A new instance of the .
+
+
+
+ Adds an object to the annotation list of this .
+
+ The annotation to add.
+
+
+
+ Get the first annotation object of the specified type from this .
+
+ The type of the annotation to retrieve.
+ The first annotation object that matches the specified type, or null if no annotation is of the specified type.
+
+
+
+ Gets the first annotation object of the specified type from this .
+
+ The of the annotation to retrieve.
+ The first annotation object that matches the specified type, or null if no annotation is of the specified type.
+
+
+
+ Gets a collection of annotations of the specified type for this .
+
+ The type of the annotations to retrieve.
+ An that contains the annotations for this .
+
+
+
+ Gets a collection of annotations of the specified type for this .
+
+ The of the annotations to retrieve.
+ An of that contains the annotations that match the specified type for this .
+
+
+
+ Removes the annotations of the specified type from this .
+
+ The type of annotations to remove.
+
+
+
+ Removes the annotations of the specified type from this .
+
+ The of annotations to remove.
+
+
+
+ Compares tokens to determine whether they are equal.
+
+
+
+
+ Determines whether the specified objects are equal.
+
+ The first object of type to compare.
+ The second object of type to compare.
+
+ true if the specified objects are equal; otherwise, false.
+
+
+
+
+ Returns a hash code for the specified object.
+
+ The for which a hash code is to be returned.
+ A hash code for the specified object.
+ The type of is a reference type and is null.
+
+
+
+ Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data.
+
+
+
+
+ Gets the at the reader's current position.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The token to read from.
+
+
+
+ Initializes a new instance of the class.
+
+ The token to read from.
+ The initial path of the token. It is prepended to the returned .
+
+
+
+ Reads the next JSON token from the underlying .
+
+
+ true if the next token was read successfully; false if there are no more tokens to read.
+
+
+
+
+ Gets the path of the current JSON token.
+
+
+
+
+ Specifies the type of token.
+
+
+
+
+ No token type has been set.
+
+
+
+
+ A JSON object.
+
+
+
+
+ A JSON array.
+
+
+
+
+ A JSON constructor.
+
+
+
+
+ A JSON object property.
+
+
+
+
+ A comment.
+
+
+
+
+ An integer value.
+
+
+
+
+ A float value.
+
+
+
+
+ A string value.
+
+
+
+
+ A boolean value.
+
+
+
+
+ A null value.
+
+
+
+
+ An undefined value.
+
+
+
+
+ A date value.
+
+
+
+
+ A raw JSON value.
+
+
+
+
+ A collection of bytes value.
+
+
+
+
+ A Guid value.
+
+
+
+
+ A Uri value.
+
+
+
+
+ A TimeSpan value.
+
+
+
+
+ Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data.
+
+
+
+
+ Gets the at the writer's current position.
+
+
+
+
+ Gets the token being written.
+
+ The token being written.
+
+
+
+ Initializes a new instance of the class writing to the given .
+
+ The container being written to.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Flushes whatever is in the buffer to the underlying .
+
+
+
+
+ Closes this writer.
+ If is set to true, the JSON is auto-completed.
+
+
+ Setting to true has no additional effect, since the underlying is a type that cannot be closed.
+
+
+
+
+ Writes the beginning of a JSON object.
+
+
+
+
+ Writes the beginning of a JSON array.
+
+
+
+
+ Writes the start of a constructor with the given name.
+
+ The name of the constructor.
+
+
+
+ Writes the end.
+
+ The token.
+
+
+
+ Writes the property name of a name/value pair on a JSON object.
+
+ The name of the property.
+
+
+
+ Writes a value.
+ An error will be raised if the value cannot be written as a single JSON token.
+
+ The value to write.
+
+
+
+ Writes a null value.
+
+
+
+
+ Writes an undefined value.
+
+
+
+
+ Writes raw JSON.
+
+ The raw JSON to write.
+
+
+
+ Writes a comment /*...*/ containing the specified text.
+
+ Text to place inside the comment.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a [] value.
+
+ The [] value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Represents a value in JSON (string, integer, date, etc).
+
+
+
+
+ Writes this token to a asynchronously.
+
+ A into which this method will write.
+ The token to monitor for cancellation requests.
+ A collection of which will be used when writing the token.
+ A that represents the asynchronous write operation.
+
+
+
+ Initializes a new instance of the class from another object.
+
+ A object to copy from.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Gets a value indicating whether this token has child tokens.
+
+
+ true if this token has child values; otherwise, false.
+
+
+
+
+ Creates a comment with the given value.
+
+ The value.
+ A comment with the given value.
+
+
+
+ Creates a string with the given value.
+
+ The value.
+ A string with the given value.
+
+
+
+ Creates a null value.
+
+ A null value.
+
+
+
+ Creates a undefined value.
+
+ A undefined value.
+
+
+
+ Gets the node type for this .
+
+ The type.
+
+
+
+ Gets or sets the underlying token value.
+
+ The underlying token value.
+
+
+
+ Writes this token to a .
+
+ A into which this method will write.
+ A collection of s which will be used when writing the token.
+
+
+
+ Indicates whether the current object is equal to another object of the same type.
+
+
+ true if the current object is equal to the parameter; otherwise, false.
+
+ An object to compare with this object.
+
+
+
+ Determines whether the specified is equal to the current .
+
+ The to compare with the current .
+
+ true if the specified is equal to the current ; otherwise, false.
+
+
+
+
+ Serves as a hash function for a particular type.
+
+
+ A hash code for the current .
+
+
+
+
+ Returns a that represents this instance.
+
+
+ ToString() returns a non-JSON string value for tokens with a type of .
+ If you want the JSON for all token types then you should use .
+
+
+ A that represents this instance.
+
+
+
+
+ Returns a that represents this instance.
+
+ The format.
+
+ A that represents this instance.
+
+
+
+
+ Returns a that represents this instance.
+
+ The format provider.
+
+ A that represents this instance.
+
+
+
+
+ Returns a that represents this instance.
+
+ The format.
+ The format provider.
+
+ A that represents this instance.
+
+
+
+
+ Returns the responsible for binding operations performed on this object.
+
+ The expression tree representation of the runtime value.
+
+ The to bind this object.
+
+
+
+
+ Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object.
+
+ An object to compare with this instance.
+
+ A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings:
+ Value
+ Meaning
+ Less than zero
+ This instance is less than .
+ Zero
+ This instance is equal to .
+ Greater than zero
+ This instance is greater than .
+
+
+ is not of the same type as this instance.
+
+
+
+
+ Specifies how line information is handled when loading JSON.
+
+
+
+
+ Ignore line information.
+
+
+
+
+ Load line information.
+
+
+
+
+ Specifies how JSON arrays are merged together.
+
+
+
+ Concatenate arrays.
+
+
+ Union arrays, skipping items that already exist.
+
+
+ Replace all array items.
+
+
+ Merge array items together, matched by index.
+
+
+
+ Specifies how null value properties are merged.
+
+
+
+
+ The content's null value properties will be ignored during merging.
+
+
+
+
+ The content's null value properties will be merged.
+
+
+
+
+ Specifies the member serialization options for the .
+
+
+
+
+ All public members are serialized by default. Members can be excluded using or .
+ This is the default member serialization mode.
+
+
+
+
+ Only members marked with or are serialized.
+ This member serialization mode can also be set by marking the class with .
+
+
+
+
+ All public and private fields are serialized. Members can be excluded using or .
+ This member serialization mode can also be set by marking the class with
+ and setting IgnoreSerializableAttribute on to false.
+
+
+
+
+ Specifies metadata property handling options for the .
+
+
+
+
+ Read metadata properties located at the start of a JSON object.
+
+
+
+
+ Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance.
+
+
+
+
+ Do not try to read metadata properties.
+
+
+
+
+ Specifies missing member handling options for the .
+
+
+
+
+ Ignore a missing member and do not attempt to deserialize it.
+
+
+
+
+ Throw a when a missing member is encountered during deserialization.
+
+
+
+
+ Specifies null value handling options for the .
+
+
+
+
+
+
+
+
+ Include null values when serializing and deserializing objects.
+
+
+
+
+ Ignore null values when serializing and deserializing objects.
+
+
+
+
+ Specifies how object creation is handled by the .
+
+
+
+
+ Reuse existing objects, create new objects when needed.
+
+
+
+
+ Only reuse existing objects.
+
+
+
+
+ Always create new objects.
+
+
+
+
+ Specifies reference handling options for the .
+ Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement .
+
+
+
+
+
+
+
+ Do not preserve references when serializing types.
+
+
+
+
+ Preserve references when serializing into a JSON object structure.
+
+
+
+
+ Preserve references when serializing into a JSON array structure.
+
+
+
+
+ Preserve references when serializing.
+
+
+
+
+ Specifies reference loop handling options for the .
+
+
+
+
+ Throw a when a loop is encountered.
+
+
+
+
+ Ignore loop references and do not serialize.
+
+
+
+
+ Serialize loop references.
+
+
+
+
+ Indicating whether a property is required.
+
+
+
+
+ The property is not required. The default state.
+
+
+
+
+ The property must be defined in JSON but can be a null value.
+
+
+
+
+ The property must be defined in JSON and cannot be a null value.
+
+
+
+
+ The property is not required but it cannot be a null value.
+
+
+
+
+
+ Contains the JSON schema extension methods.
+
+
+ JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+
+ Determines whether the is valid.
+
+
+ JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details.
+
+
+ The source to test.
+ The schema to test with.
+
+ true if the specified is valid; otherwise, false.
+
+
+
+
+
+ Determines whether the is valid.
+
+
+ JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details.
+
+
+ The source to test.
+ The schema to test with.
+ When this method returns, contains any error messages generated while validating.
+
+ true if the specified is valid; otherwise, false.
+
+
+
+
+
+ Validates the specified .
+
+
+ JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details.
+
+
+ The source to test.
+ The schema to test with.
+
+
+
+
+ Validates the specified .
+
+
+ JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details.
+
+
+ The source to test.
+ The schema to test with.
+ The validation event handler.
+
+
+
+
+ An in-memory representation of a JSON Schema.
+
+
+ JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+ Gets or sets the id.
+
+
+
+
+ Gets or sets the title.
+
+
+
+
+ Gets or sets whether the object is required.
+
+
+
+
+ Gets or sets whether the object is read-only.
+
+
+
+
+ Gets or sets whether the object is visible to users.
+
+
+
+
+ Gets or sets whether the object is transient.
+
+
+
+
+ Gets or sets the description of the object.
+
+
+
+
+ Gets or sets the types of values allowed by the object.
+
+ The type.
+
+
+
+ Gets or sets the pattern.
+
+ The pattern.
+
+
+
+ Gets or sets the minimum length.
+
+ The minimum length.
+
+
+
+ Gets or sets the maximum length.
+
+ The maximum length.
+
+
+
+ Gets or sets a number that the value should be divisible by.
+
+ A number that the value should be divisible by.
+
+
+
+ Gets or sets the minimum.
+
+ The minimum.
+
+
+
+ Gets or sets the maximum.
+
+ The maximum.
+
+
+
+ Gets or sets a flag indicating whether the value can not equal the number defined by the minimum attribute ().
+
+ A flag indicating whether the value can not equal the number defined by the minimum attribute ().
+
+
+
+ Gets or sets a flag indicating whether the value can not equal the number defined by the maximum attribute ().
+
+ A flag indicating whether the value can not equal the number defined by the maximum attribute ().
+
+
+
+ Gets or sets the minimum number of items.
+
+ The minimum number of items.
+
+
+
+ Gets or sets the maximum number of items.
+
+ The maximum number of items.
+
+
+
+ Gets or sets the of items.
+
+ The of items.
+
+
+
+ Gets or sets a value indicating whether items in an array are validated using the instance at their array position from .
+
+
+ true if items are validated using their array position; otherwise, false.
+
+
+
+
+ Gets or sets the of additional items.
+
+ The of additional items.
+
+
+
+ Gets or sets a value indicating whether additional items are allowed.
+
+
+ true if additional items are allowed; otherwise, false.
+
+
+
+
+ Gets or sets whether the array items must be unique.
+
+
+
+
+ Gets or sets the of properties.
+
+ The of properties.
+
+
+
+ Gets or sets the of additional properties.
+
+ The of additional properties.
+
+
+
+ Gets or sets the pattern properties.
+
+ The pattern properties.
+
+
+
+ Gets or sets a value indicating whether additional properties are allowed.
+
+
+ true if additional properties are allowed; otherwise, false.
+
+
+
+
+ Gets or sets the required property if this property is present.
+
+ The required property if this property is present.
+
+
+
+ Gets or sets the a collection of valid enum values allowed.
+
+ A collection of valid enum values allowed.
+
+
+
+ Gets or sets disallowed types.
+
+ The disallowed types.
+
+
+
+ Gets or sets the default value.
+
+ The default value.
+
+
+
+ Gets or sets the collection of that this schema extends.
+
+ The collection of that this schema extends.
+
+
+
+ Gets or sets the format.
+
+ The format.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Reads a from the specified .
+
+ The containing the JSON Schema to read.
+ The object representing the JSON Schema.
+
+
+
+ Reads a from the specified .
+
+ The containing the JSON Schema to read.
+ The to use when resolving schema references.
+ The object representing the JSON Schema.
+
+
+
+ Load a from a string that contains JSON Schema.
+
+ A that contains JSON Schema.
+ A populated from the string that contains JSON Schema.
+
+
+
+ Load a from a string that contains JSON Schema using the specified .
+
+ A that contains JSON Schema.
+ The resolver.
+ A populated from the string that contains JSON Schema.
+
+
+
+ Writes this schema to a .
+
+ A into which this method will write.
+
+
+
+ Writes this schema to a using the specified .
+
+ A into which this method will write.
+ The resolver used.
+
+
+
+ Returns a that represents the current .
+
+
+ A that represents the current .
+
+
+
+
+
+ Returns detailed information about the schema exception.
+
+
+ JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+ Gets the line number indicating where the error occurred.
+
+ The line number indicating where the error occurred.
+
+
+
+ Gets the line position indicating where the error occurred.
+
+ The line position indicating where the error occurred.
+
+
+
+ Gets the path to the JSON where the error occurred.
+
+ The path to the JSON where the error occurred.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class
+ with a specified error message.
+
+ The error message that explains the reason for the exception.
+
+
+
+ Initializes a new instance of the class
+ with a specified error message and a reference to the inner exception that is the cause of this exception.
+
+ The error message that explains the reason for the exception.
+ The exception that is the cause of the current exception, or null if no inner exception is specified.
+
+
+
+ Initializes a new instance of the class.
+
+ The that holds the serialized object data about the exception being thrown.
+ The that contains contextual information about the source or destination.
+ The parameter is null.
+ The class name is null or is zero (0).
+
+
+
+
+ Generates a from a specified .
+
+
+ JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+ Gets or sets how undefined schemas are handled by the serializer.
+
+
+
+
+ Gets or sets the contract resolver.
+
+ The contract resolver.
+
+
+
+ Generate a from the specified type.
+
+ The type to generate a from.
+ A generated from the specified type.
+
+
+
+ Generate a from the specified type.
+
+ The type to generate a from.
+ The used to resolve schema references.
+ A generated from the specified type.
+
+
+
+ Generate a from the specified type.
+
+ The type to generate a from.
+ Specify whether the generated root will be nullable.
+ A generated from the specified type.
+
+
+
+ Generate a from the specified type.
+
+ The type to generate a from.
+ The used to resolve schema references.
+ Specify whether the generated root will be nullable.
+ A generated from the specified type.
+
+
+
+
+ Resolves from an id.
+
+
+ JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+ Gets or sets the loaded schemas.
+
+ The loaded schemas.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets a for the specified reference.
+
+ The id.
+ A for the specified reference.
+
+
+
+
+ The value types allowed by the .
+
+
+ JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+ No type specified.
+
+
+
+
+ String type.
+
+
+
+
+ Float type.
+
+
+
+
+ Integer type.
+
+
+
+
+ Boolean type.
+
+
+
+
+ Object type.
+
+
+
+
+ Array type.
+
+
+
+
+ Null type.
+
+
+
+
+ Any type.
+
+
+
+
+
+ Specifies undefined schema Id handling options for the .
+
+
+ JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+ Do not infer a schema Id.
+
+
+
+
+ Use the .NET type name as the schema Id.
+
+
+
+
+ Use the assembly qualified .NET type name as the schema Id.
+
+
+
+
+
+ Returns detailed information related to the .
+
+
+ JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+ Gets the associated with the validation error.
+
+ The JsonSchemaException associated with the validation error.
+
+
+
+ Gets the path of the JSON location where the validation error occurred.
+
+ The path of the JSON location where the validation error occurred.
+
+
+
+ Gets the text description corresponding to the validation error.
+
+ The text description.
+
+
+
+
+ Represents the callback method that will handle JSON schema validation events and the .
+
+
+ JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+ A camel case naming strategy.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+ A flag indicating whether dictionary keys should be processed.
+
+
+ A flag indicating whether explicitly specified property names should be processed,
+ e.g. a property name customized with a .
+
+
+
+
+ Initializes a new instance of the class.
+
+
+ A flag indicating whether dictionary keys should be processed.
+
+
+ A flag indicating whether explicitly specified property names should be processed,
+ e.g. a property name customized with a .
+
+
+ A flag indicating whether extension data names should be processed.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Resolves the specified property name.
+
+ The property name to resolve.
+ The resolved property name.
+
+
+
+ Resolves member mappings for a type, camel casing property names.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Resolves the contract for a given type.
+
+ The type to resolve a contract for.
+ The contract for a given type.
+
+
+
+ Used by to resolve a for a given .
+
+
+
+
+ Gets a value indicating whether members are being get and set using dynamic code generation.
+ This value is determined by the runtime permissions available.
+
+
+ true if using dynamic code generation; otherwise, false.
+
+
+
+
+ Gets or sets the default members search flags.
+
+ The default members search flags.
+
+
+
+ Gets or sets a value indicating whether compiler generated members should be serialized.
+
+
+ true if serialized compiler generated members; otherwise, false.
+
+
+
+
+ Gets or sets a value indicating whether to ignore the interface when serializing and deserializing types.
+
+
+ true if the interface will be ignored when serializing and deserializing types; otherwise, false.
+
+
+
+
+ Gets or sets a value indicating whether to ignore the attribute when serializing and deserializing types.
+
+
+ true if the attribute will be ignored when serializing and deserializing types; otherwise, false.
+
+
+
+
+ Gets or sets a value indicating whether to ignore IsSpecified members when serializing and deserializing types.
+
+
+ true if the IsSpecified members will be ignored when serializing and deserializing types; otherwise, false.
+
+
+
+
+ Gets or sets a value indicating whether to ignore ShouldSerialize members when serializing and deserializing types.
+
+
+ true if the ShouldSerialize members will be ignored when serializing and deserializing types; otherwise, false.
+
+
+
+
+ Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized.
+
+ The naming strategy used to resolve how property names and dictionary keys are serialized.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Resolves the contract for a given type.
+
+ The type to resolve a contract for.
+ The contract for a given type.
+
+
+
+ Gets the serializable members for the type.
+
+ The type to get serializable members for.
+ The serializable members for the type.
+
+
+
+ Creates a for the given type.
+
+ Type of the object.
+ A for the given type.
+
+
+
+ Creates the constructor parameters.
+
+ The constructor to create properties for.
+ The type's member properties.
+ Properties for the given .
+
+
+
+ Creates a for the given .
+
+ The matching member property.
+ The constructor parameter.
+ A created for the given .
+
+
+
+ Resolves the default for the contract.
+
+ Type of the object.
+ The contract's default .
+
+
+
+ Creates a for the given type.
+
+ Type of the object.
+ A for the given type.
+
+
+
+ Creates a for the given type.
+
+ Type of the object.
+ A for the given type.
+
+
+
+ Creates a for the given type.
+
+ Type of the object.
+ A for the given type.
+
+
+
+ Creates a for the given type.
+
+ Type of the object.
+ A for the given type.
+
+
+
+ Creates a for the given type.
+
+ Type of the object.
+ A for the given type.
+
+
+
+ Creates a for the given type.
+
+ Type of the object.
+ A for the given type.
+
+
+
+ Creates a for the given type.
+
+ Type of the object.
+ A for the given type.
+
+
+
+ Determines which contract type is created for the given type.
+
+ Type of the object.
+ A for the given type.
+
+
+
+ Creates properties for the given .
+
+ The type to create properties for.
+ /// The member serialization mode for the type.
+ Properties for the given .
+
+
+
+ Creates the used by the serializer to get and set values from a member.
+
+ The member.
+ The used by the serializer to get and set values from a member.
+
+
+
+ Creates a for the given .
+
+ The member's parent .
+ The member to create a for.
+ A created for the given .
+
+
+
+ Resolves the name of the property.
+
+ Name of the property.
+ Resolved name of the property.
+
+
+
+ Resolves the name of the extension data. By default no changes are made to extension data names.
+
+ Name of the extension data.
+ Resolved name of the extension data.
+
+
+
+ Resolves the key of the dictionary. By default is used to resolve dictionary keys.
+
+ Key of the dictionary.
+ Resolved key of the dictionary.
+
+
+
+ Gets the resolved name of the property.
+
+ Name of the property.
+ Name of the property.
+
+
+
+ The default naming strategy. Property names and dictionary keys are unchanged.
+
+
+
+
+ Resolves the specified property name.
+
+ The property name to resolve.
+ The resolved property name.
+
+
+
+ The default serialization binder used when resolving and loading classes from type names.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ When overridden in a derived class, controls the binding of a serialized object to a type.
+
+ Specifies the name of the serialized object.
+ Specifies the name of the serialized object.
+
+ The type of the object the formatter creates a new instance of.
+
+
+
+
+ When overridden in a derived class, controls the binding of a serialized object to a type.
+
+ The type of the object the formatter creates a new instance of.
+ Specifies the name of the serialized object.
+ Specifies the name of the serialized object.
+
+
+
+ Represents a trace writer that writes to the application's instances.
+
+
+
+
+ Gets the that will be used to filter the trace messages passed to the writer.
+ For example a filter level of will exclude messages and include ,
+ and messages.
+
+
+ The that will be used to filter the trace messages passed to the writer.
+
+
+
+
+ Writes the specified trace level, message and optional exception.
+
+ The at which to write this trace.
+ The trace message.
+ The trace exception. This parameter is optional.
+
+
+
+ Get and set values for a using dynamic methods.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The member info.
+
+
+
+ Sets the value.
+
+ The target to set the value on.
+ The value to set on the target.
+
+
+
+ Gets the value.
+
+ The target to get the value from.
+ The value.
+
+
+
+ Provides information surrounding an error.
+
+
+
+
+ Gets the error.
+
+ The error.
+
+
+
+ Gets the original object that caused the error.
+
+ The original object that caused the error.
+
+
+
+ Gets the member that caused the error.
+
+ The member that caused the error.
+
+
+
+ Gets the path of the JSON location where the error occurred.
+
+ The path of the JSON location where the error occurred.
+
+
+
+ Gets or sets a value indicating whether this is handled.
+
+ true if handled; otherwise, false.
+
+
+
+ Provides data for the Error event.
+
+
+
+
+ Gets the current object the error event is being raised against.
+
+ The current object the error event is being raised against.
+
+
+
+ Gets the error context.
+
+ The error context.
+
+
+
+ Initializes a new instance of the class.
+
+ The current object.
+ The error context.
+
+
+
+ Get and set values for a using dynamic methods.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The member info.
+
+
+
+ Sets the value.
+
+ The target to set the value on.
+ The value to set on the target.
+
+
+
+ Gets the value.
+
+ The target to get the value from.
+ The value.
+
+
+
+ Provides methods to get attributes.
+
+
+
+
+ Returns a collection of all of the attributes, or an empty collection if there are no attributes.
+
+ When true, look up the hierarchy chain for the inherited custom attribute.
+ A collection of s, or an empty collection.
+
+
+
+ Returns a collection of attributes, identified by type, or an empty collection if there are no attributes.
+
+ The type of the attributes.
+ When true, look up the hierarchy chain for the inherited custom attribute.
+ A collection of s, or an empty collection.
+
+
+
+ Used by to resolve a for a given .
+
+
+
+
+
+
+
+
+ Resolves the contract for a given type.
+
+ The type to resolve a contract for.
+ The contract for a given type.
+
+
+
+ Used to resolve references when serializing and deserializing JSON by the .
+
+
+
+
+ Resolves a reference to its object.
+
+ The serialization context.
+ The reference to resolve.
+ The object that was resolved from the reference.
+
+
+
+ Gets the reference for the specified object.
+
+ The serialization context.
+ The object to get a reference for.
+ The reference to the object.
+
+
+
+ Determines whether the specified object is referenced.
+
+ The serialization context.
+ The object to test for a reference.
+
+ true if the specified object is referenced; otherwise, false.
+
+
+
+
+ Adds a reference to the specified object.
+
+ The serialization context.
+ The reference.
+ The object to reference.
+
+
+
+ Allows users to control class loading and mandate what class to load.
+
+
+
+
+ When implemented, controls the binding of a serialized object to a type.
+
+ Specifies the name of the serialized object.
+ Specifies the name of the serialized object
+ The type of the object the formatter creates a new instance of.
+
+
+
+ When implemented, controls the binding of a serialized object to a type.
+
+ The type of the object the formatter creates a new instance of.
+ Specifies the name of the serialized object.
+ Specifies the name of the serialized object.
+
+
+
+ Represents a trace writer.
+
+
+
+
+ Gets the that will be used to filter the trace messages passed to the writer.
+ For example a filter level of will exclude messages and include ,
+ and messages.
+
+ The that will be used to filter the trace messages passed to the writer.
+
+
+
+ Writes the specified trace level, message and optional exception.
+
+ The at which to write this trace.
+ The trace message.
+ The trace exception. This parameter is optional.
+
+
+
+ Provides methods to get and set values.
+
+
+
+
+ Sets the value.
+
+ The target to set the value on.
+ The value to set on the target.
+
+
+
+ Gets the value.
+
+ The target to get the value from.
+ The value.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Gets the of the collection items.
+
+ The of the collection items.
+
+
+
+ Gets a value indicating whether the collection type is a multidimensional array.
+
+ true if the collection type is a multidimensional array; otherwise, false.
+
+
+
+ Gets or sets the function used to create the object. When set this function will override .
+
+ The function used to create the object.
+
+
+
+ Gets a value indicating whether the creator has a parameter with the collection values.
+
+ true if the creator has a parameter with the collection values; otherwise, false.
+
+
+
+ Initializes a new instance of the class.
+
+ The underlying type for the contract.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Gets or sets the default collection items .
+
+ The converter.
+
+
+
+ Gets or sets a value indicating whether the collection items preserve object references.
+
+ true if collection items preserve object references; otherwise, false.
+
+
+
+ Gets or sets the collection item reference loop handling.
+
+ The reference loop handling.
+
+
+
+ Gets or sets the collection item type name handling.
+
+ The type name handling.
+
+
+
+ Initializes a new instance of the class.
+
+ The underlying type for the contract.
+
+
+
+ Handles serialization callback events.
+
+ The object that raised the callback event.
+ The streaming context.
+
+
+
+ Handles serialization error callback events.
+
+ The object that raised the callback event.
+ The streaming context.
+ The error context.
+
+
+
+ Sets extension data for an object during deserialization.
+
+ The object to set extension data on.
+ The extension data key.
+ The extension data value.
+
+
+
+ Gets extension data for an object during serialization.
+
+ The object to set extension data on.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Gets the underlying type for the contract.
+
+ The underlying type for the contract.
+
+
+
+ Gets or sets the type created during deserialization.
+
+ The type created during deserialization.
+
+
+
+ Gets or sets whether this type contract is serialized as a reference.
+
+ Whether this type contract is serialized as a reference.
+
+
+
+ Gets or sets the default for this contract.
+
+ The converter.
+
+
+
+ Gets the internally resolved for the contract's type.
+ This converter is used as a fallback converter when no other converter is resolved.
+ Setting will always override this converter.
+
+
+
+
+ Gets or sets all methods called immediately after deserialization of the object.
+
+ The methods called immediately after deserialization of the object.
+
+
+
+ Gets or sets all methods called during deserialization of the object.
+
+ The methods called during deserialization of the object.
+
+
+
+ Gets or sets all methods called after serialization of the object graph.
+
+ The methods called after serialization of the object graph.
+
+
+
+ Gets or sets all methods called before serialization of the object.
+
+ The methods called before serialization of the object.
+
+
+
+ Gets or sets all method called when an error is thrown during the serialization of the object.
+
+ The methods called when an error is thrown during the serialization of the object.
+
+
+
+ Gets or sets the default creator method used to create the object.
+
+ The default creator method used to create the object.
+
+
+
+ Gets or sets a value indicating whether the default creator is non-public.
+
+ true if the default object creator is non-public; otherwise, false.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Gets or sets the dictionary key resolver.
+
+ The dictionary key resolver.
+
+
+
+ Gets the of the dictionary keys.
+
+ The of the dictionary keys.
+
+
+
+ Gets the of the dictionary values.
+
+ The of the dictionary values.
+
+
+
+ Gets or sets the function used to create the object. When set this function will override .
+
+ The function used to create the object.
+
+
+
+ Gets a value indicating whether the creator has a parameter with the dictionary values.
+
+ true if the creator has a parameter with the dictionary values; otherwise, false.
+
+
+
+ Initializes a new instance of the class.
+
+ The underlying type for the contract.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Gets the object's properties.
+
+ The object's properties.
+
+
+
+ Gets or sets the property name resolver.
+
+ The property name resolver.
+
+
+
+ Initializes a new instance of the class.
+
+ The underlying type for the contract.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Gets or sets the object constructor.
+
+ The object constructor.
+
+
+
+ Initializes a new instance of the class.
+
+ The underlying type for the contract.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Initializes a new instance of the class.
+
+ The underlying type for the contract.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Gets or sets the object member serialization.
+
+ The member object serialization.
+
+
+
+ Gets or sets the missing member handling used when deserializing this object.
+
+ The missing member handling.
+
+
+
+ Gets or sets a value that indicates whether the object's properties are required.
+
+
+ A value indicating whether the object's properties are required.
+
+
+
+
+ Gets or sets how the object's properties with null values are handled during serialization and deserialization.
+
+ How the object's properties with null values are handled during serialization and deserialization.
+
+
+
+ Gets the object's properties.
+
+ The object's properties.
+
+
+
+ Gets a collection of instances that define the parameters used with .
+
+
+
+
+ Gets or sets the function used to create the object. When set this function will override .
+ This function is called with a collection of arguments which are defined by the collection.
+
+ The function used to create the object.
+
+
+
+ Gets or sets the extension data setter.
+
+
+
+
+ Gets or sets the extension data getter.
+
+
+
+
+ Gets or sets the extension data value type.
+
+
+
+
+ Gets or sets the extension data name resolver.
+
+ The extension data name resolver.
+
+
+
+ Initializes a new instance of the class.
+
+ The underlying type for the contract.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Initializes a new instance of the class.
+
+ The underlying type for the contract.
+
+
+
+ Maps a JSON property to a .NET member or constructor parameter.
+
+
+
+
+ Gets or sets the name of the property.
+
+ The name of the property.
+
+
+
+ Gets or sets the type that declared this property.
+
+ The type that declared this property.
+
+
+
+ Gets or sets the order of serialization of a member.
+
+ The numeric order of serialization.
+
+
+
+ Gets or sets the name of the underlying member or parameter.
+
+ The name of the underlying member or parameter.
+
+
+
+ Gets the that will get and set the during serialization.
+
+ The that will get and set the during serialization.
+
+
+
+ Gets or sets the for this property.
+
+ The for this property.
+
+
+
+ Gets or sets the type of the property.
+
+ The type of the property.
+
+
+
+ Gets or sets the for the property.
+ If set this converter takes precedence over the contract converter for the property type.
+
+ The converter.
+
+
+
+ Gets or sets the member converter.
+
+ The member converter.
+
+
+
+ Gets or sets a value indicating whether this is ignored.
+
+ true if ignored; otherwise, false.
+
+
+
+ Gets or sets a value indicating whether this is readable.
+
+ true if readable; otherwise, false.
+
+
+
+ Gets or sets a value indicating whether this is writable.
+
+ true if writable; otherwise, false.
+
+
+
+ Gets or sets a value indicating whether this has a member attribute.
+
+ true if has a member attribute; otherwise, false.
+
+
+
+ Gets the default value.
+
+ The default value.
+
+
+
+ Gets or sets a value indicating whether this is required.
+
+ A value indicating whether this is required.
+
+
+
+ Gets a value indicating whether has a value specified.
+
+
+
+
+ Gets or sets a value indicating whether this property preserves object references.
+
+
+ true if this instance is reference; otherwise, false.
+
+
+
+
+ Gets or sets the property null value handling.
+
+ The null value handling.
+
+
+
+ Gets or sets the property default value handling.
+
+ The default value handling.
+
+
+
+ Gets or sets the property reference loop handling.
+
+ The reference loop handling.
+
+
+
+ Gets or sets the property object creation handling.
+
+ The object creation handling.
+
+
+
+ Gets or sets or sets the type name handling.
+
+ The type name handling.
+
+
+
+ Gets or sets a predicate used to determine whether the property should be serialized.
+
+ A predicate used to determine whether the property should be serialized.
+
+
+
+ Gets or sets a predicate used to determine whether the property should be deserialized.
+
+ A predicate used to determine whether the property should be deserialized.
+
+
+
+ Gets or sets a predicate used to determine whether the property should be serialized.
+
+ A predicate used to determine whether the property should be serialized.
+
+
+
+ Gets or sets an action used to set whether the property has been deserialized.
+
+ An action used to set whether the property has been deserialized.
+
+
+
+ Returns a that represents this instance.
+
+
+ A that represents this instance.
+
+
+
+
+ Gets or sets the converter used when serializing the property's collection items.
+
+ The collection's items converter.
+
+
+
+ Gets or sets whether this property's collection items are serialized as a reference.
+
+ Whether this property's collection items are serialized as a reference.
+
+
+
+ Gets or sets the type name handling used when serializing the property's collection items.
+
+ The collection's items type name handling.
+
+
+
+ Gets or sets the reference loop handling used when serializing the property's collection items.
+
+ The collection's items reference loop handling.
+
+
+
+ A collection of objects.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The type.
+
+
+
+ When implemented in a derived class, extracts the key from the specified element.
+
+ The element from which to extract the key.
+ The key for the specified element.
+
+
+
+ Adds a object.
+
+ The property to add to the collection.
+
+
+
+ Gets the closest matching object.
+ First attempts to get an exact case match of and then
+ a case insensitive match.
+
+ Name of the property.
+ A matching property if found.
+
+
+
+ Gets a property by property name.
+
+ The name of the property to get.
+ Type property name string comparison.
+ A matching property if found.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Initializes a new instance of the class.
+
+ The underlying type for the contract.
+
+
+
+ Lookup and create an instance of the type described by the argument.
+
+ The type to create.
+ Optional arguments to pass to an initializing constructor of the JsonConverter.
+ If null, the default constructor is used.
+
+
+
+ A kebab case naming strategy.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+ A flag indicating whether dictionary keys should be processed.
+
+
+ A flag indicating whether explicitly specified property names should be processed,
+ e.g. a property name customized with a .
+
+
+
+
+ Initializes a new instance of the class.
+
+
+ A flag indicating whether dictionary keys should be processed.
+
+
+ A flag indicating whether explicitly specified property names should be processed,
+ e.g. a property name customized with a .
+
+
+ A flag indicating whether extension data names should be processed.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Resolves the specified property name.
+
+ The property name to resolve.
+ The resolved property name.
+
+
+
+ Represents a trace writer that writes to memory. When the trace message limit is
+ reached then old trace messages will be removed as new messages are added.
+
+
+
+
+ Gets the that will be used to filter the trace messages passed to the writer.
+ For example a filter level of will exclude messages and include ,
+ and messages.
+
+
+ The that will be used to filter the trace messages passed to the writer.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Writes the specified trace level, message and optional exception.
+
+ The at which to write this trace.
+ The trace message.
+ The trace exception. This parameter is optional.
+
+
+
+ Returns an enumeration of the most recent trace messages.
+
+ An enumeration of the most recent trace messages.
+
+
+
+ Returns a of the most recent trace messages.
+
+
+ A of the most recent trace messages.
+
+
+
+
+ A base class for resolving how property names and dictionary keys are serialized.
+
+
+
+
+ A flag indicating whether dictionary keys should be processed.
+ Defaults to false.
+
+
+
+
+ A flag indicating whether extension data names should be processed.
+ Defaults to false.
+
+
+
+
+ A flag indicating whether explicitly specified property names,
+ e.g. a property name customized with a , should be processed.
+ Defaults to false.
+
+
+
+
+ Gets the serialized name for a given property name.
+
+ The initial property name.
+ A flag indicating whether the property has had a name explicitly specified.
+ The serialized property name.
+
+
+
+ Gets the serialized name for a given extension data name.
+
+ The initial extension data name.
+ The serialized extension data name.
+
+
+
+ Gets the serialized key for a given dictionary key.
+
+ The initial dictionary key.
+ The serialized dictionary key.
+
+
+
+ Resolves the specified property name.
+
+ The property name to resolve.
+ The resolved property name.
+
+
+
+ Hash code calculation
+
+
+
+
+
+ Object equality implementation
+
+
+
+
+
+
+ Compare to another NamingStrategy
+
+
+
+
+
+
+ Represents a method that constructs an object.
+
+ The object type to create.
+
+
+
+ When applied to a method, specifies that the method is called when an error occurs serializing an object.
+
+
+
+
+ Provides methods to get attributes from a , , or .
+
+
+
+
+ Initializes a new instance of the class.
+
+ The instance to get attributes for. This parameter should be a , , or .
+
+
+
+ Returns a collection of all of the attributes, or an empty collection if there are no attributes.
+
+ When true, look up the hierarchy chain for the inherited custom attribute.
+ A collection of s, or an empty collection.
+
+
+
+ Returns a collection of attributes, identified by type, or an empty collection if there are no attributes.
+
+ The type of the attributes.
+ When true, look up the hierarchy chain for the inherited custom attribute.
+ A collection of s, or an empty collection.
+
+
+
+ Get and set values for a using reflection.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The member info.
+
+
+
+ Sets the value.
+
+ The target to set the value on.
+ The value to set on the target.
+
+
+
+ Gets the value.
+
+ The target to get the value from.
+ The value.
+
+
+
+ A snake case naming strategy.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+ A flag indicating whether dictionary keys should be processed.
+
+
+ A flag indicating whether explicitly specified property names should be processed,
+ e.g. a property name customized with a .
+
+
+
+
+ Initializes a new instance of the class.
+
+
+ A flag indicating whether dictionary keys should be processed.
+
+
+ A flag indicating whether explicitly specified property names should be processed,
+ e.g. a property name customized with a .
+
+
+ A flag indicating whether extension data names should be processed.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Resolves the specified property name.
+
+ The property name to resolve.
+ The resolved property name.
+
+
+
+ Specifies how strings are escaped when writing JSON text.
+
+
+
+
+ Only control characters (e.g. newline) are escaped.
+
+
+
+
+ All non-ASCII and control characters (e.g. newline) are escaped.
+
+
+
+
+ HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped.
+
+
+
+
+ Indicates the method that will be used during deserialization for locating and loading assemblies.
+
+
+
+
+ In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the LoadWithPartialName method of the class is used to load the assembly.
+
+
+
+
+ In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The Load method of the class is used to load the assembly.
+
+
+
+
+ Specifies type name handling options for the .
+
+
+ should be used with caution when your application deserializes JSON from an external source.
+ Incoming types should be validated with a custom
+ when deserializing with a value other than .
+
+
+
+
+ Do not include the .NET type name when serializing types.
+
+
+
+
+ Include the .NET type name when serializing into a JSON object structure.
+
+
+
+
+ Include the .NET type name when serializing into a JSON array structure.
+
+
+
+
+ Always include the .NET type name when serializing.
+
+
+
+
+ Include the .NET type name when the type of the object being serialized is not the same as its declared type.
+ Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON
+ you must specify a root type object with
+ or .
+
+
+
+
+ Determines whether the collection is null or empty.
+
+ The collection.
+
+ true if the collection is null or empty; otherwise, false.
+
+
+
+
+ Adds the elements of the specified collection to the specified generic .
+
+ The list to add to.
+ The collection of elements to add.
+
+
+
+ Converts the value to the specified type. If the value is unable to be converted, the
+ value is checked whether it assignable to the specified type.
+
+ The value to convert.
+ The culture to use when converting.
+ The type to convert or cast the value to.
+
+ The converted type. If conversion was unsuccessful, the initial value
+ is returned if assignable to the target type.
+
+
+
+
+ Helper method for generating a MetaObject which calls a
+ specific method on Dynamic that returns a result
+
+
+
+
+ Helper method for generating a MetaObject which calls a
+ specific method on Dynamic, but uses one of the arguments for
+ the result.
+
+
+
+
+ Helper method for generating a MetaObject which calls a
+ specific method on Dynamic, but uses one of the arguments for
+ the result.
+
+
+
+
+ Returns a Restrictions object which includes our current restrictions merged
+ with a restriction limiting our type
+
+
+
+
+ Helper class for serializing immutable collections.
+ Note that this is used by all builds, even those that don't support immutable collections, in case the DLL is GACed
+ https://github.com/JamesNK/Newtonsoft.Json/issues/652
+
+
+
+
+ Gets the type of the typed collection's items.
+
+ The type.
+ The type of the typed collection's items.
+
+
+
+ Gets the member's underlying type.
+
+ The member.
+ The underlying type of the member.
+
+
+
+ Determines whether the property is an indexed property.
+
+ The property.
+
+ true if the property is an indexed property; otherwise, false.
+
+
+
+
+ Gets the member's value on the object.
+
+ The member.
+ The target object.
+ The member's value on the object.
+
+
+
+ Sets the member's value on the target object.
+
+ The member.
+ The target.
+ The value.
+
+
+
+ Determines whether the specified MemberInfo can be read.
+
+ The MemberInfo to determine whether can be read.
+ /// if set to true then allow the member to be gotten non-publicly.
+
+ true if the specified MemberInfo can be read; otherwise, false.
+
+
+
+
+ Determines whether the specified MemberInfo can be set.
+
+ The MemberInfo to determine whether can be set.
+ if set to true then allow the member to be set non-publicly.
+ if set to true then allow the member to be set if read-only.
+
+ true if the specified MemberInfo can be set; otherwise, false.
+
+
+
+
+ Builds a string. Unlike this class lets you reuse its internal buffer.
+
+
+
+
+ Determines whether the string is all white space. Empty string will return false.
+
+ The string to test whether it is all white space.
+
+ true if the string is all white space; otherwise, false.
+
+
+
+
+ Specifies the state of the .
+
+
+
+
+ An exception has been thrown, which has left the in an invalid state.
+ You may call the method to put the in the Closed state.
+ Any other method calls result in an being thrown.
+
+
+
+
+ The method has been called.
+
+
+
+
+ An object is being written.
+
+
+
+
+ An array is being written.
+
+
+
+
+ A constructor is being written.
+
+
+
+
+ A property is being written.
+
+
+
+
+ A write method has not been called.
+
+
+
+ Specifies that an output will not be null even if the corresponding type allows it.
+
+
+ Specifies that when a method returns , the parameter will not be null even if the corresponding type allows it.
+
+
+ Initializes the attribute with the specified return value condition.
+
+ The return value condition. If the method returns this value, the associated parameter will not be null.
+
+
+
+ Gets the return value condition.
+
+
+ Specifies that an output may be null even if the corresponding type disallows it.
+
+
+ Specifies that null is allowed as an input even if the corresponding type disallows it.
+
+
+
+ Specifies that the method will not return if the associated Boolean parameter is passed the specified value.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+ The condition parameter value. Code after the method will be considered unreachable by diagnostics if the argument to
+ the associated parameter matches this value.
+
+
+
+ Gets the condition parameter value.
+
+
+
diff --git a/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Host.exe b/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Host.exe
new file mode 100644
index 0000000..dee81ce
Binary files /dev/null and b/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Host.exe differ
diff --git a/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Host.exe.config b/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Host.exe.config
new file mode 100644
index 0000000..c4d2f1f
--- /dev/null
+++ b/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Host.exe.config
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Host.pdb b/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Host.pdb
new file mode 100644
index 0000000..fa83151
Binary files /dev/null and b/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Host.pdb differ
diff --git a/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Messages.dll b/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Messages.dll
new file mode 100644
index 0000000..66887b7
Binary files /dev/null and b/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Messages.dll differ
diff --git a/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Messages.pdb b/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Messages.pdb
new file mode 100644
index 0000000..6998920
Binary files /dev/null and b/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Messages.pdb differ
diff --git a/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.dll b/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.dll
new file mode 100644
index 0000000..325a7e3
Binary files /dev/null and b/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.dll differ
diff --git a/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.pdb b/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.pdb
new file mode 100644
index 0000000..452d2e1
Binary files /dev/null and b/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.pdb differ
diff --git a/ReleaseFiles/MORCODE.dll b/ReleaseFiles/MORCODE.dll
new file mode 100644
index 0000000..abefaca
Binary files /dev/null and b/ReleaseFiles/MORCODE.dll differ
diff --git a/ReleaseFiles/XP.Camera.dll b/ReleaseFiles/XP.Camera.dll
index c927ba4..a2b6549 100644
Binary files a/ReleaseFiles/XP.Camera.dll and b/ReleaseFiles/XP.Camera.dll differ
diff --git a/ReleaseFiles/XP.Camera.pdb b/ReleaseFiles/XP.Camera.pdb
index 728c2e3..a33d06a 100644
Binary files a/ReleaseFiles/XP.Camera.pdb and b/ReleaseFiles/XP.Camera.pdb differ
diff --git a/ReleaseFiles/XP.Common.dll b/ReleaseFiles/XP.Common.dll
index a8833d8..f89692a 100644
Binary files a/ReleaseFiles/XP.Common.dll and b/ReleaseFiles/XP.Common.dll differ
diff --git a/ReleaseFiles/XP.Common.pdb b/ReleaseFiles/XP.Common.pdb
index c0fc2a9..1656a24 100644
Binary files a/ReleaseFiles/XP.Common.pdb and b/ReleaseFiles/XP.Common.pdb differ
diff --git a/ReleaseFiles/XP.Hardware.Detector.dll b/ReleaseFiles/XP.Hardware.Detector.dll
index 9d8a578..7d920b4 100644
Binary files a/ReleaseFiles/XP.Hardware.Detector.dll and b/ReleaseFiles/XP.Hardware.Detector.dll differ
diff --git a/ReleaseFiles/XP.Hardware.Detector.pdb b/ReleaseFiles/XP.Hardware.Detector.pdb
index 6b4aa4e..a82bcb8 100644
Binary files a/ReleaseFiles/XP.Hardware.Detector.pdb and b/ReleaseFiles/XP.Hardware.Detector.pdb differ
diff --git a/ReleaseFiles/XP.Hardware.MotionControl.dll b/ReleaseFiles/XP.Hardware.MotionControl.dll
index d44058d..49436bd 100644
Binary files a/ReleaseFiles/XP.Hardware.MotionControl.dll and b/ReleaseFiles/XP.Hardware.MotionControl.dll differ
diff --git a/ReleaseFiles/XP.Hardware.MotionControl.pdb b/ReleaseFiles/XP.Hardware.MotionControl.pdb
index 8f0de88..510aac2 100644
Binary files a/ReleaseFiles/XP.Hardware.MotionControl.pdb and b/ReleaseFiles/XP.Hardware.MotionControl.pdb differ
diff --git a/ReleaseFiles/XP.Hardware.PLC.dll b/ReleaseFiles/XP.Hardware.PLC.dll
index 6f3d513..8a25c62 100644
Binary files a/ReleaseFiles/XP.Hardware.PLC.dll and b/ReleaseFiles/XP.Hardware.PLC.dll differ
diff --git a/ReleaseFiles/XP.Hardware.PLC.pdb b/ReleaseFiles/XP.Hardware.PLC.pdb
index 4c2e8ae..b218bc2 100644
Binary files a/ReleaseFiles/XP.Hardware.PLC.pdb and b/ReleaseFiles/XP.Hardware.PLC.pdb differ
diff --git a/ReleaseFiles/XP.Hardware.RaySource.Comet.Messages.dll b/ReleaseFiles/XP.Hardware.RaySource.Comet.Messages.dll
index 24b0107..db95be5 100644
Binary files a/ReleaseFiles/XP.Hardware.RaySource.Comet.Messages.dll and b/ReleaseFiles/XP.Hardware.RaySource.Comet.Messages.dll differ
diff --git a/ReleaseFiles/XP.Hardware.RaySource.Comet.Messages.pdb b/ReleaseFiles/XP.Hardware.RaySource.Comet.Messages.pdb
index 7fe6daf..ae9c9f0 100644
Binary files a/ReleaseFiles/XP.Hardware.RaySource.Comet.Messages.pdb and b/ReleaseFiles/XP.Hardware.RaySource.Comet.Messages.pdb differ
diff --git a/ReleaseFiles/XP.Hardware.RaySource.dll b/ReleaseFiles/XP.Hardware.RaySource.dll
index 21e3295..0a5e6f5 100644
Binary files a/ReleaseFiles/XP.Hardware.RaySource.dll and b/ReleaseFiles/XP.Hardware.RaySource.dll differ
diff --git a/ReleaseFiles/XP.Hardware.RaySource.pdb b/ReleaseFiles/XP.Hardware.RaySource.pdb
index 6176218..e4a3431 100644
Binary files a/ReleaseFiles/XP.Hardware.RaySource.pdb and b/ReleaseFiles/XP.Hardware.RaySource.pdb differ
diff --git a/ReleaseFiles/XP.ImageProcessing.CfgControl.dll b/ReleaseFiles/XP.ImageProcessing.CfgControl.dll
index 5924248..6fbced8 100644
Binary files a/ReleaseFiles/XP.ImageProcessing.CfgControl.dll and b/ReleaseFiles/XP.ImageProcessing.CfgControl.dll differ
diff --git a/ReleaseFiles/XP.ImageProcessing.CfgControl.pdb b/ReleaseFiles/XP.ImageProcessing.CfgControl.pdb
index 9e87d84..05dbc9f 100644
Binary files a/ReleaseFiles/XP.ImageProcessing.CfgControl.pdb and b/ReleaseFiles/XP.ImageProcessing.CfgControl.pdb differ
diff --git a/ReleaseFiles/XP.ImageProcessing.Core.dll b/ReleaseFiles/XP.ImageProcessing.Core.dll
index 0af1c02..1897d42 100644
Binary files a/ReleaseFiles/XP.ImageProcessing.Core.dll and b/ReleaseFiles/XP.ImageProcessing.Core.dll differ
diff --git a/ReleaseFiles/XP.ImageProcessing.Core.pdb b/ReleaseFiles/XP.ImageProcessing.Core.pdb
index 3690f67..804d908 100644
Binary files a/ReleaseFiles/XP.ImageProcessing.Core.pdb and b/ReleaseFiles/XP.ImageProcessing.Core.pdb differ
diff --git a/ReleaseFiles/XP.ImageProcessing.Processors.dll b/ReleaseFiles/XP.ImageProcessing.Processors.dll
index 645297e..4a55b56 100644
Binary files a/ReleaseFiles/XP.ImageProcessing.Processors.dll and b/ReleaseFiles/XP.ImageProcessing.Processors.dll differ
diff --git a/ReleaseFiles/XP.ImageProcessing.Processors.pdb b/ReleaseFiles/XP.ImageProcessing.Processors.pdb
index 7b55029..6464535 100644
Binary files a/ReleaseFiles/XP.ImageProcessing.Processors.pdb and b/ReleaseFiles/XP.ImageProcessing.Processors.pdb differ
diff --git a/ReleaseFiles/XP.ImageProcessing.RoiControl.dll b/ReleaseFiles/XP.ImageProcessing.RoiControl.dll
index d478d53..f57b07e 100644
Binary files a/ReleaseFiles/XP.ImageProcessing.RoiControl.dll and b/ReleaseFiles/XP.ImageProcessing.RoiControl.dll differ
diff --git a/ReleaseFiles/XP.ImageProcessing.RoiControl.pdb b/ReleaseFiles/XP.ImageProcessing.RoiControl.pdb
index 5441b82..cb5f3ff 100644
Binary files a/ReleaseFiles/XP.ImageProcessing.RoiControl.pdb and b/ReleaseFiles/XP.ImageProcessing.RoiControl.pdb differ
diff --git a/ReleaseFiles/XP.ReportEngine.dll b/ReleaseFiles/XP.ReportEngine.dll
index c3d733d..8218dfb 100644
Binary files a/ReleaseFiles/XP.ReportEngine.dll and b/ReleaseFiles/XP.ReportEngine.dll differ
diff --git a/ReleaseFiles/XP.ReportEngine.pdb b/ReleaseFiles/XP.ReportEngine.pdb
index ffd6093..1956889 100644
Binary files a/ReleaseFiles/XP.ReportEngine.pdb and b/ReleaseFiles/XP.ReportEngine.pdb differ
diff --git a/ReleaseFiles/XplorePlane.deps.json b/ReleaseFiles/XplorePlane.deps.json
index 7583502..ead026a 100644
--- a/ReleaseFiles/XplorePlane.deps.json
+++ b/ReleaseFiles/XplorePlane.deps.json
@@ -1018,6 +1018,14 @@
}
}
},
+ "SixLabors.ImageSharp/3.1.12": {
+ "runtime": {
+ "lib/net6.0/SixLabors.ImageSharp.dll": {
+ "assemblyVersion": "3.0.0.0",
+ "fileVersion": "3.1.12.0"
+ }
+ }
+ },
"SQLitePCLRaw.bundle_e_sqlite3/2.1.11": {
"dependencies": {
"SQLitePCLRaw.lib.e_sqlite3": "2.1.11",
@@ -2256,6 +2264,7 @@
"Serilog.Settings.Configuration": "10.0.0",
"Serilog.Sinks.Console": "6.1.1",
"Serilog.Sinks.File": "7.0.0",
+ "SixLabors.ImageSharp": "3.1.12",
"Telerik.UI.for.Wpf.NetCore.Xaml": "2024.1.408"
},
"runtime": {
@@ -2422,6 +2431,7 @@
"Serilog": "4.3.1",
"Serilog.Sinks.Console": "6.1.1",
"Serilog.Sinks.File": "7.0.0",
+ "XP.Common": "1.0.0",
"XP.ImageProcessing.Core": "1.0.0"
},
"runtime": {
@@ -3311,6 +3321,13 @@
"path": "sharpdx.mathematics/4.2.0",
"hashPath": "sharpdx.mathematics.4.2.0.nupkg.sha512"
},
+ "SixLabors.ImageSharp/3.1.12": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-iAg6zifihXEFS/t7fiHhZBGAdCp3FavsF4i2ZIDp0JfeYeDVzvmlbY1CNhhIKimaIzrzSi5M/NBFcWvZT2rB/A==",
+ "path": "sixlabors.imagesharp/3.1.12",
+ "hashPath": "sixlabors.imagesharp.3.1.12.nupkg.sha512"
+ },
"SQLitePCLRaw.bundle_e_sqlite3/2.1.11": {
"type": "package",
"serviceable": true,
diff --git a/ReleaseFiles/XplorePlane.dll b/ReleaseFiles/XplorePlane.dll
index 8f80c5a..42d7f53 100644
Binary files a/ReleaseFiles/XplorePlane.dll and b/ReleaseFiles/XplorePlane.dll differ
diff --git a/ReleaseFiles/XplorePlane.dll.config b/ReleaseFiles/XplorePlane.dll.config
index 7123378..ff77769 100644
--- a/ReleaseFiles/XplorePlane.dll.config
+++ b/ReleaseFiles/XplorePlane.dll.config
@@ -5,127 +5,88 @@
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -138,7 +99,6 @@
-
@@ -151,46 +111,33 @@
-
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ReleaseFiles/XplorePlane.exe b/ReleaseFiles/XplorePlane.exe
index c60cd80..bdc726b 100644
Binary files a/ReleaseFiles/XplorePlane.exe and b/ReleaseFiles/XplorePlane.exe differ
diff --git a/ReleaseFiles/XplorePlane.pdb b/ReleaseFiles/XplorePlane.pdb
index 05fa658..812134c 100644
Binary files a/ReleaseFiles/XplorePlane.pdb and b/ReleaseFiles/XplorePlane.pdb differ
diff --git a/XP.Camera/Converters/PixelConverter.cs b/XP.Camera/Converters/PixelConverter.cs
index 2c965b5..601f13a 100644
--- a/XP.Camera/Converters/PixelConverter.cs
+++ b/XP.Camera/Converters/PixelConverter.cs
@@ -10,6 +10,7 @@ public static class PixelConverter
{
///
/// 将原始像素数据转换为 WPF 的 BitmapSource 对象。
+ /// 支持 Mono8、BGR8、RGB8、BGRA8 以及 Bayer 8-bit 格式(自动解码为 BGR24)。
/// 返回的 BitmapSource 已调用 Freeze(),可跨线程访问。
///
public static BitmapSource ToBitmapSource(byte[] pixelData, int width, int height, string pixelFormat)
@@ -19,11 +20,23 @@ public static class PixelConverter
if (height <= 0) throw new ArgumentException("Height must be a positive integer.", nameof(height));
ArgumentNullException.ThrowIfNull(pixelFormat);
- var (format, stride) = pixelFormat switch
+ string normalized = NormalizePixelFormat(pixelFormat);
+
+ // Bayer 格式需要解码
+ if (normalized.StartsWith("Bayer"))
+ {
+ byte[] bgrData = DemosaicBayer(pixelData, width, height, normalized);
+ var bmp = BitmapSource.Create(width, height, 96, 96, PixelFormats.Bgr24, null, bgrData, width * 3);
+ bmp.Freeze();
+ return bmp;
+ }
+
+ var (format, stride) = normalized switch
{
"Mono8" => (PixelFormats.Gray8, width),
"BGR8" => (PixelFormats.Bgr24, width * 3),
"BGRA8" => (PixelFormats.Bgra32, width * 4),
+ "RGB8" => (PixelFormats.Rgb24, width * 3),
_ => throw new NotSupportedException($"Pixel format '{pixelFormat}' is not supported.")
};
@@ -31,4 +44,136 @@ public static class PixelConverter
bitmap.Freeze();
return bitmap;
}
-}
\ No newline at end of file
+
+ ///
+ /// 将不同 SDK 的像素格式名称统一为标准名称。
+ ///
+ private static string NormalizePixelFormat(string pixelFormat)
+ {
+ if (pixelFormat is "Mono8" or "BGR8" or "BGRA8" or "RGB8")
+ return pixelFormat;
+
+ var upper = pixelFormat.ToUpperInvariant();
+
+ if (upper.Contains("MONO8")) return "Mono8";
+ if (upper.Contains("BGR8")) return "BGR8";
+ if (upper.Contains("BGRA8")) return "BGRA8";
+ if (upper.Contains("RGB8") && !upper.Contains("BAYER")) return "RGB8";
+
+ // Bayer 格式
+ if (upper.Contains("BAYERRG8") || upper.Contains("BAYER_RG8")) return "BayerRG8";
+ if (upper.Contains("BAYERGR8") || upper.Contains("BAYER_GR8")) return "BayerGR8";
+ if (upper.Contains("BAYERGB8") || upper.Contains("BAYER_GB8")) return "BayerGB8";
+ if (upper.Contains("BAYERBG8") || upper.Contains("BAYER_BG8")) return "BayerBG8";
+
+ return pixelFormat;
+ }
+
+ ///
+ /// 简单 Bayer 解码(双线性插值),输出 BGR24。
+ ///
+ private static byte[] DemosaicBayer(byte[] bayer, int width, int height, string pattern)
+ {
+ // pattern: BayerRG8, BayerGR8, BayerGB8, BayerBG8
+ // RG: R G GR: G R GB: G B BG: B G
+ // G B B G R G G R
+
+ int rRow, rCol; // 红色像素在2x2块中的位置
+ switch (pattern)
+ {
+ case "BayerRG8": rRow = 0; rCol = 0; break;
+ case "BayerGR8": rRow = 0; rCol = 1; break;
+ case "BayerGB8": rRow = 1; rCol = 0; break;
+ case "BayerBG8": rRow = 1; rCol = 1; break;
+ default: rRow = 0; rCol = 0; break;
+ }
+
+ byte[] bgr = new byte[width * height * 3];
+
+ for (int y = 0; y < height; y++)
+ {
+ for (int x = 0; x < width; x++)
+ {
+ int srcIdx = y * width + x;
+ int dstIdx = (y * width + x) * 3;
+
+ // 确定当前像素在 Bayer 模式中的角色
+ int py = (y + rRow) % 2; // 0=红行, 1=蓝行
+ int px = (x + rCol) % 2; // 0=红列/蓝列, 1=绿列
+
+ byte r, g, b;
+
+ if (py == 0 && px == 0)
+ {
+ // 红色像素位置
+ r = bayer[srcIdx];
+ g = AvgNeighbors4(bayer, width, height, x, y);
+ b = AvgDiagonal(bayer, width, height, x, y);
+ }
+ else if (py == 1 && px == 1)
+ {
+ // 蓝色像素位置
+ b = bayer[srcIdx];
+ g = AvgNeighbors4(bayer, width, height, x, y);
+ r = AvgDiagonal(bayer, width, height, x, y);
+ }
+ else if (py == 0 && px == 1)
+ {
+ // 绿色像素(红行)
+ g = bayer[srcIdx];
+ r = AvgHorizontal(bayer, width, x, y);
+ b = AvgVertical(bayer, width, height, x, y);
+ }
+ else
+ {
+ // 绿色像素(蓝行)
+ g = bayer[srcIdx];
+ b = AvgHorizontal(bayer, width, x, y);
+ r = AvgVertical(bayer, width, height, x, y);
+ }
+
+ bgr[dstIdx] = b;
+ bgr[dstIdx + 1] = g;
+ bgr[dstIdx + 2] = r;
+ }
+ }
+
+ return bgr;
+ }
+
+ private static byte AvgNeighbors4(byte[] data, int w, int h, int x, int y)
+ {
+ int sum = 0, count = 0;
+ if (x > 0) { sum += data[y * w + x - 1]; count++; }
+ if (x < w - 1) { sum += data[y * w + x + 1]; count++; }
+ if (y > 0) { sum += data[(y - 1) * w + x]; count++; }
+ if (y < h - 1) { sum += data[(y + 1) * w + x]; count++; }
+ return count > 0 ? (byte)(sum / count) : (byte)0;
+ }
+
+ private static byte AvgDiagonal(byte[] data, int w, int h, int x, int y)
+ {
+ int sum = 0, count = 0;
+ if (x > 0 && y > 0) { sum += data[(y - 1) * w + x - 1]; count++; }
+ if (x < w - 1 && y > 0) { sum += data[(y - 1) * w + x + 1]; count++; }
+ if (x > 0 && y < h - 1) { sum += data[(y + 1) * w + x - 1]; count++; }
+ if (x < w - 1 && y < h - 1) { sum += data[(y + 1) * w + x + 1]; count++; }
+ return count > 0 ? (byte)(sum / count) : (byte)0;
+ }
+
+ private static byte AvgHorizontal(byte[] data, int w, int x, int y)
+ {
+ int sum = 0, count = 0;
+ if (x > 0) { sum += data[y * w + x - 1]; count++; }
+ if (x < w - 1) { sum += data[y * w + x + 1]; count++; }
+ return count > 0 ? (byte)(sum / count) : (byte)0;
+ }
+
+ private static byte AvgVertical(byte[] data, int w, int h, int x, int y)
+ {
+ int sum = 0, count = 0;
+ if (y > 0) { sum += data[(y - 1) * w + x]; count++; }
+ if (y < h - 1) { sum += data[(y + 1) * w + x]; count++; }
+ return count > 0 ? (byte)(sum / count) : (byte)0;
+ }
+}
diff --git a/XP.Camera/Core/CameraFactory.cs b/XP.Camera/Core/CameraFactory.cs
index de85f89..e8baf3b 100644
--- a/XP.Camera/Core/CameraFactory.cs
+++ b/XP.Camera/Core/CameraFactory.cs
@@ -11,8 +11,8 @@ public class CameraFactory : ICameraFactory
return cameraType switch
{
"Basler" => new BaslerCameraController(),
- // "Hikvision" => new HikvisionCameraController(),
- _ => throw new NotSupportedException($"不支持的相机品牌: {cameraType}")
+ "Hikvision" => new HikvisionCameraController(),
+ _ => throw new NotSupportedException($"Unsupported Camera Type: {cameraType}")
};
}
}
\ No newline at end of file
diff --git a/XP.Camera/Hikvision/HikvisionCameraController.cs b/XP.Camera/Hikvision/HikvisionCameraController.cs
new file mode 100644
index 0000000..5e0a33c
--- /dev/null
+++ b/XP.Camera/Hikvision/HikvisionCameraController.cs
@@ -0,0 +1,535 @@
+using MvCameraControl;
+using Serilog;
+
+namespace XP.Camera;
+
+///
+/// 海康威视相机控制器,封装 MvCameraControl.Net SDK 实现 。
+///
+///
+/// 所有公共方法通过内部 _syncLock 对象进行 lock 同步,保证线程安全。
+/// 事件回调(ImageGrabbed、GrabError)在 SDK 回调线程上触发,不持有 _syncLock,避免死锁。
+///
+public class HikvisionCameraController : ICameraController
+{
+ private static readonly ILogger _logger = Log.ForContext();
+ private static bool _sdkInitialized;
+ private static readonly object _sdkInitLock = new();
+
+ private readonly object _syncLock = new();
+ private IDevice? _device;
+ private CameraInfo? _cachedCameraInfo;
+ private bool _isConnected;
+ private bool _isGrabbing;
+
+ public HikvisionCameraController()
+ {
+ // SDK 初始化延迟到 Open() 中执行
+ }
+
+ ///
+ public bool IsConnected
+ {
+ get { lock (_syncLock) { return _isConnected; } }
+ }
+
+ ///
+ public bool IsGrabbing
+ {
+ get { lock (_syncLock) { return _isGrabbing; } }
+ }
+
+ ///
+ public event EventHandler? ImageGrabbed;
+
+ ///
+ public event EventHandler? GrabError;
+
+ ///
+ public event EventHandler? ConnectionLost;
+
+ ///
+ public CameraInfo Open()
+ {
+ lock (_syncLock)
+ {
+ if (_isConnected && _cachedCameraInfo != null)
+ {
+ _logger.Information("Hikvision camera already connected, returning cached info.");
+ return _cachedCameraInfo;
+ }
+
+ try
+ {
+ _logger.Information("Opening Hikvision camera connection...");
+
+ // 确保 SDK 初始化
+ EnsureSdkInitialized();
+
+ // 枚举设备
+ DeviceTLayerType layerType = DeviceTLayerType.MvGigEDevice
+ | DeviceTLayerType.MvUsbDevice;
+
+ List deviceInfoList;
+ int ret = DeviceEnumerator.EnumDevices(layerType, out deviceInfoList);
+ _logger.Information("EnumDevices(GigE|USB) returned: 0x{RetCode:X8}, device count: {Count}",
+ ret, deviceInfoList?.Count ?? 0);
+
+ // 如果没找到,分别尝试
+ if (ret == MvError.MV_OK && (deviceInfoList == null || deviceInfoList.Count == 0))
+ {
+ // 单独尝试 GigE
+ List gigeList;
+ int retGige = DeviceEnumerator.EnumDevices(DeviceTLayerType.MvGigEDevice, out gigeList);
+ _logger.Information("EnumDevices(GigE only) returned: 0x{RetCode:X8}, count: {Count}",
+ retGige, gigeList?.Count ?? 0);
+
+ // 单独尝试 USB
+ List usbList;
+ int retUsb = DeviceEnumerator.EnumDevices(DeviceTLayerType.MvUsbDevice, out usbList);
+ _logger.Information("EnumDevices(USB only) returned: 0x{RetCode:X8}, count: {Count}",
+ retUsb, usbList?.Count ?? 0);
+
+ // 合并结果
+ deviceInfoList = new List();
+ if (gigeList != null) deviceInfoList.AddRange(gigeList);
+ if (usbList != null) deviceInfoList.AddRange(usbList);
+ }
+
+ if (ret != MvError.MV_OK)
+ {
+ throw new CameraException($"Enumerate Hikvision devices failed: 0x{ret:X8}");
+ }
+
+ if (deviceInfoList == null || deviceInfoList.Count == 0)
+ {
+ throw new DeviceNotFoundException("No Hikvision camera device found.");
+ }
+
+ // 选择第一个设备
+ IDeviceInfo deviceInfo = deviceInfoList[0];
+ _logger.Information("Found Hikvision device: {Model} (SN: {Serial})",
+ deviceInfo.ModelName, deviceInfo.SerialNumber);
+
+ // 创建设备
+ _device = DeviceFactory.CreateDevice(deviceInfo);
+
+ // 打开设备
+ ret = _device.Open();
+ if (ret != MvError.MV_OK)
+ {
+ _device.Dispose();
+ _device = null;
+ throw new CameraException($"Open Hikvision device failed: 0x{ret:X8}");
+ }
+
+ // GigE 设备优化包大小
+ if (_device is IGigEDevice gigEDevice)
+ {
+ int packetSize;
+ ret = gigEDevice.GetOptimalPacketSize(out packetSize);
+ if (ret == MvError.MV_OK && packetSize > 0)
+ {
+ _device.Parameters.SetIntValue("GevSCPSPacketSize", packetSize);
+ _logger.Debug("Set GigE packet size to {PacketSize}", packetSize);
+ }
+ }
+
+ // 配置软件触发模式
+ _device.Parameters.SetEnumValueByString("TriggerMode", "On");
+ _device.Parameters.SetEnumValueByString("TriggerSource", "Software");
+
+ // 彩色相机:尝试设置输出为 BGR8 以便直接显示
+ // 如果相机不支持 BGR8(如只支持 Bayer),则保持默认
+ int fmtRet = _device.Parameters.SetEnumValueByString("PixelFormat", "BGR8Packed");
+ if (fmtRet != MvError.MV_OK)
+ {
+ // 尝试 Mono8(黑白相机)
+ fmtRet = _device.Parameters.SetEnumValueByString("PixelFormat", "Mono8");
+ }
+ _logger.Debug("Set PixelFormat result: 0x{Ret:X8}", fmtRet);
+
+ _cachedCameraInfo = new CameraInfo(
+ ModelName: deviceInfo.ModelName ?? "",
+ SerialNumber: deviceInfo.SerialNumber ?? "",
+ VendorName: deviceInfo.ManufacturerName ?? "",
+ DeviceType: deviceInfo.TLayerType.ToString()
+ );
+
+ _isConnected = true;
+ _logger.Information("Hikvision camera connected: {ModelName} (SN: {SerialNumber})",
+ _cachedCameraInfo.ModelName, _cachedCameraInfo.SerialNumber);
+
+ return _cachedCameraInfo;
+ }
+ catch (Exception ex) when (ex is not CameraException)
+ {
+ _device?.Dispose();
+ _device = null;
+ _logger.Error(ex, "Failed to open Hikvision camera.");
+ throw new CameraException("Failed to open Hikvision camera device.", ex);
+ }
+ }
+ }
+
+ ///
+ public void Close()
+ {
+ lock (_syncLock)
+ {
+ if (!_isConnected)
+ {
+ _logger.Information("Hikvision camera not connected, Close() ignored.");
+ return;
+ }
+
+ try
+ {
+ if (_isGrabbing)
+ {
+ StopGrabbingInternal();
+ }
+
+ _logger.Information("Closing Hikvision camera connection...");
+ _device?.Close();
+ _device?.Dispose();
+ _device = null;
+ _isConnected = false;
+ _cachedCameraInfo = null;
+ _logger.Information("Hikvision camera connection closed.");
+ }
+ catch (Exception ex) when (ex is not CameraException)
+ {
+ _device = null;
+ _isConnected = false;
+ _isGrabbing = false;
+ _cachedCameraInfo = null;
+ _logger.Error(ex, "Error while closing Hikvision camera.");
+ throw new CameraException("Failed to close Hikvision camera device.", ex);
+ }
+ }
+ }
+
+ ///
+ public void StartGrabbing()
+ {
+ lock (_syncLock)
+ {
+ EnsureConnected();
+
+ if (_isGrabbing)
+ {
+ _logger.Information("Already grabbing, StartGrabbing() ignored.");
+ return;
+ }
+
+ try
+ {
+ _logger.Information("Starting Hikvision grabbing with software trigger...");
+
+ // 设置缓存节点数
+ _device!.StreamGrabber.SetImageNodeNum(5);
+
+ // 注册回调
+ _device.StreamGrabber.FrameGrabedEvent += OnFrameGrabbed;
+
+ // 开始采集
+ int ret = _device.StreamGrabber.StartGrabbing();
+ if (ret != MvError.MV_OK)
+ {
+ _device.StreamGrabber.FrameGrabedEvent -= OnFrameGrabbed;
+ throw new CameraException($"Start grabbing failed: 0x{ret:X8}");
+ }
+
+ _isGrabbing = true;
+ _logger.Information("Hikvision grabbing started.");
+ }
+ catch (Exception ex) when (ex is not CameraException)
+ {
+ _logger.Error(ex, "Failed to start Hikvision grabbing.");
+ throw new CameraException("Failed to start grabbing.", ex);
+ }
+ }
+ }
+
+ ///
+ public void ExecuteSoftwareTrigger()
+ {
+ lock (_syncLock)
+ {
+ if (!_isGrabbing)
+ {
+ throw new InvalidOperationException("Cannot execute software trigger: camera is not grabbing.");
+ }
+
+ try
+ {
+ int ret = _device!.Parameters.SetCommandValue("TriggerSoftware");
+ if (ret != MvError.MV_OK)
+ {
+ throw new CameraException($"Execute software trigger failed: 0x{ret:X8}");
+ }
+ }
+ catch (Exception ex) when (ex is not CameraException and not InvalidOperationException)
+ {
+ _logger.Error(ex, "Failed to execute software trigger.");
+ throw new CameraException("Failed to execute software trigger.", ex);
+ }
+ }
+ }
+
+ ///
+ public void StopGrabbing()
+ {
+ lock (_syncLock)
+ {
+ if (!_isGrabbing) return;
+ StopGrabbingInternal();
+ }
+ }
+
+ ///
+ public double GetExposureTime()
+ {
+ lock (_syncLock)
+ {
+ EnsureConnected();
+ IFloatValue floatValue;
+ int ret = _device!.Parameters.GetFloatValue("ExposureTime", out floatValue);
+ if (ret != MvError.MV_OK)
+ throw new CameraException($"Get ExposureTime failed: 0x{ret:X8}");
+ return floatValue.CurValue;
+ }
+ }
+
+ ///
+ public void SetExposureTime(double microseconds)
+ {
+ lock (_syncLock)
+ {
+ EnsureConnected();
+ // 关闭自动曝光
+ _device!.Parameters.SetEnumValueByString("ExposureAuto", "Off");
+ int ret = _device.Parameters.SetFloatValue("ExposureTime", (float)microseconds);
+ if (ret != MvError.MV_OK)
+ throw new CameraException($"Set ExposureTime failed: 0x{ret:X8}");
+ _logger.Information("Hikvision exposure time set to {Microseconds} µs.", microseconds);
+ }
+ }
+
+ ///
+ public double GetGain()
+ {
+ lock (_syncLock)
+ {
+ EnsureConnected();
+ IFloatValue floatValue;
+ int ret = _device!.Parameters.GetFloatValue("Gain", out floatValue);
+ if (ret != MvError.MV_OK)
+ throw new CameraException($"Get Gain failed: 0x{ret:X8}");
+ return floatValue.CurValue;
+ }
+ }
+
+ ///
+ public void SetGain(double value)
+ {
+ lock (_syncLock)
+ {
+ EnsureConnected();
+ _device!.Parameters.SetEnumValueByString("GainAuto", "Off");
+ int ret = _device.Parameters.SetFloatValue("Gain", (float)value);
+ if (ret != MvError.MV_OK)
+ throw new CameraException($"Set Gain failed: 0x{ret:X8}");
+ _logger.Information("Hikvision gain set to {Value}.", value);
+ }
+ }
+
+ ///
+ public int GetWidth()
+ {
+ lock (_syncLock)
+ {
+ EnsureConnected();
+ IIntValue intValue;
+ int ret = _device!.Parameters.GetIntValue("Width", out intValue);
+ if (ret != MvError.MV_OK)
+ throw new CameraException($"Get Width failed: 0x{ret:X8}");
+ return (int)intValue.CurValue;
+ }
+ }
+
+ ///
+ public void SetWidth(int value)
+ {
+ lock (_syncLock)
+ {
+ EnsureConnected();
+ int ret = _device!.Parameters.SetIntValue("Width", value);
+ if (ret != MvError.MV_OK)
+ throw new CameraException($"Set Width failed: 0x{ret:X8}");
+ _logger.Information("Hikvision width set to {Value}.", value);
+ }
+ }
+
+ ///
+ public int GetHeight()
+ {
+ lock (_syncLock)
+ {
+ EnsureConnected();
+ IIntValue intValue;
+ int ret = _device!.Parameters.GetIntValue("Height", out intValue);
+ if (ret != MvError.MV_OK)
+ throw new CameraException($"Get Height failed: 0x{ret:X8}");
+ return (int)intValue.CurValue;
+ }
+ }
+
+ ///
+ public void SetHeight(int value)
+ {
+ lock (_syncLock)
+ {
+ EnsureConnected();
+ int ret = _device!.Parameters.SetIntValue("Height", value);
+ if (ret != MvError.MV_OK)
+ throw new CameraException($"Set Height failed: 0x{ret:X8}");
+ _logger.Information("Hikvision height set to {Value}.", value);
+ }
+ }
+
+ ///
+ public string GetPixelFormat()
+ {
+ lock (_syncLock)
+ {
+ EnsureConnected();
+ IEnumValue enumValue;
+ int ret = _device!.Parameters.GetEnumValue("PixelFormat", out enumValue);
+ if (ret != MvError.MV_OK)
+ throw new CameraException($"Get PixelFormat failed: 0x{ret:X8}");
+ return enumValue.CurEnumEntry.Symbolic;
+ }
+ }
+
+ ///
+ public void SetPixelFormat(string format)
+ {
+ lock (_syncLock)
+ {
+ EnsureConnected();
+ int ret = _device!.Parameters.SetEnumValueByString("PixelFormat", format);
+ if (ret != MvError.MV_OK)
+ throw new CameraException($"Set PixelFormat failed: 0x{ret:X8}");
+ _logger.Information("Hikvision pixel format set to {Format}.", format);
+ }
+ }
+
+ ///
+ public void Dispose()
+ {
+ Close();
+ GC.SuppressFinalize(this);
+ }
+
+ // ══════════════════════════════════════════════════════════════
+ // 私有方法
+ // ══════════════════════════════════════════════════════════════
+
+ ///
+ /// SDK 回调:图像采集完成
+ ///
+ private void OnFrameGrabbed(object? sender, FrameGrabbedEventArgs e)
+ {
+ try
+ {
+ var frameOut = e.FrameOut;
+ if (frameOut == null || frameOut.Image == null)
+ {
+ _logger.Warning("Hikvision OnFrameGrabbed: FrameOut or Image is null");
+ GrabError?.Invoke(this, new GrabErrorEventArgs(-1, "FrameOut or Image is null."));
+ return;
+ }
+
+ var image = frameOut.Image;
+ int width = (int)image.Width;
+ int height = (int)image.Height;
+ int imageSize = (int)image.ImageSize;
+ string pixelFormat = image.PixelType.ToString();
+
+ // 提取像素数据
+ byte[] pixelData = image.PixelData ?? Array.Empty();
+
+ _logger.Debug("Hikvision frame: {Width}x{Height}, format={Format}, dataLen={Len}",
+ width, height, pixelFormat, pixelData.Length);
+
+ if (pixelData.Length == 0)
+ {
+ _logger.Warning("Hikvision OnFrameGrabbed: PixelData is empty");
+ return;
+ }
+
+ var args = new ImageGrabbedEventArgs(pixelData, width, height, pixelFormat);
+ ImageGrabbed?.Invoke(this, args);
+ }
+ catch (Exception ex)
+ {
+ _logger.Error(ex, "Exception in Hikvision OnFrameGrabbed handler.");
+ }
+ }
+
+ private void StopGrabbingInternal()
+ {
+ if (!_isGrabbing) return;
+
+ try
+ {
+ _device?.StreamGrabber.StopGrabbing();
+ if (_device != null)
+ _device.StreamGrabber.FrameGrabedEvent -= OnFrameGrabbed;
+ _isGrabbing = false;
+ _logger.Information("Hikvision grabbing stopped.");
+ }
+ catch (Exception ex) when (ex is not CameraException)
+ {
+ _isGrabbing = false;
+ _logger.Error(ex, "Error while stopping Hikvision grabbing.");
+ throw new CameraException("Failed to stop grabbing.", ex);
+ }
+ }
+
+ private void EnsureConnected()
+ {
+ if (!_isConnected)
+ throw new InvalidOperationException("Hikvision camera is not connected. Call Open() first.");
+ }
+
+ ///
+ /// 确保 SDK 全局初始化(只调用一次)
+ ///
+ private static void EnsureSdkInitialized()
+ {
+ if (_sdkInitialized) return;
+ lock (_sdkInitLock)
+ {
+ if (_sdkInitialized) return;
+ try
+ {
+ int ret = SDKSystem.Initialize();
+ if (ret != MvError.MV_OK)
+ {
+ _logger.Error("Hikvision SDK Initialize failed: 0x{ErrorCode:X8}", ret);
+ throw new CameraException($"Hikvision SDK Initialize failed: 0x{ret:X8}");
+ }
+ _sdkInitialized = true;
+ _logger.Information("Hikvision SDK initialized successfully.");
+ }
+ catch (Exception ex) when (ex is not CameraException)
+ {
+ _logger.Error(ex, "Failed to initialize Hikvision SDK.");
+ throw new CameraException("Failed to initialize Hikvision SDK.", ex);
+ }
+ }
+ }
+}
diff --git a/XP.Camera/XP.Camera.csproj b/XP.Camera/XP.Camera.csproj
index 1510592..0a4b749 100644
--- a/XP.Camera/XP.Camera.csproj
+++ b/XP.Camera/XP.Camera.csproj
@@ -7,12 +7,19 @@
enable
XP.Camera
XP.Camera
+ true
+ true
..\ExternalLibraries\Basler.Pylon.dll
+
+ ..\ExternalLibraries\MvCameraControl.Net.dll
+ true
+ true
+
diff --git a/XP.Common/Controls/ImageHistogram/ChartRenderer.cs b/XP.Common/Controls/ImageHistogram/ChartRenderer.cs
new file mode 100644
index 0000000..b02d5fc
--- /dev/null
+++ b/XP.Common/Controls/ImageHistogram/ChartRenderer.cs
@@ -0,0 +1,288 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Telerik.Windows.Controls;
+using Telerik.Windows.Controls.ChartView;
+
+namespace XP.Common.Controls.ImageHistogram
+{
+ ///
+ /// RadChartView 渲染适配器 | RadChartView rendering adapter
+ /// 负责将直方图频次数据渲染到 Telerik RadCartesianChart 控件
+ ///
+ internal sealed class ChartRenderer
+ {
+ private readonly RadCartesianChart _chart;
+ private readonly ScatterAreaSeries _areaSeries;
+ private readonly LinearAxis _xAxis;
+
+ ///
+ /// 16 位数据聚合因子 | 16-bit data aggregation factor
+ ///
+ private const int AggregationFactor = 256;
+
+ ///
+ /// 构造函数,接收 RadCartesianChart 实例 | Constructor, receives RadCartesianChart instance
+ ///
+ /// 图表控件实例 | Chart control instance
+ /// 面积图系列 | Area series
+ /// X 轴 | X axis
+ public ChartRenderer(RadCartesianChart chart, ScatterAreaSeries areaSeries, LinearAxis xAxis)
+ {
+ _chart = chart ?? throw new ArgumentNullException(nameof(chart));
+ _areaSeries = areaSeries ?? throw new ArgumentNullException(nameof(areaSeries));
+ _xAxis = xAxis ?? throw new ArgumentNullException(nameof(xAxis));
+ }
+
+ ///
+ /// 更新直方图数据 | Update histogram data
+ ///
+ /// 频次数组(256 或 65536 长度)| Frequency array (256 or 65536 length)
+ /// 是否使用对数 Y 轴 | Whether to use logarithmic Y axis
+ public void UpdateData(long[] histogram, bool isLogarithmic)
+ {
+ if (histogram == null || histogram.Length == 0)
+ return;
+
+ // 确定是否需要聚合(16 位数据)| Determine if aggregation needed (16-bit data)
+ long[] displayData;
+ int xAxisMax;
+
+ if (histogram.Length == 65536)
+ {
+ // 16 位数据聚合为 256 个柱体 | Aggregate 16-bit data to 256 bars
+ displayData = Aggregate16BitHistogram(histogram);
+ xAxisMax = 65535;
+ }
+ else
+ {
+ // 8 位数据直接显示 | Display 8-bit data directly
+ displayData = histogram;
+ xAxisMax = 255;
+ }
+
+ // 设置 X 轴范围 | Set X axis range
+ _xAxis.Minimum = 0;
+ _xAxis.Maximum = xAxisMax;
+ // 根据范围自动设置刻度间隔(保持 4-5 个刻度)| Auto set major step based on range (keep 4-5 ticks)
+ _xAxis.MajorStep = xAxisMax <= 255 ? 64 : 16384;
+
+ // 构建数据点 | Build data points
+ var dataPoints = new List();
+
+ if (isLogarithmic)
+ {
+ // 对数模式:频次为 0 的不绘制 | Logarithmic mode: skip zero frequency
+ for (int i = 0; i < displayData.Length; i++)
+ {
+ if (displayData[i] > 0)
+ {
+ double xValue = histogram.Length == 65536
+ ? i * AggregationFactor + AggregationFactor / 2.0
+ : i;
+ dataPoints.Add(new HistogramDataPoint
+ {
+ GrayLevel = xValue,
+ Frequency = displayData[i]
+ });
+ }
+ }
+ }
+ else
+ {
+ // 线性模式:所有灰度级别都绘制 | Linear mode: draw all gray levels
+ for (int i = 0; i < displayData.Length; i++)
+ {
+ double xValue = histogram.Length == 65536
+ ? i * AggregationFactor + AggregationFactor / 2.0
+ : i;
+ dataPoints.Add(new HistogramDataPoint
+ {
+ GrayLevel = xValue,
+ Frequency = displayData[i]
+ });
+ }
+ }
+
+ // 更新图表数据 | Update chart data
+ _areaSeries.ItemsSource = dataPoints;
+
+ // 设置 Y 轴范围 | Set Y axis range
+ UpdateYAxis(displayData, isLogarithmic);
+ }
+
+ ///
+ /// 清空图表,恢复初始状态 | Clear chart, restore initial state
+ ///
+ public void Clear()
+ {
+ _areaSeries.ItemsSource = null;
+
+ // X 轴范围重置为 0-255 | Reset X axis range to 0-255
+ _xAxis.Minimum = 0;
+ _xAxis.Maximum = 255;
+
+ // Y 轴范围重置为 0-1 | Reset Y axis range to 0-1
+ SetYAxisRange(0, 1, isLogarithmic: false);
+ }
+
+ ///
+ /// 获取当前数据点数量 | Get current data point count
+ ///
+ public int DataPointCount
+ {
+ get
+ {
+ if (_areaSeries.ItemsSource is ICollection collection)
+ return collection.Count;
+ if (_areaSeries.ItemsSource is IEnumerable enumerable)
+ return enumerable.Count();
+ return 0;
+ }
+ }
+
+ ///
+ /// 将 65536 长度的频次数组聚合为 256 个柱体 | Aggregate 65536-length array to 256 bars
+ ///
+ private static long[] Aggregate16BitHistogram(long[] histogram)
+ {
+ var aggregated = new long[256];
+ for (int i = 0; i < 256; i++)
+ {
+ long sum = 0;
+ int startIndex = i * AggregationFactor;
+ for (int j = 0; j < AggregationFactor; j++)
+ {
+ sum += histogram[startIndex + j];
+ }
+ aggregated[i] = sum;
+ }
+ return aggregated;
+ }
+
+ ///
+ /// 更新 Y 轴范围 | Update Y axis range
+ ///
+ private void UpdateYAxis(long[] displayData, bool isLogarithmic)
+ {
+ long maxValue = 0;
+ for (int i = 0; i < displayData.Length; i++)
+ {
+ if (displayData[i] > maxValue)
+ maxValue = displayData[i];
+ }
+
+ if (maxValue == 0)
+ maxValue = 1;
+
+ // 计算取整的 MajorStep(约 4 个刻度,对齐到 K/M 整数倍)| Calculate rounded MajorStep (~4 ticks, aligned to K/M multiples)
+ if (_chart.VerticalAxis is LinearAxis linearAxis)
+ {
+ long rawStep = maxValue / 4;
+ long step = RoundStepToNice(rawStep);
+ if (step < 1) step = 1;
+ linearAxis.MajorStep = step;
+
+ // 将最大值向上取整到 step 的整数倍 | Round max up to multiple of step
+ long roundedMax = ((maxValue / step) + 1) * step;
+ SetYAxisRange(0, roundedMax, isLogarithmic);
+ }
+ else
+ {
+ SetYAxisRange(0, maxValue, isLogarithmic);
+ }
+ }
+
+ ///
+ /// 将步长取整为"好看"的数值(1, 2, 5 的倍数 × 10^n)| Round step to "nice" value (multiples of 1, 2, 5 × 10^n)
+ /// 例如:123456 → 100000,350000 → 500000,780000 → 1000000
+ ///
+ private static long RoundStepToNice(long rawStep)
+ {
+ if (rawStep <= 0) return 1;
+
+ // 找到数量级 | Find order of magnitude
+ double magnitude = Math.Pow(10, Math.Floor(Math.Log10(rawStep)));
+ double normalized = rawStep / magnitude;
+
+ // 取整到 1, 2, 5 中最近的 | Round to nearest of 1, 2, 5
+ double niceNormalized;
+ if (normalized <= 1.5)
+ niceNormalized = 1;
+ else if (normalized <= 3.5)
+ niceNormalized = 2;
+ else if (normalized <= 7.5)
+ niceNormalized = 5;
+ else
+ niceNormalized = 10;
+
+ return (long)(niceNormalized * magnitude);
+ }
+
+ ///
+ /// 设置 Y 轴范围和刻度类型 | Set Y axis range and scale type
+ ///
+ private void SetYAxisRange(double minimum, double maximum, bool isLogarithmic)
+ {
+ // 获取或创建 Y 轴 | Get or create Y axis
+ var verticalAxis = _chart.VerticalAxis;
+
+ if (isLogarithmic)
+ {
+ // 对数刻度 | Logarithmic scale
+ if (verticalAxis is LogarithmicAxis logAxis)
+ {
+ logAxis.Minimum = 1;
+ logAxis.Maximum = maximum;
+ logAxis.LogarithmBase = 10;
+ }
+ else
+ {
+ // 需要切换为对数轴 | Need to switch to logarithmic axis
+ var newLogAxis = new LogarithmicAxis
+ {
+ Minimum = 1,
+ Maximum = maximum,
+ LogarithmBase = 10
+ };
+ _chart.VerticalAxis = newLogAxis;
+ }
+ }
+ else
+ {
+ // 线性刻度 | Linear scale
+ if (verticalAxis is LinearAxis linearAxis)
+ {
+ linearAxis.Minimum = minimum;
+ linearAxis.Maximum = maximum;
+ }
+ else
+ {
+ // 需要切换为线性轴 | Need to switch to linear axis
+ var newLinearAxis = new LinearAxis
+ {
+ Minimum = minimum,
+ Maximum = maximum
+ };
+ _chart.VerticalAxis = newLinearAxis;
+ }
+ }
+ }
+ }
+
+ ///
+ /// 直方图数据点模型 | Histogram data point model
+ ///
+ internal class HistogramDataPoint
+ {
+ ///
+ /// 灰度级别(X 轴值)| Gray level (X axis value)
+ ///
+ public double GrayLevel { get; set; }
+
+ ///
+ /// 像素频次(Y 轴值)| Pixel frequency (Y axis value)
+ ///
+ public long Frequency { get; set; }
+ }
+}
diff --git a/XP.Common/Controls/ImageHistogram/FrameThrottler.cs b/XP.Common/Controls/ImageHistogram/FrameThrottler.cs
new file mode 100644
index 0000000..bb3c598
--- /dev/null
+++ b/XP.Common/Controls/ImageHistogram/FrameThrottler.cs
@@ -0,0 +1,207 @@
+using System;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace XP.Common.Controls.ImageHistogram
+{
+ ///
+ /// 帧率限流器,确保计算频率不超过 MaxFrameRate | Frame rate throttler
+ /// 支持从任意线程调用,使用 lock 保护内部状态
+ ///
+ internal sealed class FrameThrottler : IDisposable
+ {
+ private readonly object _lock = new();
+ private DateTime _lastProcessTime = DateTime.MinValue;
+ private Action? _pendingAction;
+ private CancellationTokenSource? _delayCts;
+ private bool _isProcessing;
+ private bool _disposed;
+ private int _maxFrameRate = 15;
+
+ ///
+ /// 最大刷新帧率(fps),有效范围 1-60,超出范围自动钳位 | Max frame rate (fps), valid range 1-60, auto-clamped
+ ///
+ public int MaxFrameRate
+ {
+ get => _maxFrameRate;
+ set => _maxFrameRate = Math.Clamp(value, 1, 60);
+ }
+
+ ///
+ /// 获取当前帧间隔(毫秒)| Get current frame interval (ms)
+ ///
+ private double FrameIntervalMs => 1000.0 / _maxFrameRate;
+
+ ///
+ /// 提交一帧计算动作 | Submit a frame compute action
+ /// 若未超过帧率限制则立即执行,否则缓存最新帧并延迟触发
+ ///
+ /// 计算动作 | Compute action
+ /// 是否被立即接受处理 | Whether it was immediately accepted
+ public bool TrySubmit(Action computeAction)
+ {
+ if (_disposed || computeAction == null)
+ return false;
+
+ lock (_lock)
+ {
+ var now = DateTime.UtcNow;
+ var elapsed = (now - _lastProcessTime).TotalMilliseconds;
+
+ if (elapsed >= FrameIntervalMs && !_isProcessing)
+ {
+ // 已超过间隔且无正在处理的任务,立即执行 | Interval exceeded and no processing, execute immediately
+ _isProcessing = true;
+ _lastProcessTime = now;
+ ExecuteAction(computeAction);
+ return true;
+ }
+ else
+ {
+ // 未超过间隔或正在处理中,缓存最新帧(丢弃之前的中间帧)| Cache latest frame, discard previous
+ _pendingAction = computeAction;
+ ScheduleDelayedExecution(elapsed);
+ return false;
+ }
+ }
+ }
+
+ ///
+ /// 执行计算动作(异步,完成后检查待处理帧)| Execute compute action asynchronously
+ ///
+ private void ExecuteAction(Action action)
+ {
+ Task.Run(() =>
+ {
+ try
+ {
+ action.Invoke();
+ }
+ catch
+ {
+ // 异常不外抛 | Do not propagate exceptions
+ }
+ finally
+ {
+ OnActionCompleted();
+ }
+ });
+ }
+
+ ///
+ /// 计算动作完成后的回调 | Callback after compute action completes
+ ///
+ private void OnActionCompleted()
+ {
+ Action? nextAction = null;
+
+ lock (_lock)
+ {
+ _isProcessing = false;
+
+ if (_pendingAction != null && !_disposed)
+ {
+ var now = DateTime.UtcNow;
+ var elapsed = (now - _lastProcessTime).TotalMilliseconds;
+
+ if (elapsed >= FrameIntervalMs)
+ {
+ // 间隔已到,立即执行待处理帧 | Interval reached, execute pending frame
+ nextAction = _pendingAction;
+ _pendingAction = null;
+ _isProcessing = true;
+ _lastProcessTime = now;
+ }
+ // 否则等待延迟触发 | Otherwise wait for delayed trigger
+ }
+ }
+
+ if (nextAction != null)
+ {
+ ExecuteAction(nextAction);
+ }
+ }
+
+ ///
+ /// 安排延迟执行(等待帧间隔到期后处理最新帧)| Schedule delayed execution
+ ///
+ private void ScheduleDelayedExecution(double elapsedMs)
+ {
+ // 取消之前的延迟任务 | Cancel previous delay task
+ _delayCts?.Cancel();
+ _delayCts?.Dispose();
+ _delayCts = new CancellationTokenSource();
+ var token = _delayCts.Token;
+
+ var delayMs = Math.Max(0, FrameIntervalMs - elapsedMs);
+
+ Task.Run(async () =>
+ {
+ try
+ {
+ await Task.Delay((int)delayMs, token);
+
+ if (token.IsCancellationRequested)
+ return;
+
+ Action? actionToExecute = null;
+
+ lock (_lock)
+ {
+ if (_pendingAction != null && !_isProcessing && !_disposed)
+ {
+ actionToExecute = _pendingAction;
+ _pendingAction = null;
+ _isProcessing = true;
+ _lastProcessTime = DateTime.UtcNow;
+ }
+ }
+
+ if (actionToExecute != null)
+ {
+ ExecuteAction(actionToExecute);
+ }
+ }
+ catch (OperationCanceledException)
+ {
+ // 延迟被取消,正常情况 | Delay cancelled, normal case
+ }
+ catch
+ {
+ // 异常不外抛 | Do not propagate exceptions
+ }
+ });
+ }
+
+ ///
+ /// 取消所有待处理任务 | Cancel all pending tasks
+ ///
+ public void Cancel()
+ {
+ lock (_lock)
+ {
+ _pendingAction = null;
+ _delayCts?.Cancel();
+ _delayCts?.Dispose();
+ _delayCts = null;
+ }
+ }
+
+ ///
+ /// 释放所有资源 | Dispose all resources
+ ///
+ public void Dispose()
+ {
+ if (_disposed) return;
+ _disposed = true;
+
+ lock (_lock)
+ {
+ _pendingAction = null;
+ _delayCts?.Cancel();
+ _delayCts?.Dispose();
+ _delayCts = null;
+ }
+ }
+ }
+}
diff --git a/XP.Common/Controls/ImageHistogram/FrequencyLabelConverter.cs b/XP.Common/Controls/ImageHistogram/FrequencyLabelConverter.cs
new file mode 100644
index 0000000..76a76c8
--- /dev/null
+++ b/XP.Common/Controls/ImageHistogram/FrequencyLabelConverter.cs
@@ -0,0 +1,49 @@
+using System;
+using System.Globalization;
+using System.Windows.Data;
+
+namespace XP.Common.Controls.ImageHistogram
+{
+ ///
+ /// 频次标签转换器:将大数值转为 K/M 缩写格式 | Frequency label converter: converts large values to K/M abbreviation format
+ /// 例如:500000 → "500K",1500000 → "1.5M",800 → "800"
+ ///
+ internal sealed class FrequencyLabelConverter : IValueConverter
+ {
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ if (value == null) return "0";
+
+ double num;
+ if (value is double d)
+ num = d;
+ else if (value is decimal dec)
+ num = (double)dec;
+ else if (!double.TryParse(value.ToString(), out num))
+ return value.ToString() ?? "0";
+
+ if (num >= 1_000_000)
+ {
+ double mValue = num / 1_000_000.0;
+ return mValue == Math.Floor(mValue)
+ ? $"{(int)mValue}M"
+ : $"{mValue:0.#}M";
+ }
+
+ if (num >= 1_000)
+ {
+ double kValue = num / 1_000.0;
+ return kValue == Math.Floor(kValue)
+ ? $"{(int)kValue}K"
+ : $"{kValue:0.#}K";
+ }
+
+ return $"{(int)num}";
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/XP.Common/Controls/ImageHistogram/HistogramEngine.cs b/XP.Common/Controls/ImageHistogram/HistogramEngine.cs
new file mode 100644
index 0000000..cafa8c7
--- /dev/null
+++ b/XP.Common/Controls/ImageHistogram/HistogramEngine.cs
@@ -0,0 +1,211 @@
+using System;
+using System.Threading;
+using System.Threading.Tasks;
+using SixLabors.ImageSharp;
+using SixLabors.ImageSharp.PixelFormats;
+
+namespace XP.Common.Controls.ImageHistogram
+{
+ ///
+ /// 直方图后台计算引擎 | Histogram background computation engine
+ /// 负责在后台线程中执行灰度值遍历和统计计算
+ ///
+ internal sealed class HistogramEngine : IDisposable
+ {
+ ///
+ /// 单帧计算超时时间(毫秒)| Single frame computation timeout (ms)
+ ///
+ private const int ComputeTimeoutMs = 5000;
+
+ private CancellationTokenSource? _timeoutCts;
+ private readonly object _lock = new();
+ private bool _disposed;
+
+ ///
+ /// 从 Image<Rgba32> 计算灰度直方图 | Compute histogram from Image<Rgba32>
+ /// 使用 ITU-R BT.601 亮度公式:Gray = 0.299R + 0.587G + 0.114B
+ ///
+ /// 输入图像 | Input image
+ /// 取消令牌 | Cancellation token
+ /// 256 长度的频次数组,失败返回 null | 256-length frequency array, null on failure
+ public Task ComputeAsync(Image image, CancellationToken ct)
+ {
+ if (image == null)
+ return Task.FromResult(null);
+
+ // 创建超时令牌 | Create timeout token
+ var linkedCts = CreateLinkedTimeoutToken(ct);
+ var linkedToken = linkedCts.Token;
+
+ return Task.Run(() =>
+ {
+ try
+ {
+ var width = image.Width;
+ var height = image.Height;
+ var histogram = new long[256];
+
+ // 遍历像素,使用亮度公式计算灰度值 | Iterate pixels, compute grayscale using luminance formula
+ for (int y = 0; y < height; y++)
+ {
+ linkedToken.ThrowIfCancellationRequested();
+
+ for (int x = 0; x < width; x++)
+ {
+ var pixel = image[x, y];
+ // ITU-R BT.601 亮度公式 | ITU-R BT.601 luminance formula
+ var gray = (int)(0.299 * pixel.R + 0.587 * pixel.G + 0.114 * pixel.B);
+ // 钳位到 0-255 范围 | Clamp to 0-255 range
+ gray = Math.Clamp(gray, 0, 255);
+ histogram[gray]++;
+ }
+ }
+
+ return (long[]?)histogram;
+ }
+ catch (OperationCanceledException)
+ {
+ // 超时或取消,返回 null | Timeout or cancelled, return null
+ return null;
+ }
+ catch
+ {
+ // 所有异常内部捕获,不向外抛出 | Catch all exceptions internally
+ return null;
+ }
+ finally
+ {
+ linkedCts.Dispose();
+ }
+ }, linkedToken);
+ }
+
+ ///
+ /// 从原始字节数组计算灰度直方图 | Compute histogram from raw byte array
+ ///
+ /// 原始像素数据 | Raw pixel data
+ /// 图像宽度 | Image width
+ /// 图像高度 | Image height
+ /// 位深度(8 或 16)| Bit depth (8 or 16)
+ /// 取消令牌 | Cancellation token
+ /// 频次数组(8位:256长度,16位:65536长度),失败返回 null | Frequency array, null on failure
+ public Task ComputeAsync(byte[] rawData, int width, int height, int bitDepth, CancellationToken ct)
+ {
+ // 参数有效性验证 | Parameter validation
+ if (rawData == null || width <= 0 || height <= 0)
+ return Task.FromResult(null);
+
+ if (bitDepth != 8 && bitDepth != 16)
+ return Task.FromResult(null);
+
+ int expectedLength = bitDepth == 8 ? width * height : width * height * 2;
+ if (rawData.Length != expectedLength)
+ return Task.FromResult(null);
+
+ // 创建超时令牌 | Create timeout token
+ var linkedCts = CreateLinkedTimeoutToken(ct);
+ var linkedToken = linkedCts.Token;
+
+ return Task.Run(() =>
+ {
+ try
+ {
+ if (bitDepth == 8)
+ {
+ return ComputeHistogram8Bit(rawData, width, height, linkedToken);
+ }
+ else
+ {
+ return ComputeHistogram16Bit(rawData, width, height, linkedToken);
+ }
+ }
+ catch (OperationCanceledException)
+ {
+ return null;
+ }
+ catch
+ {
+ return null;
+ }
+ finally
+ {
+ linkedCts.Dispose();
+ }
+ }, linkedToken);
+ }
+
+ ///
+ /// 计算 8 位灰度直方图 | Compute 8-bit grayscale histogram
+ ///
+ private static long[]? ComputeHistogram8Bit(byte[] rawData, int width, int height, CancellationToken ct)
+ {
+ var histogram = new long[256];
+ int totalPixels = width * height;
+
+ for (int i = 0; i < totalPixels; i++)
+ {
+ if (i % 65536 == 0)
+ ct.ThrowIfCancellationRequested();
+
+ histogram[rawData[i]]++;
+ }
+
+ return histogram;
+ }
+
+ ///
+ /// 计算 16 位灰度直方图 | Compute 16-bit grayscale histogram
+ ///
+ private static long[]? ComputeHistogram16Bit(byte[] rawData, int width, int height, CancellationToken ct)
+ {
+ var histogram = new long[65536];
+ int totalPixels = width * height;
+
+ for (int i = 0; i < totalPixels; i++)
+ {
+ if (i % 65536 == 0)
+ ct.ThrowIfCancellationRequested();
+
+ // 小端序读取 16 位值 | Read 16-bit value in little-endian
+ int offset = i * 2;
+ ushort value = (ushort)(rawData[offset] | (rawData[offset + 1] << 8));
+ histogram[value]++;
+ }
+
+ return histogram;
+ }
+
+ ///
+ /// 创建带超时的链接取消令牌 | Create linked cancellation token with timeout
+ ///
+ private CancellationTokenSource CreateLinkedTimeoutToken(CancellationToken externalToken)
+ {
+ var timeoutCts = new CancellationTokenSource(ComputeTimeoutMs);
+ var linkedCts = CancellationTokenSource.CreateLinkedTokenSource(externalToken, timeoutCts.Token);
+
+ lock (_lock)
+ {
+ _timeoutCts?.Dispose();
+ _timeoutCts = timeoutCts;
+ }
+
+ return linkedCts;
+ }
+
+ ///
+ /// 释放资源 | Dispose resources
+ ///
+ public void Dispose()
+ {
+ if (_disposed) return;
+ _disposed = true;
+
+ lock (_lock)
+ {
+ _timeoutCts?.Cancel();
+ _timeoutCts?.Dispose();
+ _timeoutCts = null;
+ }
+ }
+ }
+}
diff --git a/XP.Common/Controls/ImageHistogram/ImageHistogramControl.xaml b/XP.Common/Controls/ImageHistogram/ImageHistogramControl.xaml
new file mode 100644
index 0000000..f274cf1
--- /dev/null
+++ b/XP.Common/Controls/ImageHistogram/ImageHistogramControl.xaml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/XP.Common/Controls/ImageHistogram/ImageHistogramControl.xaml.cs b/XP.Common/Controls/ImageHistogram/ImageHistogramControl.xaml.cs
new file mode 100644
index 0000000..ae98696
--- /dev/null
+++ b/XP.Common/Controls/ImageHistogram/ImageHistogramControl.xaml.cs
@@ -0,0 +1,348 @@
+using System;
+using System.Threading;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Threading;
+using Prism.Ioc;
+using SixLabors.ImageSharp;
+using SixLabors.ImageSharp.PixelFormats;
+using XP.Common.Logging.Interfaces;
+
+namespace XP.Common.Controls.ImageHistogram
+{
+ ///
+ /// 图像灰度直方图通用控件 | Image grayscale histogram control
+ /// 支持单帧静态图像和高频流式图像输入,使用 Telerik RadChartView 进行可视化渲染
+ ///
+ public partial class ImageHistogramControl : UserControl
+ {
+ #region 依赖属性 | Dependency Properties
+
+ ///
+ /// 最大刷新帧率依赖属性 | MaxFrameRate dependency property
+ ///
+ public static readonly DependencyProperty MaxFrameRateProperty =
+ DependencyProperty.Register(
+ nameof(MaxFrameRate),
+ typeof(int),
+ typeof(ImageHistogramControl),
+ new PropertyMetadata(15, OnMaxFrameRateChanged, CoerceMaxFrameRate));
+
+ ///
+ /// 是否使用对数 Y 轴依赖属性 | IsLogarithmic dependency property
+ ///
+ public static readonly DependencyProperty IsLogarithmicProperty =
+ DependencyProperty.Register(
+ nameof(IsLogarithmic),
+ typeof(bool),
+ typeof(ImageHistogramControl),
+ new PropertyMetadata(false));
+
+ ///
+ /// 最大刷新帧率(fps),有效范围 1-60,默认 15 | Max frame rate (fps), valid range 1-60, default 15
+ ///
+ public int MaxFrameRate
+ {
+ get => (int)GetValue(MaxFrameRateProperty);
+ set => SetValue(MaxFrameRateProperty, value);
+ }
+
+ ///
+ /// 是否使用对数 Y 轴,默认 false | Whether to use logarithmic Y axis, default false
+ ///
+ public bool IsLogarithmic
+ {
+ get => (bool)GetValue(IsLogarithmicProperty);
+ set => SetValue(IsLogarithmicProperty, value);
+ }
+
+ private static void OnMaxFrameRateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
+ {
+ if (d is ImageHistogramControl control)
+ {
+ var newValue = (int)e.NewValue;
+ control._frameThrottler.MaxFrameRate = newValue;
+ }
+ }
+
+ private static object CoerceMaxFrameRate(DependencyObject d, object baseValue)
+ {
+ var value = (int)baseValue;
+ var clamped = Math.Clamp(value, 1, 60);
+
+ if (clamped != value && d is ImageHistogramControl control)
+ {
+ control._logger?.Warn(
+ "MaxFrameRate 值 {Value} 超出有效范围,已钳位为 {Clamped} | MaxFrameRate value {Value} out of range, clamped to {Clamped}",
+ value, clamped);
+ }
+
+ return clamped;
+ }
+
+ #endregion
+
+ #region 私有字段 | Private Fields
+
+ private readonly FrameThrottler _frameThrottler;
+ private readonly HistogramEngine _histogramEngine;
+ private ChartRenderer? _chartRenderer;
+ private ILoggerService? _logger;
+ private CancellationTokenSource? _currentCts;
+ private readonly object _ctsLock = new();
+
+ #endregion
+
+ #region 构造函数 | Constructor
+
+ ///
+ /// 构造函数 | Constructor
+ ///
+ public ImageHistogramControl()
+ {
+ InitializeComponent();
+
+ // 初始化内部组件 | Initialize internal components
+ _frameThrottler = new FrameThrottler();
+ _histogramEngine = new HistogramEngine();
+
+ // 尝试解析日志服务 | Try to resolve logger service
+ try
+ {
+ var loggerService = ContainerLocator.Current?.Resolve();
+ _logger = loggerService?.ForModule();
+ }
+ catch
+ {
+ // 日志服务不可用,静默降级 | Logger service unavailable, silent degradation
+ _logger = null;
+ }
+
+ // 订阅 Loaded 事件初始化 ChartRenderer | Subscribe Loaded event to initialize ChartRenderer
+ Loaded += OnLoaded;
+ Unloaded += OnUnloaded;
+ }
+
+ private void OnLoaded(object sender, RoutedEventArgs e)
+ {
+ // 初始化 ChartRenderer | Initialize ChartRenderer
+ _chartRenderer = new ChartRenderer(HistogramChart, HistogramBarSeries, XAxis);
+ }
+
+ #endregion
+
+ #region 公共 API | Public API
+
+ ///
+ /// 传入 ImageSharp 图像对象,计算并显示灰度直方图 | Update histogram from ImageSharp image
+ ///
+ /// ImageSharp 图像对象 | ImageSharp image object
+ public void UpdateImage(Image image)
+ {
+ try
+ {
+ if (image == null)
+ {
+ _logger?.Warn("UpdateImage 收到 null 图像,已忽略 | UpdateImage received null image, ignored");
+ return;
+ }
+
+ SubmitComputation(() => _histogramEngine.ComputeAsync(image, GetOrCreateCancellationToken()));
+ }
+ catch (Exception ex)
+ {
+ _logger?.Error(ex, "UpdateImage(Image) 异常:{Message} | UpdateImage(Image) error: {Message}", ex.Message);
+ }
+ }
+
+ ///
+ /// 传入原始像素数组,计算并显示灰度直方图 | Update histogram from raw byte array
+ ///
+ /// 原始像素数据 | Raw pixel data
+ /// 图像宽度 | Image width
+ /// 图像高度 | Image height
+ /// 位深度(8 或 16)| Bit depth (8 or 16)
+ public void UpdateImage(byte[] rawData, int width, int height, int bitDepth)
+ {
+ try
+ {
+ // 参数有效性验证 | Parameter validation
+ if (rawData == null)
+ {
+ _logger?.Warn("UpdateImage 收到 null rawData,已忽略 | UpdateImage received null rawData, ignored");
+ return;
+ }
+
+ if (width <= 0 || height <= 0)
+ {
+ _logger?.Warn(
+ "UpdateImage 参数无效:width={Width}, height={Height} | Invalid params: width={Width}, height={Height}",
+ width, height);
+ return;
+ }
+
+ if (bitDepth != 8 && bitDepth != 16)
+ {
+ _logger?.Warn(
+ "UpdateImage 参数无效:bitDepth={BitDepth},仅支持 8 或 16 | Invalid bitDepth={BitDepth}, only 8 or 16 supported",
+ bitDepth);
+ return;
+ }
+
+ int expectedLength = bitDepth == 8 ? width * height : width * height * 2;
+ if (rawData.Length != expectedLength)
+ {
+ _logger?.Warn(
+ "UpdateImage 参数无效:rawData.Length={Length}, 预期={Expected} | Invalid params: rawData.Length={Length}, expected={Expected}",
+ rawData.Length, expectedLength);
+ return;
+ }
+
+ SubmitComputation(() => _histogramEngine.ComputeAsync(rawData, width, height, bitDepth, GetOrCreateCancellationToken()));
+ }
+ catch (Exception ex)
+ {
+ _logger?.Error(ex, "UpdateImage(byte[]) 异常:{Message} | UpdateImage(byte[]) error: {Message}", ex.Message);
+ }
+ }
+
+ ///
+ /// 清空直方图显示,恢复初始空白状态 | Clear histogram display, restore initial blank state
+ ///
+ public void Clear()
+ {
+ try
+ {
+ // 取消正在执行的后台任务 | Cancel running background task
+ CancelCurrentComputation();
+
+ // 取消帧率限流器中的待处理任务 | Cancel pending tasks in throttler
+ _frameThrottler.Cancel();
+
+ // 清空图表(捕获局部引用避免异步执行时为 null)| Clear chart (capture local ref to avoid null during async)
+ var renderer = _chartRenderer;
+ if (renderer != null)
+ {
+ Dispatcher.InvokeAsync(() =>
+ {
+ try
+ {
+ renderer.Clear();
+
+ // 显示无数据提示 | Show no-data placeholder
+ NoDataPlaceholder.Visibility = Visibility.Visible;
+ }
+ catch
+ {
+ // 控件已卸载时忽略 | Ignore if control already unloaded
+ }
+ });
+ }
+ }
+ catch (Exception ex)
+ {
+ _logger?.Error(ex, "Clear() 异常:{Message} | Clear() error: {Message}", ex.Message);
+ }
+ }
+
+ #endregion
+
+ #region 私有方法 | Private Methods
+
+ ///
+ /// 通过帧率限流器提交计算任务 | Submit computation through frame throttler
+ ///
+ private void SubmitComputation(Func> computeFunc)
+ {
+ _frameThrottler.TrySubmit(() =>
+ {
+ try
+ {
+ var task = computeFunc();
+ task.ContinueWith(t =>
+ {
+ if (t.IsCompletedSuccessfully && t.Result != null)
+ {
+ var histogram = t.Result;
+ var isLog = false;
+
+ // 在 UI 线程获取 IsLogarithmic 值并更新图表 | Get IsLogarithmic on UI thread and update chart
+ Dispatcher.InvokeAsync(() =>
+ {
+ try
+ {
+ isLog = IsLogarithmic;
+ _chartRenderer?.UpdateData(histogram, isLog);
+
+ // 隐藏无数据提示 | Hide no-data placeholder
+ NoDataPlaceholder.Visibility = Visibility.Collapsed;
+ }
+ catch (Exception ex)
+ {
+ _logger?.Error(ex, "图表更新异常:{Message} | Chart update error: {Message}", ex.Message);
+ }
+ });
+ }
+ else if (t.IsFaulted)
+ {
+ _logger?.Error(t.Exception, "直方图计算异常:{Message} | Histogram computation error: {Message}",
+ t.Exception?.InnerException?.Message ?? "Unknown");
+ }
+ }, System.Threading.Tasks.TaskScheduler.Default);
+ }
+ catch (Exception ex)
+ {
+ _logger?.Error(ex, "提交计算任务异常:{Message} | Submit computation error: {Message}", ex.Message);
+ }
+ });
+ }
+
+ ///
+ /// 获取或创建取消令牌(取消上一个)| Get or create cancellation token (cancel previous)
+ ///
+ private CancellationToken GetOrCreateCancellationToken()
+ {
+ lock (_ctsLock)
+ {
+ _currentCts?.Cancel();
+ _currentCts?.Dispose();
+ _currentCts = new CancellationTokenSource();
+ return _currentCts.Token;
+ }
+ }
+
+ ///
+ /// 取消当前计算 | Cancel current computation
+ ///
+ private void CancelCurrentComputation()
+ {
+ lock (_ctsLock)
+ {
+ _currentCts?.Cancel();
+ _currentCts?.Dispose();
+ _currentCts = null;
+ }
+ }
+
+ ///
+ /// Unloaded 事件处理:释放所有资源 | Unloaded event handler: release all resources
+ ///
+ private void OnUnloaded(object sender, RoutedEventArgs e)
+ {
+ // 取消所有后台任务 | Cancel all background tasks
+ CancelCurrentComputation();
+
+ // 释放帧率限流器 | Dispose frame throttler
+ _frameThrottler.Cancel();
+ _frameThrottler.Dispose();
+
+ // 释放计算引擎 | Dispose histogram engine
+ _histogramEngine.Dispose();
+
+ // 清空引用 | Clear references
+ _chartRenderer = null;
+ }
+
+ #endregion
+ }
+}
diff --git a/XP.Common/Controls/JoystickCalculator.cs b/XP.Common/Controls/Joystick/JoystickCalculator.cs
similarity index 99%
rename from XP.Common/Controls/JoystickCalculator.cs
rename to XP.Common/Controls/Joystick/JoystickCalculator.cs
index f1bb028..438b254 100644
--- a/XP.Common/Controls/JoystickCalculator.cs
+++ b/XP.Common/Controls/Joystick/JoystickCalculator.cs
@@ -1,6 +1,6 @@
using System;
-namespace XP.Common.Controls
+namespace XP.Common.Controls.Joystick
{
///
/// 虚拟摇杆核心计算逻辑(纯函数,无副作用)| Virtual joystick core calculation logic (pure functions, no side effects)
diff --git a/XP.Common/Controls/JoystickMode.cs b/XP.Common/Controls/Joystick/JoystickMode.cs
similarity index 92%
rename from XP.Common/Controls/JoystickMode.cs
rename to XP.Common/Controls/Joystick/JoystickMode.cs
index 0c44ede..0e32f46 100644
--- a/XP.Common/Controls/JoystickMode.cs
+++ b/XP.Common/Controls/Joystick/JoystickMode.cs
@@ -1,4 +1,4 @@
-namespace XP.Common.Controls
+namespace XP.Common.Controls.Joystick
{
///
/// 虚拟摇杆轴模式枚举 | Virtual joystick axis mode enumeration
diff --git a/XP.Common/Controls/MouseButtonType.cs b/XP.Common/Controls/Joystick/MouseButtonType.cs
similarity index 92%
rename from XP.Common/Controls/MouseButtonType.cs
rename to XP.Common/Controls/Joystick/MouseButtonType.cs
index 9cd0753..b468ae8 100644
--- a/XP.Common/Controls/MouseButtonType.cs
+++ b/XP.Common/Controls/Joystick/MouseButtonType.cs
@@ -1,4 +1,4 @@
-namespace XP.Common.Controls
+namespace XP.Common.Controls.Joystick
{
///
/// 鼠标按键类型枚举 | Mouse button type enumeration
diff --git a/XP.Common/Controls/VirtualJoystick.cs b/XP.Common/Controls/Joystick/VirtualJoystick.cs
similarity index 99%
rename from XP.Common/Controls/VirtualJoystick.cs
rename to XP.Common/Controls/Joystick/VirtualJoystick.cs
index 64b6e3b..1ff85b0 100644
--- a/XP.Common/Controls/VirtualJoystick.cs
+++ b/XP.Common/Controls/Joystick/VirtualJoystick.cs
@@ -6,7 +6,7 @@ using System.Windows.Media;
using System.Windows.Shapes;
using XP.Common.Logging.Interfaces;
-namespace XP.Common.Controls
+namespace XP.Common.Controls.Joystick
{
///
/// 虚拟摇杆 UserControl,提供圆形区域内的鼠标拖拽操控能力 | Virtual joystick UserControl providing mouse drag interaction within a circular area
diff --git a/XP.Common/Controls/VirtualJoystick.xaml b/XP.Common/Controls/Joystick/VirtualJoystick.xaml
similarity index 98%
rename from XP.Common/Controls/VirtualJoystick.xaml
rename to XP.Common/Controls/Joystick/VirtualJoystick.xaml
index afa6d25..68ab67f 100644
--- a/XP.Common/Controls/VirtualJoystick.xaml
+++ b/XP.Common/Controls/Joystick/VirtualJoystick.xaml
@@ -1,9 +1,9 @@
-
diff --git a/XP.Common/Database/Configs/ConfigLoader.cs b/XP.Common/Database/Configs/ConfigLoader.cs
new file mode 100644
index 0000000..37289c5
--- /dev/null
+++ b/XP.Common/Database/Configs/ConfigLoader.cs
@@ -0,0 +1,46 @@
+using System.Configuration;
+
+namespace XP.Common.Database.Configs
+{
+ ///
+ /// SQLite 配置加载器,从 App.config 读取数据库相关配置项 | SQLite configuration loader, reads database-related configuration from App.config
+ ///
+ public static class ConfigLoader
+ {
+ ///
+ /// 配置键前缀 | Configuration key prefix
+ ///
+ private const string KeyPrefix = "Sqlite:";
+
+ ///
+ /// 从 App.config 加载 SQLite 配置 | Load SQLite configuration from App.config
+ ///
+ /// SQLite 配置实体,缺失或无效配置项使用默认值 | SQLite configuration entity, uses default values for missing or invalid items
+ public static SqliteConfig LoadSqliteConfig()
+ {
+ var config = new SqliteConfig();
+
+ // 加载数据库文件路径 | Load database file path
+ var dbPath = ConfigurationManager.AppSettings[KeyPrefix + "DbFilePath"];
+ if (!string.IsNullOrEmpty(dbPath)) config.DbFilePath = dbPath;
+
+ // 加载连接超时时间 | Load connection timeout
+ var timeout = ConfigurationManager.AppSettings[KeyPrefix + "ConnectionTimeout"];
+ if (int.TryParse(timeout, out var t) && t > 0) config.ConnectionTimeout = t;
+
+ // 加载是否自动创建 | Load create if not exists
+ var createIfNotExists = ConfigurationManager.AppSettings[KeyPrefix + "CreateIfNotExists"];
+ if (bool.TryParse(createIfNotExists, out var c)) config.CreateIfNotExists = c;
+
+ // 加载是否启用 WAL 模式 | Load enable WAL mode
+ var enableWal = ConfigurationManager.AppSettings[KeyPrefix + "EnableWalMode"];
+ if (bool.TryParse(enableWal, out var w)) config.EnableWalMode = w;
+
+ // 加载是否开启 SQL 日志 | Load enable SQL logging
+ var enableSqlLog = ConfigurationManager.AppSettings[KeyPrefix + "EnableSqlLogging"];
+ if (bool.TryParse(enableSqlLog, out var l)) config.EnableSqlLogging = l;
+
+ return config;
+ }
+ }
+}
diff --git a/XP.Common/Configs/SqliteConfig.cs b/XP.Common/Database/Configs/SqliteConfig.cs
similarity index 71%
rename from XP.Common/Configs/SqliteConfig.cs
rename to XP.Common/Database/Configs/SqliteConfig.cs
index 28eae43..3fdf579 100644
--- a/XP.Common/Configs/SqliteConfig.cs
+++ b/XP.Common/Database/Configs/SqliteConfig.cs
@@ -1,46 +1,42 @@
using System;
-using System.Collections.Generic;
using System.IO;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-namespace XP.Common.Configs
+namespace XP.Common.Database.Configs
{
///
- /// SQLite 配置实体
+ /// SQLite 配置实体(从 App.config 读取)| SQLite configuration entity (loaded from App.config)
///
public class SqliteConfig
{
///
- /// 数据库文件路径
+ /// 数据库文件路径 | Database file path
///
public string DbFilePath { get; set; } = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
"Files", "Data", "XP.db");
///
- /// 连接超时时间(秒,默认30)
+ /// 连接超时时间(秒,默认30)| Connection timeout (seconds, default 30)
///
public int ConnectionTimeout { get; set; } = 30;
///
- /// 数据库不存在时是否自动创建(默认true)
+ /// 数据库不存在时是否自动创建(默认true)| Whether to auto-create if not exists (default true)
///
public bool CreateIfNotExists { get; set; } = true;
///
- /// 是否启用 WAL 模式(提升并发性能,默认true)
+ /// 是否启用 WAL 模式(提升并发性能,默认true)| Whether to enable WAL mode (default true)
///
public bool EnableWalMode { get; set; } = true;
///
- /// 是否开启日志记录(记录所有SQL操作,默认false)
+ /// 是否开启日志记录(记录所有SQL操作,默认false)| Whether to enable SQL logging (default false)
///
public bool EnableSqlLogging { get; set; } = false;
///
- /// 获取SQLite连接字符串
+ /// 获取 SQLite 连接字符串 | Get SQLite connection string
///
public string GetConnectionString()
{
diff --git a/XP.Common/Database/Implementations/SqliteContext.cs b/XP.Common/Database/Implementations/SqliteContext.cs
index e77cc05..dd45188 100644
--- a/XP.Common/Database/Implementations/SqliteContext.cs
+++ b/XP.Common/Database/Implementations/SqliteContext.cs
@@ -7,7 +7,7 @@ using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
-using XP.Common.Configs;
+using XP.Common.Database.Configs;
using XP.Common.Database.Interfaces;
using XP.Common.Database.Models;
using XP.Common.Helpers;
diff --git a/XP.Common/Documents/License.README.md b/XP.Common/Documents/License.README.md
new file mode 100644
index 0000000..fec5ada
--- /dev/null
+++ b/XP.Common/Documents/License.README.md
@@ -0,0 +1,184 @@
+# 授权服务使用指南 | License Service Usage Guide
+
+## 概述 | Overview
+
+XplorePlane 通过 `XP.Common.License` 命名空间下的 `ILicenseService` 提供统一的授权管理。底层基于海克斯康 CLMS(Computational License Management System)SDK,使用 `MORCODE.dll` 进行许可证校验。
+
+## 产品授权信息 | Product License Information
+
+| 项目 | 值 |
+| --- | --- |
+| CLMS 模块 ID(Module ID) | `4` |
+| 零件号(Part Number) | `LS950-0071-5-1` |
+
+`Module ID` 是 CLMS 在 SDK 中标识本产品的唯一编号,调用 `CLM_ModuleIsLicensed` 时必须传入此值;`Part Number` 是产品在 CLMS 许可发行系统中的物料编号,用于申请、签发、续期许可证。
+
+## 授权模式 | License Modes
+
+`LicenseMode` 枚举定义见 `XP.Common.License.Enums.LicenseMode`:
+
+| 模式 | 枚举值 | 数值 | 说明 |
+| --- | --- | --- | --- |
+| CLMS 正式授权 | `Clms` | `0` | 通过 CLMS SDK 进行完整授权校验,包含登录、许可范围、模块、SMA、到期日期等检查 |
+| 临时测试模式 | `TemporaryTest` | `885` | 不调用 CLMS SDK,直接放行 15 分钟,用于研发/测试场景 |
+
+## 配置项 | Configuration Items
+
+授权配置位于主应用 `App.config` 中,键前缀为 `License:`,对应 `XP.Common.License.Configs.LicenseConfig`:
+
+```xml
+
+
+
+
+
+
+
+```
+
+| 键 | 类型 | 默认值 | 有效值 | 说明 |
+| --- | --- | --- | --- | --- |
+| `License:LicenseMode` | int | `0` | `0`、`885` | 授权模式 |
+| `License:ModuleId` | ushort | `4` | `1` ~ `65535` | CLMS 模块 ID |
+| `License:UseSma` | bool | `false` | `true`、`false` | 是否启用 SMA(软件维护协议)校验 |
+| `License:LicenseState` | int | `20` | `10`、`20` | 上次运行时的授权结果,由服务自动维护 |
+
+> 配置中无效或缺失的键会回退到默认值,详见 `XP.Common.License.Configs.ConfigLoader`。
+
+## 正式授权流程 | Formal Authorization Flow
+
+`LicenseMode = 0`(`Clms`)时,`LicenseService.CheckAuthorization()` 依次执行以下步骤:
+
+1. **系统时间检查**(可选):调用 `CLM_CheckSystemTime`,老版本 SDK 缺失此入口点时跳过。
+2. **登录验证**:调用 `CLM_Login`(核心步骤,必须存在)。
+3. **许可范围检查**:调用 `CLM_Login_Scope`(核心步骤)。
+4. **SMA 验证**(可选):仅当 `License:UseSma = true` 时执行。比较 SMA 年份/季度与当前软件主版本号/次版本号,季度不匹配会判定失败。
+5. **浮动许可信息**(可选):通过 `CLM_GetIP` 获取 IP 与端口。
+6. **错误信息读取**(可选):通过 `CLM_GetError` 拉取 SDK 端错误描述。
+7. **模块授权检查**:调用 `CLM_ModuleIsLicensed`,传入 `Module ID = 4`。
+8. **到期日期获取**:调用 `CLM_GetWarrantyExpiration`,剩余 ≤ 30 天时记录警告。
+
+任意核心步骤失败即视为授权失败,写回 `License:LicenseState = 20`,主应用弹窗提示并退出。
+
+## 临时测试模式 | Temporary Test Mode
+
+`LicenseMode = 885`(`TemporaryTest`)用于跳过 CLMS 校验,便于离线开发和功能演示。
+
+### 行为 | Behavior
+
+- 不加载 `MORCODE.dll`,不调用任何 CLMS API,授权直接通过。
+- 启动后立刻开启 15 分钟(900 秒)倒计时,到期触发 `TestModeTimeout` 事件,主应用应执行优雅关闭。
+- 倒计时途中分别在剩余 5 分钟、1 分钟时触发 `TestModeWarning5Min`、`TestModeWarning1Min` 事件用于提醒。
+- 上述三个事件只在临时测试模式下被触发,正式授权(`Clms`)下不会创建计时器。
+
+### 启用方式 | How to Enable
+
+修改主应用 `App.config`:
+
+```xml
+
+```
+
+启动后将看到提示:「当前为临时测试模式,软件将在 15 分钟后自动关闭」。
+
+> **注意**:临时测试模式仅用于研发与内部测试场景,**禁止用于生产或交付**。发布前请务必将 `License:LicenseMode` 还原为 `0`。
+
+## 使用示例 | Usage Examples
+
+### 注入并校验 | Inject and Verify
+
+```csharp
+using XP.Common.License.Interfaces;
+using XP.Common.License.Enums;
+
+public class StartupChecker
+{
+ private readonly ILicenseService _licenseService;
+ private readonly ILoggerService _logger;
+
+ public StartupChecker(ILicenseService licenseService, ILoggerService logger)
+ {
+ _licenseService = licenseService ?? throw new ArgumentNullException(nameof(licenseService));
+ _logger = logger?.ForModule() ?? throw new ArgumentNullException(nameof(logger));
+ }
+
+ public bool Run()
+ {
+ var result = _licenseService.CheckAuthorization();
+ if (!result.IsAuthorized)
+ {
+ _logger.Error(null, "授权失败:{Message} | License failed: {Message}", result.Message);
+ return false;
+ }
+
+ // 仅在临时测试模式下订阅倒计时事件 | Subscribe countdown events only in test mode
+ if (_licenseService.LicenseMode == LicenseMode.TemporaryTest)
+ {
+ _licenseService.TestModeWarning5Min += (s, e) => _logger.Warn("临时测试模式剩余 5 分钟");
+ _licenseService.TestModeWarning1Min += (s, e) => _logger.Warn("临时测试模式剩余 1 分钟");
+ _licenseService.TestModeTimeout += (s, e) => Application.Current.Shutdown();
+ }
+ return true;
+ }
+}
+```
+
+### 检查特定模块授权 | Check Module Authorization
+
+```csharp
+const ushort XplorePlaneModuleId = 4;
+if (!_licenseService.IsModuleLicensed(XplorePlaneModuleId))
+{
+ _logger.Warn("模块 {ModuleId} 未授权 | Module {ModuleId} not licensed", XplorePlaneModuleId);
+}
+```
+
+### 读取授权信息 | Read License Information
+
+```csharp
+DateTime? expiration = _licenseService.GetExpirationDate(); // 授权到期日期
+DateTime? sma = _licenseService.GetSmaDate(); // SMA 到期日期
+int remaining = _licenseService.GetRemainingTestTime(); // 临时测试剩余秒数;非测试模式返回 -1
+```
+
+## 接口与事件 | Interface & Events
+
+`ILicenseService` 提供以下成员(详见 `XP.Common.License.Interfaces.ILicenseService`):
+
+- `LicenseCheckResult CheckAuthorization()`:执行完整授权校验。
+- `bool IsAuthorized`:当前会话是否已授权。
+- `LicenseMode LicenseMode`:当前授权模式。
+- `DateTime? GetExpirationDate()`:授权到期日期。
+- `DateTime? GetSmaDate()`:SMA 到期日期。
+- `bool IsModuleLicensed(ushort moduleId)`:检查指定模块是否被授权。
+- `int GetRemainingTestTime()`:临时测试模式剩余秒数。
+- 事件:`TestModeWarning5Min`、`TestModeWarning1Min`、`TestModeTimeout`。
+
+## 常见问题 | FAQ
+
+### 1. 启动时提示 `MORCODE.dll 加载失败` | `Failed to load MORCODE.dll`
+
+确认 `MORCODE.dll` 已随 `ReleaseFiles` 一同部署,并位于主程序同级目录。研发阶段可临时切换到临时测试模式绕过。
+
+### 2. 提示「模块号码 4 不可用」| `Module 4 unavailable`
+
+CLMS 服务器签发的许可证未包含 `Module ID = 4`(零件号 `LS950-0071-5-1`)。请联系海克斯康许可团队确认许可范围。
+
+### 3. SMA 校验失败 | SMA validation failed
+
+SMA 年份必须 ≥ 软件主版本号;同年时 SMA 季度必须 ≥ 软件次版本号。若需临时绕过,可将 `License:UseSma` 设为 `false`,但发布版本仍应保持 SMA 校验启用。
+
+### 4. 授权成功后是否还有倒计时?| Will the countdown still trigger after a successful formal authorization?
+
+不会。倒计时仅在 `LicenseMode = TemporaryTest` 时启动,`Clms` 正式授权下三个事件永远不会被触发。
+
+## 相关文件 | Related Files
+
+- `XP.Common/License/Interfaces/ILicenseService.cs` — 服务接口
+- `XP.Common/License/Implementations/LicenseService.cs` — 服务实现
+- `XP.Common/License/Configs/LicenseConfig.cs` — 配置实体
+- `XP.Common/License/Configs/ConfigLoader.cs` — 配置加载器
+- `XP.Common/License/Enums/LicenseMode.cs` — 授权模式枚举
+- `XP.Common/License/Enums/LicenseState.cs` — 授权状态枚举
+- `XP.Common/License/Native/NativeMethods.cs` — CLMS SDK P/Invoke 封装
+- `XplorePlane/App.xaml.cs` — 主应用启动时调用 `PerformLicenseCheck()` 的入口
diff --git a/XP.Common/Dump/Configs/ConfigLoader.cs b/XP.Common/Dump/Configs/ConfigLoader.cs
new file mode 100644
index 0000000..5adec98
--- /dev/null
+++ b/XP.Common/Dump/Configs/ConfigLoader.cs
@@ -0,0 +1,46 @@
+using System.Configuration;
+
+namespace XP.Common.Dump.Configs
+{
+ ///
+ /// Dump 配置加载器,从 App.config 读取 Dump 相关配置项 | Dump configuration loader, reads dump-related configuration from App.config
+ ///
+ public static class ConfigLoader
+ {
+ ///
+ /// 配置键前缀 | Configuration key prefix
+ ///
+ private const string KeyPrefix = "Dump:";
+
+ ///
+ /// 从 App.config 加载 Dump 配置 | Load Dump configuration from App.config
+ ///
+ /// Dump 配置实体,缺失或无效配置项使用默认值 | Dump configuration entity, uses default values for missing or invalid items
+ public static DumpConfig LoadDumpConfig()
+ {
+ var config = new DumpConfig();
+
+ // 加载存储路径 | Load storage path
+ var storagePath = ConfigurationManager.AppSettings[KeyPrefix + "StoragePath"];
+ if (!string.IsNullOrEmpty(storagePath)) config.StoragePath = storagePath;
+
+ // 加载是否启用定时触发 | Load enable scheduled dump
+ var enableScheduled = ConfigurationManager.AppSettings[KeyPrefix + "EnableScheduledDump"];
+ if (bool.TryParse(enableScheduled, out var enabled)) config.EnableScheduledDump = enabled;
+
+ // 加载定时触发间隔 | Load scheduled interval
+ var interval = ConfigurationManager.AppSettings[KeyPrefix + "ScheduledIntervalMinutes"];
+ if (int.TryParse(interval, out var min) && min > 0) config.ScheduledIntervalMinutes = min;
+
+ // 加载 Mini Dump 文件大小上限 | Load Mini Dump size limit
+ var sizeLimit = ConfigurationManager.AppSettings[KeyPrefix + "MiniDumpSizeLimitMB"];
+ if (long.TryParse(sizeLimit, out var size) && size > 0) config.MiniDumpSizeLimitMB = size;
+
+ // 加载文件保留天数 | Load retention days
+ var retentionDays = ConfigurationManager.AppSettings[KeyPrefix + "RetentionDays"];
+ if (int.TryParse(retentionDays, out var days) && days > 0) config.RetentionDays = days;
+
+ return config;
+ }
+ }
+}
diff --git a/XP.Common/Helpers/ConfigLoader.cs b/XP.Common/Helpers/ConfigLoader.cs
deleted file mode 100644
index 60d29ab..0000000
--- a/XP.Common/Helpers/ConfigLoader.cs
+++ /dev/null
@@ -1,91 +0,0 @@
-using System.Configuration;
-using XP.Common.Configs;
-using XP.Common.Dump.Configs;
-
-namespace XP.Common.Helpers
-{
- ///
- /// 通用配置加载工具(读取App.config)
- ///
- public static class ConfigLoader
- {
- ///
- /// 加载Serilog配置
- ///
- public static SerilogConfig LoadSerilogConfig()
- {
- var config = new SerilogConfig();
-
- var logPath = ConfigurationManager.AppSettings["Serilog:LogPath"];
- if (!string.IsNullOrEmpty(logPath)) config.LogPath = logPath;
-
- var minLevel = ConfigurationManager.AppSettings["Serilog:MinimumLevel"];
- if (!string.IsNullOrEmpty(minLevel)) config.MinimumLevel = minLevel;
-
- var enableConsole = ConfigurationManager.AppSettings["Serilog:EnableConsole"];
- if (bool.TryParse(enableConsole, out var console)) config.EnableConsole = console;
-
- var rollingInterval = ConfigurationManager.AppSettings["Serilog:RollingInterval"];
- if (!string.IsNullOrEmpty(rollingInterval)) config.RollingInterval = rollingInterval;
-
- var fileSize = ConfigurationManager.AppSettings["Serilog:FileSizeLimitMB"];
- if (long.TryParse(fileSize, out var size)) config.FileSizeLimitMB = size;
-
- var retainCount = ConfigurationManager.AppSettings["Serilog:RetainedFileCountLimit"];
- if (int.TryParse(retainCount, out var count)) config.RetainedFileCountLimit = count;
-
- return config;
- }
-
- ///
- /// 加载SQLite配置
- ///
- public static SqliteConfig LoadSqliteConfig()
- {
- var config = new SqliteConfig();
-
- var dbPath = ConfigurationManager.AppSettings["Sqlite:DbFilePath"];
- if (!string.IsNullOrEmpty(dbPath)) config.DbFilePath = dbPath;
-
- var timeout = ConfigurationManager.AppSettings["Sqlite:ConnectionTimeout"];
- if (int.TryParse(timeout, out var t)) config.ConnectionTimeout = t;
-
- var createIfNotExists = ConfigurationManager.AppSettings["Sqlite:CreateIfNotExists"];
- if (bool.TryParse(createIfNotExists, out var c)) config.CreateIfNotExists = c;
-
- var enableWal = ConfigurationManager.AppSettings["Sqlite:EnableWalMode"];
- if (bool.TryParse(enableWal, out var w)) config.EnableWalMode = w;
-
- var enableSqlLog = ConfigurationManager.AppSettings["Sqlite:EnableSqlLogging"];
- if (bool.TryParse(enableSqlLog, out var l)) config.EnableSqlLogging = l;
-
- return config;
- }
-
- ///
- /// 加载 Dump 配置 | Load Dump configuration
- ///
- public static DumpConfig LoadDumpConfig()
- {
- var config = new DumpConfig();
-
- var storagePath = ConfigurationManager.AppSettings["Dump:StoragePath"];
- if (!string.IsNullOrEmpty(storagePath)) config.StoragePath = storagePath;
-
- var enableScheduled = ConfigurationManager.AppSettings["Dump:EnableScheduledDump"];
- if (bool.TryParse(enableScheduled, out var enabled)) config.EnableScheduledDump = enabled;
-
- var interval = ConfigurationManager.AppSettings["Dump:ScheduledIntervalMinutes"];
- if (int.TryParse(interval, out var min)) config.ScheduledIntervalMinutes = min;
-
- var sizeLimit = ConfigurationManager.AppSettings["Dump:MiniDumpSizeLimitMB"];
- if (long.TryParse(sizeLimit, out var size)) config.MiniDumpSizeLimitMB = size;
-
- var retentionDays = ConfigurationManager.AppSettings["Dump:RetentionDays"];
- if (int.TryParse(retentionDays, out var days)) config.RetentionDays = days;
-
- return config;
- }
-
- }
-}
\ No newline at end of file
diff --git a/XP.Common/License/Configs/ConfigLoader.cs b/XP.Common/License/Configs/ConfigLoader.cs
new file mode 100644
index 0000000..0fc4bad
--- /dev/null
+++ b/XP.Common/License/Configs/ConfigLoader.cs
@@ -0,0 +1,102 @@
+using System.Configuration;
+
+namespace XP.Common.License.Configs
+{
+ ///
+ /// 授权配置加载器,从 App.config 读取授权相关配置项 | License configuration loader, reads license-related configuration from App.config
+ ///
+ public static class ConfigLoader
+ {
+ ///
+ /// 配置键前缀 | Configuration key prefix
+ ///
+ private const string KeyPrefix = "License:";
+
+ ///
+ /// LicenseMode 有效值集合 | Valid values for LicenseMode
+ ///
+ private static readonly int[] ValidLicenseModes = { 0, 885 };
+
+ ///
+ /// LicenseState 有效值集合 | Valid values for LicenseState
+ ///
+ private static readonly int[] ValidLicenseStates = { 10, 20 };
+
+ ///
+ /// 从 App.config 加载授权配置 | Load license configuration from App.config
+ ///
+ /// 授权配置实体,缺失或无效配置项使用默认值 | License configuration entity, uses default values for missing or invalid items
+ public static LicenseConfig LoadLicenseConfig()
+ {
+ var config = new LicenseConfig();
+
+ // 加载 LicenseMode | Load LicenseMode
+ var licenseModeStr = ConfigurationManager.AppSettings[KeyPrefix + "LicenseMode"];
+ if (int.TryParse(licenseModeStr, out var licenseMode) && IsValidLicenseMode(licenseMode))
+ {
+ config.LicenseMode = licenseMode;
+ }
+
+ // 加载 ModuleId | Load ModuleId
+ var moduleIdStr = ConfigurationManager.AppSettings[KeyPrefix + "ModuleId"];
+ if (ushort.TryParse(moduleIdStr, out var moduleId) && IsValidModuleId(moduleId))
+ {
+ config.ModuleId = moduleId;
+ }
+
+ // 加载 UseSma | Load UseSma
+ var useSmaStr = ConfigurationManager.AppSettings[KeyPrefix + "UseSma"];
+ if (bool.TryParse(useSmaStr, out var useSma))
+ {
+ config.UseSma = useSma;
+ }
+
+ // 加载 LicenseState | Load LicenseState
+ var licenseStateStr = ConfigurationManager.AppSettings[KeyPrefix + "LicenseState"];
+ if (int.TryParse(licenseStateStr, out var licenseState) && IsValidLicenseState(licenseState))
+ {
+ config.LicenseState = licenseState;
+ }
+
+ return config;
+ }
+
+ ///
+ /// 验证 LicenseMode 值是否有效 | Validate whether LicenseMode value is valid
+ ///
+ /// 待验证的值 | Value to validate
+ /// true 表示有效,false 表示无效 | true if valid, false if invalid
+ private static bool IsValidLicenseMode(int value)
+ {
+ foreach (var valid in ValidLicenseModes)
+ {
+ if (value == valid) return true;
+ }
+ return false;
+ }
+
+ ///
+ /// 验证 ModuleId 值是否在有效范围内 | Validate whether ModuleId value is within valid range
+ ///
+ /// 待验证的值 | Value to validate
+ /// true 表示有效,false 表示无效 | true if valid, false if invalid
+ private static bool IsValidModuleId(ushort value)
+ {
+ return value >= 1 && value <= 65535;
+ }
+
+ ///
+ /// 验证 LicenseState 值是否有效 | Validate whether LicenseState value is valid
+ ///
+ /// 待验证的值 | Value to validate
+ /// true 表示有效,false 表示无效 | true if valid, false if invalid
+ private static bool IsValidLicenseState(int value)
+ {
+ foreach (var valid in ValidLicenseStates)
+ {
+ if (value == valid) return true;
+ }
+ return false;
+ }
+ }
+}
diff --git a/XP.Common/License/Configs/LicenseConfig.cs b/XP.Common/License/Configs/LicenseConfig.cs
new file mode 100644
index 0000000..386d39d
--- /dev/null
+++ b/XP.Common/License/Configs/LicenseConfig.cs
@@ -0,0 +1,28 @@
+namespace XP.Common.License.Configs
+{
+ ///
+ /// 授权配置实体 | License configuration entity
+ ///
+ public class LicenseConfig
+ {
+ ///
+ /// 授权模式 | License mode
+ ///
+ public int LicenseMode { get; set; } = 0;
+
+ ///
+ /// 模块ID | Module ID
+ ///
+ public ushort ModuleId { get; set; } = 4;
+
+ ///
+ /// 是否使用SMA | Whether to use SMA
+ ///
+ public bool UseSma { get; set; } = false;
+
+ ///
+ /// 授权状态 | License state
+ ///
+ public int LicenseState { get; set; } = 20;
+ }
+}
diff --git a/XP.Common/License/Enums/LicenseMode.cs b/XP.Common/License/Enums/LicenseMode.cs
new file mode 100644
index 0000000..2646fa4
--- /dev/null
+++ b/XP.Common/License/Enums/LicenseMode.cs
@@ -0,0 +1,17 @@
+namespace XP.Common.License.Enums;
+
+///
+/// 授权模式枚举 | License mode enumeration
+///
+public enum LicenseMode : int
+{
+ ///
+ /// CLMS 正式授权 | CLMS formal authorization
+ ///
+ Clms = 0,
+
+ ///
+ /// 临时测试模式(15分钟)| Temporary test mode (15 minutes)
+ ///
+ TemporaryTest = 885
+}
diff --git a/XP.Common/License/Enums/LicenseState.cs b/XP.Common/License/Enums/LicenseState.cs
new file mode 100644
index 0000000..940e20b
--- /dev/null
+++ b/XP.Common/License/Enums/LicenseState.cs
@@ -0,0 +1,17 @@
+namespace XP.Common.License.Enums;
+
+///
+/// 授权状态枚举 | License state enumeration
+///
+public enum LicenseState : int
+{
+ ///
+ /// 授权成功 | Authorization successful
+ ///
+ Success = 10,
+
+ ///
+ /// 授权失败 | Authorization failed
+ ///
+ Fail = 20
+}
diff --git a/XP.Common/License/Implementations/LicenseCheckResult.cs b/XP.Common/License/Implementations/LicenseCheckResult.cs
new file mode 100644
index 0000000..b901791
--- /dev/null
+++ b/XP.Common/License/Implementations/LicenseCheckResult.cs
@@ -0,0 +1,91 @@
+using System;
+using XP.Common.License.Enums;
+
+namespace XP.Common.License.Implementations
+{
+ ///
+ /// 授权检查结果(不可变)| License check result (immutable)
+ ///
+ public sealed class LicenseCheckResult
+ {
+ ///
+ /// 消息最大长度 | Maximum message length
+ ///
+ private const int MaxMessageLength = 512;
+
+ ///
+ /// 是否授权成功 | Whether authorization is successful
+ ///
+ public bool IsAuthorized { get; }
+
+ ///
+ /// 结果消息(最大512字符)| Result message (maximum 512 characters)
+ ///
+ public string Message { get; }
+
+ ///
+ /// 授权模式 | License mode
+ ///
+ public LicenseMode LicenseMode { get; }
+
+ ///
+ /// 模块ID | Module ID
+ ///
+ public ushort ModuleId { get; }
+
+ ///
+ /// 授权到期日期 | License expiration date
+ ///
+ public DateTime? ExpirationDate { get; }
+
+ ///
+ /// SMA到期日期 | SMA expiration date
+ ///
+ public DateTime? SmaDate { get; }
+
+ ///
+ /// 浮动许可IP地址 | Floating license IP address
+ ///
+ public string? FloatingLicenseIp { get; }
+
+ ///
+ /// 浮动许可端口 | Floating license port
+ ///
+ public string? FloatingLicensePort { get; }
+
+ ///
+ /// 构造函数 | Constructor
+ ///
+ /// 是否授权成功 | Whether authorization is successful
+ /// 结果消息 | Result message
+ /// 授权模式 | License mode
+ /// 模块ID | Module ID
+ /// 授权到期日期 | License expiration date
+ /// SMA到期日期 | SMA expiration date
+ /// 浮动许可IP地址 | Floating license IP address
+ /// 浮动许可端口 | Floating license port
+ public LicenseCheckResult(
+ bool isAuthorized,
+ string message,
+ LicenseMode licenseMode,
+ ushort moduleId,
+ DateTime? expirationDate,
+ DateTime? smaDate,
+ string? floatingLicenseIp,
+ string? floatingLicensePort)
+ {
+ IsAuthorized = isAuthorized;
+ Message = string.IsNullOrEmpty(message)
+ ? string.Empty
+ : message.Length > MaxMessageLength
+ ? message[..MaxMessageLength]
+ : message;
+ LicenseMode = licenseMode;
+ ModuleId = moduleId;
+ ExpirationDate = expirationDate;
+ SmaDate = smaDate;
+ FloatingLicenseIp = floatingLicenseIp;
+ FloatingLicensePort = floatingLicensePort;
+ }
+ }
+}
\ No newline at end of file
diff --git a/XP.Common/License/Implementations/LicenseService.cs b/XP.Common/License/Implementations/LicenseService.cs
new file mode 100644
index 0000000..622183d
--- /dev/null
+++ b/XP.Common/License/Implementations/LicenseService.cs
@@ -0,0 +1,595 @@
+using System;
+using System.Configuration;
+using System.Reflection;
+using System.Text;
+using System.Threading;
+using XP.Common.License.Configs;
+using XP.Common.License.Enums;
+using XP.Common.License.Interfaces;
+using XP.Common.License.Native;
+using XP.Common.Logging.Interfaces;
+
+namespace XP.Common.License.Implementations
+{
+ ///
+ /// 授权服务实现 | License service implementation
+ ///
+ public class LicenseService : ILicenseService, IDisposable
+ {
+ ///
+ /// 临时测试模式初始时间(秒)| Temporary test mode initial time (seconds)
+ ///
+ private const int TestModeInitialSeconds = 900;
+
+ ///
+ /// 授权配置 | License configuration
+ ///
+ private readonly LicenseConfig _config;
+
+ ///
+ /// 日志服务 | Logger service
+ ///
+ private readonly ILoggerService _logger;
+
+ ///
+ /// 同步锁对象 | Synchronization lock object
+ ///
+ private readonly object _lock = new object();
+
+ ///
+ /// 临时测试模式计时器 | Temporary test mode timer
+ ///
+ private Timer? _testModeTimer;
+
+ ///
+ /// 临时测试模式剩余时间(秒)| Temporary test mode remaining time (seconds)
+ ///
+ private int _remainingTestSeconds = TestModeInitialSeconds;
+
+ ///
+ /// 授权到期日期 | License expiration date
+ ///
+ private DateTime? _expirationDate;
+
+ ///
+ /// SMA到期日期 | SMA expiration date
+ ///
+ private DateTime? _smaDate;
+
+ ///
+ /// 浮动许可IP地址 | Floating license IP address
+ ///
+ private string? _floatingLicenseIp;
+
+ ///
+ /// 浮动许可端口 | Floating license port
+ ///
+ private string? _floatingLicensePort;
+
+ ///
+ /// 是否已释放 | Whether disposed
+ ///
+ private bool _disposed;
+
+ ///
+ /// 构造函数 | Constructor
+ ///
+ /// 授权配置 | License configuration
+ /// 日志服务 | Logger service
+ public LicenseService(LicenseConfig config, ILoggerService logger)
+ {
+ _config = config ?? throw new ArgumentNullException(nameof(config));
+ _logger = logger?.ForModule() ?? throw new ArgumentNullException(nameof(logger));
+ LicenseMode = (LicenseMode)_config.LicenseMode;
+ }
+
+ ///
+ /// 当前会话是否已授权 | Whether the current session is authorized
+ ///
+ public bool IsAuthorized { get; private set; }
+
+ ///
+ /// 当前授权模式 | Current license mode
+ ///
+ public LicenseMode LicenseMode { get; private set; }
+
+ ///
+ /// 临时测试模式超时事件(到期时触发)| Temporary test mode timeout event (fires when expired)
+ ///
+ public event EventHandler? TestModeTimeout;
+
+ ///
+ /// 临时测试模式剩余5分钟警告事件 | Temporary test mode 5-minute warning event
+ ///
+ public event EventHandler? TestModeWarning5Min;
+
+ ///
+ /// 临时测试模式剩余1分钟警告事件 | Temporary test mode 1-minute warning event
+ ///
+ public event EventHandler? TestModeWarning1Min;
+
+ ///
+ /// 是否已触发5分钟警告 | Whether 5-minute warning has been fired
+ ///
+ private bool _warning5MinFired;
+
+ ///
+ /// 是否已触发1分钟警告 | Whether 1-minute warning has been fired
+ ///
+ private bool _warning1MinFired;
+
+ ///
+ /// 执行授权检查 | Perform authorization check
+ ///
+ /// 授权检查结果 | License check result
+ public LicenseCheckResult CheckAuthorization()
+ {
+ lock (_lock)
+ {
+ _logger.Info("开始授权检查,模式={Mode} | Starting authorization check, mode={Mode}", (int)LicenseMode);
+
+ if (LicenseMode == Enums.LicenseMode.TemporaryTest)
+ {
+ return HandleTemporaryTestMode();
+ }
+
+ return HandleClmsAuthorization();
+ }
+ }
+
+ ///
+ /// 获取授权到期日期 | Get license expiration date
+ ///
+ /// 授权到期日期,未授权时返回 null | License expiration date, null if not authorized
+ public DateTime? GetExpirationDate()
+ {
+ lock (_lock)
+ {
+ return _expirationDate;
+ }
+ }
+
+ ///
+ /// 检查模块是否授权 | Check if module is licensed
+ ///
+ /// 模块ID | Module ID
+ /// 模块是否授权 | Whether the module is licensed
+ public bool IsModuleLicensed(ushort moduleId)
+ {
+ lock (_lock)
+ {
+ if (!IsAuthorized)
+ return false;
+
+ try
+ {
+ ushort mod = moduleId;
+ ushort type = 0;
+ return NativeMethods.CLM_ModuleIsLicensed(ref mod, ref type);
+ }
+ catch (DllNotFoundException ex)
+ {
+ _logger.Error(ex, "MORCODE.dll 加载失败 | Failed to load MORCODE.dll");
+ return false;
+ }
+ catch (EntryPointNotFoundException ex)
+ {
+ _logger.Error(ex, "MORCODE.dll 中缺少入口点 | Missing entry point in MORCODE.dll");
+ return false;
+ }
+ }
+ }
+
+ ///
+ /// 获取SMA到期日期 | Get SMA expiration date
+ ///
+ /// SMA到期日期,未启用时返回 null | SMA expiration date, null if not enabled
+ public DateTime? GetSmaDate()
+ {
+ lock (_lock)
+ {
+ return _smaDate;
+ }
+ }
+
+ ///
+ /// 获取临时测试模式剩余时间 | Get remaining time in temporary test mode
+ ///
+ /// 剩余时间(秒),非测试模式返回 -1 | Remaining time in seconds, -1 if not in test mode
+ public int GetRemainingTestTime()
+ {
+ if (LicenseMode != Enums.LicenseMode.TemporaryTest)
+ return -1;
+
+ return Interlocked.CompareExchange(ref _remainingTestSeconds, 0, 0);
+ }
+
+ ///
+ /// 释放资源 | Release resources
+ ///
+ public void Dispose()
+ {
+ if (_disposed)
+ return;
+
+ _disposed = true;
+
+ // 停止计时器 | Stop timer
+ _testModeTimer?.Dispose();
+ _testModeTimer = null;
+
+ // 尝试登出 | Try to logout
+ try
+ {
+ NativeMethods.CLM_Logout();
+ }
+ catch (Exception ex)
+ {
+ _logger.Error(ex, "CLM_Logout 调用失败 | CLM_Logout call failed");
+ }
+ }
+
+ ///
+ /// 处理临时测试模式 | Handle temporary test mode
+ ///
+ /// 授权检查结果 | License check result
+ private LicenseCheckResult HandleTemporaryTestMode()
+ {
+ IsAuthorized = true;
+ _remainingTestSeconds = TestModeInitialSeconds;
+
+ // 启动计时器,每秒递减 | Start timer, decrement every second
+ _testModeTimer?.Dispose();
+ _testModeTimer = new Timer(TestModeTimerCallback, null, 1000, 1000);
+
+ _logger.Info("临时测试模式已启动,剩余时间={Seconds}秒 | Temporary test mode started, remaining time={Seconds}s", TestModeInitialSeconds);
+
+ WriteLicenseStateToConfig(LicenseState.Success);
+
+ return new LicenseCheckResult(
+ isAuthorized: true,
+ message: "临时测试模式已启动,有效时间15分钟 | Temporary test mode started, valid for 15 minutes",
+ licenseMode: Enums.LicenseMode.TemporaryTest,
+ moduleId: _config.ModuleId,
+ expirationDate: null,
+ smaDate: null,
+ floatingLicenseIp: null,
+ floatingLicensePort: null);
+ }
+
+ ///
+ /// 临时测试模式计时器回调 | Temporary test mode timer callback
+ ///
+ /// 状态对象 | State object
+ private void TestModeTimerCallback(object? state)
+ {
+ int remaining = Interlocked.Decrement(ref _remainingTestSeconds);
+
+ // 剩余5分钟(300秒)时触发警告 | Fire warning at 5 minutes (300 seconds) remaining
+ if (remaining <= 300 && !_warning5MinFired)
+ {
+ _warning5MinFired = true;
+ _logger.Warn("临时测试模式剩余5分钟 | Temporary test mode: 5 minutes remaining");
+ TestModeWarning5Min?.Invoke(this, EventArgs.Empty);
+ }
+
+ // 剩余1分钟(60秒)时触发警告 | Fire warning at 1 minute (60 seconds) remaining
+ if (remaining <= 60 && !_warning1MinFired)
+ {
+ _warning1MinFired = true;
+ _logger.Warn("临时测试模式剩余1分钟 | Temporary test mode: 1 minute remaining");
+ TestModeWarning1Min?.Invoke(this, EventArgs.Empty);
+ }
+
+ // 到期时触发超时事件 | Fire timeout event when expired
+ if (remaining <= 0)
+ {
+ // 停止计时器 | Stop timer
+ _testModeTimer?.Dispose();
+ _testModeTimer = null;
+
+ _logger.Info("临时测试模式已超时 | Temporary test mode has timed out");
+
+ // 触发超时事件 | Raise timeout event
+ TestModeTimeout?.Invoke(this, EventArgs.Empty);
+ }
+ }
+
+ ///
+ /// 处理 CLMS 正式授权流程 | Handle CLMS formal authorization flow
+ /// 兼容新旧版本 SDK:对可能不存在的入口点使用 TryInvoke 优雅降级 |
+ /// Compatible with old/new SDK: gracefully degrades for missing entry points via TryInvoke
+ ///
+ /// 授权检查结果 | License check result
+ private LicenseCheckResult HandleClmsAuthorization()
+ {
+ try
+ {
+ // 步骤 1:检查系统时间(可选,老版本 SDK 可能不支持)| Step 1: Check system time (optional, old SDK may not support)
+ if (!TryInvokeOptional(() => NativeMethods.CLM_CheckSystemTime(), "CLM_CheckSystemTime", out bool checkTimeResult))
+ {
+ // 入口点不存在,跳过此步骤 | Entry point not found, skip this step
+ _logger.Warn("CLM_CheckSystemTime 入口点不存在,跳过系统时间检查(SDK版本较旧)| CLM_CheckSystemTime entry point not found, skipping system time check (older SDK version)");
+ }
+ else if (!checkTimeResult)
+ {
+ _logger.Error(new InvalidOperationException("CLM_CheckSystemTime"), "系统时间检查异常 | System time check anomaly");
+ return CreateFailureResult("系统时间检查异常 | System time check anomaly");
+ }
+ else
+ {
+ _logger.Info("系统时间检查正常 | System time check: OK");
+ }
+
+ // 步骤 2:登录验证(核心,必须存在)| Step 2: Login verification (core, must exist)
+ StringBuilder password = new StringBuilder("FnEoFWSNLpVeoNWYhVoHLfgITRvieSszJfylVsXOTsLkphgkPzPhbLQzQrvRbNOkVVIQyMWkyGVjWSaiYUEksfQsRmklksLxrmeTksKKNMoZoWfZeDaLDSyWwEmtQakvSNxBMBLHoLEZHtaoXNpTWiaUGaSLQdsHFZnbRyPehytarNTKpaNNqnjFNggqWifhFsrZasDsWbIGWDrhnGrdtUNDMjJdhlTunsssxCzYpsLQrWBxUkuUUEJraSbTlbuX");
+ if (!NativeMethods.CLM_Login(password))
+ {
+ _logger.Error(new InvalidOperationException("CLM_Login"), "CLM_Login 登录验证失败 | CLM_Login verification failed");
+ return CreateFailureResult("CLM_Login 登录验证失败 | CLM_Login verification failed");
+ }
+ _logger.Info("CLM_Login 登录验证成功 | CLM_Login verification: OK");
+
+ // 步骤 3:检查许可范围(核心,必须存在)| Step 3: Check license scope (core, must exist)
+ if (!NativeMethods.CLM_Login_Scope())
+ {
+ _logger.Error(new InvalidOperationException("CLM_Login_Scope"), "CLM_Login_Scope 许可范围检查失败 | CLM_Login_Scope scope check failed");
+ return CreateFailureResult("CLM_Login_Scope 许可范围检查失败 | CLM_Login_Scope scope check failed");
+ }
+ _logger.Info("CLM_Login_Scope 许可范围检查成功 | CLM_Login_Scope scope check: OK");
+
+ // 步骤 4:SMA 验证(如果启用,可选入口点)| Step 4: SMA validation (if enabled, optional entry point)
+ if (_config.UseSma)
+ {
+ var smaResult = ValidateSma();
+ if (smaResult != null)
+ return smaResult;
+ }
+ else
+ {
+ _logger.Info("放弃检查SMA | SMA check skipped");
+ }
+
+ // 步骤 5:获取浮动许可IP和端口(可选,老版本 SDK 可能不支持)| Step 5: Get floating license IP and port (optional, old SDK may not support)
+ StringBuilder ip = new StringBuilder(256);
+ StringBuilder port = new StringBuilder(256);
+ if (!TryInvokeOptional(() => NativeMethods.CLM_GetIP(ip, port), "CLM_GetIP", out bool getIpResult))
+ {
+ _logger.Warn("CLM_GetIP 入口点不存在,跳过浮动许可IP获取(SDK版本较旧)| CLM_GetIP entry point not found, skipping floating license IP retrieval (older SDK version)");
+ }
+ else if (!getIpResult)
+ {
+ _logger.Error(new InvalidOperationException("CLM_GetIP"), "CLM_GetIP 获取浮动许可IP失败 | CLM_GetIP floating license IP retrieval failed");
+ return CreateFailureResult("CLM_GetIP 获取浮动许可IP失败 | CLM_GetIP floating license IP retrieval failed");
+ }
+ else
+ {
+ _floatingLicenseIp = ip.ToString();
+ _floatingLicensePort = port.ToString();
+ _logger.Info("CLM_GetIP 成功: ip={Ip}/port={Port} | CLM_GetIP success: ip={Ip}/port={Port}", _floatingLicenseIp, _floatingLicensePort);
+ }
+
+ // 步骤 6:获取错误信息(可选,老版本 SDK 可能不支持)| Step 6: Get error message (optional, old SDK may not support)
+ StringBuilder error = new StringBuilder(512);
+ if (!TryInvokeOptional(() => NativeMethods.CLM_GetError(error), "CLM_GetError", out bool getErrorResult))
+ {
+ _logger.Warn("CLM_GetError 入口点不存在,跳过错误信息获取(SDK版本较旧)| CLM_GetError entry point not found, skipping error retrieval (older SDK version)");
+ }
+ else if (!getErrorResult)
+ {
+ _logger.Error(new InvalidOperationException("CLM_GetError"), "CLM_GetError 获取错误信息失败 | CLM_GetError error retrieval failed");
+ return CreateFailureResult("CLM_GetError 获取错误信息失败 | CLM_GetError error retrieval failed");
+ }
+ else
+ {
+ _logger.Info("CLM_GetError 成功: {Error} | CLM_GetError success: {Error}", error.ToString());
+ }
+
+ // 步骤 7:检查模块授权(核心,必须存在)| Step 7: Check module authorization (core, must exist)
+ ushort moduleId = _config.ModuleId;
+ ushort type = 0;
+ if (!NativeMethods.CLM_ModuleIsLicensed(ref moduleId, ref type))
+ {
+ _logger.Error(new InvalidOperationException("CLM_ModuleIsLicensed"), "模块号码{ModuleId}不可用 | Module {ModuleId} unavailable", moduleId);
+ return CreateFailureResult($"模块号码{moduleId}不可用 | Module {moduleId} unavailable");
+ }
+ _logger.Info("模块号码{ModuleId}有效 | Module {ModuleId} available", moduleId);
+
+ // 步骤 8:获取授权到期日期(核心,必须存在)| Step 8: Get warranty expiration date (core, must exist)
+ int month = 0, day = 0, year = 0;
+ if (!NativeMethods.CLM_GetWarrantyExpiration(ref month, ref day, ref year))
+ {
+ _logger.Error(new InvalidOperationException("CLM_GetWarrantyExpiration"), "获取授权到期日期失败 | Failed to get warranty expiration date");
+ return CreateFailureResult("获取授权到期日期失败 | Failed to get warranty expiration date");
+ }
+
+ _expirationDate = new DateTime(year, month, day);
+ _logger.Info("CLM_GetWarrantyExpiration 成功: {Year}/{Month}/{Day} | CLM_GetWarrantyExpiration success: {Year}/{Month}/{Day}", year, month, day);
+
+ // 检查是否在30天内到期 | Check if expiring within 30 days
+ string warningMessage = string.Empty;
+ TimeSpan timeToExpiry = _expirationDate.Value - DateTime.Now;
+ if (timeToExpiry.Days <= 30)
+ {
+ warningMessage = $"软件授权将于{year}年{month}月{day}日到期,请尽快联系海克斯康 | Software license will expire on {year}-{month}-{day}, please contact Hexagon";
+ _logger.Warn(warningMessage);
+ }
+
+ // 授权成功 | Authorization successful
+ IsAuthorized = true;
+ WriteLicenseStateToConfig(LicenseState.Success);
+
+ string successMessage = string.IsNullOrEmpty(warningMessage)
+ ? "授权检查成功 | Authorization check successful"
+ : $"授权检查成功(警告:{warningMessage})| Authorization check successful (Warning: {warningMessage})";
+
+ _logger.Info("授权检查完成 | Authorization check completed: Mode={Mode}, State={State}, Expiration={Expiration}",
+ (int)LicenseMode,
+ (int)LicenseState.Success,
+ _expirationDate?.ToString("yyyy-MM-dd") ?? "N/A");
+
+ return new LicenseCheckResult(
+ isAuthorized: true,
+ message: successMessage,
+ licenseMode: LicenseMode,
+ moduleId: _config.ModuleId,
+ expirationDate: _expirationDate,
+ smaDate: _smaDate,
+ floatingLicenseIp: _floatingLicenseIp,
+ floatingLicensePort: _floatingLicensePort);
+ }
+ catch (DllNotFoundException ex)
+ {
+ _logger.Error(ex, "MORCODE.dll 加载失败 | Failed to load MORCODE.dll");
+ return CreateFailureResult("CLMS SDK 不可用 | CLMS SDK unavailable");
+ }
+ }
+
+ ///
+ /// 尝试调用可选的 SDK 方法,兼容老版本 SDK 中不存在的入口点 |
+ /// Try to invoke an optional SDK method, compatible with missing entry points in older SDK versions
+ ///
+ /// 要调用的方法委托 | Method delegate to invoke
+ /// 方法名称(用于日志)| Method name (for logging)
+ /// 方法返回值,入口点不存在时为 default | Method return value, default if entry point not found
+ /// true: 入口点存在并已调用; false: 入口点不存在(EntryPointNotFoundException)| true: entry point exists and was invoked; false: entry point not found
+ private bool TryInvokeOptional(Func action, string methodName, out bool result)
+ {
+ try
+ {
+ result = action();
+ return true;
+ }
+ catch (EntryPointNotFoundException)
+ {
+ result = default;
+ return false;
+ }
+ }
+
+ ///
+ /// 验证 SMA | Validate SMA
+ /// 兼容老版本 SDK:CLM_GetSmaDate 入口点不存在时跳过 SMA 验证 |
+ /// Compatible with old SDK: skips SMA validation if CLM_GetSmaDate entry point not found
+ ///
+ /// 失败时返回失败结果,成功或跳过时返回 null | Returns failure result on failure, null on success or skip
+ private LicenseCheckResult? ValidateSma()
+ {
+ int yearSma = 0, monthSma = 0, daySma = 0;
+
+ // CLM_GetSmaDate 在老版本 SDK 中可能不存在 | CLM_GetSmaDate may not exist in older SDK
+ try
+ {
+ if (!NativeMethods.CLM_GetSmaDate(ref monthSma, ref daySma, ref yearSma))
+ {
+ _logger.Error(new InvalidOperationException("CLM_GetSmaDate"), "检查SMA失败 | SMA check failed");
+ return CreateFailureResult("检查SMA失败 | SMA check failed");
+ }
+ }
+ catch (EntryPointNotFoundException)
+ {
+ _logger.Warn("CLM_GetSmaDate 入口点不存在,跳过SMA验证(SDK版本较旧)| CLM_GetSmaDate entry point not found, skipping SMA validation (older SDK version)");
+ return null;
+ }
+
+ _logger.Info("CLM_GetSmaDate 成功: {Year}/{Month}/{Day} | CLM_GetSmaDate success: {Year}/{Month}/{Day}", yearSma, monthSma, daySma);
+
+ // 获取软件版本信息 | Get software version information
+ var version = Assembly.GetExecutingAssembly().GetName().Version;
+ int major = version?.Major ?? 0;
+ int minor = version?.Minor ?? 0;
+
+ // SMA 年份 < 软件主版本号 → 失败 | SMA year < software major version → failure
+ if (yearSma < major)
+ {
+ string msg = $"CLMS授权中SMA年份{yearSma}小于软件主版本号(年份){major},请联系海克斯康升级许可 | SMA year {yearSma} is less than software major version {major}, please contact Hexagon to upgrade license";
+ _logger.Error(new InvalidOperationException("SMA验证失败"), msg);
+ return CreateFailureResult(msg);
+ }
+
+ // SMA 年份 == 软件主版本号时,校验季度 | When SMA year == software major version, validate quarter
+ if (yearSma == major)
+ {
+ try
+ {
+ DateTime smaDate = new DateTime(yearSma, monthSma, daySma);
+ int smaQuarter = (smaDate.Month - 1) / 3 + 1;
+
+ if (minor > smaQuarter)
+ {
+ string msg = $"CLMS授权日期{yearSma}/{monthSma}/{daySma}属于{yearSma}年第{smaQuarter}季度,不支持当前{major}年第{minor}季度的软件版本 | SMA date {yearSma}/{monthSma}/{daySma} is in Q{smaQuarter} of {yearSma}, does not support current Q{minor} of {major} software version";
+ _logger.Error(new InvalidOperationException("SMA季度验证失败"), msg);
+ return CreateFailureResult(msg);
+ }
+ }
+ catch (Exception ex)
+ {
+ string msg = $"SMA授权日期{yearSma}/{monthSma}/{daySma}不合法 | SMA date {yearSma}/{monthSma}/{daySma} is invalid: {ex.Message}";
+ _logger.Error(ex, msg);
+ return CreateFailureResult(msg);
+ }
+ }
+
+ _smaDate = new DateTime(yearSma, monthSma, daySma);
+ _logger.Info("SMA校验成功,SMA有效期至{Year}/{Month}/{Day} | SMA validation successful, valid until {Year}/{Month}/{Day}", yearSma, monthSma, daySma);
+ return null;
+ }
+
+ ///
+ /// 创建失败结果 | Create failure result
+ ///
+ /// 失败消息 | Failure message
+ /// 授权检查失败结果 | License check failure result
+ private LicenseCheckResult CreateFailureResult(string message)
+ {
+ IsAuthorized = false;
+ WriteLicenseStateToConfig(LicenseState.Fail);
+
+ _logger.Info("授权检查完成 | Authorization check completed: Mode={Mode}, State={State}, Expiration={Expiration}",
+ (int)LicenseMode,
+ (int)LicenseState.Fail,
+ "N/A");
+
+ return new LicenseCheckResult(
+ isAuthorized: false,
+ message: message,
+ licenseMode: LicenseMode,
+ moduleId: _config.ModuleId,
+ expirationDate: null,
+ smaDate: _smaDate,
+ floatingLicenseIp: _floatingLicenseIp,
+ floatingLicensePort: _floatingLicensePort);
+ }
+
+ ///
+ /// 写入授权状态到配置文件 | Write license state to configuration file
+ ///
+ /// 授权状态 | License state
+ private void WriteLicenseStateToConfig(LicenseState state)
+ {
+ try
+ {
+ var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
+ var settings = config.AppSettings.Settings;
+
+ if (settings["License:LicenseState"] == null)
+ {
+ settings.Add("License:LicenseState", ((int)state).ToString());
+ }
+ else
+ {
+ settings["License:LicenseState"].Value = ((int)state).ToString();
+ }
+
+ config.Save(ConfigurationSaveMode.Modified);
+ ConfigurationManager.RefreshSection("appSettings");
+
+ _logger.Info("授权状态已写入配置: {State} | License state written to config: {State}", (int)state);
+ }
+ catch (Exception ex)
+ {
+ _logger.Error(ex, "写入授权状态到配置失败 | Failed to write license state to config");
+ }
+ }
+ }
+}
diff --git a/XP.Common/License/Interfaces/ILicenseService.cs b/XP.Common/License/Interfaces/ILicenseService.cs
new file mode 100644
index 0000000..50d1649
--- /dev/null
+++ b/XP.Common/License/Interfaces/ILicenseService.cs
@@ -0,0 +1,67 @@
+using System;
+using XP.Common.License.Enums;
+using XP.Common.License.Implementations;
+
+namespace XP.Common.License.Interfaces;
+
+///
+/// 授权服务接口 | License service interface
+///
+public interface ILicenseService
+{
+ ///
+ /// 执行授权检查 | Perform authorization check
+ ///
+ /// 授权检查结果 | License check result
+ LicenseCheckResult CheckAuthorization();
+
+ ///
+ /// 当前会话是否已授权 | Whether the current session is authorized
+ ///
+ bool IsAuthorized { get; }
+
+ ///
+ /// 获取授权到期日期 | Get license expiration date
+ ///
+ /// 授权到期日期,未授权时返回 null | License expiration date, null if not authorized
+ DateTime? GetExpirationDate();
+
+ ///
+ /// 检查模块是否授权 | Check if module is licensed
+ ///
+ /// 模块ID | Module ID
+ /// 模块是否授权 | Whether the module is licensed
+ bool IsModuleLicensed(ushort moduleId);
+
+ ///
+ /// 获取SMA到期日期 | Get SMA expiration date
+ ///
+ /// SMA到期日期,未启用时返回 null | SMA expiration date, null if not enabled
+ DateTime? GetSmaDate();
+
+ ///
+ /// 当前授权模式 | Current license mode
+ ///
+ LicenseMode LicenseMode { get; }
+
+ ///
+ /// 临时测试模式超时事件(到期时触发,应用应执行正常关闭流程)| Temporary test mode timeout event (fires when expired, app should perform graceful shutdown)
+ ///
+ event EventHandler TestModeTimeout;
+
+ ///
+ /// 临时测试模式剩余5分钟警告事件 | Temporary test mode 5-minute warning event
+ ///
+ event EventHandler TestModeWarning5Min;
+
+ ///
+ /// 临时测试模式剩余1分钟警告事件 | Temporary test mode 1-minute warning event
+ ///
+ event EventHandler TestModeWarning1Min;
+
+ ///
+ /// 获取临时测试模式剩余时间 | Get remaining time in temporary test mode
+ ///
+ /// 剩余时间(秒),非测试模式返回 0 | Remaining time in seconds, 0 if not in test mode
+ int GetRemainingTestTime();
+}
diff --git a/XP.Common/License/Native/NativeMethods.cs b/XP.Common/License/Native/NativeMethods.cs
new file mode 100644
index 0000000..4ad22c4
--- /dev/null
+++ b/XP.Common/License/Native/NativeMethods.cs
@@ -0,0 +1,97 @@
+using System;
+using System.Runtime.InteropServices;
+using System.Text;
+using XP.Common.License.Enums;
+
+namespace XP.Common.License.Native
+{
+ ///
+ /// CLMS SDK 原生方法封装 | CLMS SDK native methods encapsulation
+ ///
+ internal static class NativeMethods
+ {
+ ///
+ /// 登录验证 | Login verification
+ ///
+ /// 验证字符串 | Verification string
+ /// TRUE: 成功 | TRUE: Success; FALSE: 失败 | FALSE: Failure
+ [DllImport("MORCODE.dll", EntryPoint = "CLM_Login", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
+ internal static extern bool CLM_Login(StringBuilder str);
+
+ ///
+ /// 退出登录 | Logout
+ ///
+ /// TRUE: 成功 | TRUE: Success; FALSE: 失败 | FALSE: Failure
+ [DllImport("MORCODE.dll", EntryPoint = "CLM_Logout", CallingConvention = CallingConvention.Cdecl)]
+ internal static extern bool CLM_Logout();
+
+ ///
+ /// 检查许可范围 | Check license scope
+ ///
+ /// TRUE: 有许可 | TRUE: Has license; FALSE: 无许可 | FALSE: No license
+ [DllImport("MORCODE.dll", EntryPoint = "CLM_Login_Scope", CallingConvention = CallingConvention.Cdecl)]
+ internal static extern bool CLM_Login_Scope();
+
+ ///
+ /// 检查模块是否授权 | Check if module is licensed
+ ///
+ /// 模块ID | Module ID
+ /// 类型(暂无定义)| Type (undefined)
+ /// TRUE: 模块可用 | TRUE: Module available; FALSE: 模块不可用 | FALSE: Module unavailable
+ [DllImport("MORCODE.dll", EntryPoint = "CLM_ModuleIsLicensed", CallingConvention = CallingConvention.Cdecl)]
+ internal static extern bool CLM_ModuleIsLicensed(ref ushort mod, ref ushort type);
+
+ ///
+ /// 获取保修到期日期 | Get warranty expiration date
+ ///
+ /// 月份 | Month
+ /// 日期 | Day
+ /// 年份 | Year
+ /// TRUE: 成功 | TRUE: Success; FALSE: 失败 | FALSE: Failure
+ [DllImport("MORCODE.dll", EntryPoint = "CLM_GetWarrantyExpiration", CallingConvention = CallingConvention.Cdecl)]
+ internal static extern bool CLM_GetWarrantyExpiration(ref int mon, ref int day, ref int year);
+
+ ///
+ /// 获取浮动许可的IP地址和端口 | Get floating license IP and port
+ ///
+ /// IP地址 | IP address
+ /// 端口 | Port
+ /// TRUE: 成功 | TRUE: Success; FALSE: 失败 | FALSE: Failure
+ [DllImport("MORCODE.dll", EntryPoint = "CLM_GetIP", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
+ internal static extern bool CLM_GetIP(StringBuilder ip, StringBuilder port);
+
+ ///
+ /// 获取错误信息 | Get error message
+ ///
+ /// 错误信息 | Error message
+ /// TRUE: 成功 | TRUE: Success; FALSE: 失败 | FALSE: Failure
+ [DllImport("MORCODE.dll", EntryPoint = "CLM_GetError", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
+ internal static extern bool CLM_GetError(StringBuilder error);
+
+ ///
+ /// 检查系统时间 | Check system time
+ ///
+ /// TRUE: 系统时间正常 | TRUE: System time normal; FALSE: 系统时间异常 | FALSE: System time anomaly
+ [DllImport("MORCODE.dll", EntryPoint = "CLM_CheckSystemTime", CallingConvention = CallingConvention.Cdecl)]
+ internal static extern bool CLM_CheckSystemTime();
+
+ ///
+ /// 获取SmartService信息 | Get SmartService information
+ ///
+ /// 控制器ID | Controller ID
+ /// 用户名 | User name
+ /// TRUE: 成功 | TRUE: Success; FALSE: 失败 | FALSE: Failure
+ [DllImport("MORCODE.dll", EntryPoint = "CLM_SmartService", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
+ internal static extern bool CLM_SmartService(StringBuilder ControllerId, StringBuilder UserName);
+
+ ///
+ /// 获取SMA日期 | Get SMA date
+ ///
+ /// 月份 | Month
+ /// 日期 | Day
+ /// 年份 | Year
+ /// TRUE: 成功 | TRUE: Success; FALSE: 失败 | FALSE: Failure
+ [DllImport("MORCODE.dll", EntryPoint = "CLM_GetSmaDate", CallingConvention = CallingConvention.Cdecl)]
+ internal static extern bool CLM_GetSmaDate(ref int mon, ref int day, ref int year);
+ }
+}
\ No newline at end of file
diff --git a/XP.Common/Logging/Configs/ConfigLoader.cs b/XP.Common/Logging/Configs/ConfigLoader.cs
new file mode 100644
index 0000000..a35442b
--- /dev/null
+++ b/XP.Common/Logging/Configs/ConfigLoader.cs
@@ -0,0 +1,50 @@
+using System.Configuration;
+
+namespace XP.Common.Logging.Configs
+{
+ ///
+ /// Serilog 配置加载器,从 App.config 读取日志相关配置项 | Serilog configuration loader, reads logging-related configuration from App.config
+ ///
+ public static class ConfigLoader
+ {
+ ///
+ /// 配置键前缀 | Configuration key prefix
+ ///
+ private const string KeyPrefix = "Serilog:";
+
+ ///
+ /// 从 App.config 加载 Serilog 配置 | Load Serilog configuration from App.config
+ ///
+ /// Serilog 配置实体,缺失或无效配置项使用默认值 | Serilog configuration entity, uses default values for missing or invalid items
+ public static SerilogConfig LoadSerilogConfig()
+ {
+ var config = new SerilogConfig();
+
+ // 加载日志路径 | Load log path
+ var logPath = ConfigurationManager.AppSettings[KeyPrefix + "LogPath"];
+ if (!string.IsNullOrEmpty(logPath)) config.LogPath = logPath;
+
+ // 加载最低日志级别 | Load minimum level
+ var minLevel = ConfigurationManager.AppSettings[KeyPrefix + "MinimumLevel"];
+ if (!string.IsNullOrEmpty(minLevel)) config.MinimumLevel = minLevel;
+
+ // 加载是否输出到控制台 | Load enable console
+ var enableConsole = ConfigurationManager.AppSettings[KeyPrefix + "EnableConsole"];
+ if (bool.TryParse(enableConsole, out var console)) config.EnableConsole = console;
+
+ // 加载日志文件分割规则 | Load rolling interval
+ var rollingInterval = ConfigurationManager.AppSettings[KeyPrefix + "RollingInterval"];
+ if (!string.IsNullOrEmpty(rollingInterval)) config.RollingInterval = rollingInterval;
+
+ // 加载单个日志文件最大大小 | Load file size limit
+ var fileSize = ConfigurationManager.AppSettings[KeyPrefix + "FileSizeLimitMB"];
+ if (long.TryParse(fileSize, out var size) && size > 0) config.FileSizeLimitMB = size;
+
+ // 加载保留日志文件数量 | Load retained file count limit
+ var retainCount = ConfigurationManager.AppSettings[KeyPrefix + "RetainedFileCountLimit"];
+ if (int.TryParse(retainCount, out var count) && count > 0) config.RetainedFileCountLimit = count;
+
+ return config;
+ }
+ }
+}
diff --git a/XP.Common/Configs/SerilogConfig.cs b/XP.Common/Logging/Configs/SerilogConfig.cs
similarity index 60%
rename from XP.Common/Configs/SerilogConfig.cs
rename to XP.Common/Logging/Configs/SerilogConfig.cs
index ddc3fd6..af8c4e8 100644
--- a/XP.Common/Configs/SerilogConfig.cs
+++ b/XP.Common/Logging/Configs/SerilogConfig.cs
@@ -1,43 +1,43 @@
using System;
using System.IO;
-namespace XP.Common.Configs
+namespace XP.Common.Logging.Configs
{
///
- /// Serilog日志配置实体(从App.config读取)
+ /// Serilog 日志配置实体(从 App.config 读取)| Serilog logging configuration entity (loaded from App.config)
///
public class SerilogConfig
{
///
- /// 日志输出根路径(默认:AppData/Files/Logs)
+ /// 日志输出根路径(默认:AppData/Files/Logs)| Log output root path (default: AppData/Files/Logs)
///
public string LogPath { get; set; } = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
"Files", "Logs");
///
- /// 最低日志级别(Debug/Info/Warn/Error/Fatal)
+ /// 最低日志级别(Debug/Info/Warn/Error/Fatal)| Minimum log level
///
public string MinimumLevel { get; set; } = "Info";
///
- /// 是否输出到控制台(调试环境=true,生产环境=false)
+ /// 是否输出到控制台(调试环境=true,生产环境=false)| Whether to output to console
///
public bool EnableConsole { get; set; } = true;
///
- /// 日志文件分割规则(Day/Month/Hour/Size)
+ /// 日志文件分割规则(Day/Month/Hour/Size)| Log file rolling interval
///
public string RollingInterval { get; set; } = "Day";
///
- /// 单个日志文件最大大小(MB,仅Size分割时生效)
+ /// 单个日志文件最大大小(MB,仅 Size 分割时生效)| Single log file max size (MB)
///
public long FileSizeLimitMB { get; set; } = 100;
///
- /// 保留日志文件数量(默认30天)
+ /// 保留日志文件数量(默认30天)| Retained file count limit (default 30)
///
public int RetainedFileCountLimit { get; set; } = 30;
}
-}
\ No newline at end of file
+}
diff --git a/XP.Common/Logging/SerilogInitializer.cs b/XP.Common/Logging/SerilogInitializer.cs
index 9fd141a..dd322d3 100644
--- a/XP.Common/Logging/SerilogInitializer.cs
+++ b/XP.Common/Logging/SerilogInitializer.cs
@@ -1,7 +1,7 @@
using System;
using Serilog;
using Serilog.Events;
-using XP.Common.Configs;
+using XP.Common.Logging.Configs;
using XP.Common.Logging.ViewModels;
namespace XP.Common.Logging
diff --git a/XP.Common/Module/CommonModule.cs b/XP.Common/Module/CommonModule.cs
index e15672d..e7b18f7 100644
--- a/XP.Common/Module/CommonModule.cs
+++ b/XP.Common/Module/CommonModule.cs
@@ -4,7 +4,8 @@ using Prism.Modularity;
using XP.Common.Dump.Configs;
using XP.Common.Dump.Implementations;
using XP.Common.Dump.Interfaces;
-using XP.Common.Helpers;
+using XP.Common.License.Configs;
+using XP.Common.License.Interfaces;
using XP.Common.Localization.Configs;
using XP.Common.Localization.Extensions;
using XP.Common.Localization.Implementations;
@@ -12,6 +13,8 @@ using XP.Common.Localization.Interfaces;
using XP.Common.Logging.Interfaces;
using XP.Common.PdfViewer.Implementations;
using XP.Common.PdfViewer.Interfaces;
+using DumpConfigLoader = XP.Common.Dump.Configs.ConfigLoader;
+using LicenseConfigLoader = XP.Common.License.Configs.ConfigLoader;
namespace XP.Common.Module
{
@@ -65,7 +68,7 @@ namespace XP.Common.Module
containerRegistry.RegisterSingleton();
// 注册 Dump 配置为单例(通过工厂方法加载)| Register Dump config as singleton (via factory method)
- containerRegistry.RegisterSingleton(() => ConfigLoader.LoadDumpConfig());
+ containerRegistry.RegisterSingleton(() => DumpConfigLoader.LoadDumpConfig());
// 注册 Dump 服务为单例 | Register Dump service as singleton
containerRegistry.RegisterSingleton();
@@ -75,6 +78,12 @@ namespace XP.Common.Module
// 注册 PDF 查看服务为单例 | Register PDF viewer service as singleton
containerRegistry.RegisterSingleton();
+
+ // 注册授权配置为单例(通过工厂方法加载)| Register license config as singleton (via factory method)
+ containerRegistry.RegisterSingleton(() => LicenseConfigLoader.LoadLicenseConfig());
+
+ // 注册授权服务为单例 | Register license service as singleton
+ containerRegistry.RegisterSingleton();
}
}
}
\ No newline at end of file
diff --git a/XP.Common/ReleaseFiles/MORCODE.dll b/XP.Common/ReleaseFiles/MORCODE.dll
new file mode 100644
index 0000000..d2a4075
Binary files /dev/null and b/XP.Common/ReleaseFiles/MORCODE.dll differ
diff --git a/XP.Common/Resources/Resources.en-US.resx b/XP.Common/Resources/Resources.en-US.resx
index 3154237..b115e45 100644
--- a/XP.Common/Resources/Resources.en-US.resx
+++ b/XP.Common/Resources/Resources.en-US.resx
@@ -1887,4 +1887,125 @@ Reprojection error: {1:F4} pixels
Image{0}: {1:F4} pixels
+
+
+ Edge Find Line Fit
+
+
+ Place calipers along a search line to detect edge points and fit a line (supports Least Squares and RANSAC)
+
+
+ Caliper Count
+
+
+ Number of calipers placed evenly along the search line
+
+
+ Caliper Width
+
+
+ Search length of each caliper (pixels), perpendicular to the search line
+
+
+ Edge Polarity
+
+
+ Edge direction: BrightToDark, DarkToBright, or Both
+
+
+ Edge Threshold
+
+
+ Gradient strength threshold; edges below this value are ignored
+
+
+ Smoothing Sigma
+
+
+ Gaussian smoothing standard deviation for noise suppression (larger = smoother)
+
+
+ Fit Method
+
+
+ Line fitting algorithm: LeastSquares or RANSAC (robust, rejects outliers)
+
+
+ RANSAC Threshold
+
+
+ RANSAC inlier distance threshold (pixels); points closer than this to the line are inliers
+
+
+ Line Thickness
+
+
+ Drawing thickness for result visualization
+
+
+
+
+ Edge Find Circle Fit
+
+
+ Place calipers along estimated circle to detect edge points and fit a circle (supports Least Squares and RANSAC)
+
+
+ Caliper Count
+
+
+ Number of calipers placed evenly around the circle
+
+
+ Caliper Width
+
+
+ Search length of each caliper along radial direction (pixels)
+
+
+ Edge Polarity
+
+
+ Edge direction: BrightToDark, DarkToBright, or Both
+
+
+ Edge Threshold
+
+
+ Gradient strength threshold; edges below this value are ignored
+
+
+ Smoothing Sigma
+
+
+ Gaussian smoothing standard deviation for noise suppression
+
+
+ Search Direction
+
+
+ Caliper search direction: Inward (toward center), Outward (away from center), Both
+
+
+ Fit Method
+
+
+ Circle fitting algorithm: LeastSquares or RANSAC (robust, rejects outliers)
+
+
+ RANSAC Threshold
+
+
+ RANSAC inlier distance threshold (pixels); points closer than this to the circle are inliers
+
+
+ Line Thickness
+
+
+ Drawing thickness for result visualization
+
+
+ Histogram — No data
+ ImageHistogramControl - Placeholder text when no image data
+
\ No newline at end of file
diff --git a/XP.Common/Resources/Resources.resx b/XP.Common/Resources/Resources.resx
index 7f0cc41..2009be3 100644
--- a/XP.Common/Resources/Resources.resx
+++ b/XP.Common/Resources/Resources.resx
@@ -1920,4 +1920,125 @@
图像{0}: {1:F4} 像素
+
+
+ 边缘查找拟合直线
+
+
+ 沿搜索线放置卡尺检测边缘点,拟合直线(支持最小二乘和RANSAC)
+
+
+ 卡尺数量
+
+
+ 沿搜索线等间距放置的卡尺数量
+
+
+ 卡尺宽度
+
+
+ 每个卡尺的搜索长度(像素),沿垂直于搜索线方向
+
+
+ 边缘极性
+
+
+ 边缘方向:BrightToDark(亮到暗)、DarkToBright(暗到亮)、Both(双向)
+
+
+ 边缘阈值
+
+
+ 边缘梯度强度阈值,低于此值的边缘将被忽略
+
+
+ 平滑Sigma
+
+
+ 高斯平滑的标准差,用于抑制噪声(越大越平滑)
+
+
+ 拟合方法
+
+
+ 直线拟合算法:LeastSquares(最小二乘)、RANSAC(鲁棒拟合,可剔除异常点)
+
+
+ RANSAC阈值
+
+
+ RANSAC内点判定距离阈值(像素),点到直线距离小于此值视为内点
+
+
+ 线条粗细
+
+
+ 绘制结果的线条粗细
+
+
+
+
+ 边缘查找拟合圆
+
+
+ 沿预估圆周放置卡尺检测边缘点,拟合圆(支持最小二乘和RANSAC)
+
+
+ 卡尺数量
+
+
+ 沿圆周等角度放置的卡尺数量
+
+
+ 卡尺宽度
+
+
+ 每个卡尺沿径向的搜索长度(像素)
+
+
+ 边缘极性
+
+
+ 边缘方向:BrightToDark(亮到暗)、DarkToBright(暗到亮)、Both(双向)
+
+
+ 边缘阈值
+
+
+ 边缘梯度强度阈值,低于此值的边缘将被忽略
+
+
+ 平滑Sigma
+
+
+ 高斯平滑的标准差,用于抑制噪声
+
+
+ 搜索方向
+
+
+ 卡尺搜索方向:Inward(向圆心)、Outward(背离圆心)、Both(双向)
+
+
+ 拟合方法
+
+
+ 圆拟合算法:LeastSquares(最小二乘)、RANSAC(鲁棒拟合)
+
+
+ RANSAC阈值
+
+
+ RANSAC内点判定距离阈值(像素),点到圆周距离小于此值视为内点
+
+
+ 线条粗细
+
+
+ 绘制结果的线条粗细
+
+
+ 直方图 — 暂无数据
+ ImageHistogramControl - 无图像输入时的提示文本 | Placeholder text when no image data
+
\ No newline at end of file
diff --git a/XP.Common/Resources/Resources.zh-CN.resx b/XP.Common/Resources/Resources.zh-CN.resx
index 7dc08f9..87926f0 100644
--- a/XP.Common/Resources/Resources.zh-CN.resx
+++ b/XP.Common/Resources/Resources.zh-CN.resx
@@ -1881,4 +1881,125 @@
图像{0}: {1:F4} 像素
+
+
+ 边缘查找拟合直线
+
+
+ 沿搜索线放置卡尺检测边缘点,拟合直线(支持最小二乘和RANSAC)
+
+
+ 卡尺数量
+
+
+ 沿搜索线等间距放置的卡尺数量
+
+
+ 卡尺宽度
+
+
+ 每个卡尺的搜索长度(像素),沿垂直于搜索线方向
+
+
+ 边缘极性
+
+
+ 边缘方向:BrightToDark(亮到暗)、DarkToBright(暗到亮)、Both(双向)
+
+
+ 边缘阈值
+
+
+ 边缘梯度强度阈值,低于此值的边缘将被忽略
+
+
+ 平滑Sigma
+
+
+ 高斯平滑的标准差,用于抑制噪声(越大越平滑)
+
+
+ 拟合方法
+
+
+ 直线拟合算法:LeastSquares(最小二乘)、RANSAC(鲁棒拟合,可剔除异常点)
+
+
+ RANSAC阈值
+
+
+ RANSAC内点判定距离阈值(像素),点到直线距离小于此值视为内点
+
+
+ 线条粗细
+
+
+ 绘制结果的线条粗细
+
+
+
+
+ 边缘查找拟合圆
+
+
+ 沿预估圆周放置卡尺检测边缘点,拟合圆(支持最小二乘和RANSAC)
+
+
+ 卡尺数量
+
+
+ 沿圆周等角度放置的卡尺数量
+
+
+ 卡尺宽度
+
+
+ 每个卡尺沿径向的搜索长度(像素)
+
+
+ 边缘极性
+
+
+ 边缘方向:BrightToDark(亮到暗)、DarkToBright(暗到亮)、Both(双向)
+
+
+ 边缘阈值
+
+
+ 边缘梯度强度阈值,低于此值的边缘将被忽略
+
+
+ 平滑Sigma
+
+
+ 高斯平滑的标准差,用于抑制噪声
+
+
+ 搜索方向
+
+
+ 卡尺搜索方向:Inward(向圆心)、Outward(背离圆心)、Both(双向)
+
+
+ 拟合方法
+
+
+ 圆拟合算法:LeastSquares(最小二乘)、RANSAC(鲁棒拟合)
+
+
+ RANSAC阈值
+
+
+ RANSAC内点判定距离阈值(像素),点到圆周距离小于此值视为内点
+
+
+ 线条粗细
+
+
+ 绘制结果的线条粗细
+
+
+ 直方图 — 暂无数据
+ ImageHistogramControl - 无图像输入时的提示文本 | Placeholder text when no image data
+
\ No newline at end of file
diff --git a/XP.Common/Resources/Resources.zh-TW.resx b/XP.Common/Resources/Resources.zh-TW.resx
index 946e1f5..630a189 100644
--- a/XP.Common/Resources/Resources.zh-TW.resx
+++ b/XP.Common/Resources/Resources.zh-TW.resx
@@ -1881,4 +1881,8 @@
图像{0}: {1:F4} 像素
+
+ 直方圖 — 暫無資料
+ ImageHistogramControl - 無圖像輸入時的提示文字 | Placeholder text when no image data
+
\ No newline at end of file
diff --git a/XP.Common/XP.Common.csproj b/XP.Common/XP.Common.csproj
index 50c0aa6..c22729e 100644
--- a/XP.Common/XP.Common.csproj
+++ b/XP.Common/XP.Common.csproj
@@ -27,6 +27,7 @@
+
@@ -62,4 +63,7 @@
Resources.resx
+
+
+
\ No newline at end of file
diff --git a/XP.Hardware.Detector/Abstractions/AreaDetectorBase.cs b/XP.Hardware.Detector/Abstractions/AreaDetectorBase.cs
index 8964a33..258021d 100644
--- a/XP.Hardware.Detector/Abstractions/AreaDetectorBase.cs
+++ b/XP.Hardware.Detector/Abstractions/AreaDetectorBase.cs
@@ -386,6 +386,44 @@ namespace XP.Hardware.Detector.Abstractions
///
public abstract DetectorInfo GetInfo();
+ ///
+ /// 应用探测器参数 | Apply detector parameters
+ ///
+ public async Task ApplyParametersAsync(int binningIndex, int pga, decimal frameRate, CancellationToken cancellationToken = default)
+ {
+ if (Status != DetectorStatus.Ready)
+ {
+ return DetectorResult.Failure($"探测器状态不正确,当前状态:{Status} | Detector status incorrect, current status: {Status}");
+ }
+
+ try
+ {
+ return await ApplyParametersInternalAsync(binningIndex, pga, frameRate, cancellationToken);
+ }
+ catch (Exception ex)
+ {
+ var errorResult = DetectorResult.Failure($"应用参数异常 | Apply parameters exception: {ex.Message}", ex);
+ PublishError(errorResult);
+ return errorResult;
+ }
+ }
+
+ ///
+ /// 获取校正能力描述(子类可重写)| Get correction capabilities (subclass can override)
+ ///
+ public virtual CorrectionCapabilities GetCorrectionCapabilities()
+ {
+ return new CorrectionCapabilities();
+ }
+
+ ///
+ /// 显式失效校正数据(子类可重写)| Explicitly invalidate correction data (subclass can override)
+ ///
+ public virtual void InvalidateCorrectionData()
+ {
+ // 默认空实现,子类按需重写 | Default empty implementation, subclass overrides as needed
+ }
+
// 模板方法,由子类实现 | Template methods, implemented by derived classes
protected abstract Task InitializeInternalAsync(CancellationToken cancellationToken);
protected abstract Task StartAcquisitionInternalAsync(CancellationToken cancellationToken);
@@ -395,6 +433,7 @@ namespace XP.Hardware.Detector.Abstractions
protected abstract Task GainCorrectionInternalAsync(int frameCount, CancellationToken cancellationToken);
protected abstract Task AutoCorrectionInternalAsync(int frameCount, CancellationToken cancellationToken);
protected abstract Task BadPixelCorrectionInternalAsync(CancellationToken cancellationToken);
+ protected abstract Task ApplyParametersInternalAsync(int binningIndex, int pga, decimal frameRate, CancellationToken cancellationToken);
///
/// 更新状态并发布事件 | Update status and publish event
diff --git a/XP.Hardware.Detector/Abstractions/CorrectionCapabilities.cs b/XP.Hardware.Detector/Abstractions/CorrectionCapabilities.cs
new file mode 100644
index 0000000..3136fb1
--- /dev/null
+++ b/XP.Hardware.Detector/Abstractions/CorrectionCapabilities.cs
@@ -0,0 +1,49 @@
+namespace XP.Hardware.Detector.Abstractions
+{
+ ///
+ /// 校正能力描述 | Correction capabilities description
+ /// 描述探测器支持的校正行为和参数范围,不同探测器可返回不同配置
+ ///
+ public class CorrectionCapabilities
+ {
+ ///
+ /// 是否需要在校正前停止采集 | Whether to stop acquisition before correction
+ ///
+ public bool RequiresStopBeforeCorrection { get; set; } = true;
+
+ ///
+ /// 是否需要在暗场校正前应用参数 | Whether to apply parameters before dark correction
+ ///
+ public bool RequiresParameterApplyBeforeDark { get; set; } = true;
+
+ ///
+ /// 亮场校正后是否自动执行坏像素校正 | Auto bad pixel correction after gain correction
+ ///
+ public bool AutoBadPixelAfterGain { get; set; } = true;
+
+ ///
+ /// 停止采集后等待时间(ms)| Post-stop delay (ms)
+ ///
+ public int PostStopDelayMs { get; set; } = 500;
+
+ ///
+ /// 暗场校正帧数(从配置文件加载)| Dark correction frame count (loaded from config)
+ ///
+ public int DarkFrameCount { get; set; } = 64;
+
+ ///
+ /// 亮场校正帧数(从配置文件加载)| Gain correction frame count (loaded from config)
+ ///
+ public int GainFrameCount { get; set; } = 64;
+
+ ///
+ /// 校正帧数最小值 | Correction frame count minimum
+ ///
+ public int FrameCountMin { get; set; } = 1;
+
+ ///
+ /// 校正帧数最大值 | Correction frame count maximum
+ ///
+ public int FrameCountMax { get; set; } = 128;
+ }
+}
diff --git a/XP.Hardware.Detector/Abstractions/IAreaDetector.cs b/XP.Hardware.Detector/Abstractions/IAreaDetector.cs
index 527742d..6c10e20 100644
--- a/XP.Hardware.Detector/Abstractions/IAreaDetector.cs
+++ b/XP.Hardware.Detector/Abstractions/IAreaDetector.cs
@@ -85,5 +85,26 @@ namespace XP.Hardware.Detector.Abstractions
///
/// 探测器信息 | Detector information
DetectorInfo GetInfo();
+
+ ///
+ /// 应用探测器参数(Binning/PGA/帧率)| Apply detector parameters (Binning/PGA/FrameRate)
+ ///
+ /// Binning 索引 | Binning index
+ /// PGA 灵敏度值 | PGA sensitivity value
+ /// 帧率 | Frame rate
+ /// 取消令牌 | Cancellation token
+ /// 操作结果 | Operation result
+ Task ApplyParametersAsync(int binningIndex, int pga, decimal frameRate, CancellationToken cancellationToken = default);
+
+ ///
+ /// 获取校正能力描述 | Get correction capabilities
+ ///
+ /// 校正能力描述 | Correction capabilities
+ CorrectionCapabilities GetCorrectionCapabilities();
+
+ ///
+ /// 显式失效校正数据(参数变更后调用)| Explicitly invalidate correction data (called after parameter change)
+ ///
+ void InvalidateCorrectionData();
}
}
diff --git a/XP.Hardware.Detector/Config/ConfigLoader.cs b/XP.Hardware.Detector/Config/ConfigLoader.cs
index 5225eaf..f325b6c 100644
--- a/XP.Hardware.Detector/Config/ConfigLoader.cs
+++ b/XP.Hardware.Detector/Config/ConfigLoader.cs
@@ -49,6 +49,16 @@ namespace XP.Hardware.Detector.Config
config.SavePath = ConfigurationManager.AppSettings["Detector:SavePath"] ?? Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Images");
config.AutoSave = bool.TryParse(ConfigurationManager.AppSettings["Detector:AutoSave"], out var autoSave) && autoSave;
+ // 加载校正帧数配置(钳位到 1-128)| Load correction frame count config (clamp to 1-128)
+ if (int.TryParse(ConfigurationManager.AppSettings["Detector:Correction:DarkFrameCount"], out var darkFrames))
+ {
+ config.DarkCorrectionFrameCount = Math.Clamp(darkFrames, 1, 128);
+ }
+ if (int.TryParse(ConfigurationManager.AppSettings["Detector:Correction:GainFrameCount"], out var gainFrames))
+ {
+ config.GainCorrectionFrameCount = Math.Clamp(gainFrames, 1, 128);
+ }
+
// 验证配置 | Validate configuration
var validationResult = ValidateConfiguration(config);
if (!validationResult.IsSuccess)
diff --git a/XP.Hardware.Detector/Config/DetectorConfig.cs b/XP.Hardware.Detector/Config/DetectorConfig.cs
index d0c437d..813fe8c 100644
--- a/XP.Hardware.Detector/Config/DetectorConfig.cs
+++ b/XP.Hardware.Detector/Config/DetectorConfig.cs
@@ -34,6 +34,16 @@ namespace XP.Hardware.Detector.Config
///
public bool AutoSave { get; set; }
+ ///
+ /// 暗场校正帧数(1-128,默认 64)| Dark correction frame count (1-128, default 64)
+ ///
+ public int DarkCorrectionFrameCount { get; set; } = 64;
+
+ ///
+ /// 亮场校正帧数(1-128,默认 64)| Gain correction frame count (1-128, default 64)
+ ///
+ public int GainCorrectionFrameCount { get; set; } = 64;
+
///
/// 获取支持的 Binning 选项(显示名称 → 索引)| Get supported binning options (display name → index)
/// 子类可重写以提供不同的选项列表
diff --git a/XP.Hardware.Detector/Config/VarexDetectorConfig.cs b/XP.Hardware.Detector/Config/VarexDetectorConfig.cs
index 66230ab..f2a4c36 100644
--- a/XP.Hardware.Detector/Config/VarexDetectorConfig.cs
+++ b/XP.Hardware.Detector/Config/VarexDetectorConfig.cs
@@ -46,6 +46,7 @@ namespace XP.Hardware.Detector.Config
///
/// Varex 支持 1×1、2×2、4×4 三种 Binning | Varex supports 1×1, 2×2, 4×4 binning
+ /// 注意:索引值必须与 BinningMode 枚举对齐(0=1×1, 1=2×2, 2=4×4)
///
public override List GetSupportedBinnings()
{
@@ -53,8 +54,7 @@ namespace XP.Hardware.Detector.Config
{
new BinningOption("1×1", 0),
new BinningOption("2×2", 1),
- new BinningOption("3×3", 2),
- new BinningOption("4×4", 3),
+ new BinningOption("4×4", 2),
};
}
@@ -73,8 +73,7 @@ namespace XP.Hardware.Detector.Config
{
0 => 15m, // 1×1
1 => 30m, // 2×2
- 2 => 45m, // 3×3
- 3 => 60m, // 4×4
+ 2 => 60m, // 4×4
_ => 15m
};
@@ -86,8 +85,7 @@ namespace XP.Hardware.Detector.Config
{
0 => new BinningImageSpec(0.139, 0.139, 3072, 3060), // 1×1
1 => new BinningImageSpec(0.278, 0.278, 1536, 1530), // 2×2
- 2 => new BinningImageSpec(0.417, 0.417, 1024, 1020), // 3×3
- 3 => new BinningImageSpec(0.556, 0.556, 768, 765), // 4×4
+ 2 => new BinningImageSpec(0.556, 0.556, 768, 765), // 4×4
_ => new BinningImageSpec(0.139, 0.139, 3072, 3060)
};
}
diff --git a/XP.Hardware.Detector/Implementations/IRayDetector.cs b/XP.Hardware.Detector/Implementations/IRayDetector.cs
index 1a6c501..36fcbcd 100644
--- a/XP.Hardware.Detector/Implementations/IRayDetector.cs
+++ b/XP.Hardware.Detector/Implementations/IRayDetector.cs
@@ -111,6 +111,15 @@ namespace XP.Hardware.Detector.Implementations
throw new NotImplementedException("iRay 探测器坏像素校正尚未实现 | iRay detector bad pixel correction not implemented yet");
}
+ ///
+ /// 应用参数(内部实现)| Apply parameters (internal implementation)
+ ///
+ protected override Task ApplyParametersInternalAsync(int binningIndex, int pga, decimal frameRate, CancellationToken cancellationToken)
+ {
+ // TODO: 实现 iRay 探测器参数应用逻辑 | Implement iRay detector parameter application logic
+ throw new NotImplementedException("iRay 探测器参数应用尚未实现 | iRay detector parameter application not implemented yet");
+ }
+
///
/// 获取探测器信息 | Get detector information
///
diff --git a/XP.Hardware.Detector/Implementations/VarexDetector.cs b/XP.Hardware.Detector/Implementations/VarexDetector.cs
index 16f7664..45419d1 100644
--- a/XP.Hardware.Detector/Implementations/VarexDetector.cs
+++ b/XP.Hardware.Detector/Implementations/VarexDetector.cs
@@ -54,6 +54,7 @@ namespace XP.Hardware.Detector.Implementations
// 采集控制 | Acquisition Control
private bool _isAcquiring = false;
+ private volatile bool _isCorrecting = false; // 校正中标志,回调应忽略 | Correcting flag, callback should skip
private CancellationTokenSource _acquisitionCts;
private readonly object _acquisitionLock = new object();
@@ -61,6 +62,10 @@ namespace XP.Hardware.Detector.Implementations
private uint _cachedRows;
private uint _cachedColumns;
+ // 暗场校正时的分辨率快照(用于亮场校正时校验一致性)| Resolution snapshot at dark correction time (for gain correction validation)
+ private uint _offsetBufferRows;
+ private uint _offsetBufferColumns;
+
#endregion
#region 属性 | Properties
@@ -399,7 +404,7 @@ namespace XP.Hardware.Detector.Implementations
0, // 跳过帧数 | Skip frames
(uint)XISLApi.HIS_SEQ_CONTINUOUS,
_pOffsetBuffer, // 未校正时为 IntPtr.Zero | IntPtr.Zero before calibration
- _pGainAvgBuffer, // 未校正时为 IntPtr.Zero,校正后为增益映射 | IntPtr.Zero before calibration, gain map after
+ _pGainBuffer, // 未校正时为 IntPtr.Zero,校正后为增益数据 | IntPtr.Zero before calibration, gain data after
_pCorrList); // 未校正时为 IntPtr.Zero | IntPtr.Zero before calibration
if (result != XISLApi.HIS_RETURN.HIS_ALL_OK)
@@ -537,7 +542,7 @@ namespace XP.Hardware.Detector.Implementations
// 等待硬件完全释放采集资源,避免后续操作出现 HIS_ERROR_TIMEOUT
// Wait for hardware to fully release acquisition resources to avoid HIS_ERROR_TIMEOUT on subsequent operations
- Thread.Sleep(200);
+ Thread.Sleep(500);
_logger?.Info("采集已停止 | Acquisition stopped");
return DetectorResult.Success("采集已停止 | Acquisition stopped");
@@ -597,7 +602,7 @@ namespace XP.Hardware.Detector.Implementations
0, // 跳过帧数 | Skip frames
(uint)XISLApi.HIS_SEQ_ONE_BUFFER,
_pOffsetBuffer,
- _pGainAvgBuffer,
+ _pGainBuffer,
_pCorrList);
if (result != XISLApi.HIS_RETURN.HIS_ALL_OK)
@@ -646,6 +651,7 @@ namespace XP.Hardware.Detector.Implementations
try
{
_logger?.Info($"开始暗场校正,帧数:{frameCount} | Starting dark correction, frame count: {frameCount}");
+ _isCorrecting = true;
// 1. 获取探测器配置信息 | Get detector configuration
uint dwFrames, dwRows, dwColumns, dwDataType, dwSortFlags;
@@ -660,16 +666,41 @@ namespace XP.Hardware.Detector.Implementations
{
var errorMsg = $"获取探测器配置失败 | Failed to get detector configuration: {result}";
_logger?.Error(null, errorMsg + $",返回码:{(int)result}");
+ _isCorrecting = false;
return DetectorResult.Failure(errorMsg, null, (int)result);
}
- // 2. 分配暗场缓冲区(如果尚未分配或大小不匹配)| Allocate offset buffer if not allocated or size mismatch
+ // 2. 分配暗场缓冲区(仅在未分配或分辨率变化时重新分配)| Allocate offset buffer (only when not allocated or resolution changed)
int requiredSize = (int)(dwRows * dwColumns) * sizeof(ushort);
- if (_pOffsetBuffer == IntPtr.Zero)
+ bool needReallocOffset = _pOffsetBuffer == IntPtr.Zero
+ || _offsetBufferRows != dwRows
+ || _offsetBufferColumns != dwColumns;
+
+ if (needReallocOffset)
{
+ if (_pOffsetBuffer != IntPtr.Zero)
+ {
+ Marshal.FreeHGlobal(_pOffsetBuffer);
+ _pOffsetBuffer = IntPtr.Zero;
+ }
_pOffsetBuffer = Marshal.AllocHGlobal(requiredSize);
- _logger?.Debug($"已分配暗场缓冲区,大小:{requiredSize} 字节 | Allocated offset buffer, size: {requiredSize} bytes");
+ if (_pOffsetBuffer == IntPtr.Zero)
+ {
+ var errorMsg = $"分配暗场缓冲区失败,所需大小:{requiredSize} 字节 | Failed to allocate offset buffer, required size: {requiredSize} bytes";
+ _logger?.Error(null, errorMsg);
+ _isCorrecting = false;
+ return DetectorResult.Failure(errorMsg, null, -1);
+ }
+ _offsetBufferRows = dwRows;
+ _offsetBufferColumns = dwColumns;
+ _logger?.Debug($"已分配暗场缓冲区,大小:{requiredSize} 字节,分辨率:{dwColumns}x{dwRows} | Allocated offset buffer, size: {requiredSize} bytes, resolution: {dwColumns}x{dwRows}");
}
+ else
+ {
+ _logger?.Debug($"复用已有暗场缓冲区,分辨率:{dwColumns}x{dwRows} | Reusing existing offset buffer, resolution: {dwColumns}x{dwRows}");
+ }
+ // 零初始化缓冲区 | Zero-initialize buffer
+ unsafe { new Span((void*)_pOffsetBuffer, requiredSize).Clear(); }
// 3. 调用 XISL API 采集暗场图像 | Call XISL API to acquire offset image
_logger?.Debug($"调用 Acquisition_Acquire_OffsetImage,分辨率:{dwColumns}x{dwRows} | Calling Acquisition_Acquire_OffsetImage, resolution: {dwColumns}x{dwRows}");
@@ -680,6 +711,7 @@ namespace XP.Hardware.Detector.Implementations
{
var errorMsg = $"采集暗场图像失败 | Failed to acquire offset image: {result}";
_logger?.Error(null, errorMsg + $",返回码:{(int)result}");
+ _isCorrecting = false;
return DetectorResult.Failure(errorMsg, null, (int)result);
}
@@ -689,6 +721,7 @@ namespace XP.Hardware.Detector.Implementations
{
var errorMsg = $"等待暗场采集完成超时 | Timeout waiting for offset acquisition: {waitResult}";
_logger?.Warn(errorMsg);
+ _isCorrecting = false;
return DetectorResult.Failure(errorMsg, null, (int)waitResult);
}
@@ -720,10 +753,12 @@ namespace XP.Hardware.Detector.Implementations
PublishCorrectionCompleted(CorrectionType.Dark, correctionResult);
_logger?.Info("暗场校正完成 | Dark correction completed");
+ _isCorrecting = false;
return correctionResult;
}
catch (Exception ex)
{
+ _isCorrecting = false;
var errorMsg = $"暗场校正异常 | Dark correction exception: {ex.Message}";
_logger?.Error(ex, errorMsg);
var errorResult = DetectorResult.Failure(errorMsg, ex, -1);
@@ -743,6 +778,7 @@ namespace XP.Hardware.Detector.Implementations
try
{
_logger?.Info($"开始增益校正,帧数:{frameCount} | Starting gain correction, frame count: {frameCount}");
+ _isCorrecting = true;
// 1. 获取探测器配置信息 | Get detector configuration
uint dwFrames, dwRows, dwColumns, dwDataType, dwSortFlags;
@@ -757,27 +793,64 @@ namespace XP.Hardware.Detector.Implementations
{
var errorMsg = $"获取探测器配置失败 | Failed to get detector configuration: {result}";
_logger?.Error(null, errorMsg + $",返回码:{(int)result}");
+ _isCorrecting = false;
return DetectorResult.Failure(errorMsg, null, (int)result);
}
- // 2. 分配增益采集缓冲区(ushort,用于 Acquire_GainImage 输入)| Allocate gain acquisition buffer (ushort, for Acquire_GainImage)
- int gainAcqSize = (int)(dwRows * dwColumns) * sizeof(ushort);
+ // 2. 校验 _pOffsetBuffer 有效性(必须由暗场校正填充,且分辨率一致)
+ // Validate _pOffsetBuffer (must be filled by dark correction with matching resolution)
+ if (_pOffsetBuffer == IntPtr.Zero)
+ {
+ var errorMsg = "暗场缓冲区为空,请先执行暗场校正 | Offset buffer is null, please perform dark correction first";
+ _logger?.Error(null, errorMsg);
+ _isCorrecting = false;
+ return DetectorResult.Failure(errorMsg, null, -1);
+ }
+ if (_offsetBufferRows != dwRows || _offsetBufferColumns != dwColumns)
+ {
+ var errorMsg = $"暗场缓冲区分辨率({_offsetBufferColumns}x{_offsetBufferRows})与当前分辨率({dwColumns}x{dwRows})不匹配,请重新执行暗场校正 | " +
+ $"Offset buffer resolution ({_offsetBufferColumns}x{_offsetBufferRows}) does not match current resolution ({dwColumns}x{dwRows}), please redo dark correction";
+ _logger?.Error(null, errorMsg);
+ _isCorrecting = false;
+ return DetectorResult.Failure(errorMsg, null, -1);
+ }
+
+ // 3. 分配增益采集缓冲区(仅在大小不匹配时重新分配,避免频繁释放/分配导致指针失效)
+ // 注意:SDK 内部按 DWORD (uint, 4字节) 写入增益数据,必须用 sizeof(uint) 分配!
+ // Note: SDK writes gain data as DWORD (uint, 4 bytes), must allocate with sizeof(uint)!
+ int gainAcqSize = (int)(dwRows * dwColumns) * sizeof(uint);
if (_pGainBuffer == IntPtr.Zero)
{
_pGainBuffer = Marshal.AllocHGlobal(gainAcqSize);
- _logger?.Debug($"已分配增益采集缓冲区,大小:{gainAcqSize} 字节 | Allocated gain acquisition buffer, size: {gainAcqSize} bytes");
+ if (_pGainBuffer == IntPtr.Zero)
+ {
+ var errorMsg = $"分配增益采集缓冲区失败 | Failed to allocate gain buffer, size: {gainAcqSize}";
+ _logger?.Error(null, errorMsg);
+ _isCorrecting = false;
+ return DetectorResult.Failure(errorMsg, null, -1);
+ }
}
+ // 零初始化 | Zero-initialize
+ unsafe { new Span((void*)_pGainBuffer, gainAcqSize).Clear(); }
+ _logger?.Debug($"增益采集缓冲区就绪,大小:{gainAcqSize} 字节(uint) | Gain acquisition buffer ready, size: {gainAcqSize} bytes (uint)");
- // 分配增益映射输出缓冲区(uint/DWORD,用于 CreateGainMap 输出)| Allocate gain map output buffer (uint/DWORD, for CreateGainMap)
- int gainAvgSize = (int)(dwRows * dwColumns) * sizeof(uint);
- if (_pGainAvgBuffer == IntPtr.Zero)
+ // 4. 设置采集数据标志为 ACQ_GAIN(告知 SDK 和回调当前处于增益校正模式)
+ // Set acquisition data flag to ACQ_GAIN (inform SDK and callback that we're in gain correction mode)
+ uint acqGainFlag = 4; // ACQ_GAIN = 4
+ var setAcqResult = XISLApi.Acquisition_SetAcqData(_hAcqDesc, ref acqGainFlag);
+ if (setAcqResult != XISLApi.HIS_RETURN.HIS_ALL_OK)
{
- _pGainAvgBuffer = Marshal.AllocHGlobal(gainAvgSize);
- _logger?.Debug($"已分配增益映射缓冲区,大小:{gainAvgSize} 字节 | Allocated gain map buffer, size: {gainAvgSize} bytes");
+ _logger?.Warn($"设置 ACQ_GAIN 标志失败:{setAcqResult}(继续执行)| Failed to set ACQ_GAIN flag: {setAcqResult} (continuing)");
}
- // 3. 调用 XISL API 采集增益图像 | Call XISL API to acquire gain image
- _logger?.Debug($"调用 Acquisition_Acquire_GainImage,分辨率:{dwColumns}x{dwRows} | Calling Acquisition_Acquire_GainImage, resolution: {dwColumns}x{dwRows}");
+ // 6. 等待 SDK 内部完全释放采集资源(防止 Abort 后 SDK 仍持有旧缓冲区引用)
+ // Wait for SDK to fully release acquisition resources (prevent SDK holding stale buffer references after Abort)
+ Thread.Sleep(500);
+
+ // 6. 调用 XISL API 采集增益图像 | Call XISL API to acquire gain image
+ _logger?.Info($"调用 Acquisition_Acquire_GainImage:分辨率={dwColumns}x{dwRows},帧数={frameCount}," +
+ $"pOffsetBuffer=0x{_pOffsetBuffer:X},pGainBuffer=0x{_pGainBuffer:X} | " +
+ $"Calling Acquisition_Acquire_GainImage: resolution={dwColumns}x{dwRows}, frames={frameCount}");
result = XISLApi.Acquisition_Acquire_GainImage(
_hAcqDesc, _pOffsetBuffer, _pGainBuffer, dwRows, dwColumns, (uint)frameCount);
@@ -785,6 +858,7 @@ namespace XP.Hardware.Detector.Implementations
{
var errorMsg = $"采集增益图像失败 | Failed to acquire gain image: {result}";
_logger?.Error(null, errorMsg + $",返回码:{(int)result}");
+ _isCorrecting = false;
return DetectorResult.Failure(errorMsg, null, (int)result);
}
@@ -794,18 +868,15 @@ namespace XP.Hardware.Detector.Implementations
{
var errorMsg = $"等待增益采集完成超时 | Timeout waiting for gain acquisition: {waitResult}";
_logger?.Warn(errorMsg);
+ _isCorrecting = false;
return DetectorResult.Failure(errorMsg, null, (int)waitResult);
}
- // 4. 创建增益映射(输入为采集的 ushort 数据,输出为 DWORD 映射)| Create gain map (input: ushort data, output: DWORD map)
- _logger?.Debug("创建增益映射 | Creating gain map");
- result = XISLApi.Acquisition_CreateGainMap(_pGainBuffer, _pGainAvgBuffer, (int)(dwRows * dwColumns), frameCount);
- if (result != XISLApi.HIS_RETURN.HIS_ALL_OK)
- {
- var errorMsg = $"创建增益映射失败 | Failed to create gain map: {result}";
- _logger?.Error(null, errorMsg + $",返回码:{(int)result}");
- return DetectorResult.Failure(errorMsg, null, (int)result);
- }
+ // 4. 增益校正完成(Acquisition_Acquire_GainImage 已内部完成增益计算,pGainBuffer 可直接用于实时补偿)
+ // Gain correction done (Acquisition_Acquire_GainImage internally computes gain, pGainBuffer can be used directly for real-time compensation)
+ // 注意:旧代码不调用 CreateGainMap,SDK 内部已完成增益映射计算
+ // Note: Old code does not call CreateGainMap, SDK internally completes gain map calculation
+ _logger?.Debug("增益校正采集完成,跳过 CreateGainMap(SDK 内部已处理)| Gain correction acquisition done, skipping CreateGainMap (SDK handles internally)");
// 5. 保存增益数据到配置的存储路径 | Save gain data to configured storage path
if (_config.AutoSave && !string.IsNullOrEmpty(_config.SavePath))
@@ -817,7 +888,7 @@ namespace XP.Hardware.Detector.Implementations
int bufferSize = (int)(dwRows * dwColumns * sizeof(uint));
byte[] gainData = new byte[bufferSize];
- Marshal.Copy(_pGainAvgBuffer, gainData, 0, bufferSize);
+ Marshal.Copy(_pGainBuffer, gainData, 0, bufferSize);
System.IO.File.WriteAllBytes(gainFilePath, gainData);
_logger?.Info($"增益数据已保存到:{gainFilePath} | Gain data saved to: {gainFilePath}");
}
@@ -835,10 +906,12 @@ namespace XP.Hardware.Detector.Implementations
PublishCorrectionCompleted(CorrectionType.Gain, correctionResult);
_logger?.Info("增益校正完成 | Gain correction completed");
+ _isCorrecting = false;
return correctionResult;
}
catch (Exception ex)
{
+ _isCorrecting = false;
var errorMsg = $"增益校正异常 | Gain correction exception: {ex.Message}";
_logger?.Error(ex, errorMsg);
var errorResult = DetectorResult.Failure(errorMsg, ex, -1);
@@ -1082,10 +1155,120 @@ namespace XP.Hardware.Detector.Implementations
#endregion
+ #region 统一接口实现 | Unified Interface Implementations
+
+ ///
+ /// 应用参数内部实现 | Apply parameters internal implementation
+ ///
+ protected override Task ApplyParametersInternalAsync(int binningIndex, int pga, decimal frameRate, CancellationToken cancellationToken)
+ {
+ return Task.Run(() =>
+ {
+ try
+ {
+ _logger?.Info($"应用参数:Binning={binningIndex},PGA={pga},帧率={frameRate} | Applying parameters: Binning={binningIndex}, PGA={pga}, FrameRate={frameRate}");
+
+ // 设置 Binning 模式 | Set binning mode
+ var binningMode = (BinningMode)binningIndex;
+ var result = XISLApi.Acquisition_SetCameraBinningMode(_hAcqDesc, (uint)binningMode + 1);
+ if (result != XISLApi.HIS_RETURN.HIS_ALL_OK)
+ {
+ return DetectorResult.Failure($"设置 Binning 模式失败 | Failed to set binning mode: {result}");
+ }
+
+ // Binning 变化时失效校正数据 | Invalidate correction data on binning change
+ if (_binningMode != binningMode)
+ {
+ _logger?.Info($"Binning 模式从 {_binningMode} 变更为 {binningMode},校正数据已失效 | Binning changed, correction data invalidated");
+ InvalidateCorrectionData();
+ }
+ _binningMode = binningMode;
+
+ // 设置增益模式 | Set gain mode
+ var gainMode = (GainMode)pga;
+ result = XISLApi.Acquisition_SetCameraGain(_hAcqDesc, (uint)gainMode);
+ if (result != XISLApi.HIS_RETURN.HIS_ALL_OK)
+ {
+ return DetectorResult.Failure($"设置增益模式失败 | Failed to set gain mode: {result}");
+ }
+
+ // PGA 变化时失效校正数据 | Invalidate correction data on PGA change
+ if (_gainMode != gainMode)
+ {
+ _logger?.Info($"PGA 从 {_gainMode} 变更为 {gainMode},校正数据已失效 | PGA changed, correction data invalidated");
+ InvalidateCorrectionData();
+ }
+ _gainMode = gainMode;
+
+ // 设置曝光时间(帧率→微秒)| Set exposure time (frame rate → microseconds)
+ uint exposureUs = frameRate > 0 ? (uint)(1_000_000m / frameRate) : 66667;
+ result = XISLApi.Acquisition_SetTimerSync(_hAcqDesc, ref exposureUs);
+ if (result != XISLApi.HIS_RETURN.HIS_ALL_OK)
+ {
+ return DetectorResult.Failure($"设置曝光时间失败 | Failed to set exposure time: {result}");
+ }
+ _exposureTime = exposureUs;
+
+ _logger?.Info("参数应用成功 | Parameters applied successfully");
+ return DetectorResult.Success("参数应用成功 | Parameters applied successfully");
+ }
+ catch (Exception ex)
+ {
+ return DetectorResult.Failure($"应用参数异常 | Apply parameters exception: {ex.Message}", ex);
+ }
+ }, cancellationToken);
+ }
+
+ ///
+ /// 获取 Varex 校正能力描述 | Get Varex correction capabilities
+ ///
+ public override CorrectionCapabilities GetCorrectionCapabilities()
+ {
+ return new CorrectionCapabilities
+ {
+ RequiresStopBeforeCorrection = true,
+ RequiresParameterApplyBeforeDark = true,
+ AutoBadPixelAfterGain = true,
+ PostStopDelayMs = 500,
+ DarkFrameCount = _config.DarkCorrectionFrameCount,
+ GainFrameCount = _config.GainCorrectionFrameCount,
+ FrameCountMin = 1,
+ FrameCountMax = 128
+ };
+ }
+
+ ///
+ /// 失效校正数据(释放校正缓冲区)| Invalidate correction data (free correction buffers)
+ ///
+ public override void InvalidateCorrectionData()
+ {
+ if (_pOffsetBuffer != IntPtr.Zero)
+ {
+ Marshal.FreeHGlobal(_pOffsetBuffer);
+ _pOffsetBuffer = IntPtr.Zero;
+ _offsetBufferRows = 0;
+ _offsetBufferColumns = 0;
+ }
+ if (_pGainBuffer != IntPtr.Zero)
+ {
+ Marshal.FreeHGlobal(_pGainBuffer);
+ _pGainBuffer = IntPtr.Zero;
+ }
+ if (_pCorrList != IntPtr.Zero)
+ {
+ Marshal.FreeHGlobal(_pCorrList);
+ _pCorrList = IntPtr.Zero;
+ }
+ _logger?.Debug("校正数据已失效并释放 | Correction data invalidated and freed");
+ }
+
+ #endregion
+
#region IVarexDetector 接口实现(占位符)| IVarexDetector Interface Implementations (Placeholders)
///
/// 设置 Binning 模式 | Set binning mode
+ /// Binning 变化后校正数据失效,需要重新校正 | Correction data becomes invalid after binning change, recalibration needed
///
public Task SetBinningModeAsync(BinningMode mode)
{
@@ -1096,6 +1279,31 @@ namespace XP.Hardware.Detector.Implementations
var result = XISLApi.Acquisition_SetCameraBinningMode(_hAcqDesc, (uint)mode + 1);
if (result == XISLApi.HIS_RETURN.HIS_ALL_OK)
{
+ // Binning 变化后,旧的校正缓冲区大小不匹配新分辨率,必须释放
+ // After binning change, old correction buffers don't match new resolution, must free them
+ if (_binningMode != mode)
+ {
+ _logger?.Info($"Binning 模式从 {_binningMode} 变更为 {mode},校正数据已失效 | Binning mode changed from {_binningMode} to {mode}, correction data invalidated");
+
+ if (_pOffsetBuffer != IntPtr.Zero)
+ {
+ Marshal.FreeHGlobal(_pOffsetBuffer);
+ _pOffsetBuffer = IntPtr.Zero;
+ _offsetBufferRows = 0;
+ _offsetBufferColumns = 0;
+ }
+ if (_pGainBuffer != IntPtr.Zero)
+ {
+ Marshal.FreeHGlobal(_pGainBuffer);
+ _pGainBuffer = IntPtr.Zero;
+ }
+ if (_pCorrList != IntPtr.Zero)
+ {
+ Marshal.FreeHGlobal(_pCorrList);
+ _pCorrList = IntPtr.Zero;
+ }
+ }
+
_binningMode = mode;
return DetectorResult.Success($"Binning 模式已设置为 {mode} | Binning mode set to {mode}");
}
@@ -1118,6 +1326,8 @@ namespace XP.Hardware.Detector.Implementations
///
/// 设置增益模式 | Set gain mode
+ /// PGA 变化后校正数据在物理意义上失效(噪声特性不同),需要重新校正
+ /// After PGA change, correction data is physically invalid (different noise characteristics), recalibration needed
///
public Task SetGainModeAsync(GainMode mode)
{
@@ -1128,6 +1338,28 @@ namespace XP.Hardware.Detector.Implementations
var result = XISLApi.Acquisition_SetCameraGain(_hAcqDesc, (uint)mode);
if (result == XISLApi.HIS_RETURN.HIS_ALL_OK)
{
+ // PGA 变化后校正数据失效(不会崩溃,但补偿结果不正确)
+ // Correction data invalidated after PGA change (won't crash, but compensation results are incorrect)
+ if (_gainMode != mode && _pOffsetBuffer != IntPtr.Zero)
+ {
+ _logger?.Info($"PGA 从 {_gainMode} 变更为 {mode},校正数据已失效 | PGA changed from {_gainMode} to {mode}, correction data invalidated");
+ Marshal.FreeHGlobal(_pOffsetBuffer);
+ _pOffsetBuffer = IntPtr.Zero;
+ _offsetBufferRows = 0;
+ _offsetBufferColumns = 0;
+
+ if (_pGainBuffer != IntPtr.Zero)
+ {
+ Marshal.FreeHGlobal(_pGainBuffer);
+ _pGainBuffer = IntPtr.Zero;
+ }
+ if (_pCorrList != IntPtr.Zero)
+ {
+ Marshal.FreeHGlobal(_pCorrList);
+ _pCorrList = IntPtr.Zero;
+ }
+ }
+
_gainMode = mode;
return DetectorResult.Success($"增益模式已设置为 {mode} | Gain mode set to {mode}");
}
@@ -1224,6 +1456,9 @@ namespace XP.Hardware.Detector.Implementations
{
try
{
+ // 校正期间跳过帧回调(校正使用独立缓冲区,_pAcqBuffer 可能无效)| Skip during correction (correction uses separate buffers, _pAcqBuffer may be invalid)
+ if (_isCorrecting) return;
+
uint dwRows = _cachedRows;
uint dwColumns = _cachedColumns;
int imageSize = (int)(dwRows * dwColumns);
diff --git a/XP.Hardware.Detector/Resources/Resources.en-US.resx b/XP.Hardware.Detector/Resources/Resources.en-US.resx
index 1b4c802..84c9ea8 100644
--- a/XP.Hardware.Detector/Resources/Resources.en-US.resx
+++ b/XP.Hardware.Detector/Resources/Resources.en-US.resx
@@ -145,4 +145,64 @@
Status:
+
+ Dark Correction Confirmation
+
+
+ Please confirm the X-ray source is OFF before starting dark correction.
+
+
+ Dark Correction
+
+
+ Light Correction Confirmation
+
+
+ Please confirm the object has been removed from the detector field of view.
+
+
+ Please confirm the X-ray source is ON and stable before starting light correction.
+
+
+ Light Correction
+
+
+ Bad Pixel Correction
+
+
+ Stopping acquisition...
+
+
+ Applying parameters...
+
+
+ Acquiring dark field data (64 frames), please wait...
+
+
+ Dark correction completed
+
+
+ Acquiring light field data (64 frames), please wait...
+
+
+ Executing bad pixel correction...
+
+
+ Light and bad pixel correction completed
+
+
+ Light correction done, bad pixel correction failed
+
+
+ Detecting bad pixels...
+
+
+ Bad pixel correction completed
+
+
+ Parameter Mismatch
+
+
+ Current parameters differ from dark correction. Please redo dark correction.
+
diff --git a/XP.Hardware.Detector/Resources/Resources.resx b/XP.Hardware.Detector/Resources/Resources.resx
index 9faad9f..39096cf 100644
--- a/XP.Hardware.Detector/Resources/Resources.resx
+++ b/XP.Hardware.Detector/Resources/Resources.resx
@@ -169,4 +169,84 @@
状态:
DetectorImageWindow - 探测器状态标签 | Detector status label
+
+ 暗场校正确认
+ 暗场校正确认对话框标题 | Dark correction confirmation dialog title
+
+
+ 请确认射线源已关闭,即将开始暗场校正。
+ 暗场校正确认对话框消息 | Dark correction confirmation dialog message
+
+
+ 暗场校正
+ 暗场校正进度窗口标题 | Dark correction progress window title
+
+
+ 亮场校正确认
+ 亮场校正确认对话框标题 | Light correction confirmation dialog title
+
+
+ 请确认物体已移出探测器视野。
+ 亮场校正物体确认消息 | Light correction object removal confirmation message
+
+
+ 请确认射线源已开启且稳定,即将开始亮场校正。
+ 亮场校正射线源确认消息 | Light correction ray source confirmation message
+
+
+ 亮场校正
+ 亮场校正进度窗口标题 | Light correction progress window title
+
+
+ 坏像素校正
+ 坏像素校正进度窗口标题 | Bad pixel correction progress window title
+
+
+ 正在停止采集...
+ 进度提示:停止采集 | Progress: stopping acquisition
+
+
+ 正在应用参数...
+ 进度提示:应用参数 | Progress: applying parameters
+
+
+ 正在采集暗场数据(64帧),请等待...
+ 进度提示:采集暗场数据 | Progress: acquiring dark field data
+
+
+ 暗场校正完成
+ 进度提示:暗场校正完成 | Progress: dark correction done
+
+
+ 正在采集亮场数据(64帧),请等待...
+ 进度提示:采集亮场数据 | Progress: acquiring light field data
+
+
+ 正在执行坏像素校正...
+ 进度提示:坏像素校正中 | Progress: bad pixel correcting
+
+
+ 亮场校正及坏像素校正完成
+ 进度提示:亮场和坏像素校正完成 | Progress: light and bad pixel correction done
+
+
+ 亮场校正完成,但坏像素校正失败
+ 进度提示:亮场完成但坏像素失败 | Progress: light done but bad pixel failed
+
+
+ 正在检测坏像素...
+ 进度提示:检测坏像素 | Progress: detecting bad pixels
+
+
+ 坏像素校正完成
+ 进度提示:坏像素校正完成 | Progress: bad pixel correction done
+
+
+ 参数不一致
+ 参数不一致对话框标题 | Parameter mismatch dialog title
+
+
+ 当前参数与暗场校正时不一致,请重新进行暗场校正。
+ 参数不一致对话框消息 | Parameter mismatch dialog message
+
diff --git a/XP.Hardware.Detector/Resources/Resources.zh-CN.resx b/XP.Hardware.Detector/Resources/Resources.zh-CN.resx
index d01462d..b3a2744 100644
--- a/XP.Hardware.Detector/Resources/Resources.zh-CN.resx
+++ b/XP.Hardware.Detector/Resources/Resources.zh-CN.resx
@@ -145,4 +145,64 @@
状态:
+
+ 暗场校正确认
+
+
+ 请确认射线源已关闭,即将开始暗场校正。
+
+
+ 暗场校正
+
+
+ 亮场校正确认
+
+
+ 请确认物体已移出探测器视野。
+
+
+ 请确认射线源已开启且稳定,即将开始亮场校正。
+
+
+ 亮场校正
+
+
+ 坏像素校正
+
+
+ 正在停止采集...
+
+
+ 正在应用参数...
+
+
+ 正在采集暗场数据(64帧),请等待...
+
+
+ 暗场校正完成
+
+
+ 正在采集亮场数据(64帧),请等待...
+
+
+ 正在执行坏像素校正...
+
+
+ 亮场校正及坏像素校正完成
+
+
+ 亮场校正完成,但坏像素校正失败
+
+
+ 正在检测坏像素...
+
+
+ 坏像素校正完成
+
+
+ 参数不一致
+
+
+ 当前参数与暗场校正时不一致,请重新进行暗场校正。
+
diff --git a/XP.Hardware.Detector/Resources/Resources.zh-TW.resx b/XP.Hardware.Detector/Resources/Resources.zh-TW.resx
index 378001b..4c6cf06 100644
--- a/XP.Hardware.Detector/Resources/Resources.zh-TW.resx
+++ b/XP.Hardware.Detector/Resources/Resources.zh-TW.resx
@@ -145,4 +145,64 @@
狀態:
+
+ 暗場校正確認
+
+
+ 請確認射線源已關閉,即將開始暗場校正。
+
+
+ 暗場校正
+
+
+ 亮場校正確認
+
+
+ 請確認物體已移出探測器視野。
+
+
+ 請確認射線源已開啟且穩定,即將開始亮場校正。
+
+
+ 亮場校正
+
+
+ 壞像素校正
+
+
+ 正在停止採集...
+
+
+ 正在套用參數...
+
+
+ 正在採集暗場資料(64幀),請等待...
+
+
+ 暗場校正完成
+
+
+ 正在採集亮場資料(64幀),請等待...
+
+
+ 正在執行壞像素校正...
+
+
+ 亮場校正及壞像素校正完成
+
+
+ 亮場校正完成,但壞像素校正失敗
+
+
+ 正在檢測壞像素...
+
+
+ 壞像素校正完成
+
+
+ 參數不一致
+
+
+ 當前參數與暗場校正時不一致,請重新進行暗場校正。
+
diff --git a/XP.Hardware.Detector/Services/DetectorService.cs b/XP.Hardware.Detector/Services/DetectorService.cs
index 715d20f..ccc4fc5 100644
--- a/XP.Hardware.Detector/Services/DetectorService.cs
+++ b/XP.Hardware.Detector/Services/DetectorService.cs
@@ -62,7 +62,11 @@ namespace XP.Hardware.Detector.Services
{
lock (_lock)
{
- return _detector != null && _detector.Status != DetectorStatus.Uninitialized;
+ if (_detector == null) return false;
+ var status = _detector.Status;
+ return status == DetectorStatus.Ready
+ || status == DetectorStatus.Acquiring
+ || status == DetectorStatus.Correcting;
}
}
}
@@ -309,12 +313,39 @@ namespace XP.Hardware.Detector.Services
{
_logger?.Info("服务层:执行暗场校正,帧数:{FrameCount} | Service layer: Executing dark correction, frame count: {FrameCount}", frameCount);
var detector = GetDetectorOrThrow();
+
+ // 如果正在采集,先停止(XISL SDK 不允许采集中执行校正)| Stop acquisition first if running
+ bool wasAcquiring = detector.Status == DetectorStatus.Acquiring;
+ if (wasAcquiring)
+ {
+ _logger?.Info("探测器正在采集,先停止采集再执行暗场校正 | Detector is acquiring, stopping before dark correction");
+ var stopResult = await detector.StopAcquisitionAsync(cancellationToken);
+ if (!stopResult.IsSuccess)
+ {
+ _lastError = stopResult;
+ _logger?.Error(stopResult.Exception, "停止采集失败,无法执行暗场校正:{Message} | Failed to stop acquisition, cannot perform dark correction: {Message}", stopResult.ErrorMessage);
+ return DetectorResult.Failure($"停止采集失败,无法执行暗场校正 | Failed to stop acquisition: {stopResult.ErrorMessage}");
+ }
+ }
+
var result = await detector.DarkCorrectionAsync(frameCount, cancellationToken);
if (!result.IsSuccess)
{
_lastError = result;
_logger?.Error(result.Exception, "暗场校正失败:{Message} | Dark correction failed: {Message}", result.ErrorMessage);
}
+
+ // 如果之前在采集,恢复采集 | Resume acquisition if it was running before
+ if (wasAcquiring)
+ {
+ _logger?.Info("暗场校正完成,恢复连续采集 | Dark correction done, resuming continuous acquisition");
+ var startResult = await detector.StartAcquisitionAsync(cancellationToken);
+ if (!startResult.IsSuccess)
+ {
+ _logger?.Warn("恢复采集失败:{Message} | Failed to resume acquisition: {Message}", startResult.ErrorMessage);
+ }
+ }
+
return result;
}
catch (Exception ex)
@@ -339,12 +370,39 @@ namespace XP.Hardware.Detector.Services
{
_logger?.Info("服务层:执行亮场校正,帧数:{FrameCount} | Service layer: Executing gain correction, frame count: {FrameCount}", frameCount);
var detector = GetDetectorOrThrow();
+
+ // 如果正在采集,先停止(XISL SDK 不允许采集中执行校正)| Stop acquisition first if running
+ bool wasAcquiring = detector.Status == DetectorStatus.Acquiring;
+ if (wasAcquiring)
+ {
+ _logger?.Info("探测器正在采集,先停止采集再执行亮场校正 | Detector is acquiring, stopping before gain correction");
+ var stopResult = await detector.StopAcquisitionAsync(cancellationToken);
+ if (!stopResult.IsSuccess)
+ {
+ _lastError = stopResult;
+ _logger?.Error(stopResult.Exception, "停止采集失败,无法执行亮场校正:{Message} | Failed to stop acquisition, cannot perform gain correction: {Message}", stopResult.ErrorMessage);
+ return DetectorResult.Failure($"停止采集失败,无法执行亮场校正 | Failed to stop acquisition: {stopResult.ErrorMessage}");
+ }
+ }
+
var result = await detector.GainCorrectionAsync(frameCount, cancellationToken);
if (!result.IsSuccess)
{
_lastError = result;
_logger?.Error(result.Exception, "亮场校正失败:{Message} | Gain correction failed: {Message}", result.ErrorMessage);
}
+
+ // 如果之前在采集,恢复采集 | Resume acquisition if it was running before
+ if (wasAcquiring)
+ {
+ _logger?.Info("亮场校正完成,恢复连续采集 | Gain correction done, resuming continuous acquisition");
+ var startResult = await detector.StartAcquisitionAsync(cancellationToken);
+ if (!startResult.IsSuccess)
+ {
+ _logger?.Warn("恢复采集失败:{Message} | Failed to resume acquisition: {Message}", startResult.ErrorMessage);
+ }
+ }
+
return result;
}
catch (Exception ex)
@@ -368,12 +426,39 @@ namespace XP.Hardware.Detector.Services
{
_logger?.Info("服务层:执行坏像素校正 | Service layer: Executing bad pixel correction");
var detector = GetDetectorOrThrow();
+
+ // 如果正在采集,先停止(XISL SDK 不允许采集中执行校正)| Stop acquisition first if running
+ bool wasAcquiring = detector.Status == DetectorStatus.Acquiring;
+ if (wasAcquiring)
+ {
+ _logger?.Info("探测器正在采集,先停止采集再执行坏像素校正 | Detector is acquiring, stopping before bad pixel correction");
+ var stopResult = await detector.StopAcquisitionAsync(cancellationToken);
+ if (!stopResult.IsSuccess)
+ {
+ _lastError = stopResult;
+ _logger?.Error(stopResult.Exception, "停止采集失败,无法执行坏像素校正:{Message} | Failed to stop acquisition, cannot perform bad pixel correction: {Message}", stopResult.ErrorMessage);
+ return DetectorResult.Failure($"停止采集失败,无法执行坏像素校正 | Failed to stop acquisition: {stopResult.ErrorMessage}");
+ }
+ }
+
var result = await detector.BadPixelCorrectionAsync(cancellationToken);
if (!result.IsSuccess)
{
_lastError = result;
_logger?.Error(result.Exception, "坏像素校正失败:{Message} | Bad pixel correction failed: {Message}", result.ErrorMessage);
}
+
+ // 如果之前在采集,恢复采集 | Resume acquisition if it was running before
+ if (wasAcquiring)
+ {
+ _logger?.Info("坏像素校正完成,恢复连续采集 | Bad pixel correction done, resuming continuous acquisition");
+ var startResult = await detector.StartAcquisitionAsync(cancellationToken);
+ if (!startResult.IsSuccess)
+ {
+ _logger?.Warn("恢复采集失败:{Message} | Failed to resume acquisition: {Message}", startResult.ErrorMessage);
+ }
+ }
+
return result;
}
catch (Exception ex)
@@ -428,39 +513,44 @@ namespace XP.Hardware.Detector.Services
var detector = GetDetectorOrThrow();
- // 通过 IVarexDetector 接口下发参数 | Apply parameters via IVarexDetector interface
- if (detector is IVarexDetector varexDetector)
+ // 如果正在采集,先停止 | Stop acquisition first if running
+ bool wasAcquiring = detector.Status == DetectorStatus.Acquiring;
+ if (wasAcquiring)
{
- // 设置 Binning | Set binning
- var binningResult = await varexDetector.SetBinningModeAsync((BinningMode)binningIndex);
- if (!binningResult.IsSuccess)
+ _logger?.Info("探测器正在采集,先停止采集再应用参数 | Detector is acquiring, stopping before applying parameters");
+ var stopResult = await detector.StopAcquisitionAsync(cancellationToken);
+ if (!stopResult.IsSuccess)
{
- _lastError = binningResult;
- return binningResult;
+ _lastError = stopResult;
+ _logger?.Error(stopResult.Exception, "停止采集失败,无法应用参数:{Message} | Failed to stop acquisition, cannot apply parameters: {Message}", stopResult.ErrorMessage);
+ return DetectorResult.Failure($"停止采集失败,无法应用参数 | Failed to stop acquisition, cannot apply parameters: {stopResult.ErrorMessage}");
}
-
- // 设置增益(PGA)| Set gain (PGA)
- var gainResult = await varexDetector.SetGainModeAsync((GainMode)pga);
- if (!gainResult.IsSuccess)
- {
- _lastError = gainResult;
- return gainResult;
- }
-
- // 设置曝光时间(帧率→微秒:1000*1000/帧率)| Set exposure time (frame rate → microseconds)
- uint exposureUs = frameRate > 0 ? (uint)(1_000_000m / frameRate) : 66667;
- var exposureResult = await varexDetector.SetExposureTimeAsync(exposureUs);
- if (!exposureResult.IsSuccess)
- {
- _lastError = exposureResult;
- return exposureResult;
- }
-
- _logger?.Info("参数应用成功 | Parameters applied successfully");
- return DetectorResult.Success("参数应用成功 | Parameters applied successfully");
}
- return DetectorResult.Failure("当前探测器不支持参数下发 | Current detector does not support parameter application");
+ // 通过统一接口下发参数(不依赖具体探测器类型)| Apply parameters via unified interface (no dependency on specific detector type)
+ var result = await detector.ApplyParametersAsync(binningIndex, pga, frameRate, cancellationToken);
+ if (!result.IsSuccess)
+ {
+ _lastError = result;
+ _logger?.Error(result.Exception, "应用参数失败:{Message} | Apply parameters failed: {Message}", result.ErrorMessage);
+ }
+ else
+ {
+ _logger?.Info("参数应用成功 | Parameters applied successfully");
+ }
+
+ // 如果之前在采集,恢复采集 | Resume acquisition if it was running before
+ if (wasAcquiring)
+ {
+ _logger?.Info("参数应用完成,恢复连续采集 | Parameters applied, resuming continuous acquisition");
+ var startResult = await detector.StartAcquisitionAsync(cancellationToken);
+ if (!startResult.IsSuccess)
+ {
+ _logger?.Warn("恢复采集失败:{Message}(参数已成功应用)| Failed to resume acquisition: {Message} (parameters were applied successfully)", startResult.ErrorMessage);
+ }
+ }
+
+ return result;
}
catch (Exception ex)
{
@@ -534,6 +624,29 @@ namespace XP.Hardware.Detector.Services
return null;
}
+ ///
+ /// 获取当前探测器的校正能力描述 | Get correction capabilities of current detector
+ /// 未初始化时返回基于配置文件的默认值
+ ///
+ public CorrectionCapabilities GetCorrectionCapabilities()
+ {
+ lock (_lock)
+ {
+ if (_detector != null)
+ {
+ return _detector.GetCorrectionCapabilities();
+ }
+ }
+
+ // 未初始化时从配置文件构建默认值 | Build default from config when not initialized
+ var config = GetCurrentConfig();
+ return new CorrectionCapabilities
+ {
+ DarkFrameCount = config?.DarkCorrectionFrameCount ?? 64,
+ GainFrameCount = config?.GainCorrectionFrameCount ?? 64
+ };
+ }
+
///
/// 获取探测器实例或抛出异常 | Get detector instance or throw exception
///
diff --git a/XP.Hardware.Detector/Services/IDetectorService.cs b/XP.Hardware.Detector/Services/IDetectorService.cs
index 17c864f..d563d61 100644
--- a/XP.Hardware.Detector/Services/IDetectorService.cs
+++ b/XP.Hardware.Detector/Services/IDetectorService.cs
@@ -130,5 +130,11 @@ namespace XP.Hardware.Detector.Services
///
/// 探测器配置,未初始化时返回 null | Detector config, null if not initialized
DetectorConfig GetCurrentConfig();
+
+ ///
+ /// 获取当前探测器的校正能力描述 | Get correction capabilities of current detector
+ ///
+ /// 校正能力描述,未初始化时返回默认值 | Correction capabilities, default if not initialized
+ CorrectionCapabilities GetCorrectionCapabilities();
}
}
diff --git a/XP.Hardware.Detector/ViewModels/DetectorConfigViewModel.cs b/XP.Hardware.Detector/ViewModels/DetectorConfigViewModel.cs
index 39bcb26..5ac2c47 100644
--- a/XP.Hardware.Detector/ViewModels/DetectorConfigViewModel.cs
+++ b/XP.Hardware.Detector/ViewModels/DetectorConfigViewModel.cs
@@ -1,11 +1,14 @@
-using System;
+using System;
using System.Collections.ObjectModel;
using System.Linq;
+using System.Windows;
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using XP.Common.GeneralForm.Views;
+using XP.Common.Localization;
using XP.Common.Logging.Interfaces;
+using XP.Hardware.Detector.Abstractions;
using XP.Hardware.Detector.Abstractions.Events;
using XP.Hardware.Detector.Abstractions.Enums;
using XP.Hardware.Detector.Config;
@@ -252,6 +255,9 @@ namespace XP.Hardware.Detector.ViewModels
// 从配置加载 UI 选项 | Load UI options from config
LoadOptionsFromConfig();
+
+ // 初始化连接状态(ViewModel 可能在探测器已连接后才创建)| Initialize connection status (ViewModel may be created after detector is already connected)
+ IsConnected = _detectorService.IsConnected;
}
#endregion
@@ -409,23 +415,16 @@ namespace XP.Hardware.Detector.ViewModels
}
///
- /// 探测器状态变更回调,用于扫描期间自动锁定/解锁参数 | Detector status changed callback
+ /// 探测器状态变更回调,用于同步连接状态 | Detector status changed callback for connection status sync
+ /// 注意:参数锁定由外部扫描流程通过 LockParameters()/UnlockParameters() 显式控制,
+ /// 普通预览采集不应锁定配置页面按钮
///
private void OnDetectorStatusChanged(DetectorStatus status)
{
- // 同步连接状态:非 Uninitialized 即视为已连接 | Sync connection status: connected if not Uninitialized
- IsConnected = status != DetectorStatus.Uninitialized;
-
- if (status == DetectorStatus.Acquiring)
- {
- IsParametersLocked = true;
- _logger?.Debug("探测器进入采集状态,参数已自动锁定 | Detector acquiring, parameters auto-locked");
- }
- else if (status == DetectorStatus.Ready)
- {
- IsParametersLocked = false;
- _logger?.Debug("探测器就绪,参数已自动解锁 | Detector ready, parameters auto-unlocked");
- }
+ // 同步连接状态:只有 Ready、Acquiring、Correcting 视为已连接 | Only Ready, Acquiring, Correcting are considered connected
+ IsConnected = status == DetectorStatus.Ready
+ || status == DetectorStatus.Acquiring
+ || status == DetectorStatus.Correcting;
}
///
@@ -479,28 +478,60 @@ namespace XP.Hardware.Detector.ViewModels
RaisePropertyChanged(nameof(IsParametersEditable));
}
+ ///
+ /// 获取校正帧数(从配置加载)| Get correction frame count (loaded from config)
+ ///
+ private CorrectionCapabilities GetCorrectionCaps() => _detectorService.GetCorrectionCapabilities();
+
///
/// 执行暗场校正 | Execute dark correction
///
private async void ExecuteDarkCorrectionAsync()
{
+ // 弹出用户确认对话框 | Show user confirmation dialog
+ var confirmResult = MessageBox.Show(
+ LocalizationHelper.Get("Detector_DarkCorrection_ConfirmMessage"),
+ LocalizationHelper.Get("Detector_DarkCorrection_ConfirmTitle"),
+ MessageBoxButton.OKCancel,
+ MessageBoxImage.Question);
+
+ if (confirmResult != MessageBoxResult.OK)
+ {
+ _logger?.Info("用户取消暗场校正 | User cancelled dark correction");
+ return;
+ }
+
var binningName = _selectedBinningIndex < BinningItems.Count ? BinningItems[_selectedBinningIndex].DisplayName : "?";
- _logger?.Info("开始暗场校正,Binning={Binning},PGA={PGA},帧率={FrameRate} | Starting dark correction",
- binningName, _selectedPga, _frameRate);
+ _logger?.Info("开始暗场校正,Binning={Binning},PGA={PGA},帧率={FrameRate},校正帧数={FrameCount} | Starting dark correction",
+ binningName, _selectedPga, _frameRate, GetCorrectionCaps().DarkFrameCount);
// 显示进度条窗口 | Show progress window
var progressWindow = new ProgressWindow(
- title: "暗场校正 | Dark Correction",
- message: "正在应用参数... | Applying parameters...",
+ title: LocalizationHelper.Get("Detector_DarkCorrection_Title"),
+ message: LocalizationHelper.Get("Detector_Progress_ApplyingParameters"),
isCancelable: false,
logger: _logger);
progressWindow.Show();
IsBusy = true;
+ bool wasAcquiring = false;
try
{
- // 1. 应用参数到硬件 | Apply parameters to hardware
- progressWindow.UpdateProgress("正在应用参数... | Applying parameters...", 10);
+ // 1. 如果正在采集,先停止(后续应用参数和校正都需要探测器空闲)| Stop acquisition if running
+ wasAcquiring = _detectorService.Status == DetectorStatus.Acquiring;
+ if (wasAcquiring)
+ {
+ progressWindow.UpdateProgress(LocalizationHelper.Get("Detector_Progress_StoppingAcquisition"), 5);
+ var stopResult = await _detectorService.StopAcquisitionAsync();
+ if (!stopResult.IsSuccess)
+ {
+ _logger?.Error(stopResult.Exception, "停止采集失败,暗场校正中止:{Message} | Stop acquisition failed, dark correction aborted: {Message}", stopResult.ErrorMessage);
+ return;
+ }
+ }
+
+ // 2. 应用参数到硬件 | Apply parameters to hardware
+ progressWindow.UpdateProgress(LocalizationHelper.Get("Detector_Progress_ApplyingParameters"), 10);
var applyResult = await _detectorService.ApplyParametersAsync(_selectedBinningIndex, _selectedPga, _frameRate);
if (!applyResult.IsSuccess)
{
@@ -508,13 +539,13 @@ namespace XP.Hardware.Detector.ViewModels
return;
}
- // 2. 执行暗场校正 | Execute dark correction
- progressWindow.UpdateProgress("正在采集暗场数据... | Acquiring dark field data...", 30);
- var result = await _detectorService.DarkCorrectionAsync(_avgFrames);
+ // 3. 执行暗场校正 | Execute dark correction
+ progressWindow.UpdateProgress(LocalizationHelper.Get("Detector_Progress_AcquiringDarkData"), 30);
+ var result = await _detectorService.DarkCorrectionAsync(GetCorrectionCaps().DarkFrameCount);
if (result.IsSuccess)
{
- progressWindow.UpdateProgress("暗场校正完成 | Dark correction completed", 100);
+ progressWindow.UpdateProgress(LocalizationHelper.Get("Detector_Progress_DarkCorrectionDone"), 100);
RecordDarkCorrectionParameters();
DarkCorrectionDone = true;
_logger?.Info("暗场校正完成 | Dark correction completed");
@@ -531,6 +562,12 @@ namespace XP.Hardware.Detector.ViewModels
}
finally
{
+ // 如果之前在采集,恢复连续采集 | Resume acquisition if it was running before
+ if (wasAcquiring)
+ {
+ _logger?.Info("暗场校正流程结束,恢复连续采集 | Dark correction flow done, resuming continuous acquisition");
+ await _detectorService.StartAcquisitionAsync();
+ }
IsBusy = false;
progressWindow.Close();
}
@@ -545,32 +582,92 @@ namespace XP.Hardware.Detector.ViewModels
if (!ValidateCorrectionParametersConsistency())
{
_logger?.Warn("暗场校正与亮场校正参数不一致,请重新进行暗场校正 | Parameter mismatch, please redo dark correction");
+ MessageBox.Show(
+ LocalizationHelper.Get("Detector_ParameterMismatch_Message"),
+ LocalizationHelper.Get("Detector_ParameterMismatch_Title"),
+ MessageBoxButton.OK,
+ MessageBoxImage.Warning);
DarkCorrectionDone = false;
return;
}
+ // 弹出确认对话框:物体移出视野 | Confirm object removed from field of view
+ var confirmObjectResult = MessageBox.Show(
+ LocalizationHelper.Get("Detector_LightCorrection_ConfirmObjectMessage"),
+ LocalizationHelper.Get("Detector_LightCorrection_ConfirmObjectTitle"),
+ MessageBoxButton.OKCancel,
+ MessageBoxImage.Question);
+
+ if (confirmObjectResult != MessageBoxResult.OK)
+ {
+ _logger?.Info("用户取消亮场校正(物体确认)| User cancelled light correction (object confirmation)");
+ return;
+ }
+
+ // 弹出确认对话框:射线源已开启 | Confirm X-ray source is ON
+ var confirmRayResult = MessageBox.Show(
+ LocalizationHelper.Get("Detector_LightCorrection_ConfirmRayMessage"),
+ LocalizationHelper.Get("Detector_LightCorrection_ConfirmObjectTitle"),
+ MessageBoxButton.OKCancel,
+ MessageBoxImage.Question);
+
+ if (confirmRayResult != MessageBoxResult.OK)
+ {
+ _logger?.Info("用户取消亮场校正(射线源确认)| User cancelled light correction (ray source confirmation)");
+ return;
+ }
+
var binningName = _selectedBinningIndex < BinningItems.Count ? BinningItems[_selectedBinningIndex].DisplayName : "?";
- _logger?.Info("开始亮场校正,Binning={Binning},PGA={PGA},帧率={FrameRate} | Starting light correction",
- binningName, _selectedPga, _frameRate);
+ _logger?.Info("开始亮场校正,Binning={Binning},PGA={PGA},帧率={FrameRate},校正帧数={FrameCount} | Starting light correction",
+ binningName, _selectedPga, _frameRate, GetCorrectionCaps().GainFrameCount);
// 显示进度条窗口 | Show progress window
var progressWindow = new ProgressWindow(
- title: "亮场校正 | Light Correction",
- message: "正在采集亮场数据... | Acquiring light field data...",
+ title: LocalizationHelper.Get("Detector_LightCorrection_Title"),
+ message: LocalizationHelper.Get("Detector_Progress_AcquiringLightData"),
isCancelable: false,
logger: _logger);
progressWindow.Show();
IsBusy = true;
+ bool wasAcquiring = false;
try
{
- progressWindow.UpdateProgress("正在采集亮场数据... | Acquiring light field data...", 30);
- var result = await _detectorService.GainCorrectionAsync(_avgFrames);
+ // 0. 如果正在采集,先停止 | Stop acquisition if running
+ wasAcquiring = _detectorService.Status == DetectorStatus.Acquiring;
+ if (wasAcquiring)
+ {
+ progressWindow.UpdateProgress(LocalizationHelper.Get("Detector_Progress_StoppingAcquisition"), 5);
+ var stopResult = await _detectorService.StopAcquisitionAsync();
+ if (!stopResult.IsSuccess)
+ {
+ _logger?.Error(stopResult.Exception, "停止采集失败,亮场校正中止:{Message} | Stop acquisition failed, light correction aborted: {Message}", stopResult.ErrorMessage);
+ return;
+ }
+ }
+
+ // 1. 执行亮场校正 | Execute light correction
+ progressWindow.UpdateProgress(LocalizationHelper.Get("Detector_Progress_AcquiringLightData"), 20);
+ var result = await _detectorService.GainCorrectionAsync(GetCorrectionCaps().GainFrameCount);
if (result.IsSuccess)
{
- progressWindow.UpdateProgress("亮场校正完成 | Light correction completed", 100);
- _logger?.Info("亮场校正完成 | Light correction completed");
+ _logger?.Info("亮场校正完成,开始执行坏像素校正 | Light correction completed, starting bad pixel correction");
+
+ // 2. 亮场校正完成后自动执行坏像素校正 | Auto execute bad pixel correction after light correction
+ progressWindow.UpdateProgress(LocalizationHelper.Get("Detector_Progress_BadPixelCorrecting"), 70);
+ var badPixelResult = await _detectorService.BadPixelCorrectionAsync();
+
+ if (badPixelResult.IsSuccess)
+ {
+ progressWindow.UpdateProgress(LocalizationHelper.Get("Detector_Progress_LightAndBadPixelDone"), 100);
+ _logger?.Info("亮场校正及坏像素校正全部完成 | Light correction and bad pixel correction all completed");
+ }
+ else
+ {
+ progressWindow.UpdateProgress(LocalizationHelper.Get("Detector_Progress_LightDoneBadPixelFailed"), 90);
+ _logger?.Error(badPixelResult.Exception, "坏像素校正失败:{Message} | Bad pixel correction failed: {Message}", badPixelResult.ErrorMessage);
+ }
}
else
{
@@ -583,6 +680,12 @@ namespace XP.Hardware.Detector.ViewModels
}
finally
{
+ // 如果之前在采集,恢复连续采集 | Resume acquisition if it was running before
+ if (wasAcquiring)
+ {
+ _logger?.Info("亮场校正流程结束,恢复连续采集 | Light correction flow done, resuming continuous acquisition");
+ await _detectorService.StartAcquisitionAsync();
+ }
IsBusy = false;
progressWindow.Close();
}
@@ -597,8 +700,8 @@ namespace XP.Hardware.Detector.ViewModels
// 显示进度条窗口 | Show progress window
var progressWindow = new ProgressWindow(
- title: "坏像素校正 | Bad Pixel Correction",
- message: "正在检测坏像素... | Detecting bad pixels...",
+ title: LocalizationHelper.Get("Detector_BadPixelCorrection_Title"),
+ message: LocalizationHelper.Get("Detector_Progress_DetectingBadPixels"),
isCancelable: false,
logger: _logger);
progressWindow.Show();
@@ -606,12 +709,12 @@ namespace XP.Hardware.Detector.ViewModels
IsBusy = true;
try
{
- progressWindow.UpdateProgress("正在检测坏像素... | Detecting bad pixels...", 30);
+ progressWindow.UpdateProgress(LocalizationHelper.Get("Detector_Progress_DetectingBadPixels"), 30);
var result = await _detectorService.BadPixelCorrectionAsync();
if (result.IsSuccess)
{
- progressWindow.UpdateProgress("坏像素校正完成 | Bad pixel correction completed", 100);
+ progressWindow.UpdateProgress(LocalizationHelper.Get("Detector_Progress_BadPixelDone"), 100);
_logger?.Info("坏像素校正完成 | Bad pixel correction completed");
}
else
diff --git a/XP.Hardware.Detector/Views/DetectorConfigView.xaml b/XP.Hardware.Detector/Views/DetectorConfigView.xaml
index 0c7acd7..2a975a1 100644
--- a/XP.Hardware.Detector/Views/DetectorConfigView.xaml
+++ b/XP.Hardware.Detector/Views/DetectorConfigView.xaml
@@ -6,12 +6,13 @@
xmlns:prism="http://prismlibrary.com/"
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
xmlns:loc="clr-namespace:XP.Common.Localization.Extensions;assembly=XP.Common"
+ xmlns:hist="clr-namespace:XP.Common.Controls.ImageHistogram;assembly=XP.Common"
mc:Ignorable="d"
- d:DesignWidth="420" d:DesignHeight="210"
+ d:DesignWidth="420" d:DesignHeight="360"
prism:ViewModelLocator.AutoWireViewModel="True"
Background="White">
-
+
@@ -22,6 +23,8 @@
+
+
@@ -94,6 +97,7 @@
@@ -112,6 +116,7 @@
@@ -126,6 +131,7 @@
@@ -136,5 +142,13 @@
+
+
+
diff --git a/XP.Hardware.Detector/Views/DetectorConfigView.xaml.cs b/XP.Hardware.Detector/Views/DetectorConfigView.xaml.cs
index 5485bc3..50d4eef 100644
--- a/XP.Hardware.Detector/Views/DetectorConfigView.xaml.cs
+++ b/XP.Hardware.Detector/Views/DetectorConfigView.xaml.cs
@@ -1,15 +1,82 @@
+using System;
+using System.Windows;
using System.Windows.Controls;
+using Prism.Events;
+using Prism.Ioc;
+using XP.Hardware.Detector.Abstractions;
+using XP.Hardware.Detector.Abstractions.Events;
namespace XP.Hardware.Detector.Views
{
///
/// 面阵探测器配置视图 | Area detector configuration view
+ /// 订阅探测器图像采集事件,将图像数据传递给直方图控件
///
public partial class DetectorConfigView : UserControl
{
+ private IEventAggregator _eventAggregator;
+ private SubscriptionToken _imageSubscriptionToken;
+
public DetectorConfigView()
{
InitializeComponent();
+ Loaded += OnLoaded;
+ Unloaded += OnUnloaded;
+ }
+
+ ///
+ /// 加载时订阅图像采集事件 | Subscribe to image captured event on load
+ ///
+ private void OnLoaded(object sender, RoutedEventArgs e)
+ {
+ try
+ {
+ _eventAggregator = ContainerLocator.Current?.Resolve();
+ if (_eventAggregator != null)
+ {
+ _imageSubscriptionToken = _eventAggregator.GetEvent()
+ .Subscribe(OnImageCaptured, ThreadOption.BackgroundThread);
+ }
+ }
+ catch
+ {
+ // 事件聚合器不可用时静默降级 | Silent degradation when event aggregator unavailable
+ }
+ }
+
+ ///
+ /// 卸载时取消订阅 | Unsubscribe on unload
+ ///
+ private void OnUnloaded(object sender, RoutedEventArgs e)
+ {
+ if (_eventAggregator != null && _imageSubscriptionToken != null)
+ {
+ _eventAggregator.GetEvent().Unsubscribe(_imageSubscriptionToken);
+ _imageSubscriptionToken = null;
+ }
+ }
+
+ ///
+ /// 图像采集回调:将 ushort[] 转为 byte[] 后传给直方图控件 | Image captured callback
+ ///
+ private void OnImageCaptured(ImageCapturedEventArgs args)
+ {
+ if (args?.ImageData == null || args.Width == 0 || args.Height == 0)
+ return;
+
+ try
+ {
+ // 将 ushort[] 转换为 little-endian byte[] | Convert ushort[] to little-endian byte[]
+ var rawBytes = new byte[args.ImageData.Length * 2];
+ Buffer.BlockCopy(args.ImageData, 0, rawBytes, 0, rawBytes.Length);
+
+ // 调用直方图控件更新(控件内部支持从非 UI 线程调用)| Update histogram control (supports non-UI thread calls)
+ HistogramControl?.UpdateImage(rawBytes, (int)args.Width, (int)args.Height, 16);
+ }
+ catch
+ {
+ // 异常不影响主流程 | Exception does not affect main flow
+ }
}
}
}
diff --git a/XP.Hardware.Detector/Views/DetectorConfigWindow.xaml b/XP.Hardware.Detector/Views/DetectorConfigWindow.xaml
index 500ec99..b2830d7 100644
--- a/XP.Hardware.Detector/Views/DetectorConfigWindow.xaml
+++ b/XP.Hardware.Detector/Views/DetectorConfigWindow.xaml
@@ -4,8 +4,8 @@
xmlns:loc="clr-namespace:XP.Common.Localization.Extensions;assembly=XP.Common"
xmlns:detectorViews="clr-namespace:XP.Hardware.Detector.Views"
Title="{loc:Localization Detector_ConfigWindowTitle}"
- Height="230" Width="400"
- MinHeight="230" MinWidth="360"
+ Height="450" Width="400"
+ MinHeight="400" MinWidth="360"
WindowStartupLocation="CenterOwner"
ResizeMode="CanResize">
diff --git a/XP.Hardware.Detector/bin/Debug/net8.0-windows7.0/XP.Hardware.Detector.deps.json b/XP.Hardware.Detector/bin/Debug/net8.0-windows7.0/XP.Hardware.Detector.deps.json
index 6861e9d..fb5a616 100644
--- a/XP.Hardware.Detector/bin/Debug/net8.0-windows7.0/XP.Hardware.Detector.deps.json
+++ b/XP.Hardware.Detector/bin/Debug/net8.0-windows7.0/XP.Hardware.Detector.deps.json
@@ -565,6 +565,14 @@
}
}
},
+ "SixLabors.ImageSharp/3.1.12": {
+ "runtime": {
+ "lib/net6.0/SixLabors.ImageSharp.dll": {
+ "assemblyVersion": "3.0.0.0",
+ "fileVersion": "3.1.12.0"
+ }
+ }
+ },
"SQLitePCLRaw.bundle_e_sqlite3/2.1.11": {
"dependencies": {
"SQLitePCLRaw.lib.e_sqlite3": "2.1.11",
@@ -1702,6 +1710,7 @@
"Serilog.Settings.Configuration": "10.0.0",
"Serilog.Sinks.Console": "6.1.1",
"Serilog.Sinks.File": "7.0.0",
+ "SixLabors.ImageSharp": "3.1.12",
"Telerik.UI.for.Wpf.NetCore.Xaml": "2024.1.408"
},
"runtime": {
@@ -2157,6 +2166,13 @@
"path": "sharpdx.mathematics/4.2.0",
"hashPath": "sharpdx.mathematics.4.2.0.nupkg.sha512"
},
+ "SixLabors.ImageSharp/3.1.12": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-iAg6zifihXEFS/t7fiHhZBGAdCp3FavsF4i2ZIDp0JfeYeDVzvmlbY1CNhhIKimaIzrzSi5M/NBFcWvZT2rB/A==",
+ "path": "sixlabors.imagesharp/3.1.12",
+ "hashPath": "sixlabors.imagesharp.3.1.12.nupkg.sha512"
+ },
"SQLitePCLRaw.bundle_e_sqlite3/2.1.11": {
"type": "package",
"serviceable": true,
diff --git a/XP.Hardware.MotionControl/ViewModels/AxisControlViewModel.cs b/XP.Hardware.MotionControl/ViewModels/AxisControlViewModel.cs
index 72df2e7..189a06e 100644
--- a/XP.Hardware.MotionControl/ViewModels/AxisControlViewModel.cs
+++ b/XP.Hardware.MotionControl/ViewModels/AxisControlViewModel.cs
@@ -4,7 +4,7 @@ using System.Windows;
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
-using XP.Common.Controls;
+using XP.Common.Controls.Joystick;
using XP.Common.Logging.Interfaces;
using XP.Hardware.MotionControl.Abstractions;
using XP.Hardware.MotionControl.Abstractions.Enums;
diff --git a/XP.Hardware.MotionControl/Views/AxisControlView.xaml b/XP.Hardware.MotionControl/Views/AxisControlView.xaml
index eeefc55..2d21b8e 100644
--- a/XP.Hardware.MotionControl/Views/AxisControlView.xaml
+++ b/XP.Hardware.MotionControl/Views/AxisControlView.xaml
@@ -6,7 +6,7 @@
xmlns:loc="clr-namespace:XP.Common.Localization.Extensions;assembly=XP.Common"
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
xmlns:prism="http://prismlibrary.com/"
- xmlns:controls="clr-namespace:XP.Common.Controls;assembly=XP.Common"
+ xmlns:controls="clr-namespace:XP.Common.Controls.Joystick;assembly=XP.Common"
prism:ViewModelLocator.AutoWireViewModel="True"
mc:Ignorable="d"
MinWidth="350"
diff --git a/XP.Hardware.MotionControl/Views/AxisControlView.xaml.cs b/XP.Hardware.MotionControl/Views/AxisControlView.xaml.cs
index b8fdcf3..d6b4ab8 100644
--- a/XP.Hardware.MotionControl/Views/AxisControlView.xaml.cs
+++ b/XP.Hardware.MotionControl/Views/AxisControlView.xaml.cs
@@ -2,7 +2,7 @@ using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
-using XP.Common.Controls;
+using XP.Common.Controls.Joystick;
using XP.Hardware.MotionControl.ViewModels;
namespace XP.Hardware.MotionControl.Views
diff --git a/XP.Hardware.PLC.Sentry/App.xaml.cs b/XP.Hardware.PLC.Sentry/App.xaml.cs
index 7cc5f17..8f99954 100644
--- a/XP.Hardware.PLC.Sentry/App.xaml.cs
+++ b/XP.Hardware.PLC.Sentry/App.xaml.cs
@@ -5,7 +5,7 @@ using Serilog;
using System;
using System.Resources;
using System.Windows;
-using XP.Common.Configs;
+using XP.Common.Logging.Configs;
using XP.Common.Localization;
using XP.Common.Localization.Interfaces;
using XP.Common.Logging;
@@ -118,7 +118,7 @@ namespace XP.Hardware.PLC.Sentry
};
// 加载并初始化 Serilog | Load and initialize Serilog
- SerilogConfig serilogConfig = XP.Common.Helpers.ConfigLoader.LoadSerilogConfig();
+ SerilogConfig serilogConfig = XP.Common.Logging.Configs.ConfigLoader.LoadSerilogConfig();
SerilogInitializer.Initialize(serilogConfig);
_logger.Information("PLC Sentry Monitor 启动开始 | PLC Sentry Monitor startup started");
diff --git a/XP.ImageProcessing.Core/Alignment/AlignmentRecipe.cs b/XP.ImageProcessing.Core/Alignment/AlignmentRecipe.cs
new file mode 100644
index 0000000..ff33afb
--- /dev/null
+++ b/XP.ImageProcessing.Core/Alignment/AlignmentRecipe.cs
@@ -0,0 +1,21 @@
+namespace XP.ImageProcessing.Core.Alignment;
+
+///
+/// 示教阶段保存的对齐配方:基准位姿 + 示教图像素坐标下的检测 ROI。
+///
+public sealed class AlignmentRecipe
+{
+ /// 示教图上的基准位姿(建议示教图自匹配得到,或与模板 ROI 中心 + 角度 0 一致)。
+ public Pose2D ReferencePose { get; set; }
+
+ /// 示教图上的 ROI 多边形顶点(至少 3 点)。
+ public List RoiPoints { get; set; } = new();
+
+ /// 将示教 ROI 变换到运行图坐标。
+ public Point2D[] TransformRoi(Pose2D measuredPose)
+ => RoiAlignment.TransformPolygon(RoiPoints, ReferencePose, measuredPose);
+
+ /// 变换为整型顶点,供检测算子注入。
+ public (int X, int Y)[] TransformRoiToInt(Pose2D measuredPose)
+ => RoiAlignment.TransformPolygonToInt(RoiPoints, ReferencePose, measuredPose);
+}
diff --git a/XP.ImageProcessing.Core/Alignment/Point2D.cs b/XP.ImageProcessing.Core/Alignment/Point2D.cs
new file mode 100644
index 0000000..26d1bb1
--- /dev/null
+++ b/XP.ImageProcessing.Core/Alignment/Point2D.cs
@@ -0,0 +1,4 @@
+namespace XP.ImageProcessing.Core.Alignment;
+
+/// 图像像素平面上的点(与 WPF/Emgu 解耦)。
+public readonly record struct Point2D(double X, double Y);
diff --git a/XP.ImageProcessing.Core/Alignment/Pose2D.cs b/XP.ImageProcessing.Core/Alignment/Pose2D.cs
new file mode 100644
index 0000000..5a80ae0
--- /dev/null
+++ b/XP.ImageProcessing.Core/Alignment/Pose2D.cs
@@ -0,0 +1,18 @@
+namespace XP.ImageProcessing.Core.Alignment;
+
+///
+/// 图像平面上的刚体位姿:绕 / 旋转 (度)。
+/// 与 TemplateMatchLib 的 CenterX/CenterY/Angle 约定一致。
+///
+public readonly record struct Pose2D(double X, double Y, double AngleDegrees)
+{
+ /// 示教/标准姿态(角度 0,中心由调用方指定)。
+ public static Pose2D IdentityAt(double x, double y) => new(x, y, 0);
+
+ ///
+ /// 由模板学习 ROI 矩形估计示教位姿中心(pattern 几何中心),角度默认 0。
+ /// 更稳妥的做法是在示教图上自匹配得到 。
+ ///
+ public static Pose2D FromTemplateRoiCenter(int roiX, int roiY, int roiWidth, int roiHeight, double angleDegrees = 0)
+ => new(roiX + roiWidth * 0.5, roiY + roiHeight * 0.5, angleDegrees);
+}
diff --git a/XP.ImageProcessing.Core/Alignment/RoiAlignment.cs b/XP.ImageProcessing.Core/Alignment/RoiAlignment.cs
new file mode 100644
index 0000000..2770573
--- /dev/null
+++ b/XP.ImageProcessing.Core/Alignment/RoiAlignment.cs
@@ -0,0 +1,96 @@
+namespace XP.ImageProcessing.Core.Alignment;
+
+///
+/// 将示教图(模板坐标系)上的 ROI 点变换到运行图坐标。
+/// 旋转中心与模板匹配一致:绕 /(pattern 中心)。
+///
+public static class RoiAlignment
+{
+ ///
+ /// 刚体变换:示教图点 → 运行图点。
+ /// :示教图上的基准位姿;
+ /// :运行图匹配位姿。
+ ///
+ public static Point2D TransformPoint(Point2D point, Pose2D reference, Pose2D measured)
+ {
+ double dTheta = DegreesToRadians(measured.AngleDegrees - reference.AngleDegrees);
+ double cos = Math.Cos(dTheta);
+ double sin = Math.Sin(dTheta);
+ double dx = point.X - reference.X;
+ double dy = point.Y - reference.Y;
+ return new Point2D(
+ measured.X + cos * dx - sin * dy,
+ measured.Y + sin * dx + cos * dy);
+ }
+
+ public static Point2D TransformPoint(double x, double y, Pose2D reference, Pose2D measured)
+ => TransformPoint(new Point2D(x, y), reference, measured);
+
+ /// 变换多边形顶点(顺序不变)。
+ public static Point2D[] TransformPolygon(IReadOnlyList templatePoints, Pose2D reference, Pose2D measured)
+ {
+ if (templatePoints == null || templatePoints.Count == 0)
+ return Array.Empty();
+
+ var result = new Point2D[templatePoints.Count];
+ for (int i = 0; i < templatePoints.Count; i++)
+ result[i] = TransformPoint(templatePoints[i], reference, measured);
+ return result;
+ }
+
+ /// 变换后四舍五入为整型顶点,供 BGA 等算子 PolyX/PolyY 注入。
+ public static (int X, int Y)[] TransformPolygonToInt(
+ IReadOnlyList templatePoints,
+ Pose2D reference,
+ Pose2D measured)
+ {
+ var transformed = TransformPolygon(templatePoints, reference, measured);
+ var result = new (int X, int Y)[transformed.Length];
+ for (int i = 0; i < transformed.Length; i++)
+ {
+ result[i] = (
+ (int)Math.Round(transformed[i].X, MidpointRounding.AwayFromZero),
+ (int)Math.Round(transformed[i].Y, MidpointRounding.AwayFromZero));
+ }
+
+ return result;
+ }
+
+ /// 变换轴对齐矩形为四个顶点(左上、右上、右下、左下)。
+ public static Point2D[] TransformRect(double x, double y, double width, double height, Pose2D reference, Pose2D measured)
+ {
+ var corners = new[]
+ {
+ new Point2D(x, y),
+ new Point2D(x + width, y),
+ new Point2D(x + width, y + height),
+ new Point2D(x, y + height)
+ };
+ return TransformPolygon(corners, reference, measured);
+ }
+
+ ///
+ /// 校验匹配结果四角质心是否与 Center 一致(用于确认库的中心/角度约定)。
+ ///
+ public static bool IsMatchCenterConsistentWithCorners(
+ double centerX,
+ double centerY,
+ double ltX,
+ double ltY,
+ double rtX,
+ double rtY,
+ double rbX,
+ double rbY,
+ double lbX,
+ double lbY,
+ double tolerancePixels = 1.0)
+ {
+ double cx = (ltX + rtX + rbX + lbX) * 0.25;
+ double cy = (ltY + rtY + rbY + lbY) * 0.25;
+ double dx = cx - centerX;
+ double dy = cy - centerY;
+ return dx * dx + dy * dy <= tolerancePixels * tolerancePixels;
+ }
+
+ private static double DegreesToRadians(double degrees) => degrees * (Math.PI / 180.0);
+}
diff --git a/XP.ImageProcessing.Processors/定位识别/TemplateMatchAlignmentExtensions.cs b/XP.ImageProcessing.Processors/定位识别/TemplateMatchAlignmentExtensions.cs
new file mode 100644
index 0000000..873650f
--- /dev/null
+++ b/XP.ImageProcessing.Processors/定位识别/TemplateMatchAlignmentExtensions.cs
@@ -0,0 +1,27 @@
+using XP.ImageProcessing.Core.Alignment;
+
+namespace XP.ImageProcessing.Processors;
+
+///
+/// 将 TemplateMatchLib 匹配结果转换为对齐工具使用的 。
+///
+public static class TemplateMatchAlignmentExtensions
+{
+ public static Pose2D ToPose2D(this TM_Result result)
+ => new(result.CenterX, result.CenterY, result.Angle);
+
+ /// 四角质心是否与 Center 一致(容差默认 1 像素)。
+ public static bool IsCenterConsistentWithCorners(this TM_Result result, double tolerancePixels = 1.0)
+ => RoiAlignment.IsMatchCenterConsistentWithCorners(
+ result.CenterX,
+ result.CenterY,
+ result.LtX,
+ result.LtY,
+ result.RtX,
+ result.RtY,
+ result.RbX,
+ result.RbY,
+ result.LbX,
+ result.LbY,
+ tolerancePixels);
+}
diff --git a/XP.ImageProcessing.Processors/定位识别/TemplateMatchNative.cs b/XP.ImageProcessing.Processors/定位识别/TemplateMatchNative.cs
index 35e0364..043315d 100644
--- a/XP.ImageProcessing.Processors/定位识别/TemplateMatchNative.cs
+++ b/XP.ImageProcessing.Processors/定位识别/TemplateMatchNative.cs
@@ -30,6 +30,12 @@ public struct TM_Params
/// 是否亚像素估计 (1=是, 0=否)
public int UseSubPixel;
+ ///
+ /// 开启亚像素且角度容差绝对值超过该值时,托管封装会在调用原生库前关闭亚像素,
+ /// 以避免部分版本 TemplateMatchLib 在 Debug 下出现 vector 越界断言。
+ ///
+ public const double SubPixelAngleSafetyLimitDegrees = 90.0;
+
///
/// 创建默认参数
///
@@ -168,9 +174,33 @@ public sealed class TemplateMatcherHandle : IDisposable
public TM_Result[] Match(IntPtr srcData, int srcWidth, int srcHeight, int srcStep, TM_Params param)
{
ThrowIfDisposed();
- var results = new TM_Result[param.MaxCount];
+
+ // 与库默认一致并对齐已知崩溃组合:Debug 下亚像素 + 大角度容差易触发 vector 越界断言;
+ // 金字塔最小面积过小也可能与内部层级假设不一致。
+ int tw = 0, th = 0, _pyramidLayers = 0;
+ _ = GetTemplateInfo(out tw, out th, out _pyramidLayers);
+ int templatePixels = Math.Max(0, tw) * Math.Max(0, th);
+
+ int maxCount = Math.Clamp(param.MaxCount, 1, 100);
+ int minReduce = (int)Math.Clamp(param.MinReduceArea, 64, 4096);
+ if (templatePixels >= 512)
+ minReduce = Math.Max(256, minReduce);
+ if (templatePixels > 0)
+ minReduce = Math.Min(minReduce, templatePixels);
+ minReduce = Math.Max(64, minReduce);
+
+ int useSubPixel = param.UseSubPixel;
+ if (useSubPixel != 0 && Math.Abs(param.ToleranceAngle) > TM_Params.SubPixelAngleSafetyLimitDegrees)
+ useSubPixel = 0;
+
+ var p = param;
+ p.MaxCount = maxCount;
+ p.MinReduceArea = minReduce;
+ p.UseSubPixel = useSubPixel;
+
+ var results = new TM_Result[p.MaxCount];
int count = TemplateMatchNative.TM_Match(_handle, srcData, srcWidth, srcHeight, srcStep,
- ref param, results, param.MaxCount);
+ ref p, results, p.MaxCount);
if (count <= 0)
return Array.Empty();
diff --git a/XP.ImageProcessing.Processors/检测分析/BackgroundDefectAnalyzer.cs b/XP.ImageProcessing.Processors/检测分析/BackgroundDefectAnalyzer.cs
new file mode 100644
index 0000000..36a1776
--- /dev/null
+++ b/XP.ImageProcessing.Processors/检测分析/BackgroundDefectAnalyzer.cs
@@ -0,0 +1,146 @@
+// ============================================================================
+// Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved.
+// 文件名: BackgroundDefectAnalyzer.cs
+// 描述: 白底/黑底对比下的缺陷斑点分析(仅 ROI 内计算,不接入流水线算子)
+// 算法: Otsu 二值化 → 形态学开运算 → 外轮廓 → 面积过滤 → 轮廓顶点最远弦(物理长度与历史等效直径同一标定:mm/px → μm)
+// 作者: 李伟 wei.lw.li@hexagon.com
+// ============================================================================
+
+using System.Collections.Generic;
+using System.Drawing;
+using Emgu.CV;
+using Emgu.CV.CvEnum;
+using Emgu.CV.Structure;
+using Emgu.CV.Util;
+
+namespace XP.ImageProcessing.Processors;
+
+///
+/// 底色类型:决定 Otsu 后保留的前景是暗区还是亮区。
+///
+public enum BackgroundDefectMode
+{
+ /// 白底图像上检测偏暗区域(BinaryInv + Otsu)。
+ WhiteBackground,
+
+ /// 黑底图像上检测偏亮区域(Binary + Otsu)。
+ BlackBackground
+}
+
+///
+/// 单个斑点:轮廓顶点相对于 ROI 左上角; 为轮廓顶点间欧氏距离最大值(微米)。
+///
+public sealed class BackgroundDefectBlob
+{
+ public Point[] ContourInRoi { get; init; } = Array.Empty();
+ public double MaxChordMicrometers { get; init; }
+ public Point MaxChordEndAInRoi { get; init; }
+ public Point MaxChordEndBInRoi { get; init; }
+}
+
+///
+/// 在灰度 ROI 上执行底色缺陷斑点检测。调用方负责构造与释放 。
+///
+public static class BackgroundDefectAnalyzer
+{
+ ///
+ /// 在 ROI 灰度图上检测斑点。
+ ///
+ /// ROI 灰度图(单通道 8 位)。
+ /// 白底或黑底模式。
+ /// 轮廓最小面积(像素²),小于此值的轮廓丢弃。
+ /// 像素物理尺寸(毫米/像素),用于轮廓最远弦换算为微米。
+ /// 形态学开运算核尺寸(奇数,默认 3)。
+ public static List DetectBlobs(
+ Image roiGray,
+ BackgroundDefectMode mode,
+ int minAreaPixels = 50,
+ double mmPerPixel = 0.139,
+ int morphKernelSize = 3)
+ {
+ if (roiGray == null) throw new ArgumentNullException(nameof(roiGray));
+ if (minAreaPixels < 1) minAreaPixels = 1;
+ if (mmPerPixel <= 0) mmPerPixel = 0.139;
+ if (morphKernelSize < 1) morphKernelSize = 1;
+ if ((morphKernelSize & 1) == 0) morphKernelSize++;
+
+ int rw = roiGray.Width;
+ int rh = roiGray.Height;
+ if (rw < 1 || rh < 1) return new List();
+
+ var thresholdType = mode == BackgroundDefectMode.WhiteBackground
+ ? ThresholdType.BinaryInv | ThresholdType.Otsu
+ : ThresholdType.Binary | ThresholdType.Otsu;
+
+ using var binary = new Image(rw, rh);
+ CvInvoke.Threshold(roiGray, binary, 0, 255, thresholdType);
+
+ using var kernel = CvInvoke.GetStructuringElement(
+ ElementShape.Ellipse, new Size(morphKernelSize, morphKernelSize), new Point(-1, -1));
+ CvInvoke.MorphologyEx(binary, binary, MorphOp.Open, kernel, new Point(-1, -1), 1,
+ BorderType.Default, new MCvScalar(0));
+
+ using var contours = new VectorOfVectorOfPoint();
+ using var hierarchy = new Mat();
+ CvInvoke.FindContours(binary, contours, hierarchy, RetrType.External, ChainApproxMethod.ChainApproxSimple);
+
+ var result = new List();
+
+ for (int i = 0; i < contours.Size; i++)
+ {
+ double area = CvInvoke.ContourArea(contours[i]);
+ if (area < minAreaPixels) continue;
+
+ int n = contours[i].Size;
+ if (n < 2) continue;
+
+ var pts = new Point[n];
+ for (int j = 0; j < n; j++)
+ pts[j] = contours[i][j];
+
+ MaxChordInPixelSpace(pts, out double maxChordPx, out Point pa, out Point pb);
+ double maxChordMicrometers = maxChordPx * mmPerPixel * 1000.0;
+
+ result.Add(new BackgroundDefectBlob
+ {
+ ContourInRoi = pts,
+ MaxChordMicrometers = maxChordMicrometers,
+ MaxChordEndAInRoi = pa,
+ MaxChordEndBInRoi = pb
+ });
+ }
+
+ return result;
+ }
+
+ /// 轮廓顶点集合上的最远点对(欧氏距离,像素)。
+ private static void MaxChordInPixelSpace(Point[] pts, out double maxChordPx, out Point a, out Point b)
+ {
+ maxChordPx = 0;
+ a = pts[0];
+ b = pts.Length > 1 ? pts[1] : pts[0];
+ long bestSq = 0;
+ int bestI = 0, bestJ = 1;
+ int n = pts.Length;
+ for (int i = 0; i < n; i++)
+ {
+ int iX = pts[i].X, iY = pts[i].Y;
+ for (int j = i + 1; j < n; j++)
+ {
+ long dx = iX - pts[j].X;
+ long dy = iY - pts[j].Y;
+ long sq = dx * dx + dy * dy;
+ if (sq > bestSq)
+ {
+ bestSq = sq;
+ bestI = i;
+ bestJ = j;
+ }
+ }
+ }
+
+ a = pts[bestI];
+ b = pts[bestJ];
+ maxChordPx = Math.Sqrt(bestSq);
+ }
+}
diff --git a/XP.ImageProcessing.Processors/检测分析/EdgeCircleFitProcessor.cs b/XP.ImageProcessing.Processors/检测分析/EdgeCircleFitProcessor.cs
new file mode 100644
index 0000000..2386c81
--- /dev/null
+++ b/XP.ImageProcessing.Processors/检测分析/EdgeCircleFitProcessor.cs
@@ -0,0 +1,582 @@
+// ============================================================================
+// Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved.
+// 文件名: EdgeCircleFitProcessor.cs
+// 描述: 边缘查找拟合圆算子
+// 功能:
+// - 沿预估圆周等角度放置卡尺,每个卡尺沿径向搜索边缘点
+// - 支持亚像素精度(抛物线插值)
+// - 支持边缘极性选择和搜索方向(向内/向外)
+// - 使用最小二乘或RANSAC算法拟合圆
+// - 输出拟合圆参数、边缘点、内点/外点、拟合误差
+// 算法: 卡尺边缘检测 + 最小二乘/RANSAC圆拟合
+// 作者: 李伟 wei.lw.li@hexagon.com
+// ============================================================================
+
+using Emgu.CV;
+using Emgu.CV.Structure;
+using XP.ImageProcessing.Core;
+using Serilog;
+using System.Drawing;
+
+namespace XP.ImageProcessing.Processors;
+
+///
+/// 圆拟合结果
+///
+public class CircleFitResult
+{
+ /// 拟合是否成功
+ public bool Success { get; set; }
+
+ /// 拟合圆心X
+ public double CenterX { get; set; }
+
+ /// 拟合圆心Y
+ public double CenterY { get; set; }
+
+ /// 拟合半径
+ public double Radius { get; set; }
+
+ /// 所有检测到的边缘点
+ public List EdgePoints { get; set; } = new();
+
+ /// 内点列表
+ public List Inliers { get; set; } = new();
+
+ /// 外点列表
+ public List Outliers { get; set; } = new();
+
+ /// 平均拟合误差(像素)
+ public double FitError { get; set; }
+
+ /// 有效边缘点数
+ public int EdgePointCount { get; set; }
+}
+
+///
+/// 边缘查找拟合圆算子 - 沿预估圆周放置卡尺检测边缘点并拟合圆
+///
+public class EdgeCircleFitProcessor : ImageProcessorBase
+{
+ private static readonly ILogger _logger = Log.ForContext();
+ private static readonly Random _random = new();
+
+ public EdgeCircleFitProcessor()
+ {
+ Name = LocalizationHelper.GetString("EdgeCircleFitProcessor_Name");
+ Description = LocalizationHelper.GetString("EdgeCircleFitProcessor_Description");
+ }
+
+ protected override void InitializeParameters()
+ {
+ // ── 预估圆参数(由UI交互注入,不可见) ──
+ Parameters.Add("CenterX", new ProcessorParameter(
+ "CenterX", "CenterX", typeof(int), 200, null, null, "") { IsVisible = false });
+ Parameters.Add("CenterY", new ProcessorParameter(
+ "CenterY", "CenterY", typeof(int), 200, null, null, "") { IsVisible = false });
+ Parameters.Add("Radius", new ProcessorParameter(
+ "Radius", "Radius", typeof(int), 100, null, null, "") { IsVisible = false });
+
+ // ── 卡尺参数 ──
+ Parameters.Add("CaliperCount", new ProcessorParameter(
+ "CaliperCount",
+ LocalizationHelper.GetString("EdgeCircleFitProcessor_CaliperCount"),
+ typeof(int), 36, 3, 360,
+ LocalizationHelper.GetString("EdgeCircleFitProcessor_CaliperCount_Desc")));
+
+ Parameters.Add("CaliperWidth", new ProcessorParameter(
+ "CaliperWidth",
+ LocalizationHelper.GetString("EdgeCircleFitProcessor_CaliperWidth"),
+ typeof(int), 40, 5, 500,
+ LocalizationHelper.GetString("EdgeCircleFitProcessor_CaliperWidth_Desc")));
+
+ // ── 边缘检测参数 ──
+ Parameters.Add("EdgePolarity", new ProcessorParameter(
+ "EdgePolarity",
+ LocalizationHelper.GetString("EdgeCircleFitProcessor_EdgePolarity"),
+ typeof(string), "Both", null, null,
+ LocalizationHelper.GetString("EdgeCircleFitProcessor_EdgePolarity_Desc"),
+ new string[] { "BrightToDark", "DarkToBright", "Both" }));
+
+ Parameters.Add("EdgeThreshold", new ProcessorParameter(
+ "EdgeThreshold",
+ LocalizationHelper.GetString("EdgeCircleFitProcessor_EdgeThreshold"),
+ typeof(int), 20, 1, 255,
+ LocalizationHelper.GetString("EdgeCircleFitProcessor_EdgeThreshold_Desc")));
+
+ Parameters.Add("Sigma", new ProcessorParameter(
+ "Sigma",
+ LocalizationHelper.GetString("EdgeCircleFitProcessor_Sigma"),
+ typeof(double), 1.0, 0.1, 10.0,
+ LocalizationHelper.GetString("EdgeCircleFitProcessor_Sigma_Desc")));
+
+ Parameters.Add("SearchDirection", new ProcessorParameter(
+ "SearchDirection",
+ LocalizationHelper.GetString("EdgeCircleFitProcessor_SearchDirection"),
+ typeof(string), "Both", null, null,
+ LocalizationHelper.GetString("EdgeCircleFitProcessor_SearchDirection_Desc"),
+ new string[] { "Inward", "Outward", "Both" }));
+
+ // ── 拟合参数 ──
+ Parameters.Add("FitMethod", new ProcessorParameter(
+ "FitMethod",
+ LocalizationHelper.GetString("EdgeCircleFitProcessor_FitMethod"),
+ typeof(string), "RANSAC", null, null,
+ LocalizationHelper.GetString("EdgeCircleFitProcessor_FitMethod_Desc"),
+ new string[] { "LeastSquares", "RANSAC" }));
+
+ Parameters.Add("RansacThreshold", new ProcessorParameter(
+ "RansacThreshold",
+ LocalizationHelper.GetString("EdgeCircleFitProcessor_RansacThreshold"),
+ typeof(double), 2.0, 0.5, 20.0,
+ LocalizationHelper.GetString("EdgeCircleFitProcessor_RansacThreshold_Desc")));
+
+ Parameters.Add("Thickness", new ProcessorParameter(
+ "Thickness",
+ LocalizationHelper.GetString("EdgeCircleFitProcessor_Thickness"),
+ typeof(int), 2, 1, 10,
+ LocalizationHelper.GetString("EdgeCircleFitProcessor_Thickness_Desc")));
+ }
+
+ public override Image Process(Image inputImage)
+ {
+ int centerX = GetParameter("CenterX");
+ int centerY = GetParameter("CenterY");
+ int radius = GetParameter("Radius");
+ int caliperCount = GetParameter("CaliperCount");
+ int caliperWidth = GetParameter("CaliperWidth");
+ string edgePolarity = GetParameter("EdgePolarity");
+ int edgeThreshold = GetParameter("EdgeThreshold");
+ double sigma = GetParameter("Sigma");
+ string searchDirection = GetParameter("SearchDirection");
+ string fitMethod = GetParameter("FitMethod");
+ double ransacThreshold = GetParameter("RansacThreshold");
+
+ OutputData.Clear();
+
+ _logger.Debug(
+ "EdgeCircleFit started: Center=({CX},{CY}), R={R}, Calipers={Count}, Width={Width}",
+ centerX, centerY, radius, caliperCount, caliperWidth);
+
+ if (radius < 5)
+ {
+ _logger.Warning("Radius too small for circle fitting");
+ OutputData["CircleFitResult"] = new CircleFitResult { Success = false };
+ return inputImage.Clone();
+ }
+
+ // 沿圆周等角度放置卡尺
+ var edgePoints = new List();
+ double angleStep = 2.0 * Math.PI / caliperCount;
+
+ for (int i = 0; i < caliperCount; i++)
+ {
+ double angle = angleStep * i;
+ // 圆周上的采样点
+ double sampleX = centerX + radius * Math.Cos(angle);
+ double sampleY = centerY + radius * Math.Sin(angle);
+
+ // 径向方向(从圆心指向外)
+ double dirX = Math.Cos(angle);
+ double dirY = Math.Sin(angle);
+
+ // 根据搜索方向确定卡尺搜索方向
+ double searchDirX, searchDirY;
+ if (searchDirection == "Inward")
+ {
+ searchDirX = -dirX;
+ searchDirY = -dirY;
+ }
+ else if (searchDirection == "Outward")
+ {
+ searchDirX = dirX;
+ searchDirY = dirY;
+ }
+ else // Both: 搜索方向为径向(从内到外),卡尺中心在圆周上
+ {
+ searchDirX = dirX;
+ searchDirY = dirY;
+ }
+
+ var edgePoint = FindEdgeInCaliper(
+ inputImage, sampleX, sampleY, searchDirX, searchDirY,
+ caliperWidth, edgePolarity, edgeThreshold, sigma, i);
+
+ if (edgePoint != null)
+ {
+ edgePoints.Add(edgePoint);
+ }
+ }
+
+ _logger.Debug("Found {Count} edge points from {Total} calipers", edgePoints.Count, caliperCount);
+
+ // 拟合圆
+ var result = FitCircle(edgePoints, fitMethod, ransacThreshold);
+
+ // 存储输出
+ OutputData["CircleFitResult"] = result;
+ OutputData["EdgePoints"] = edgePoints.Select(p => p.Position).ToArray();
+ OutputData["EdgePointCount"] = edgePoints.Count;
+ OutputData["Thickness"] = GetParameter("Thickness");
+
+ if (result.Success)
+ {
+ OutputData["FittedCenterX"] = result.CenterX;
+ OutputData["FittedCenterY"] = result.CenterY;
+ OutputData["FittedRadius"] = result.Radius;
+ OutputData["InlierPoints"] = result.Inliers.ToArray();
+ OutputData["OutlierPoints"] = result.Outliers.ToArray();
+ OutputData["FitError"] = result.FitError;
+
+ _logger.Information(
+ "EdgeCircleFit completed: Center=({CX:F2},{CY:F2}), R={R:F2}, Inliers={Inliers}/{Total}, Error={Error:F3}px",
+ result.CenterX, result.CenterY, result.Radius,
+ result.Inliers.Count, edgePoints.Count, result.FitError);
+ }
+ else
+ {
+ _logger.Warning("EdgeCircleFit failed: insufficient edge points");
+ }
+
+ return inputImage.Clone();
+ }
+
+ // ══════════════════════════════════════════════════════════════
+ // 卡尺边缘检测(复用直线拟合中的逻辑)
+ // ══════════════════════════════════════════════════════════════
+
+ private EdgePointInfo? FindEdgeInCaliper(
+ Image image,
+ double centerX, double centerY,
+ double dirX, double dirY,
+ int caliperWidth, string polarity,
+ int threshold, double sigma, int caliperIndex)
+ {
+ int halfWidth = caliperWidth / 2;
+ int profileLength = caliperWidth;
+
+ var profile = new double[profileLength];
+ int validCount = 0;
+
+ for (int i = 0; i < profileLength; i++)
+ {
+ double offset = i - halfWidth;
+ double px = centerX + dirX * offset;
+ double py = centerY + dirY * offset;
+
+ int ix = (int)Math.Round(px);
+ int iy = (int)Math.Round(py);
+
+ if (ix >= 0 && ix < image.Width && iy >= 0 && iy < image.Height)
+ {
+ profile[i] = image.Data[iy, ix, 0];
+ validCount++;
+ }
+ else
+ {
+ profile[i] = 0;
+ }
+ }
+
+ if (validCount < profileLength * 0.5)
+ return null;
+
+ if (sigma > 0.1)
+ profile = GaussianSmooth1D(profile, sigma);
+
+ var derivative = new double[profileLength];
+ for (int i = 1; i < profileLength - 1; i++)
+ derivative[i] = (profile[i + 1] - profile[i - 1]) / 2.0;
+
+ int bestIdx = -1;
+ double bestStrength = 0;
+
+ for (int i = 2; i < profileLength - 2; i++)
+ {
+ double strength = derivative[i];
+ bool validPolarity = polarity switch
+ {
+ "BrightToDark" => strength < 0,
+ "DarkToBright" => strength > 0,
+ _ => true
+ };
+
+ if (!validPolarity) continue;
+
+ double absStrength = Math.Abs(strength);
+ if (absStrength >= threshold && absStrength > bestStrength)
+ {
+ bestStrength = absStrength;
+ bestIdx = i;
+ }
+ }
+
+ if (bestIdx < 0)
+ return null;
+
+ // 亚像素插值
+ double subPixelOffset = 0;
+ if (bestIdx > 0 && bestIdx < profileLength - 1)
+ {
+ double left = Math.Abs(derivative[bestIdx - 1]);
+ double center = Math.Abs(derivative[bestIdx]);
+ double right = Math.Abs(derivative[bestIdx + 1]);
+ double denom = 2.0 * (2.0 * center - left - right);
+ if (Math.Abs(denom) > 1e-6)
+ {
+ subPixelOffset = (left - right) / denom;
+ subPixelOffset = Math.Clamp(subPixelOffset, -0.5, 0.5);
+ }
+ }
+
+ double edgeOffset = (bestIdx + subPixelOffset) - halfWidth;
+ float edgeX = (float)(centerX + dirX * edgeOffset);
+ float edgeY = (float)(centerY + dirY * edgeOffset);
+
+ return new EdgePointInfo
+ {
+ Position = new PointF(edgeX, edgeY),
+ Strength = bestStrength,
+ CaliperIndex = caliperIndex,
+ IsInlier = true
+ };
+ }
+
+ private static double[] GaussianSmooth1D(double[] data, double sigma)
+ {
+ int kernelRadius = (int)Math.Ceiling(sigma * 3);
+ int kernelSize = kernelRadius * 2 + 1;
+ var kernel = new double[kernelSize];
+ double sum = 0;
+
+ for (int i = 0; i < kernelSize; i++)
+ {
+ double x = i - kernelRadius;
+ kernel[i] = Math.Exp(-x * x / (2.0 * sigma * sigma));
+ sum += kernel[i];
+ }
+ for (int i = 0; i < kernelSize; i++)
+ kernel[i] /= sum;
+
+ var result = new double[data.Length];
+ for (int i = 0; i < data.Length; i++)
+ {
+ double val = 0, wSum = 0;
+ for (int k = 0; k < kernelSize; k++)
+ {
+ int idx = i + k - kernelRadius;
+ if (idx >= 0 && idx < data.Length)
+ {
+ val += data[idx] * kernel[k];
+ wSum += kernel[k];
+ }
+ }
+ result[i] = wSum > 0 ? val / wSum : data[i];
+ }
+ return result;
+ }
+
+ // ══════════════════════════════════════════════════════════════
+ // 圆拟合
+ // ══════════════════════════════════════════════════════════════
+
+ private CircleFitResult FitCircle(List edgePoints, string method, double ransacThreshold)
+ {
+ var result = new CircleFitResult();
+
+ if (edgePoints.Count < 3)
+ {
+ result.Success = false;
+ return result;
+ }
+
+ if (method == "RANSAC" && edgePoints.Count >= 4)
+ return FitCircleRANSAC(edgePoints, ransacThreshold);
+ else
+ return FitCircleLeastSquares(edgePoints);
+ }
+
+ ///
+ /// 最小二乘拟合圆(Kasa方法)
+ /// 将 (x-a)² + (y-b)² = r² 展开为: x² + y² = 2ax + 2by + (r²-a²-b²)
+ /// 令 c = r²-a²-b², 线性方程: 2ax + 2by + c = x² + y²
+ ///
+ private CircleFitResult FitCircleLeastSquares(List edgePoints)
+ {
+ var points = edgePoints.Select(p => p.Position).ToArray();
+ var (cx, cy, r) = KasaFit(points);
+
+ var result = new CircleFitResult
+ {
+ Success = true,
+ CenterX = cx,
+ CenterY = cy,
+ Radius = r,
+ Inliers = points.ToList(),
+ Outliers = new List(),
+ EdgePointCount = edgePoints.Count,
+ EdgePoints = edgePoints
+ };
+
+ foreach (var ep in edgePoints)
+ ep.IsInlier = true;
+
+ result.FitError = ComputeCircleFitError(points, cx, cy, r);
+ return result;
+ }
+
+ ///
+ /// RANSAC 圆拟合
+ ///
+ private CircleFitResult FitCircleRANSAC(List edgePoints, double threshold)
+ {
+ var result = new CircleFitResult();
+ var points = edgePoints.Select(p => p.Position).ToArray();
+ int n = points.Length;
+
+ int maxIterations = Math.Min(2000, n * (n - 1) * (n - 2) / 6);
+ int bestInlierCount = 0;
+ double bestCx = 0, bestCy = 0, bestR = 0;
+ List bestInlierIndices = new();
+
+ for (int iter = 0; iter < maxIterations; iter++)
+ {
+ // 随机选3个点
+ int i1 = _random.Next(n), i2 = _random.Next(n), i3 = _random.Next(n);
+ if (i1 == i2 || i1 == i3 || i2 == i3) continue;
+
+ var (cx, cy, r) = FitCircleFrom3Points(points[i1], points[i2], points[i3]);
+ if (r <= 0 || double.IsNaN(r)) continue;
+
+ // 统计内点
+ var inlierIndices = new List();
+ for (int i = 0; i < n; i++)
+ {
+ double dist = Math.Abs(Distance(points[i], cx, cy) - r);
+ if (dist <= threshold)
+ inlierIndices.Add(i);
+ }
+
+ if (inlierIndices.Count > bestInlierCount)
+ {
+ bestInlierCount = inlierIndices.Count;
+ bestInlierIndices = inlierIndices;
+
+ // 用所有内点重新拟合
+ var inlierPoints = inlierIndices.Select(i => points[i]).ToArray();
+ (bestCx, bestCy, bestR) = KasaFit(inlierPoints);
+ }
+
+ if (bestInlierCount > n * 0.95)
+ break;
+ }
+
+ if (bestInlierCount < 3)
+ {
+ result.Success = false;
+ return result;
+ }
+
+ result.Success = true;
+ result.CenterX = bestCx;
+ result.CenterY = bestCy;
+ result.Radius = bestR;
+
+ var inlierSet = new HashSet(bestInlierIndices);
+ for (int i = 0; i < n; i++)
+ {
+ if (inlierSet.Contains(i))
+ {
+ result.Inliers.Add(points[i]);
+ edgePoints[i].IsInlier = true;
+ }
+ else
+ {
+ result.Outliers.Add(points[i]);
+ edgePoints[i].IsInlier = false;
+ }
+ }
+
+ result.FitError = ComputeCircleFitError(result.Inliers.ToArray(), bestCx, bestCy, bestR);
+ result.EdgePointCount = edgePoints.Count;
+ result.EdgePoints = edgePoints;
+
+ return result;
+ }
+
+ ///
+ /// Kasa 最小二乘圆拟合
+ ///
+ private static (double cx, double cy, double r) KasaFit(PointF[] points)
+ {
+ int n = points.Length;
+ if (n < 3) return (0, 0, 0);
+
+ // 构建线性方程组: A * [a, b, c]^T = B
+ // 其中 2*a*xi + 2*b*yi + c = xi² + yi²
+ double sumX = 0, sumY = 0, sumX2 = 0, sumY2 = 0;
+ double sumXY = 0, sumX3 = 0, sumY3 = 0, sumX2Y = 0, sumXY2 = 0;
+
+ for (int i = 0; i < n; i++)
+ {
+ double x = points[i].X, y = points[i].Y;
+ double x2 = x * x, y2 = y * y;
+ sumX += x; sumY += y;
+ sumX2 += x2; sumY2 += y2;
+ sumXY += x * y;
+ sumX3 += x2 * x; sumY3 += y2 * y;
+ sumX2Y += x2 * y; sumXY2 += x * y2;
+ }
+
+ double A = n * sumX2 - sumX * sumX;
+ double B = n * sumXY - sumX * sumY;
+ double C = n * sumY2 - sumY * sumY;
+ double D = 0.5 * (n * (sumX3 + sumXY2) - sumX * (sumX2 + sumY2));
+ double E = 0.5 * (n * (sumX2Y + sumY3) - sumY * (sumX2 + sumY2));
+
+ double denom = A * C - B * B;
+ if (Math.Abs(denom) < 1e-10)
+ return (0, 0, 0);
+
+ double cx = (D * C - B * E) / denom;
+ double cy = (A * E - B * D) / denom;
+ double r = Math.Sqrt((sumX2 + sumY2 - 2 * cx * sumX - 2 * cy * sumY) / n + cx * cx + cy * cy);
+
+ return (cx, cy, r);
+ }
+
+ ///
+ /// 3点拟合圆
+ ///
+ private static (double cx, double cy, double r) FitCircleFrom3Points(PointF p1, PointF p2, PointF p3)
+ {
+ double ax = p1.X, ay = p1.Y;
+ double bx = p2.X, by = p2.Y;
+ double cx = p3.X, cy = p3.Y;
+
+ double d = 2 * (ax * (by - cy) + bx * (cy - ay) + cx * (ay - by));
+ if (Math.Abs(d) < 1e-10)
+ return (0, 0, -1);
+
+ double ux = ((ax * ax + ay * ay) * (by - cy) + (bx * bx + by * by) * (cy - ay) + (cx * cx + cy * cy) * (ay - by)) / d;
+ double uy = ((ax * ax + ay * ay) * (cx - bx) + (bx * bx + by * by) * (ax - cx) + (cx * cx + cy * cy) * (bx - ax)) / d;
+ double r = Math.Sqrt((ax - ux) * (ax - ux) + (ay - uy) * (ay - uy));
+
+ return (ux, uy, r);
+ }
+
+ private static double Distance(PointF p, double cx, double cy)
+ {
+ double dx = p.X - cx, dy = p.Y - cy;
+ return Math.Sqrt(dx * dx + dy * dy);
+ }
+
+ private static double ComputeCircleFitError(PointF[] points, double cx, double cy, double r)
+ {
+ if (points.Length == 0) return 0;
+ double total = 0;
+ foreach (var p in points)
+ total += Math.Abs(Distance(p, cx, cy) - r);
+ return total / points.Length;
+ }
+}
diff --git a/XP.ImageProcessing.Processors/检测分析/EdgeLineFitProcessor.cs b/XP.ImageProcessing.Processors/检测分析/EdgeLineFitProcessor.cs
new file mode 100644
index 0000000..0fad857
--- /dev/null
+++ b/XP.ImageProcessing.Processors/检测分析/EdgeLineFitProcessor.cs
@@ -0,0 +1,638 @@
+// ============================================================================
+// Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved.
+// 文件名: EdgeLineFitProcessor.cs
+// 描述: 边缘查找拟合直线算子
+// 功能:
+// - 沿用户定义的搜索线等间距放置多个卡尺(Caliper)
+// - 在每个卡尺内沿垂直方向提取灰度投影并求导,定位边缘点
+// - 支持亚像素精度(抛物线插值)
+// - 支持边缘极性选择(亮到暗/暗到亮/双向)
+// - 使用最小二乘或RANSAC算法拟合直线
+// - 输出拟合直线参数、边缘点、内点/外点、拟合误差
+// 算法: 卡尺边缘检测 + 最小二乘/RANSAC直线拟合
+// 作者: 李伟 wei.lw.li@hexagon.com
+// ============================================================================
+
+using Emgu.CV;
+using Emgu.CV.CvEnum;
+using Emgu.CV.Structure;
+using Emgu.CV.Util;
+using XP.ImageProcessing.Core;
+using Serilog;
+using System.Drawing;
+
+namespace XP.ImageProcessing.Processors;
+
+///
+/// 边缘点信息
+///
+public class EdgePointInfo
+{
+ /// 边缘点坐标(亚像素)
+ public PointF Position { get; set; }
+
+ /// 边缘强度(梯度绝对值)
+ public double Strength { get; set; }
+
+ /// 卡尺索引
+ public int CaliperIndex { get; set; }
+
+ /// 是否为拟合内点
+ public bool IsInlier { get; set; } = true;
+}
+
+///
+/// 直线拟合结果
+///
+public class LineFitResult
+{
+ /// 拟合是否成功
+ public bool Success { get; set; }
+
+ /// 直线方向向量 (vx, vy)
+ public PointF Direction { get; set; }
+
+ /// 直线上一点 (x0, y0)
+ public PointF PointOnLine { get; set; }
+
+ /// 直线角度(度,相对于X轴)
+ public double AngleDegrees { get; set; }
+
+ /// 直线端点1(用于绘制)
+ public PointF Endpoint1 { get; set; }
+
+ /// 直线端点2(用于绘制)
+ public PointF Endpoint2 { get; set; }
+
+ /// 所有检测到的边缘点
+ public List EdgePoints { get; set; } = new();
+
+ /// 内点列表
+ public List Inliers { get; set; } = new();
+
+ /// 外点列表
+ public List Outliers { get; set; } = new();
+
+ /// 平均拟合误差(像素)
+ public double FitError { get; set; }
+
+ /// 有效边缘点数
+ public int EdgePointCount { get; set; }
+}
+
+///
+/// 边缘查找拟合直线算子 - 使用卡尺法检测边缘点并拟合直线
+///
+public class EdgeLineFitProcessor : ImageProcessorBase
+{
+ private static readonly ILogger _logger = Log.ForContext();
+ private static readonly Random _random = new();
+
+ public EdgeLineFitProcessor()
+ {
+ Name = LocalizationHelper.GetString("EdgeLineFitProcessor_Name");
+ Description = LocalizationHelper.GetString("EdgeLineFitProcessor_Description");
+ }
+
+ protected override void InitializeParameters()
+ {
+ // ── 搜索线起止点(由UI交互控件注入,不可见) ──
+ Parameters.Add("StartX", new ProcessorParameter(
+ "StartX", "StartX", typeof(int), 100, null, null, "") { IsVisible = false });
+ Parameters.Add("StartY", new ProcessorParameter(
+ "StartY", "StartY", typeof(int), 200, null, null, "") { IsVisible = false });
+ Parameters.Add("EndX", new ProcessorParameter(
+ "EndX", "EndX", typeof(int), 400, null, null, "") { IsVisible = false });
+ Parameters.Add("EndY", new ProcessorParameter(
+ "EndY", "EndY", typeof(int), 200, null, null, "") { IsVisible = false });
+
+ // ── 卡尺参数 ──
+ Parameters.Add("CaliperCount", new ProcessorParameter(
+ "CaliperCount",
+ LocalizationHelper.GetString("EdgeLineFitProcessor_CaliperCount"),
+ typeof(int), 20, 3, 200,
+ LocalizationHelper.GetString("EdgeLineFitProcessor_CaliperCount_Desc")));
+
+ Parameters.Add("CaliperWidth", new ProcessorParameter(
+ "CaliperWidth",
+ LocalizationHelper.GetString("EdgeLineFitProcessor_CaliperWidth"),
+ typeof(int), 40, 5, 500,
+ LocalizationHelper.GetString("EdgeLineFitProcessor_CaliperWidth_Desc")));
+
+ // ── 边缘检测参数 ──
+ Parameters.Add("EdgePolarity", new ProcessorParameter(
+ "EdgePolarity",
+ LocalizationHelper.GetString("EdgeLineFitProcessor_EdgePolarity"),
+ typeof(string), "Both", null, null,
+ LocalizationHelper.GetString("EdgeLineFitProcessor_EdgePolarity_Desc"),
+ new string[] { "BrightToDark", "DarkToBright", "Both" }));
+
+ Parameters.Add("EdgeThreshold", new ProcessorParameter(
+ "EdgeThreshold",
+ LocalizationHelper.GetString("EdgeLineFitProcessor_EdgeThreshold"),
+ typeof(int), 30, 1, 255,
+ LocalizationHelper.GetString("EdgeLineFitProcessor_EdgeThreshold_Desc")));
+
+ Parameters.Add("Sigma", new ProcessorParameter(
+ "Sigma",
+ LocalizationHelper.GetString("EdgeLineFitProcessor_Sigma"),
+ typeof(double), 1.0, 0.1, 10.0,
+ LocalizationHelper.GetString("EdgeLineFitProcessor_Sigma_Desc")));
+
+ // ── 拟合参数 ──
+ Parameters.Add("FitMethod", new ProcessorParameter(
+ "FitMethod",
+ LocalizationHelper.GetString("EdgeLineFitProcessor_FitMethod"),
+ typeof(string), "RANSAC", null, null,
+ LocalizationHelper.GetString("EdgeLineFitProcessor_FitMethod_Desc"),
+ new string[] { "LeastSquares", "RANSAC" }));
+
+ Parameters.Add("RansacThreshold", new ProcessorParameter(
+ "RansacThreshold",
+ LocalizationHelper.GetString("EdgeLineFitProcessor_RansacThreshold"),
+ typeof(double), 2.0, 0.5, 20.0,
+ LocalizationHelper.GetString("EdgeLineFitProcessor_RansacThreshold_Desc")));
+
+ Parameters.Add("Thickness", new ProcessorParameter(
+ "Thickness",
+ LocalizationHelper.GetString("EdgeLineFitProcessor_Thickness"),
+ typeof(int), 2, 1, 10,
+ LocalizationHelper.GetString("EdgeLineFitProcessor_Thickness_Desc")));
+ }
+
+ public override Image Process(Image inputImage)
+ {
+ // 读取参数
+ int startX = GetParameter("StartX");
+ int startY = GetParameter("StartY");
+ int endX = GetParameter("EndX");
+ int endY = GetParameter("EndY");
+ int caliperCount = GetParameter("CaliperCount");
+ int caliperWidth = GetParameter("CaliperWidth");
+ string edgePolarity = GetParameter("EdgePolarity");
+ int edgeThreshold = GetParameter("EdgeThreshold");
+ double sigma = GetParameter("Sigma");
+ string fitMethod = GetParameter("FitMethod");
+ double ransacThreshold = GetParameter("RansacThreshold");
+ int thickness = GetParameter("Thickness");
+
+ OutputData.Clear();
+
+ _logger.Debug(
+ "EdgeLineFit started: Search({StartX},{StartY})->({EndX},{EndY}), Calipers={Count}, Width={Width}, Polarity={Polarity}",
+ startX, startY, endX, endY, caliperCount, caliperWidth, edgePolarity);
+
+ // 计算搜索线方向和垂直方向
+ double searchDx = endX - startX;
+ double searchDy = endY - startY;
+ double searchLen = Math.Sqrt(searchDx * searchDx + searchDy * searchDy);
+
+ if (searchLen < 1.0)
+ {
+ _logger.Warning("Search line too short, cannot perform edge detection");
+ OutputData["LineFitResult"] = new LineFitResult { Success = false };
+ return inputImage.Clone();
+ }
+
+ // 搜索线单位方向
+ double ux = searchDx / searchLen;
+ double uy = searchDy / searchLen;
+
+ // 垂直于搜索线的方向(卡尺搜索方向)
+ double perpX = -uy;
+ double perpY = ux;
+
+ // 沿搜索线等间距放置卡尺
+ var edgePoints = new List();
+ double step = searchLen / (caliperCount + 1);
+
+ for (int i = 0; i < caliperCount; i++)
+ {
+ // 卡尺中心点
+ double cx = startX + ux * step * (i + 1);
+ double cy = startY + uy * step * (i + 1);
+
+ // 在卡尺内沿垂直方向提取灰度剖面
+ var edgePoint = FindEdgeInCaliper(
+ inputImage, cx, cy, perpX, perpY,
+ caliperWidth, edgePolarity, edgeThreshold, sigma, i);
+
+ if (edgePoint != null)
+ {
+ edgePoints.Add(edgePoint);
+ }
+ }
+
+ _logger.Debug("Found {Count} edge points from {Total} calipers", edgePoints.Count, caliperCount);
+
+ // 拟合直线
+ var result = FitLine(edgePoints, fitMethod, ransacThreshold, inputImage.Size);
+
+ // 存储输出数据
+ OutputData["LineFitResult"] = result;
+ OutputData["EdgePoints"] = edgePoints.Select(p => p.Position).ToArray();
+ OutputData["EdgePointCount"] = edgePoints.Count;
+ OutputData["Thickness"] = thickness;
+
+ if (result.Success)
+ {
+ OutputData["FittedLineDirection"] = result.Direction;
+ OutputData["FittedLinePoint"] = result.PointOnLine;
+ OutputData["LineAngle"] = result.AngleDegrees;
+ OutputData["LineEndpoint1"] = result.Endpoint1;
+ OutputData["LineEndpoint2"] = result.Endpoint2;
+ OutputData["InlierPoints"] = result.Inliers.ToArray();
+ OutputData["OutlierPoints"] = result.Outliers.ToArray();
+ OutputData["FitError"] = result.FitError;
+
+ _logger.Information(
+ "EdgeLineFit completed: Angle={Angle:F2}°, Inliers={Inliers}/{Total}, Error={Error:F3}px",
+ result.AngleDegrees, result.Inliers.Count, edgePoints.Count, result.FitError);
+ }
+ else
+ {
+ _logger.Warning("EdgeLineFit failed: insufficient edge points for line fitting");
+ }
+
+ // 搜索区域信息(供UI绘制)
+ OutputData["SearchStart"] = new PointF(startX, startY);
+ OutputData["SearchEnd"] = new PointF(endX, endY);
+ OutputData["CaliperWidth"] = caliperWidth;
+ OutputData["CaliperCount"] = caliperCount;
+ OutputData["PerpDirection"] = new PointF((float)perpX, (float)perpY);
+
+ return inputImage.Clone();
+ }
+
+ ///
+ /// 在单个卡尺内查找边缘点
+ ///
+ private EdgePointInfo? FindEdgeInCaliper(
+ Image image,
+ double centerX, double centerY,
+ double perpX, double perpY,
+ int caliperWidth, string polarity,
+ int threshold, double sigma, int caliperIndex)
+ {
+ int halfWidth = caliperWidth / 2;
+ int profileLength = caliperWidth;
+
+ // 提取灰度剖面
+ var profile = new double[profileLength];
+ int validCount = 0;
+
+ for (int i = 0; i < profileLength; i++)
+ {
+ double offset = i - halfWidth;
+ double px = centerX + perpX * offset;
+ double py = centerY + perpY * offset;
+
+ int ix = (int)Math.Round(px);
+ int iy = (int)Math.Round(py);
+
+ if (ix >= 0 && ix < image.Width && iy >= 0 && iy < image.Height)
+ {
+ profile[i] = image.Data[iy, ix, 0];
+ validCount++;
+ }
+ else
+ {
+ profile[i] = 0;
+ }
+ }
+
+ if (validCount < profileLength * 0.5)
+ return null;
+
+ // 高斯平滑
+ if (sigma > 0.1)
+ {
+ profile = GaussianSmooth1D(profile, sigma);
+ }
+
+ // 求一阶导数
+ var derivative = new double[profileLength];
+ for (int i = 1; i < profileLength - 1; i++)
+ {
+ derivative[i] = (profile[i + 1] - profile[i - 1]) / 2.0;
+ }
+
+ // 根据极性查找最强边缘
+ int bestIdx = -1;
+ double bestStrength = 0;
+
+ for (int i = 2; i < profileLength - 2; i++)
+ {
+ double strength = derivative[i];
+ bool validPolarity = polarity switch
+ {
+ "BrightToDark" => strength < 0, // 亮到暗:导数为负
+ "DarkToBright" => strength > 0, // 暗到亮:导数为正
+ _ => true // Both:任意方向
+ };
+
+ if (!validPolarity) continue;
+
+ double absStrength = Math.Abs(strength);
+ if (absStrength >= threshold && absStrength > bestStrength)
+ {
+ bestStrength = absStrength;
+ bestIdx = i;
+ }
+ }
+
+ if (bestIdx < 0)
+ return null;
+
+ // 亚像素精度:抛物线插值
+ double subPixelOffset = 0;
+ if (bestIdx > 0 && bestIdx < profileLength - 1)
+ {
+ double left = Math.Abs(derivative[bestIdx - 1]);
+ double center = Math.Abs(derivative[bestIdx]);
+ double right = Math.Abs(derivative[bestIdx + 1]);
+ double denom = 2.0 * (2.0 * center - left - right);
+ if (Math.Abs(denom) > 1e-6)
+ {
+ subPixelOffset = (left - right) / denom;
+ subPixelOffset = Math.Clamp(subPixelOffset, -0.5, 0.5);
+ }
+ }
+
+ double edgeOffset = (bestIdx + subPixelOffset) - halfWidth;
+ float edgeX = (float)(centerX + perpX * edgeOffset);
+ float edgeY = (float)(centerY + perpY * edgeOffset);
+
+ return new EdgePointInfo
+ {
+ Position = new PointF(edgeX, edgeY),
+ Strength = bestStrength,
+ CaliperIndex = caliperIndex,
+ IsInlier = true
+ };
+ }
+
+ ///
+ /// 一维高斯平滑
+ ///
+ private static double[] GaussianSmooth1D(double[] data, double sigma)
+ {
+ int kernelRadius = (int)Math.Ceiling(sigma * 3);
+ int kernelSize = kernelRadius * 2 + 1;
+ var kernel = new double[kernelSize];
+ double sum = 0;
+
+ for (int i = 0; i < kernelSize; i++)
+ {
+ double x = i - kernelRadius;
+ kernel[i] = Math.Exp(-x * x / (2.0 * sigma * sigma));
+ sum += kernel[i];
+ }
+ for (int i = 0; i < kernelSize; i++)
+ kernel[i] /= sum;
+
+ var result = new double[data.Length];
+ for (int i = 0; i < data.Length; i++)
+ {
+ double val = 0;
+ double wSum = 0;
+ for (int k = 0; k < kernelSize; k++)
+ {
+ int idx = i + k - kernelRadius;
+ if (idx >= 0 && idx < data.Length)
+ {
+ val += data[idx] * kernel[k];
+ wSum += kernel[k];
+ }
+ }
+ result[i] = wSum > 0 ? val / wSum : data[i];
+ }
+ return result;
+ }
+
+ ///
+ /// 拟合直线
+ ///
+ private LineFitResult FitLine(List edgePoints, string method,
+ double ransacThreshold, Size imageSize)
+ {
+ var result = new LineFitResult();
+
+ if (edgePoints.Count < 2)
+ {
+ result.Success = false;
+ return result;
+ }
+
+ if (method == "RANSAC" && edgePoints.Count >= 3)
+ {
+ return FitLineRANSAC(edgePoints, ransacThreshold, imageSize);
+ }
+ else
+ {
+ return FitLineLeastSquares(edgePoints, imageSize);
+ }
+ }
+
+ ///
+ /// 最小二乘直线拟合(使用OpenCV FitLine)
+ ///
+ private LineFitResult FitLineLeastSquares(List edgePoints, Size imageSize)
+ {
+ var result = new LineFitResult();
+ var points = edgePoints.Select(p => p.Position).ToArray();
+
+ using var pointVector = new VectorOfPointF(points);
+ using var lineMat = new Mat();
+ CvInvoke.FitLine(pointVector, lineMat, DistType.L2, 0, 0.01, 0.01);
+ var lineParams = new float[4];
+ System.Runtime.InteropServices.Marshal.Copy(lineMat.DataPointer, lineParams, 0, 4);
+
+ float vx = lineParams[0], vy = lineParams[1];
+ float x0 = lineParams[2], y0 = lineParams[3];
+
+ result.Success = true;
+ result.Direction = new PointF(vx, vy);
+ result.PointOnLine = new PointF(x0, y0);
+ result.AngleDegrees = Math.Atan2(vy, vx) * 180.0 / Math.PI;
+
+ // 计算端点(延伸到图像边界或搜索范围)
+ ComputeLineEndpoints(result, points, imageSize);
+
+ // 所有点都是内点
+ result.Inliers = points.ToList();
+ result.Outliers = new List();
+ foreach (var ep in edgePoints)
+ ep.IsInlier = true;
+
+ // 计算拟合误差
+ result.FitError = ComputeFitError(points, vx, vy, x0, y0);
+ result.EdgePointCount = edgePoints.Count;
+ result.EdgePoints = edgePoints;
+
+ return result;
+ }
+
+ ///
+ /// RANSAC直线拟合
+ ///
+ private LineFitResult FitLineRANSAC(List edgePoints, double threshold, Size imageSize)
+ {
+ var result = new LineFitResult();
+ var points = edgePoints.Select(p => p.Position).ToArray();
+ int n = points.Length;
+
+ // RANSAC参数
+ int maxIterations = Math.Min(1000, n * (n - 1) / 2);
+ int bestInlierCount = 0;
+ float bestVx = 0, bestVy = 0, bestX0 = 0, bestY0 = 0;
+ List bestInlierIndices = new();
+
+ for (int iter = 0; iter < maxIterations; iter++)
+ {
+ // 随机选择2个点
+ int idx1 = _random.Next(n);
+ int idx2 = _random.Next(n);
+ if (idx1 == idx2) continue;
+
+ PointF p1 = points[idx1], p2 = points[idx2];
+ float dx = p2.X - p1.X, dy = p2.Y - p1.Y;
+ float len = (float)Math.Sqrt(dx * dx + dy * dy);
+ if (len < 1e-6f) continue;
+
+ float vx = dx / len, vy = dy / len;
+
+ // 统计内点
+ var inlierIndices = new List();
+ for (int i = 0; i < n; i++)
+ {
+ double dist = PointToLineDistance(points[i], p1, vx, vy);
+ if (dist <= threshold)
+ {
+ inlierIndices.Add(i);
+ }
+ }
+
+ if (inlierIndices.Count > bestInlierCount)
+ {
+ bestInlierCount = inlierIndices.Count;
+ bestInlierIndices = inlierIndices;
+
+ // 用所有内点重新拟合
+ var inlierPoints = inlierIndices.Select(i => points[i]).ToArray();
+ using var pv = new VectorOfPointF(inlierPoints);
+ using var lpMat = new Mat();
+ CvInvoke.FitLine(pv, lpMat, DistType.L2, 0, 0.01, 0.01);
+ var lp = new float[4];
+ System.Runtime.InteropServices.Marshal.Copy(lpMat.DataPointer, lp, 0, 4);
+ bestVx = lp[0]; bestVy = lp[1]; bestX0 = lp[2]; bestY0 = lp[3];
+ }
+
+ // 如果内点比例已经很高,提前退出
+ if (bestInlierCount > n * 0.95)
+ break;
+ }
+
+ if (bestInlierCount < 2)
+ {
+ result.Success = false;
+ return result;
+ }
+
+ result.Success = true;
+ result.Direction = new PointF(bestVx, bestVy);
+ result.PointOnLine = new PointF(bestX0, bestY0);
+ result.AngleDegrees = Math.Atan2(bestVy, bestVx) * 180.0 / Math.PI;
+
+ // 分类内点/外点
+ var inliers = new List();
+ var outliers = new List();
+ var inlierSet = new HashSet(bestInlierIndices);
+
+ for (int i = 0; i < n; i++)
+ {
+ if (inlierSet.Contains(i))
+ {
+ inliers.Add(points[i]);
+ edgePoints[i].IsInlier = true;
+ }
+ else
+ {
+ outliers.Add(points[i]);
+ edgePoints[i].IsInlier = false;
+ }
+ }
+
+ result.Inliers = inliers;
+ result.Outliers = outliers;
+
+ // 计算端点
+ ComputeLineEndpoints(result, inliers.ToArray(), imageSize);
+
+ // 计算拟合误差(仅内点)
+ result.FitError = ComputeFitError(inliers.ToArray(), bestVx, bestVy, bestX0, bestY0);
+ result.EdgePointCount = edgePoints.Count;
+ result.EdgePoints = edgePoints;
+
+ return result;
+ }
+
+ ///
+ /// 计算点到直线的距离
+ ///
+ private static double PointToLineDistance(PointF point, PointF linePoint, float vx, float vy)
+ {
+ // 直线法向量 (-vy, vx)
+ double dx = point.X - linePoint.X;
+ double dy = point.Y - linePoint.Y;
+ return Math.Abs(-vy * dx + vx * dy);
+ }
+
+ ///
+ /// 计算直线端点(基于边缘点的投影范围)
+ ///
+ private static void ComputeLineEndpoints(LineFitResult result, PointF[] points, Size imageSize)
+ {
+ float vx = result.Direction.X, vy = result.Direction.Y;
+ float x0 = result.PointOnLine.X, y0 = result.PointOnLine.Y;
+
+ // 将所有点投影到直线方向上,找最小和最大投影值
+ double minT = double.MaxValue, maxT = double.MinValue;
+ foreach (var p in points)
+ {
+ double t = (p.X - x0) * vx + (p.Y - y0) * vy;
+ if (t < minT) minT = t;
+ if (t > maxT) maxT = t;
+ }
+
+ // 稍微延伸一点
+ double extend = (maxT - minT) * 0.05;
+ minT -= extend;
+ maxT += extend;
+
+ result.Endpoint1 = new PointF(
+ (float)(x0 + vx * minT),
+ (float)(y0 + vy * minT));
+ result.Endpoint2 = new PointF(
+ (float)(x0 + vx * maxT),
+ (float)(y0 + vy * maxT));
+ }
+
+ ///
+ /// 计算平均拟合误差
+ ///
+ private static double ComputeFitError(PointF[] points, float vx, float vy, float x0, float y0)
+ {
+ if (points.Length == 0) return 0;
+
+ double totalError = 0;
+ foreach (var p in points)
+ {
+ double dx = p.X - x0;
+ double dy = p.Y - y0;
+ double dist = Math.Abs(-vy * dx + vx * dy);
+ totalError += dist;
+ }
+ return totalError / points.Length;
+ }
+}
diff --git a/XP.ImageProcessing.RoiControl/Controls/PolygonRoiCanvas.xaml.cs b/XP.ImageProcessing.RoiControl/Controls/PolygonRoiCanvas.xaml.cs
index 9e40016..1ddedc0 100644
--- a/XP.ImageProcessing.RoiControl/Controls/PolygonRoiCanvas.xaml.cs
+++ b/XP.ImageProcessing.RoiControl/Controls/PolygonRoiCanvas.xaml.cs
@@ -502,6 +502,12 @@ namespace XP.ImageProcessing.RoiControl.Controls
private Point? _bgaPendingCenter; // 等待第二次点击定半径
private Ellipse _bgaPendingDot;
+ // 边缘查找拟合直线临时状态
+ private int _elfClickCount;
+ private Ellipse _elfTempDot1;
+ private Line _elfTempLine;
+ private Point? _elfTempStart;
+
// 气泡测量状态
public enum BubbleSubTool { Roi, RoiCircle, RoiPolygon, Wand, Brush, Eraser }
private BubbleSubTool _bubbleTool = BubbleSubTool.Roi;
@@ -720,6 +726,8 @@ namespace XP.ImageProcessing.RoiControl.Controls
HandleFillRateClick(pos);
else if (CurrentMeasureMode == Models.MeasureMode.BgaVoid)
HandleBgaVoidClick(pos);
+ else if (CurrentMeasureMode == Models.MeasureMode.EdgeLineFit)
+ HandleEdgeLineFitClick(pos);
// BubbleMeasure 的点击在 MouseDown/Move/Up 中处理(拖拽画 ROI 和画笔)
}
@@ -900,6 +908,49 @@ namespace XP.ImageProcessing.RoiControl.Controls
return g;
}
+ // ── 边缘查找拟合直线 ──
+
+ private void HandleEdgeLineFitClick(Point pos)
+ {
+ _elfClickCount++;
+
+ if (_elfClickCount == 1)
+ {
+ _elfTempStart = pos;
+ _elfTempDot1 = CreateMDot(Brushes.Cyan);
+ _measureOverlay.Children.Add(_elfTempDot1);
+ SetDotPos(_elfTempDot1, pos);
+ RaiseMeasureStatusChanged($"直线拟合 - 搜索线起点: ({pos.X:F0}, {pos.Y:F0}),请点击搜索线终点");
+ }
+ else if (_elfClickCount == 2)
+ {
+ // 绘制搜索线
+ _elfTempLine = new Line
+ {
+ Stroke = Brushes.Cyan,
+ StrokeThickness = 1,
+ StrokeDashArray = new DoubleCollection { 4, 2 },
+ IsHitTestVisible = false,
+ X1 = _elfTempStart.Value.X,
+ Y1 = _elfTempStart.Value.Y,
+ X2 = pos.X,
+ Y2 = pos.Y
+ };
+ _measureOverlay.Children.Add(_elfTempLine);
+
+ // 触发完成事件,传递搜索线起止点
+ RaiseMeasureCompleted(_elfTempStart.Value, pos, 0, MeasureCount, "EdgeLineFit");
+ RaiseMeasureStatusChanged($"直线拟合 - 搜索线已定义: ({_elfTempStart.Value.X:F0},{_elfTempStart.Value.Y:F0}) → ({pos.X:F0},{pos.Y:F0})");
+
+ // 清理临时状态
+ if (_elfTempDot1 != null) _measureOverlay.Children.Remove(_elfTempDot1);
+ _elfTempDot1 = null;
+ _elfTempStart = null;
+ _elfClickCount = 0;
+ CurrentMeasureMode = Models.MeasureMode.None;
+ }
+ }
+
// ── 角度测量 ──
private void HandleAngleClick(Point pos)
diff --git a/XP.ImageProcessing.RoiControl/Models/MeasureMode.cs b/XP.ImageProcessing.RoiControl/Models/MeasureMode.cs
index 039b8d1..d726a79 100644
--- a/XP.ImageProcessing.RoiControl/Models/MeasureMode.cs
+++ b/XP.ImageProcessing.RoiControl/Models/MeasureMode.cs
@@ -8,6 +8,7 @@ namespace XP.ImageProcessing.RoiControl.Models
Angle,
FillRate,
BgaVoid,
- BubbleMeasure
+ BubbleMeasure,
+ EdgeLineFit
}
}
diff --git a/XP.Scan/App.xaml.cs b/XP.Scan/App.xaml.cs
index 8b122d6..72482fd 100644
--- a/XP.Scan/App.xaml.cs
+++ b/XP.Scan/App.xaml.cs
@@ -2,11 +2,11 @@ using System;
using System.Windows;
using Prism.Container.DryIoc;
using Prism.Ioc;
-using XP.Common.Configs;
using XP.Common.Dump.Configs;
using XP.Common.Dump.Implementations;
using XP.Common.Dump.Interfaces;
-using XP.Common.Helpers;
+using XP.Common.Logging.Configs;
+using DumpConfigLoader = XP.Common.Dump.Configs.ConfigLoader;
using XP.Common.Localization.Configs;
using XP.Common.Localization.Extensions;
using XP.Common.Localization;
@@ -71,7 +71,7 @@ namespace XP.Scan
containerRegistry.RegisterSingleton();
// Dump 服务
- containerRegistry.RegisterSingleton(() => ConfigLoader.LoadDumpConfig());
+ containerRegistry.RegisterSingleton(() => DumpConfigLoader.LoadDumpConfig());
containerRegistry.RegisterSingleton();
// 注册 XPScanView 用于区域导航
diff --git a/XplorePlane.Tests/Services/InspectionResultStoreTests.cs b/XplorePlane.Tests/Services/InspectionResultStoreTests.cs
index 21ffa5e..c758244 100644
--- a/XplorePlane.Tests/Services/InspectionResultStoreTests.cs
+++ b/XplorePlane.Tests/Services/InspectionResultStoreTests.cs
@@ -5,7 +5,7 @@ using System.IO;
using System.Linq;
using System.Text.Json;
using System.Threading.Tasks;
-using XP.Common.Configs;
+using XP.Common.Database.Configs;
using XP.Common.Database.Implementations;
using XP.Common.Database.Interfaces;
using XP.Common.Logging.Interfaces;
diff --git a/XplorePlane.sln b/XplorePlane.sln
index 4000462..8ae1b8b 100644
--- a/XplorePlane.sln
+++ b/XplorePlane.sln
@@ -78,7 +78,8 @@ Global
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {07978DB9-4B88-4F42-9054-73992742BD6A}.Debug|Any CPU.ActiveCfg = Debug|x64
+ {07978DB9-4B88-4F42-9054-73992742BD6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {07978DB9-4B88-4F42-9054-73992742BD6A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{07978DB9-4B88-4F42-9054-73992742BD6A}.Debug|x64.ActiveCfg = Debug|x64
{07978DB9-4B88-4F42-9054-73992742BD6A}.Debug|x64.Build.0 = Debug|x64
{07978DB9-4B88-4F42-9054-73992742BD6A}.Debug|x86.ActiveCfg = Debug|x64
diff --git a/XplorePlane/App.config b/XplorePlane/App.config
index 3d06d33..821e348 100644
--- a/XplorePlane/App.config
+++ b/XplorePlane/App.config
@@ -1,4 +1,4 @@
-
+
@@ -11,6 +11,11 @@
+
+
+
+
+
@@ -59,19 +64,17 @@
-
-
-
+
+
-
-
-
-
-
+
+
+
+
@@ -83,14 +86,13 @@
-
-
-
+
+
@@ -203,7 +205,6 @@
-
diff --git a/XplorePlane/App.xaml.cs b/XplorePlane/App.xaml.cs
index 0d0b6d7..1e99625 100644
--- a/XplorePlane/App.xaml.cs
+++ b/XplorePlane/App.xaml.cs
@@ -10,14 +10,18 @@ using System.Threading;
using System.Windows;
using Telerik.Windows.Controls;
using XP.Camera;
-using XP.Common.Configs;
+using XP.Common.Database.Configs;
using XP.Common.Database.Implementations;
using XP.Common.Database.Interfaces;
using XP.Common.Dump.Configs;
using XP.Common.Dump.Implementations;
using XP.Common.Dump.Interfaces;
using XP.Common.GeneralForm.Views;
-using XP.Common.Helpers;
+using XP.Common.Logging.Configs;
+using DumpConfigLoader = XP.Common.Dump.Configs.ConfigLoader;
+using LoggingConfigLoader = XP.Common.Logging.Configs.ConfigLoader;
+using DatabaseConfigLoader = XP.Common.Database.Configs.ConfigLoader;
+using XP.Common.License.Interfaces;
using XP.Common.Localization.Configs;
using XP.Common.Localization.Extensions;
using XP.Common.Localization.Implementations;
@@ -28,7 +32,6 @@ using XP.Common.Logging.Interfaces;
using XP.Common.Module;
using XP.Hardware.Detector.Module;
using XP.Hardware.Detector.Services;
-using XP.Hardware.Detector.Services;
using XP.Hardware.MotionControl.Module;
using XP.Hardware.Plc.Abstractions;
using XP.Hardware.PLC;
@@ -52,6 +55,7 @@ using XplorePlane.Services.Storage;
using XplorePlane.ViewModels;
using XplorePlane.ViewModels.Cnc;
using XplorePlane.ViewModels.Debug;
+using XplorePlane.ViewModels.ImageProcessing;
using XplorePlane.Views;
using XplorePlane.Views.Cnc;
using XplorePlane.Views.Debug;
@@ -115,7 +119,7 @@ namespace XplorePlane
private void ConfigureLogging()
{
// 加载 Serilog 配置 | Load Serilog configuration
- SerilogConfig serilogConfig = ConfigLoader.LoadSerilogConfig();
+ SerilogConfig serilogConfig = LoggingConfigLoader.LoadSerilogConfig();
// 初始化 Serilog(全局唯一)| Initialize Serilog (global singleton)
SerilogInitializer.Initialize(serilogConfig);
@@ -171,12 +175,12 @@ namespace XplorePlane
{
var cameraVm = bootstrapper.Container.Resolve();
cameraVm?.Dispose();
- Log.Information("导航相机 ViewModel 已释放");
+ Log.Information("Navigation camera ViewModel has been released");
}
}
catch (Exception ex)
{
- Log.Error(ex, "导航相机 ViewModel 释放失败");
+ Log.Error(ex, "Navigation camera ViewModel release failed");
}
// 释放导航相机服务资源
@@ -187,12 +191,12 @@ namespace XplorePlane
{
var cameraService = bootstrapper.Container.Resolve();
cameraService?.Dispose();
- Log.Information("导航相机服务资源已释放");
+ Log.Information("Navigation camera service resources have been released");
}
}
catch (Exception ex)
{
- Log.Error(ex, "导航相机服务资源释放失败");
+ Log.Error(ex, "Navigation camera service resource release failed");
}
// 释放主界面探测器帧流水线资源
@@ -335,14 +339,18 @@ namespace XplorePlane
_modulesInitialized = true;
}
+ // 执行授权检查 | Perform license authorization check
+ if (!PerformLicenseCheck())
+ {
+ Application.Current.Shutdown();
+ return null;
+ }
+
var shell = Container.Resolve();
- // 主窗口加载完成后再连接相机,确保所有模块和原生 DLL 已完成初始化
+ // 主窗体加载完成后再连接相机,确保所有模块和原生 DLL 已完成初始化
shell.Loaded += async (s, e) =>
{
- // [DEV] 导航相机连接已屏蔽,开发阶段跳过以加快启动速度
- // TryConnectCamera();
-
// 初始化主界面探测器帧流水线,开始接收探测器图像事件
try
{
@@ -366,11 +374,22 @@ namespace XplorePlane
// {
// Log.Error(ex, "通知相机 ViewModel 失败");
// }
+ // [DEV] 导航相机连接已屏蔽,开发阶段跳过以加快启动速度
+ //TryConnectCamera();
+ //try
+ //{
+ // var cameraVm = Container.Resolve();
+ // cameraVm.OnCameraReady();
+ //}
+ //catch (Exception ex)
+ //{
+ // Log.Error(ex, "Failed to notify the camera ViewModel");
+ //}
- // if (_cameraError != null)
- // {
- // HexMessageBox.Show(_cameraError, MessageBoxButton.OK, MessageBoxImage.Error);
- // }
+ //if (_cameraError != null)
+ //{
+ // HexMessageBox.Show(_cameraError, MessageBoxButton.OK, MessageBoxImage.Error);
+ //}
};
return shell;
@@ -378,7 +397,7 @@ namespace XplorePlane
///
/// 若 App.config 中 Detector:Type = Simulated,自动初始化并启动连续采集。
- /// 真实硬件类型不受影响。
+ /// 真实硬件类型不会影响。
///
private async System.Threading.Tasks.Task TryAutoStartSimulatedDetectorAsync()
{
@@ -414,6 +433,102 @@ namespace XplorePlane
}
}
+ ///
+ /// 执行授权检查,授权失败时显示错误消息 | Perform license check, show error message on failure
+ ///
+ /// 授权是否成功 | Whether authorization succeeded
+ private bool PerformLicenseCheck()
+ {
+ try
+ {
+ var licenseService = Container.Resolve();
+ var result = licenseService.CheckAuthorization();
+
+ if (!result.IsAuthorized)
+ {
+ Log.Error("授权检查失败 | Authorization check failed: {Message}", result.Message);
+ MessageBox.Show(
+ result.Message,
+ "授权失败 | Authorization Failed",
+ MessageBoxButton.OK,
+ MessageBoxImage.Error);
+ return false;
+ }
+
+ // 临时测试模式专属:订阅倒计时事件并提示 | Temporary test mode only: subscribe countdown events and notify
+ if (licenseService.LicenseMode == XP.Common.License.Enums.LicenseMode.TemporaryTest)
+ {
+ licenseService.TestModeWarning5Min += OnTestModeWarning5Min;
+ licenseService.TestModeWarning1Min += OnTestModeWarning1Min;
+ licenseService.TestModeTimeout += OnTestModeTimeout;
+
+ MessageBox.Show(
+ "当前为临时测试模式,软件将在15分钟后自动关闭。\nCurrently in temporary test mode, the software will automatically shut down after 15 minutes.",
+ "临时测试模式 | Temporary Test Mode",
+ MessageBoxButton.OK,
+ MessageBoxImage.Information);
+ }
+
+ Log.Information("授权检查通过 | Authorization check passed, Mode={Mode}", licenseService.LicenseMode);
+ return true;
+ }
+ catch (Exception ex)
+ {
+ Log.Error(ex, "授权检查过程中发生异常 | Exception during authorization check");
+ MessageBox.Show(
+ $"授权检查异常 | Authorization check exception: {ex.Message}",
+ "授权失败 | Authorization Failed",
+ MessageBoxButton.OK,
+ MessageBoxImage.Error);
+ return false;
+ }
+ }
+
+ ///
+ /// 处理临时测试模式剩余5分钟警告 | Handle temporary test mode 5-minute warning
+ ///
+ private void OnTestModeWarning5Min(object? sender, EventArgs e)
+ {
+ Application.Current.Dispatcher.Invoke(() =>
+ {
+ Log.Warning("临时测试模式剩余5分钟 | Temporary test mode: 5 minutes remaining");
+ MessageBox.Show(
+ "临时测试模式将在5分钟后到期,请尽快保存您的工作。\nTemporary test mode will expire in 5 minutes, please save your work.",
+ "测试模式提醒 | Test Mode Reminder",
+ MessageBoxButton.OK,
+ MessageBoxImage.Information);
+ });
+ }
+
+ ///
+ /// 处理临时测试模式剩余1分钟警告 | Handle temporary test mode 1-minute warning
+ ///
+ private void OnTestModeWarning1Min(object? sender, EventArgs e)
+ {
+ Application.Current.Dispatcher.Invoke(() =>
+ {
+ Log.Warning("临时测试模式剩余1分钟 | Temporary test mode: 1 minute remaining");
+ MessageBox.Show(
+ "临时测试模式将在1分钟后到期,软件即将关闭,请立即保存您的工作。\nTemporary test mode will expire in 1 minute, the software will shut down soon. Please save your work immediately.",
+ "测试模式即将到期 | Test Mode Expiring",
+ MessageBoxButton.OK,
+ MessageBoxImage.Warning);
+ });
+ }
+
+ ///
+ /// 处理临时测试模式超时事件(执行正常关闭流程)| Handle temporary test mode timeout event (perform graceful shutdown)
+ ///
+ private void OnTestModeTimeout(object? sender, EventArgs e)
+ {
+ Application.Current.Dispatcher.Invoke(() =>
+ {
+ Log.Warning("临时测试模式已超时,执行正常关闭流程 | Temporary test mode timed out, performing graceful shutdown");
+ // 使用正常关闭流程,确保资源正确释放 | Use graceful shutdown to ensure proper resource release
+ Application.Current.MainWindow?.Close();
+ });
+ }
+
///
/// 在主线程上检索并连接导航相机。
/// pylon SDK 要求在主线程(STA)上操作,不能放到后台线程。
@@ -425,17 +540,17 @@ namespace XplorePlane
try
{
var info = camera.Open();
- Log.Information("导航相机已连接: {ModelName} (SN: {SerialNumber})", info.ModelName, info.SerialNumber);
+ Log.Information("Navigation camera connected: {ModelName} (SN: {SerialNumber})", info.ModelName, info.SerialNumber);
}
catch (DeviceNotFoundException)
{
- Log.Warning("未检测到导航相机");
- _cameraError = "未检测到导航相机,请检查连接后重启软件。";
+ Log.Warning("Navigation camera not detected");
+ _cameraError = "Navigation camera not detected,Please check the connection and restart the software.。";
}
catch (Exception ex)
{
- Log.Warning(ex, "导航相机自动连接失败: {Message}", ex.Message);
- _cameraError = $"导航相机连接失败: {ex.Message}";
+ Log.Warning(ex, "Automatic connection of navigation camera failed: {Message}", ex.Message);
+ _cameraError = $"Navigation camera connection failed: {ex.Message}";
}
}
@@ -469,7 +584,6 @@ namespace XplorePlane
containerRegistry.RegisterSingleton();
containerRegistry.Register();
-
// 注册流水线服务(单例,共享 IImageProcessingService)
containerRegistry.RegisterSingleton();
containerRegistry.RegisterSingleton();
@@ -487,19 +601,20 @@ namespace XplorePlane
// 注册流水线 ViewModel(每次解析创建新实例)
containerRegistry.Register();
containerRegistry.Register();
+ containerRegistry.Register();
// 注册硬件库的 ViewModel(供 ViewModelLocator 自动装配)
containerRegistry.Register();
// 注册 SQLite 配置和数据库上下文(FilamentLifetimeService 依赖)
- var sqliteConfig = XP.Common.Helpers.ConfigLoader.LoadSqliteConfig();
+ var sqliteConfig = DatabaseConfigLoader.LoadSqliteConfig();
containerRegistry.RegisterInstance(sqliteConfig);
containerRegistry.RegisterSingleton();
// 注册通用模块的服务(本地化、Dump)
containerRegistry.RegisterSingleton();
containerRegistry.RegisterSingleton();
- containerRegistry.RegisterSingleton(() => XP.Common.Helpers.ConfigLoader.LoadDumpConfig());
+ containerRegistry.RegisterSingleton(() => DumpConfigLoader.LoadDumpConfig());
containerRegistry.RegisterSingleton();
// ── CNC / 矩阵编排 / 测量数据服务(单例)──
@@ -528,7 +643,26 @@ namespace XplorePlane
// ── 导航相机服务(单例)──
containerRegistry.RegisterSingleton();
containerRegistry.RegisterSingleton(() =>
- new CameraFactory().CreateController("Basler"));
+ {
+ string cameraType = "Hikvision"; // 默认值
+ try
+ {
+ var configPath = Path.Combine(AppContext.BaseDirectory, "config.json");
+ if (File.Exists(configPath))
+ {
+ var json = File.ReadAllText(configPath);
+ var match = System.Text.RegularExpressions.Regex.Match(json, "\"CameraType\"\\s*:\\s*\"([^\"]+)\"");
+ if (match.Success)
+ cameraType = match.Groups[1].Value;
+ }
+ }
+ catch (Exception ex)
+ {
+ Log.Warning(ex, "Failed to read CameraType configuration, using default value Hikvision");
+ }
+ Log.Information("Camera Type: {CameraType}", cameraType);
+ return new CameraFactory().CreateController(cameraType);
+ });
containerRegistry.RegisterSingleton();
// ── 录制服务(单例)──
@@ -556,4 +690,4 @@ namespace XplorePlane
base.ConfigureModuleCatalog(moduleCatalog);
}
}
-}
+}
\ No newline at end of file
diff --git a/XplorePlane/Assets/Icons/FittedCircle.png b/XplorePlane/Assets/Icons/FittedCircle.png
new file mode 100644
index 0000000..13ac0d8
Binary files /dev/null and b/XplorePlane/Assets/Icons/FittedCircle.png differ
diff --git a/XplorePlane/Assets/Icons/FittedLine.png b/XplorePlane/Assets/Icons/FittedLine.png
new file mode 100644
index 0000000..d6e7f7c
Binary files /dev/null and b/XplorePlane/Assets/Icons/FittedLine.png differ
diff --git a/XplorePlane/Assets/Icons/Matching.png b/XplorePlane/Assets/Icons/Matching.png
new file mode 100644
index 0000000..bcf4ca2
Binary files /dev/null and b/XplorePlane/Assets/Icons/Matching.png differ
diff --git a/XplorePlane/Events/MeasurementToolEvent.cs b/XplorePlane/Events/MeasurementToolEvent.cs
index daa45a2..2253239 100644
--- a/XplorePlane/Events/MeasurementToolEvent.cs
+++ b/XplorePlane/Events/MeasurementToolEvent.cs
@@ -1,7 +1,21 @@
+using System.Collections.Generic;
+using System.Drawing;
using Prism.Events;
namespace XplorePlane.Events
{
+ ///
+ /// 白底/黑底检测单条结果:全局图像坐标下的轮廓与最远弦(微米与既有展示规则一致)。
+ ///
+ public class BackgroundDefectDetectionItem
+ {
+ public List Contour { get; set; } = new();
+ /// 轮廓顶点间最远距离(微米)。
+ public double SizeMicrometers { get; set; }
+ public Point ChordP1 { get; set; }
+ public Point ChordP2 { get; set; }
+ }
+
///
/// 测量工具模式
///
@@ -13,7 +27,8 @@ namespace XplorePlane.Events
Angle,
ThroughHoleFillRate,
BgaVoid,
- BubbleMeasure
+ BubbleMeasure,
+ EdgeLineFit
}
///
@@ -25,4 +40,51 @@ namespace XplorePlane.Events
/// 十字辅助线切换事件
///
public class ToggleCrosshairEvent : PubSubEvent { }
+
+ ///
+ /// 行灰度分布切换事件
+ ///
+ public class ToggleLineProfileEvent : PubSubEvent { }
+
+ ///
+ /// 白底检测事件(进入ROI绘制模式)
+ ///
+ public class WhiteBackgroundDetectionEvent : PubSubEvent { }
+
+ ///
+ /// 白底检测ROI绘制完成事件
+ ///
+ public class WhiteBackgroundRoiDrawnEvent : PubSubEvent { }
+
+ ///
+ /// 白底检测结果事件
+ ///
+ public class WhiteBackgroundResultEvent : PubSubEvent { }
+
+ public class WhiteBackgroundResultPayload
+ {
+ public System.Drawing.Rectangle RoiRect { get; set; }
+ public List Detections { get; set; } = new();
+ }
+
+ ///
+ /// 黑底检测事件(进入ROI绘制模式)
+ ///
+ public class BlackBackgroundDetectionEvent : PubSubEvent { }
+
+ ///
+ /// 黑底检测ROI绘制完成事件
+ ///
+ public class BlackBackgroundRoiDrawnEvent : PubSubEvent { }
+
+ ///
+ /// 黑底检测结果事件
+ ///
+ public class BlackBackgroundResultEvent : PubSubEvent { }
+
+ public class BlackBackgroundResultPayload
+ {
+ public System.Drawing.Rectangle RoiRect { get; set; }
+ public List Detections { get; set; } = new();
+ }
}
diff --git a/XplorePlane/Events/TemplateMatchAssistantEvents.cs b/XplorePlane/Events/TemplateMatchAssistantEvents.cs
new file mode 100644
index 0000000..f83747e
--- /dev/null
+++ b/XplorePlane/Events/TemplateMatchAssistantEvents.cs
@@ -0,0 +1,47 @@
+using System.Collections.Generic;
+using System.Windows;
+using Prism.Events;
+
+namespace XplorePlane.Events;
+
+///
+/// 进入「在视口上框选模板 ROI」模式(与主画布 Preview 鼠标逻辑配合)。
+///
+public class TemplateMatchEnterRoiModeEvent : PubSubEvent { }
+
+///
+/// 模板 ROI 框选完成(图像/画布像素坐标,与白底检测 ROI 约定一致)。仅表示区域已确定,不表示已训练。
+///
+public class TemplateMatchRoiDrawnEvent : PubSubEvent { }
+
+///
+/// 清除视口上的模板助手持久 ROI 框(例如加载模型后或重置时)。
+///
+public class TemplateMatchClearRoiOverlayEvent : PubSubEvent { }
+
+///
+/// 单次模板匹配试跑结果,供主视图叠加层绘制。
+///
+public class TemplateMatchHitDto
+{
+ public double CenterX { get; set; }
+ public double CenterY { get; set; }
+ public double Angle { get; set; }
+ public double Score { get; set; }
+ public double LtX { get; set; }
+ public double LtY { get; set; }
+ public double RtX { get; set; }
+ public double RtY { get; set; }
+ public double RbX { get; set; }
+ public double RbY { get; set; }
+ public double LbX { get; set; }
+ public double LbY { get; set; }
+}
+
+public class TemplateMatchPreviewPayload
+{
+ public List Hits { get; set; } = new();
+ public double MatchTimeMs { get; set; }
+}
+
+public class TemplateMatchPreviewResultEvent : PubSubEvent { }
diff --git a/XplorePlane/ViewModels/ImageProcessing/EdgeCircleFitViewModel.cs b/XplorePlane/ViewModels/ImageProcessing/EdgeCircleFitViewModel.cs
new file mode 100644
index 0000000..2bee916
--- /dev/null
+++ b/XplorePlane/ViewModels/ImageProcessing/EdgeCircleFitViewModel.cs
@@ -0,0 +1,497 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+using Emgu.CV;
+using Emgu.CV.Structure;
+using Prism.Commands;
+using Prism.Mvvm;
+using XP.ImageProcessing.Processors;
+using XP.ImageProcessing.RoiControl.Controls;
+using XplorePlane.Services.MainViewport;
+using Brushes = System.Windows.Media.Brushes;
+using Ellipse = System.Windows.Shapes.Ellipse;
+using Point = System.Windows.Point;
+
+namespace XplorePlane.ViewModels.ImageProcessing
+{
+ ///
+ /// 边缘查找拟合圆 ViewModel
+ /// 交互:3点定义预估圆,手柄可调整圆心和半径,点击拟合执行
+ ///
+ public class EdgeCircleFitViewModel : BindableBase
+ {
+ private readonly IMainViewportService _viewportService;
+ private PolygonRoiCanvas _canvas;
+ private Canvas _mainCanvas;
+
+ // 预估圆
+ private Point _center;
+ private double _radius;
+ private bool _circleDefined;
+
+ // 可视化
+ private readonly List _tempOverlays = new();
+ private readonly List _committedOverlays = new();
+
+ // 手柄位置
+ private Point _handleCenterPos;
+ private Point _handleRadiusPos; // 圆周上0°位置
+
+ // 交互
+ private enum DragTarget { None, Center, Radius }
+ private DragTarget _dragging = DragTarget.None;
+ private bool _isDrawing;
+ private int _fitCount;
+
+ private const double HandleSize = 12;
+ private const double HitRadius = 10;
+ private static readonly SolidColorBrush CaliperStroke;
+ private static readonly SolidColorBrush CaliperFill;
+ private static readonly SolidColorBrush FitCircleBrush;
+ private static readonly SolidColorBrush HandleFill;
+
+ static EdgeCircleFitViewModel()
+ {
+ CaliperStroke = new SolidColorBrush(Color.FromRgb(0, 255, 0));
+ CaliperStroke.Freeze();
+ CaliperFill = new SolidColorBrush(Color.FromArgb(15, 0, 255, 0));
+ CaliperFill.Freeze();
+ FitCircleBrush = new SolidColorBrush(Color.FromRgb(30, 144, 255));
+ FitCircleBrush.Freeze();
+ HandleFill = new SolidColorBrush(Color.FromArgb(220, 255, 255, 255));
+ HandleFill.Freeze();
+ }
+
+ public EdgeCircleFitViewModel(IMainViewportService viewportService)
+ {
+ _viewportService = viewportService;
+ FitCommand = new DelegateCommand(ExecuteFit, () => _circleDefined);
+ ClearAllCommand = new DelegateCommand(ExecuteClearAll);
+ DrawCircleCommand = new DelegateCommand(ExecuteDrawCircle);
+ }
+
+ // ── 命令 ──
+ public DelegateCommand FitCommand { get; }
+ public DelegateCommand ClearAllCommand { get; }
+ public DelegateCommand DrawCircleCommand { get; }
+
+ // ── 参数 ──
+ private int _caliperCount = 36;
+ public int CaliperCount { get => _caliperCount; set { if (SetProperty(ref _caliperCount, value)) RedrawTemp(); } }
+
+ private int _caliperWidth = 40;
+ public int CaliperWidth { get => _caliperWidth; set { if (SetProperty(ref _caliperWidth, value)) RedrawTemp(); } }
+
+ private string _edgePolarity = "Both";
+ public string EdgePolarity { get => _edgePolarity; set { if (SetProperty(ref _edgePolarity, value)) RedrawTemp(); } }
+
+ private int _edgeThreshold = 20;
+ public int EdgeThreshold { get => _edgeThreshold; set => SetProperty(ref _edgeThreshold, value); }
+
+ private double _sigma = 1.0;
+ public double Sigma { get => _sigma; set => SetProperty(ref _sigma, value); }
+
+ private string _searchDirection = "Both";
+ public string SearchDirection { get => _searchDirection; set => SetProperty(ref _searchDirection, value); }
+
+ private string _fitMethod = "RANSAC";
+ public string FitMethod { get => _fitMethod; set => SetProperty(ref _fitMethod, value); }
+
+ private double _ransacThreshold = 2.0;
+ public double RansacThreshold { get => _ransacThreshold; set => SetProperty(ref _ransacThreshold, value); }
+
+ private string _resultText = "Ready - click Draw Circle";
+ public string ResultText { get => _resultText; set => SetProperty(ref _resultText, value); }
+
+ // ── 初始化 ──
+ public void SetCanvas(PolygonRoiCanvas canvas)
+ {
+ _canvas = canvas;
+ _mainCanvas = FindChild