diff --git a/.buildinfo b/.buildinfo index c4828ff..11f10b2 100644 --- a/.buildinfo +++ b/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: e169426e4526ef624160678ae44ec8f7 +config: 252674583c9f67484aabf36fe01b62a3 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/_sources/overview.rst.txt b/_sources/overview.rst.txt index 6c56657..393ddd6 100644 --- a/_sources/overview.rst.txt +++ b/_sources/overview.rst.txt @@ -23,10 +23,10 @@ Modbus supports the following 3 communication-link layers: - TCP/IP using standard port 502. * - UDP - UDP/IP using standard port 502. The use of UDP/IP is not part of the MODBUS - - standard but is useful for FPGAs with Ethernet in firmware which may provide - - support only for UDP. The only difference between TCP and UDP operation is - - that when using UDP a missing reply packet is not considered to - - be an error until the transaction has been attempted 5 times. + standard but is useful for FPGAs with Ethernet in firmware which may provide + support only for UDP. The only difference between TCP and UDP operation is + that when using UDP a missing reply packet is not considered to + be an error until the transaction has been attempted 5 times. * - RTU - RTU is normally run over serial communication links, i.e. RS-232, RS-422, or RS-485. RTU uses an additional CRC for packet checking. The diff --git a/_static/basic.css b/_static/basic.css index 30fee9d..f316efc 100644 --- a/_static/basic.css +++ b/_static/basic.css @@ -4,7 +4,7 @@ * * Sphinx stylesheet -- basic theme. * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ diff --git a/_static/doctools.js b/_static/doctools.js index d06a71d..4d67807 100644 --- a/_static/doctools.js +++ b/_static/doctools.js @@ -4,7 +4,7 @@ * * Base JavaScript utilities for all Sphinx HTML documentation. * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ diff --git a/_static/language_data.js b/_static/language_data.js index 250f566..367b8ed 100644 --- a/_static/language_data.js +++ b/_static/language_data.js @@ -5,7 +5,7 @@ * This script contains the language-specific data used by searchtools.js, * namely the list of stopwords, stemmer, scorer and splitter. * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -13,7 +13,7 @@ var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; -/* Non-minified version is copied as a separate JS file, is available */ +/* Non-minified version is copied as a separate JS file, if available */ /** * Porter Stemmer diff --git a/_static/searchtools.js b/_static/searchtools.js index 7918c3f..92da3f8 100644 --- a/_static/searchtools.js +++ b/_static/searchtools.js @@ -4,7 +4,7 @@ * * Sphinx JavaScript utilities for the full-text search. * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -99,7 +99,7 @@ const _displayItem = (item, searchTerms, highlightTerms) => { .then((data) => { if (data) listItem.appendChild( - Search.makeSearchSummary(data, searchTerms) + Search.makeSearchSummary(data, searchTerms, anchor) ); // highlight search terms in the summary if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js @@ -116,8 +116,8 @@ const _finishSearch = (resultCount) => { ); else Search.status.innerText = _( - `Search finished, found ${resultCount} page(s) matching the search query.` - ); + "Search finished, found ${resultCount} page(s) matching the search query." + ).replace('${resultCount}', resultCount); }; const _displayNextItem = ( results, @@ -137,6 +137,22 @@ const _displayNextItem = ( // search finished, update title and status message else _finishSearch(resultCount); }; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; /** * Default splitQuery function. Can be overridden in ``sphinx.search`` with a @@ -160,13 +176,26 @@ const Search = { _queued_query: null, _pulse_status: -1, - htmlToText: (htmlString) => { + htmlToText: (htmlString, anchor) => { const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); - htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + for (const removalQuery of [".headerlinks", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content const docContent = htmlElement.querySelector('[role="main"]'); - if (docContent !== undefined) return docContent.textContent; + if (docContent) return docContent.textContent; + console.warn( - "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." ); return ""; }, @@ -239,16 +268,7 @@ const Search = { else Search.deferQuery(query); }, - /** - * execute search (requires search index to be loaded) - */ - query: (query) => { - const filenames = Search._index.filenames; - const docNames = Search._index.docnames; - const titles = Search._index.titles; - const allTitles = Search._index.alltitles; - const indexEntries = Search._index.indexentries; - + _parseQuery: (query) => { // stem the search terms and add them to the correct list const stemmer = new Stemmer(); const searchTerms = new Set(); @@ -284,16 +304,32 @@ const Search = { // console.info("required: ", [...searchTerms]); // console.info("excluded: ", [...excludedTerms]); - // array of [docname, title, anchor, descr, score, filename] - let results = []; + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename]. + const normalResults = []; + const nonMainIndexResults = []; + _removeChildren(document.getElementById("search-progress")); - const queryLower = query.toLowerCase(); + const queryLower = query.toLowerCase().trim(); for (const [title, foundTitles] of Object.entries(allTitles)) { - if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { for (const [file, id] of foundTitles) { let score = Math.round(100 * queryLower.length / title.length) - results.push([ + normalResults.push([ docNames[file], titles[file] !== title ? `${titles[file]} > ${title}` : title, id !== null ? "#" + id : "", @@ -308,46 +344,47 @@ const Search = { // search for explicit entries in index directives for (const [entry, foundEntries] of Object.entries(indexEntries)) { if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { - for (const [file, id] of foundEntries) { - let score = Math.round(100 * queryLower.length / entry.length) - results.push([ + for (const [file, id, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ docNames[file], titles[file], id ? "#" + id : "", null, score, filenames[file], - ]); + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } } } } // lookup as object objectTerms.forEach((term) => - results.push(...Search.performObjectSearch(term, objectTerms)) + normalResults.push(...Search.performObjectSearch(term, objectTerms)) ); // lookup as search terms in fulltext - results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); // let the scorer override scores with a custom scoring function - if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); - - // now sort the results by score (in opposite order of appearance, since the - // display function below uses pop() to retrieve items) and then - // alphabetically - results.sort((a, b) => { - const leftScore = a[4]; - const rightScore = b[4]; - if (leftScore === rightScore) { - // same score: sort alphabetically - const leftTitle = a[1].toLowerCase(); - const rightTitle = b[1].toLowerCase(); - if (leftTitle === rightTitle) return 0; - return leftTitle > rightTitle ? -1 : 1; // inverted is intentional - } - return leftScore > rightScore ? 1 : -1; - }); + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; // remove duplicate search results // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept @@ -361,7 +398,12 @@ const Search = { return acc; }, []); - results = results.reverse(); + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); // for debugging //Search.lastresults = results.slice(); // a copy @@ -466,14 +508,18 @@ const Search = { // add support for partial matches if (word.length > 2) { const escapedWord = _escapeRegExp(word); - Object.keys(terms).forEach((term) => { - if (term.match(escapedWord) && !terms[word]) - arr.push({ files: terms[term], score: Scorer.partialTerm }); - }); - Object.keys(titleTerms).forEach((term) => { - if (term.match(escapedWord) && !titleTerms[word]) - arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); - }); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } } // no match but word was a required one @@ -496,9 +542,8 @@ const Search = { // create the mapping files.forEach((file) => { - if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) - fileMap.get(file).push(word); - else fileMap.set(file, [word]); + if (!fileMap.has(file)) fileMap.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); }); }); @@ -549,8 +594,8 @@ const Search = { * search summary for a given text. keywords is a list * of stemmed words. */ - makeSearchSummary: (htmlText, keywords) => { - const text = Search.htmlToText(htmlText); + makeSearchSummary: (htmlText, keywords, anchor) => { + const text = Search.htmlToText(htmlText, anchor); if (text === "") return null; const textLower = text.toLowerCase(); diff --git a/acknowledgments.html b/acknowledgments.html index ba22580..fa94978 100644 --- a/acknowledgments.html +++ b/acknowledgments.html @@ -16,7 +16,7 @@ - + @@ -102,7 +102,7 @@

Acknowledgments

© Copyright 2023, Mark Rivers. - Last updated on 2024-April-16. + Last updated on 2024-April-22.

diff --git a/creating_driver.html b/creating_driver.html index b21790e..ea70a3b 100644 --- a/creating_driver.html +++ b/creating_driver.html @@ -16,7 +16,7 @@ - + @@ -582,7 +582,7 @@

Number formats

© Copyright 2023, Mark Rivers. - Last updated on 2024-April-16. + Last updated on 2024-April-22.

diff --git a/debugging.html b/debugging.html index 8dc4b3a..51a0d14 100644 --- a/debugging.html +++ b/debugging.html @@ -16,7 +16,7 @@ - + @@ -222,7 +222,7 @@

asynRegister.adl

© Copyright 2023, Mark Rivers. - Last updated on 2024-April-16. + Last updated on 2024-April-22.

diff --git a/device_support.html b/device_support.html index 0ed245e..63ddbdf 100644 --- a/device_support.html +++ b/device_support.html @@ -16,7 +16,7 @@ - + @@ -799,7 +799,7 @@

Template files

© Copyright 2023, Mark Rivers. - Last updated on 2024-April-16. + Last updated on 2024-April-22.

diff --git a/driver_architecture.html b/driver_architecture.html index 94ea466..42f7807 100644 --- a/driver_architecture.html +++ b/driver_architecture.html @@ -16,7 +16,7 @@ - + @@ -261,7 +261,7 @@

Platform independence

© Copyright 2023, Mark Rivers. - Last updated on 2024-April-16. + Last updated on 2024-April-22.

diff --git a/example_applications.html b/example_applications.html index 2a1986d..1bcccad 100644 --- a/example_applications.html +++ b/example_applications.html @@ -16,7 +16,7 @@ - + @@ -292,7 +292,7 @@

Example Applications

© Copyright 2023, Mark Rivers. - Last updated on 2024-April-16. + Last updated on 2024-April-22.

diff --git a/genindex.html b/genindex.html index c443c56..cdcc8d2 100644 --- a/genindex.html +++ b/genindex.html @@ -15,7 +15,7 @@ - + @@ -91,7 +91,7 @@

Index

© Copyright 2023, Mark Rivers. - Last updated on 2024-April-16. + Last updated on 2024-April-22.

diff --git a/index.html b/index.html index bcdff44..55ef175 100644 --- a/index.html +++ b/index.html @@ -16,7 +16,7 @@ - + @@ -167,7 +167,7 @@

Table of Contents

© Copyright 2023, Mark Rivers. - Last updated on 2024-April-16. + Last updated on 2024-April-22.

diff --git a/medm_screens.html b/medm_screens.html index 5a75b30..977422b 100644 --- a/medm_screens.html +++ b/medm_screens.html @@ -16,7 +16,7 @@ - + @@ -187,7 +187,7 @@

Koyo_4ADC.adl

© Copyright 2023, Mark Rivers. - Last updated on 2024-April-16. + Last updated on 2024-April-22.

diff --git a/overview.html b/overview.html index 7ac6ed7..a9e9219 100644 --- a/overview.html +++ b/overview.html @@ -16,7 +16,7 @@ - + @@ -102,7 +102,45 @@

Overview of Modbus

Modbus communication links

Modbus supports the following 3 communication-link layers:

-

This modbus package supports all of the above Modbus + + + + + + + + + + + + + + + + + + + + +

Link type

Description

TCP

TCP/IP using standard port 502.

UDP

UDP/IP using standard port 502. The use of UDP/IP is not part of the MODBUS +standard but is useful for FPGAs with Ethernet in firmware which may provide +support only for UDP. The only difference between TCP and UDP operation is +that when using UDP a missing reply packet is not considered to +be an error until the transaction has been attempted 5 times.

RTU

RTU is normally run over serial communication links, i.e. RS-232, +RS-422, or RS-485. RTU uses an additional CRC for packet checking. The +protocol directly transmits each byte as 8 data bits, so uses “binary” +rather than ASCII encoding. When using serial links start and end of +message frames is detected by timing rather than by specific characters. +RTU can also be run over TCP, though this is less common than the +standard Modbus TCP without RTU.

Serial ASCII

Serial protocol, which is normally run over serial communication links, +i.e. RS-232, RS-422, or RS-485. Serial ASCII uses an additional LRC for +packet checking. The protocol encodes each byte as 2 ASCII characters. +The start and end of message frames is detected by specific characters +(“:” to start a message and CR/LF to end a message). This protocol is +less efficient than RTU, but may be more reliable in some environments. +ASCII can also be run over TCP, though this is much less common than the +standard Modbus TCP.

+

This modbus package supports all of the above Modbus communication-link layers.

@@ -352,7 +390,7 @@

More information on Modbus

© Copyright 2023, Mark Rivers. - Last updated on 2024-April-16. + Last updated on 2024-April-22.

diff --git a/search.html b/search.html index c08c3e8..95a5df3 100644 --- a/search.html +++ b/search.html @@ -16,7 +16,7 @@ - + @@ -99,7 +99,7 @@

© Copyright 2023, Mark Rivers. - Last updated on 2024-April-16. + Last updated on 2024-April-22.

diff --git a/searchindex.js b/searchindex.js index 2f94ef5..9303f78 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["acknowledgments", "creating_driver", "debugging", "device_support", "driver_architecture", "example_applications", "index", "medm_screens", "overview"], "filenames": ["acknowledgments.rst", "creating_driver.rst", "debugging.rst", "device_support.rst", "driver_architecture.rst", "example_applications.rst", "index.rst", "medm_screens.rst", "overview.rst"], "titles": ["Acknowledgments", "Creating a modbus port driver", "Debug tracing", "EPICS device support", "Driver architecture", "Example Applications", "modbus", "medm screens", "Overview of Modbus"], "terms": {"The": [0, 1, 2, 3, 4, 5, 7, 8], "modbu": [0, 2, 3, 5, 7], "packag": [0, 8], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8], "base": [0, 1], "modtcp": 0, "plctcp": 0, "written": [0, 1, 2, 3, 4, 7], "rolf": 0, "keitel": 0, "from": [0, 1, 2, 3, 4, 5, 7, 8], "triumf": 0, "wa": [0, 3, 4], "origin": 0, "convert": [0, 1, 5], "linux": [0, 4, 5], "ivan": 0, "so": [0, 1, 3, 4], "nsl": 0, "extens": [0, 4], "re": 0, "convers": [0, 1, 3, 5], "epic": [0, 1, 2, 4, 5, 6], "3": [0, 1, 2, 3, 4, 5, 7, 8], "14": [0, 1], "us": [0, 1, 2, 3, 4, 5, 6, 7, 8], "asyn": [0, 1, 2, 3, 4, 5, 6], "modul": [0, 1, 4, 6], "It": [0, 1, 3, 4, 5, 7, 8], "now": 0, "contain": [0, 1, 3, 8], "littl": [0, 1], "code": [0, 1, 3, 4, 5, 6, 7], "retain": 0, "much": [0, 4], "architectur": [0, 6], "befor": [1, 4], "can": [1, 2, 3, 4, 5, 8], "necessari": [1, 3, 4], "first": [1, 3, 5], "least": 1, "one": [1, 2, 3, 4, 5], "commun": [1, 4, 6, 7], "hardwar": [1, 4], "command": [1, 2, 3, 4, 5], "requir": [1, 3, 4], "depend": [1, 3, 4], "link": [1, 3, 6], "being": [1, 2, 3, 4, 7], "For": [1, 2, 3, 4, 5, 8], "follow": [1, 2, 3, 4, 5, 7, 8], "standard": [1, 3, 4], "drvasynipportconfigur": [1, 5], "portnam": [1, 3, 5], "hostinfo": [1, 5], "prioriti": [1, 5], "noautoconnect": [1, 5], "noprocesseo": [1, 5], "document": [1, 3, 8], "thi": [1, 2, 3, 4, 5, 6, 7, 8], "found": [1, 8], "asyndriv": 1, "exampl": [1, 2, 3, 4, 6, 7], "an": [1, 2, 3, 4, 5, 6, 7, 8], "call": [1, 4, 5], "koyo1": [1, 2, 5, 6], "502": [1, 2, 5], "address": [1, 3, 4, 5, 6], "164": [1, 2, 5], "54": [1, 2, 5], "160": [1, 2, 5], "158": [1, 2, 5], "default": [1, 3], "flag": 1, "set": [1, 2, 3, 4, 5], "0": [1, 2, 3, 4, 5, 8], "asynmanag": [1, 4], "do": [1, 4, 5], "normal": [1, 3, 4, 5], "automat": 1, "connect": [1, 2, 5, 8], "manag": 1, "asyninterposeeo": 1, "interfac": [1, 2, 3, 4, 5, 7], "handl": [1, 4], "end": [1, 3], "string": [1, 3], "eo": 1, "process": [1, 2, 3, 4], "which": [1, 3, 5], "need": [1, 4, 5], "howev": [1, 4, 5], "also": [1, 2, 3, 4, 5], "issu": 1, "repeat": 1, "read": [1, 2, 3, 5, 6, 7, 8], "request": [1, 2, 4, 8], "until": [1, 3], "byte": [1, 3, 5, 8], "ha": [1, 3, 4, 5], "been": [1, 4, 5], "receiv": [1, 4], "low": [1, 4], "level": [1, 2, 4, 7, 8], "doe": [1, 3, 4, 5], "send": [1, 4], "respons": [1, 4, 8], "singl": [1, 3, 4, 5, 8], "packet": 1, "mai": [1, 4, 5], "asyninterpos": 1, "harm": 1, "definit": 1, "when": [1, 2, 3, 4, 5], "talk": 1, "termin": [1, 3], "server": [1, 2, 4, 5, 8], "over": [1, 8], "becaus": [1, 3, 4], "well": 1, "broken": 1, "up": [1, 3, 4, 5], "multipl": [1, 3, 4, 5, 8], "To": [1, 2], "rather": [1, 4], "than": [1, 4], "add": 1, "after": [1, 3, 4, 5], "host": 1, "name": [1, 3], "option": [1, 3, 5], "recommend": 1, "even": [1, 4], "actual": [1, 2, 3], "drvasynserialportconfigur": [1, 5], "ttynam": [1, 5], "asynsetopt": [1, 5], "addr": [1, 2, 3], "kei": 1, "valu": [1, 2, 3, 4, 5, 7, 8], "local": 1, "dev": [1, 5], "ttys1": [1, 5], "paramet": [1, 3, 4, 5], "ar": [1, 2, 3, 4, 5, 7, 8], "configur": [1, 4, 5], "38400": [1, 5], "baud": [1, 5], "pariti": [1, 5], "8": [1, 3, 5, 8], "bit": [1, 3, 4, 5, 7, 8], "1": [1, 2, 3, 4, 5, 7, 8], "stop": [1, 5], "none": [1, 5], "same": [1, 3, 4, 5], "describ": [1, 4, 8], "abov": [1, 3, 4, 7, 8], "asynoctetsetoutputeo": [1, 5], "asynoctetsetinputeo": [1, 5], "input": [1, 3, 4, 5, 6, 7], "output": [1, 2, 3, 4, 5, 7, 8], "cr": 1, "lf": 1, "r": [1, 3, 5], "n": [1, 5], "asynipport": 1, "asynserialport": 1, "next": 1, "step": 1, "interpos": [1, 4], "take": 1, "independ": [1, 6], "frame": [1, 4], "remov": 1, "specif": [1, 2, 3, 8], "inform": [1, 2, 6], "protocol": [1, 4, 8], "linktyp": [1, 5], "timeoutmsec": [1, 5], "writedelaymsec": [1, 5], "descript": [1, 3, 8], "previous": 1, "int": [1, 5], "layer": [1, 4, 8], "2": [1, 2, 3, 4, 5, 8], "timeout": [1, 3], "millisecond": [1, 3], "write": [1, 2, 3, 5, 6, 7, 8], "oper": [1, 3, 4, 8], "underli": [1, 2, 4], "asynoctet": [1, 4, 6], "place": 1, "specifi": [1, 3, 4, 8], "support": [1, 4, 5, 6, 8], "If": [1, 3, 4], "zero": [1, 5], "2000": [1, 3, 4, 8], "delai": [1, 3, 4, 5], "each": [1, 2, 3, 4, 5, 7], "typic": [1, 4, 8], "onli": [1, 3, 4, 5, 8], "modicon": 1, "refer": [1, 3], "guid": 1, "sai": 1, "must": [1, 4, 5], "5": [1, 2, 3, 4, 5, 7, 8], "charact": [1, 3, 4], "time": [1, 2, 3, 4, 7], "e": [1, 3, 4], "g": [1, 3, 4], "about": [1, 8], "5m": 1, "9600": 1, "would": [1, 4, 5], "second": [1, 3, 4], "m": 1, "1000": [1, 5], "onc": [1, 3, 4], "modbusinterpos": 1, "tcpportnam": 1, "slaveaddress": 1, "modbusfunct": [1, 2], "modbusstartaddress": [1, 2, 4], "modbuslength": [1, 2, 3], "datatyp": [1, 3], "pollmsec": 1, "plctype": [1, 2], "slave": [1, 5, 7, 8], "match": 1, "plc": [1, 2, 3, 4, 5, 7, 8], "unit": 1, "identifi": 1, "last": [1, 2, 3, 4, 5], "field": [1, 2, 3, 4], "mbap": 1, "header": 1, "ignor": 1, "most": [1, 5], "some": [1, 3, 4, 8], "function": [1, 3, 5, 6, 7], "4": [1, 2, 3, 4, 5, 7, 8], "6": [1, 2, 3, 4, 5, 7, 8], "15": [1, 3, 4, 5, 8], "16": [1, 3, 4, 5, 8], "17": [1, 2, 4, 8], "123": [1, 4, 8], "23": [1, 3, 4, 8], "223": [1, 4], "start": [1, 3, 4, 5, 8], "segment": 1, "access": [1, 2, 3, 4, 5, 7, 8], "rel": [1, 3, 4], "rang": [1, 3, 4], "65535": 1, "decim": [1, 5, 8], "0177777": 1, "octal": [1, 5, 8], "absolut": [1, 3, 4], "length": [1, 3, 5, 6], "word": [1, 3, 4, 5, 8], "limit": [1, 3, 4, 6], "1968": [1, 8], "125": [1, 3, 4, 8], "size": 1, "largest": 1, "all": [1, 2, 4, 5, 8], "64": [1, 3], "float": 1, "100": [1, 5], "int32": 1, "waveform": [1, 3, 5, 7], "record": [1, 2, 3, 4, 5, 7], "nelm": [1, 3], "50": 1, "modbusdatatyp": [1, 6], "drvuser": [1, 3], "empti": 1, "modbus_data": [1, 3], "list": [1, 3, 8], "tabl": [1, 3, 8], "below": [1, 4], "argument": [1, 2, 3], "either": [1, 3, 4], "shown": [1, 7], "defin": [1, 3, 8], "drvmodbusasyn": [1, 2, 5], "h": [1, 4], "numer": [1, 5], "modbusdatatype_t": 1, "enum": 1, "less": [1, 4], "conveni": 1, "understand": 1, "equival": 1, "chang": [1, 4], "between": [1, 3, 4, 8], "r3": [1, 4], "startup": [1, 5], "script": [1, 5], "int16": [1, 3], "uint16": [1, 3], "were": [1, 3], "swap": 1, "everyth": 1, "beyond": 1, "int32_l": [1, 3], "differ": [1, 4, 5, 8], "poll": [1, 3, 4], "msec": [1, 2, 3, 4, 7], "thread": [1, 3, 4], "non": [1, 5], "mean": [1, 3, 4], "should": [1, 3, 4], "koyo": [1, 2, 3, 5, 7, 8], "etc": [1, 3, 4], "current": [1, 4, 8], "print": [1, 2, 3], "asynreport": [1, 2], "treat": 1, "special": [1, 3, 4, 8], "substr": 1, "see": 1, "how": [1, 2, 5], "interpret": 1, "sign": [1, 5], "unsign": [1, 5], "binari": [1, 5], "bcd": [1, 5], "In": [1, 4, 5], "fact": [1, 4], "mani": [1, 4], "manufactur": [1, 8], "combin": 1, "encod": 1, "32": [1, 2, 3, 5], "integ": [1, 8], "particular": [1, 4], "overrid": [1, 3], "transfer": [1, 2, 3, 8], "epicsuint32": [1, 3], "epicsint32": [1, 3], "epicsint64": [1, 3], "epicsfloat64": [1, 3], "appli": [1, 4], "asynint32": [1, 2, 4, 5, 6], "asynint64": [1, 4, 5, 6], "asynfloat64": [1, 2, 4, 5, 6, 7], "thei": [1, 4], "asynuint32digit": [1, 2, 4, 6], "alwai": 1, "": [1, 8], "complement": 1, "extend": 1, "int16sm": [1, 3], "magnitud": [1, 5], "adc": [1, 7], "bcd_unsign": 1, "consist": [1, 4, 5, 8], "nibbl": 1, "9": [1, 2, 5, 8], "A": [1, 4, 5, 8], "thu": [1, 3], "store": [1, 4], "9999": 1, "bcd_sign": [1, 3], "digit": [1, 3], "hold": [1, 3, 4, 5, 6], "7999": 1, "endian": 1, "signific": 1, "int32_le_b": 1, "within": [1, 4, 8], "int32_b": [1, 3], "big": 1, "int32_be_b": 1, "uint32_l": 1, "uint32_le_b": 1, "uint32_b": 1, "uint32_be_b": 1, "int64_l": 1, "int64_le_b": 1, "int64_b": 1, "int64_be_b": 1, "uint64_l": 1, "uint64_le_b": 1, "uint64_b": 1, "uint64_be_b": 1, "float32_l": [1, 3], "point": [1, 4], "float32_le_b": 1, "float32_b": [1, 3], "float32_be_b": 1, "float64_l": 1, "float64_le_b": 1, "float64_b": 1, "float64_be_b": 1, "string_high": [1, 3], "One": [1, 2, 4, 5], "high": 1, "string_low": [1, 3], "string_high_low": [1, 3], "two": 1, "string_low_high": [1, 3], "zstring_high": [1, 3], "zstring_low": [1, 3], "zstring_high_low": [1, 3], "zstring_low_high": [1, 3], "desir": 1, "transmit": 1, "untransl": 1, "translat": 1, "done": [1, 3, 4], "case": [1, 4], "zstring_": [1, 3], "meant": 1, "ident": 1, "string_": 1, "counterpart": 1, "_be": 1, "order": [1, 3], "ieee": 1, "machin": 1, "_be_b": 1, "_le": 1, "compar": 1, "_le_b": 1, "backward": 1, "compat": 1, "previou": [1, 4], "version": 1, "ad": [1, 4], "ai": [1, 3, 5, 7], "templat": [1, 6], "p": [1, 3], "dtyp": [1, 3], "inp": [1, 3], "offset": [1, 3, 5, 8], "hopr": [1, 3], "lopr": [1, 3], "prec": [1, 3], "scan": [1, 3, 4], "initi": [1, 3, 4], "other": [1, 3, 4, 8], "back": [1, 4], "0x200": 1, "greater": 1, "readback": [1, 3, 7], "sensit": 1, "affect": 1, "user": 1, "separ": [1, 4, 5], "socket": 1, "possibl": [1, 4], "have": [1, 4], "share": 1, "o": [1, 2, 3, 4, 5, 7, 8], "fashion": 1, "transact": [1, 4], "complet": [1, 3], "anoth": [1, 5], "begin": [1, 5], "proce": 1, "parallel": 1, "could": [1, 4, 5], "improv": [1, 4], "perform": [1, 2, 4, 5, 8], "expens": 1, "more": [1, 2, 6], "cpu": 1, "load": [1, 2, 5], "ioc": [1, 4, 5, 7], "network": [1, 8], "traffic": 1, "import": 1, "out": 1, "few": 1, "inact": 1, "problem": 1, "frequent": 1, "But": 1, "occasion": 1, "henc": [1, 3], "ones": 1, "through": 1, "usual": [1, 4], "avoid": [1, 4], "choic": 1, "per": [1, 3], "empir": 1, "versu": [1, 7], "resourc": 1, "usag": 1, "consider": 1, "gener": [1, 3, 4], "probabl": 1, "good": [1, 4], "idea": 1, "result": [1, 4], "satisfactori": 1, "convent": 1, "iocsh": [1, 2], "vxwork": [1, 2, 4, 5], "shell": [1, 2], "lead": [1, 5], "040400": [1, 2, 5, 8], "obtain": [2, 4], "diagnost": 2, "port": [2, 3, 4, 5, 6], "driver": [2, 3, 5, 6, 7, 8], "dbior": 2, "asynprint": 2, "brief": 2, "report": [2, 8], "includ": [2, 3, 5, 8], "drvasynipport": [2, 4, 6], "drvasynserialport": [2, 4], "partial": 2, "applic": [2, 6, 7, 8], "via": [2, 4], "tcp": [2, 4, 5, 6, 7, 8], "multidevic": 2, "No": 2, "canblock": 2, "ye": 2, "autoconnect": 2, "k1_xn_bit": [2, 5], "enabl": [2, 3, 4, 5], "exceptionact": 2, "7": [2, 8], "k1_xn_word": [2, 5], "detail": 2, "numberconnect": 2, "ndevic": 2, "nqueu": 2, "block": [2, 4], "asynmanagerlock": 2, "synchronouslock": 2, "exceptionus": 2, "exceptionnotifi": 2, "interfacelist": 2, "asyncommon": [2, 3], "pinterfac": 2, "0x4001d180": 2, "drvpvt": 2, "0x8094f78": 2, "asyndrvus": [2, 3], "0x4001d10c": 2, "0x4001d118": 2, "0x4001d134": 2, "0x4001d148": 2, "asynint32arrai": [2, 6], "0x4001d158": 2, "010": [2, 5], "error": [2, 3], "ok": 2, "5728": 2, "polldelai": 2, "100000": 2, "max": 2, "12": [2, 3], "run": [2, 3, 4, 5, 7], "asynsettracemask": [2, 5], "asynsettraceiomask": [2, 5], "show": [2, 5, 7], "traceiohex": 2, "traceerror": 2, "traceiodriv": 2, "2007": 2, "04": 2, "27": 2, "45": 2, "384": 2, "00": [2, 8], "01": 2, "07": 2, "ff": 2, "02": 2, "08": 2, "20": 2, "390": 2, "13": [2, 5, 7], "424": 2, "03": 2, "41": 2, "432": 2, "25": 2, "10": 2, "turn": 2, "off": 2, "k1_yn_in_word": [2, 5], "31": 2, "548": 2, "domodbusio": [2, 4], "read_regist": 2, "09": 2, "656": 2, "770": 2, "878": 2, "987": 2, "disabl": [2, 3], "channel": [2, 5], "medm": [2, 6], "screen": [2, 6], "method": [2, 4], "shot": [2, 7], "control": [2, 3, 4, 5, 7, 8], "y1": 2, "note": [2, 3, 4, 5, 6, 8], "select": [2, 3], "data": [2, 3, 4, 5, 6, 7], "sent": [2, 3, 8], "ifac": [2, 3], "tmod": [2, 3], "ui32out": 2, "implement": [3, 4], "entir": [3, 4], "provid": [3, 4, 7, 8], "itself": [3, 4], "There": [3, 4, 5], "part": [3, 4], "r4": 3, "later": [3, 4], "minor": 3, "enhanc": 3, "made": 3, "featur": [3, 5], "determin": 3, "what": [3, 4], "type": [3, 5, 6, 7], "drvmodbusasynconfigur": [3, 4, 5, 6], "locat": [3, 4, 8], "discret": [3, 4, 6, 7], "coil": [3, 4, 5, 6, 7], "04000": [3, 5, 8], "04002": 3, "x": [3, 4, 5, 8], "x2": 3, "regist": [3, 4, 5, 6, 7], "040600": [3, 5, 8], "040602": 3, "c": [3, 4, 5, 8], "relai": [3, 5, 8], "third": [3, 4], "c40": 3, "c57": 3, "asynmask": 3, "mask": [3, 4], "bi": [3, 5], "mbbi": 3, "mbbidirect": [3, 5], "longin": [3, 5], "interest": [3, 4], "bo": [3, 5], "mbbo": 3, "mbbodirect": [3, 5], "longout": [3, 5], "0xffff": [3, 4], "els": 3, "modifi": [3, 4], "clear": 3, "ani": [3, 4, 5], "na": 3, "enable_histogram": 3, "return": 3, "histogram": [3, 7], "nbit": 3, "syntax": 3, "analog": 3, "number": [3, 5, 6, 7], "know": [3, 4], "cannot": [3, 4], "meaning": 3, "getbound": 3, "unipolar": 3, "4095": 3, "bipolar": [3, 5, 7], "2048": [3, 8], "2047": 3, "atom": [3, 4], "messag": [3, 8], "short": 3, "period": [3, 4], "incorrect": 3, "ao": [3, 5, 7], "modbus_read": 3, "forc": 3, "poller": [3, 4], "immedi": [3, 4], "regardless": 3, "poll_delai": 3, "read_ok": 3, "success": 3, "write_ok": 3, "io_error": 3, "last_io_tim": 3, "max_io_tim": 3, "maximum": 3, "histogram_bin_tim": 3, "bin": [3, 5], "statist": [3, 7], "int64in": [3, 5], "epicsuint64": 3, "int64out": [3, 5], "epicsuint16": 3, "woken": 3, "epicsev": 3, "signal": 3, "happen": 3, "asynint32arrayin": 3, "asynint32arrayout": 3, "arrai": [3, 5], "read_histogram": 3, "sinc": 3, "histogram_time_axi": 3, "axi": 3, "element": 3, "asynoctetread": 3, "number_of_charact": 3, "asynoctetwrit": 3, "250": [3, 8], "stringout": 3, "On": 3, "lesser": 3, "minu": 3, "39": 3, "stringin": 3, "whether": 3, "truncat": 3, "guarante": [3, 4], "correct": [3, 4], "br": 3, "modbusapp": [3, 5, 7], "db": 3, "directori": [3, 5, 7, 8], "These": [3, 4, 5, 7], "macro": 3, "bi_bit": 3, "znam": 3, "onam": 3, "zsv": 3, "osv": 3, "bo_bit": 3, "bi_word": 3, "bo_word": 3, "longinint32": 3, "data_typ": 3, "longoutint32": 3, "linear": 3, "egul": 3, "eguf": 3, "ai_averag": 3, "asynint32averag": 3, "get": 3, "callback": 3, "averag": 3, "intarray_in": 3, "intarray_out": 3, "aifloat64": 3, "aofloat64": 3, "initial_readback": 3, "stringwaveformin": 3, "stringwaveformout": 3, "asynrecord": [3, 6], "trace": [3, 6], "debug": [3, 5, 6], "poll_trigg": 3, "trigger": 3, "explain": 3, "preced": 3, "prefix": 3, "sever": [3, 4, 5], "blank": 3, "allow": [3, 4, 5], "engin": 3, "lower": 3, "upper": 3, "displai": 3, "precis": 3, "mode": [3, 4], "rate": 3, "intr": [3, 4], "caution": 4, "memori": [4, 5, 6], "ladder": [4, 5], "logic": [4, 5, 8], "program": [4, 5, 8], "dumb": 4, "subsystem": 4, "resid": 4, "design": [4, 5], "carefulli": 4, "might": 4, "y": [4, 5, 8], "restrict": 4, "small": 4, "c200": [4, 7], "c240": 4, "monitor": 4, "consid": 4, "them": 4, "act": 4, "upon": 4, "safe": 4, "top": [4, 7], "down": 4, "devic": [4, 5, 6, 8], "purpos": [4, 5], "client": [4, 8], "prior": 4, "class": 4, "inherit": 4, "asynportdriv": 4, "export": 4, "its": 4, "wai": 4, "easi": 4, "addit": 4, "rtu": [4, 5, 6], "ascii": [4, 5, 6], "both": [4, 5], "overli": 4, "ip": [4, 5, 6, 7, 8], "serial": [4, 5, 6, 8], "make": 4, "exist": 4, "facil": 4, "amount": 4, "quit": 4, "fewer": 4, "900": 4, "line": 4, "assign": 4, "contigu": 4, "creat": [4, 5, 6], "x0": [4, 5, 7], "x37": [4, 5, 7], "c0": [4, 5, 7], "c377": [4, 5, 7], "c300": 4, "space": [4, 8], "still": 4, "pass": 4, "arbitrari": 4, "io": 4, "behavior": 4, "spawn": 4, "buffer": 4, "asynchron": 4, "although": 4, "directli": 4, "wait": 4, "mutex": 4, "indic": 4, "whenev": 4, "new": 4, "effici": 4, "paragraph": 4, "where": 4, "caus": 4, "proc": 4, "reason": 4, "tell": 4, "execut": 4, "0x0": 4, "minimum": 4, "modbusinterposeconfig": [4, 5, 6], "wide": 4, "fit": 4, "model": [4, 8], "like": [4, 5], "test": [4, 5], "x86": [4, 5], "x86_64": 4, "ppc32": 4, "win32": 4, "window": 4, "x64": 4, "nativ": 4, "microsoft": 4, "visual": 4, "studio": 4, "compil": 4, "thing": 4, "structur": 4, "pack": 4, "pragma": 4, "direct": [4, 5], "gnu": 4, "appropri": [4, 5], "build": 5, "iocboot": 5, "ioctest": 5, "dl": 5, "seri": 5, "autom": 5, "cmd": [5, 7], "v": [5, 6], "koyo2": [5, 6], "d": 5, "plu": 5, "format": [5, 6], "st": 5, "simpl": 5, "just": 5, "invok": 5, "envpath": 5, "dbloaddatabas": 5, "dbd": 5, "modbusapp_registerrecorddevicedriv": 5, "pdbbase": 5, "const": 5, "char": 5, "disconnectonreadtimeout": 5, "modbuslinktyp": 5, "5000": 5, "we": 5, "nomenclatur": 5, "hex": 5, "dl205": [5, 7], "xn": 5, "4000": 5, "040": 5, "40400": 5, "128": 5, "yn": 5, "y0": [5, 7], "y37": 5, "k1_yn_in_bit": 5, "k1_yn_out_bit": 5, "40500": 5, "040500": [5, 8], "k1_yn_out_word": 5, "cn": 5, "6000": 5, "256": 5, "k1_cn_in_bit": 5, "06000": [5, 8], "0400": 5, "k1_cn_out_bit": 5, "k1_cn_out_bit_arrai": 5, "40600": 5, "k1_cn_in_word": 5, "020": 5, "k1_cn_out_word": 5, "k1_cn_out_word_arrai": 5, "asyn_traceio_hex": 5, "octet": 5, "asyn_trace_error": 5, "asyn_traceio_driv": 5, "255": 5, "dump": 5, "512": [5, 8], "asyntrac": 5, "asynsettraceiotruncates": 5, "dbloadtempl": 5, "substitut": [5, 7], "iocinit": 5, "demonstr": 5, "realist": 5, "practic": 5, "testdatatyp": [5, 7], "file": [5, 6, 7], "modbusf1_a0_128bit": 5, "mb": 5, "modbusf3_a200_80word": 5, "modbusf3_a300_80word": 5, "inexpens": 5, "emul": 5, "simul": [5, 7], "modbusf3_a100_80word": 5, "200": 5, "300": 5, "testclient": 5, "cpp": 5, "instanti": 5, "object": [5, 8], "extern": 5, "pure": 5, "without": 5, "author": 6, "mark": 6, "river": 6, "univers": 6, "chicago": 6, "acknowledg": 6, "overview": 6, "platform": 6, "udp": 6, "wago": 6, "adl": 6, "koyo_8input": 6, "koyo_8output": 6, "modbusarrai": 6, "modbusstatist": 6, "koyo_4adc": 6, "asynregist": 6, "op": 7, "agre": 7, "correctli": 7, "x7": 7, "c207": 7, "y7": 7, "event": 7, "cycl": 7, "posit": 8, "osi": 8, "buse": 8, "system": 8, "programm": 8, "primari": 8, "comment": 8, "alter": 8, "repli": 8, "vendor": 8, "id": 8, "commonli": 8, "dl05": 8, "06": 8, "240": 8, "260": 8, "430": 8, "440": 8, "450": 8, "sp": 8, "3072": 8, "timer": 8, "contact": 8, "t": 8, "6144": 8, "014000": 8, "counter": 8, "ct": 8, "6400": 8, "014400": 8, "stage": 8, "statu": 8, "012000": 8, "ta": 8, "cta": 8, "01000": 8, "global": 8, "vgx": 8, "16384": 8, "040000": 8, "vgy": 8, "16512": 8, "040200": 8, "vx": 8, "16640": 8, "vy": 8, "16704": 8, "vc": 8, "16768": 8, "16896": 8, "041000": 8, "vt": 8, "16960": 8, "041100": 8, "vct": 8, "16992": 8, "041140": 8, "vsp": 8, "17024": 8, "041200": 8, "400001": 8, "300001": 8, "offici": 8, "web": 8, "modbus_application_protocol_v1_1b": 8, "pdf": 8, "modbus_messaging_implementation_guide_v1_0b": 8, "modbus_over_serial_line_v1_02": 8}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"acknowledg": 0, "creat": 1, "modbu": [1, 4, 6, 8], "port": 1, "driver": [1, 4], "tcp": 1, "ip": 1, "udp": 1, "serial": 1, "rtu": 1, "ascii": 1, "modbusinterposeconfig": 1, "drvmodbusasynconfigur": 1, "regist": [1, 8], "data": [1, 8], "type": [1, 8], "note": 1, "wago": 1, "devic": [1, 3], "number": 1, "drvasynipport": 1, "format": 1, "debug": 2, "trace": 2, "asynrecord": 2, "adl": [2, 7], "asynregist": 2, "epic": 3, "support": 3, "asynuint32digit": 3, "asynint32": 3, "asynint64": 3, "asynfloat64": 3, "asynint32arrai": 3, "asynoctet": 3, "templat": 3, "file": 3, "architectur": 4, "read": 4, "function": [4, 8], "write": 4, "platform": 4, "independ": 4, "exampl": 5, "applic": 5, "tabl": 6, "content": 6, "medm": 7, "screen": 7, "modbusdatatyp": 7, "koyo1": 7, "koyo_8input": 7, "koyo_8output": 7, "modbusarrai": 7, "modbusstatist": 7, "koyo2": 7, "koyo_4adc": 7, "overview": 8, "commun": 8, "link": 8, "code": 8, "address": 8, "discret": 8, "input": 8, "coil": 8, "hold": 8, "v": 8, "memori": 8, "length": 8, "limit": 8, "more": 8, "inform": 8}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"Acknowledgments": [[0, "acknowledgments"]], "Creating a modbus port driver": [[1, "creating-a-modbus-port-driver"]], "TCP/IP UDP/IP": [[1, "tcp-ip-udp-ip"]], "Serial RTU": [[1, "serial-rtu"]], "Serial ASCII": [[1, "serial-ascii"]], "modbusInterposeConfig": [[1, "modbusinterposeconfig"]], "drvModbusAsynConfigure": [[1, "drvmodbusasynconfigure"]], "Modbus register data types": [[1, "modbus-register-data-types"]], "Note for Wago devices": [[1, "note-for-wago-devices"]], "Number of drvAsynIPPort drivers for TCP": [[1, "number-of-drvasynipport-drivers-for-tcp"]], "Number formats": [[1, "number-formats"]], "Debug tracing": [[2, "debug-tracing"]], "asynRecord.adl": [[2, "asynrecord-adl"]], "asynRegister.adl": [[2, "asynregister-adl"]], "EPICS device support": [[3, "epics-device-support"]], "asynUInt32Digital": [[3, "asynuint32digital"]], "asynInt32": [[3, "asynint32"]], "asynInt64": [[3, "asynint64"]], "asynFloat64": [[3, "asynfloat64"]], "asynInt32Array": [[3, "asynint32array"]], "asynOctet": [[3, "asynoctet"]], "Template files": [[3, "template-files"]], "Driver architecture": [[4, "driver-architecture"]], "Modbus read functions": [[4, "modbus-read-functions"]], "Modbus write functions": [[4, "modbus-write-functions"]], "Modbus write/read functions": [[4, "modbus-write-read-functions"]], "Platform independence": [[4, "platform-independence"]], "Example Applications": [[5, "example-applications"]], "modbus": [[6, "modbus"]], "Table of Contents": [[6, "table-of-contents"]], "medm screens": [[7, "medm-screens"]], "modbusDataTypes.adl": [[7, "modbusdatatypes-adl"]], "Koyo1.adl": [[7, "koyo1-adl"]], "Koyo_8inputs.adl": [[7, "koyo-8inputs-adl"]], "Koyo_8outputs.adl": [[7, "koyo-8outputs-adl"]], "modbusArray.adl": [[7, "modbusarray-adl"]], "modbusStatistics.adl": [[7, "modbusstatistics-adl"]], "Koyo2.adl": [[7, "koyo2-adl"]], "Koyo_4ADC.adl": [[7, "koyo-4adc-adl"]], "Overview of Modbus": [[8, "overview-of-modbus"]], "Modbus communication links": [[8, "modbus-communication-links"]], "Modbus data types": [[8, "modbus-data-types"]], "Modbus communications": [[8, "modbus-communications"]], "Modbus function codes": [[8, "modbus-function-codes"]], "Modbus addresses": [[8, "modbus-addresses"]], "Discrete inputs and coils": [[8, "discrete-inputs-and-coils"]], "Input registers and holding registers (V memory)": [[8, "input-registers-and-holding-registers-v-memory"]], "Modbus data length limitations": [[8, "modbus-data-length-limitations"]], "More information on Modbus": [[8, "more-information-on-modbus"]]}, "indexentries": {}}) \ No newline at end of file +Search.setIndex({"alltitles": {"Acknowledgments": [[0, "acknowledgments"]], "Creating a modbus port driver": [[1, "creating-a-modbus-port-driver"]], "Debug tracing": [[2, "debug-tracing"]], "Discrete inputs and coils": [[8, "discrete-inputs-and-coils"]], "Driver architecture": [[4, "driver-architecture"]], "EPICS device support": [[3, "epics-device-support"]], "Example Applications": [[5, "example-applications"]], "Input registers and holding registers (V memory)": [[8, "input-registers-and-holding-registers-v-memory"]], "Koyo1.adl": [[7, "koyo1-adl"]], "Koyo2.adl": [[7, "koyo2-adl"]], "Koyo_4ADC.adl": [[7, "koyo-4adc-adl"]], "Koyo_8inputs.adl": [[7, "koyo-8inputs-adl"]], "Koyo_8outputs.adl": [[7, "koyo-8outputs-adl"]], "Modbus addresses": [[8, "modbus-addresses"]], "Modbus communication links": [[8, "modbus-communication-links"]], "Modbus communications": [[8, "modbus-communications"]], "Modbus data length limitations": [[8, "modbus-data-length-limitations"]], "Modbus data types": [[8, "modbus-data-types"]], "Modbus function codes": [[8, "modbus-function-codes"]], "Modbus read functions": [[4, "modbus-read-functions"]], "Modbus register data types": [[1, "modbus-register-data-types"]], "Modbus write functions": [[4, "modbus-write-functions"]], "Modbus write/read functions": [[4, "modbus-write-read-functions"]], "More information on Modbus": [[8, "more-information-on-modbus"]], "Note for Wago devices": [[1, "note-for-wago-devices"]], "Number formats": [[1, "number-formats"]], "Number of drvAsynIPPort drivers for TCP": [[1, "number-of-drvasynipport-drivers-for-tcp"]], "Overview of Modbus": [[8, "overview-of-modbus"]], "Platform independence": [[4, "platform-independence"]], "Serial ASCII": [[1, "serial-ascii"]], "Serial RTU": [[1, "serial-rtu"]], "TCP/IP UDP/IP": [[1, "tcp-ip-udp-ip"]], "Table of Contents": [[6, "table-of-contents"]], "Template files": [[3, "template-files"]], "asynFloat64": [[3, "asynfloat64"]], "asynInt32": [[3, "asynint32"]], "asynInt32Array": [[3, "asynint32array"]], "asynInt64": [[3, "asynint64"]], "asynOctet": [[3, "asynoctet"]], "asynRecord.adl": [[2, "asynrecord-adl"]], "asynRegister.adl": [[2, "asynregister-adl"]], "asynUInt32Digital": [[3, "asynuint32digital"]], "drvModbusAsynConfigure": [[1, "drvmodbusasynconfigure"]], "medm screens": [[7, "medm-screens"]], "modbus": [[6, "modbus"]], "modbusArray.adl": [[7, "modbusarray-adl"]], "modbusDataTypes.adl": [[7, "modbusdatatypes-adl"]], "modbusInterposeConfig": [[1, "modbusinterposeconfig"]], "modbusStatistics.adl": [[7, "modbusstatistics-adl"]]}, "docnames": ["acknowledgments", "creating_driver", "debugging", "device_support", "driver_architecture", "example_applications", "index", "medm_screens", "overview"], "envversion": {"sphinx": 61, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2}, "filenames": ["acknowledgments.rst", "creating_driver.rst", "debugging.rst", "device_support.rst", "driver_architecture.rst", "example_applications.rst", "index.rst", "medm_screens.rst", "overview.rst"], "indexentries": {}, "objects": {}, "objnames": {}, "objtypes": {}, "terms": {"": [1, 8], "0": [1, 2, 3, 4, 5, 8], "00": [2, 8], "01": 2, "010": [2, 5], "01000": 8, "012000": 8, "014000": 8, "014400": 8, "0177777": 1, "02": 2, "020": 5, "03": 2, "04": 2, "040": 5, "0400": 5, "04000": [3, 5, 8], "040000": 8, "04002": 3, "040200": 8, "040400": [1, 2, 5, 8], "040500": [5, 8], "040600": [3, 5, 8], "040602": 3, "041000": 8, "041100": 8, "041140": 8, "041200": 8, "06": 8, "06000": [5, 8], "07": 2, "08": 2, "09": 2, "0x0": 4, "0x200": 1, "0x4001d10c": 2, "0x4001d118": 2, "0x4001d134": 2, "0x4001d148": 2, "0x4001d158": 2, "0x4001d180": 2, "0x8094f78": 2, "0xffff": [3, 4], "1": [1, 2, 3, 4, 5, 7, 8], "10": 2, "100": [1, 5], "1000": [1, 5], "100000": 2, "12": [2, 3], "123": [1, 4, 8], "125": [1, 3, 4, 8], "128": 5, "13": [2, 5, 7], "14": [0, 1], "15": [1, 3, 4, 5, 8], "158": [1, 2, 5], "16": [1, 3, 4, 5, 8], "160": [1, 2, 5], "16384": 8, "164": [1, 2, 5], "16512": 8, "16640": 8, "16704": 8, "16768": 8, "16896": 8, "16960": 8, "16992": 8, "17": [1, 2, 4, 8], "17024": 8, "1968": [1, 8], "2": [1, 2, 3, 4, 5, 8], "20": 2, "200": 5, "2000": [1, 3, 4, 8], "2007": 2, "2047": 3, "2048": [3, 8], "223": [1, 4], "23": [1, 3, 4, 8], "232": 8, "240": 8, "25": 2, "250": [3, 8], "255": 5, "256": 5, "260": 8, "27": 2, "3": [0, 1, 2, 3, 4, 5, 7, 8], "300": 5, "300001": 8, "3072": 8, "31": 2, "32": [1, 2, 3, 5], "384": 2, "38400": [1, 5], "39": 3, "390": 2, "4": [1, 2, 3, 4, 5, 7, 8], "4000": 5, "400001": 8, "40400": 5, "40500": 5, "40600": 5, "4095": 3, "41": 2, "422": 8, "424": 2, "430": 8, "432": 2, "440": 8, "45": 2, "450": 8, "485": 8, "5": [1, 2, 3, 4, 5, 7, 8], "50": 1, "5000": 5, "502": [1, 2, 5, 8], "512": [5, 8], "54": [1, 2, 5], "548": 2, "5728": 2, "5m": 1, "6": [1, 2, 3, 4, 5, 7, 8], "6000": 5, "6144": 8, "64": [1, 3], "6400": 8, "65535": 1, "656": 2, "7": [2, 8], "770": 2, "7999": 1, "8": [1, 3, 5, 8], "878": 2, "9": [1, 2, 5, 8], "900": 4, "9600": 1, "987": 2, "9999": 1, "A": [1, 4, 5, 8], "But": 1, "For": [1, 2, 3, 4, 5, 8], "If": [1, 3, 4], "In": [1, 4, 5], "It": [0, 1, 3, 4, 5, 7, 8], "No": 2, "On": 3, "One": [1, 2, 4, 5], "The": [0, 1, 2, 3, 4, 5, 7, 8], "There": [3, 4, 5], "These": [3, 4, 5, 7], "To": [1, 2], "_be": 1, "_be_b": 1, "_le": 1, "_le_b": 1, "about": [1, 8], "abov": [1, 3, 4, 7, 8], "absolut": [1, 3, 4], "access": [1, 2, 3, 4, 5, 7, 8], "acknowledg": 6, "act": 4, "actual": [1, 2, 3], "ad": [1, 4], "adc": [1, 7], "add": 1, "addit": [4, 8], "addr": [1, 2, 3], "address": [1, 3, 4, 5, 6], "adl": 6, "affect": 1, "after": [1, 3, 4, 5], "agre": 7, "ai": [1, 3, 5, 7], "ai_averag": 3, "aifloat64": 3, "all": [1, 2, 4, 5, 8], "allow": [3, 4, 5], "also": [1, 2, 3, 4, 5, 8], "alter": 8, "although": 4, "alwai": 1, "amount": 4, "an": [1, 2, 3, 4, 5, 6, 7, 8], "analog": 3, "ani": [3, 4, 5], "anoth": [1, 5], "ao": [3, 5, 7], "aofloat64": 3, "appli": [1, 4], "applic": [2, 6, 7, 8], "appropri": [4, 5], "ar": [1, 2, 3, 4, 5, 7, 8], "arbitrari": 4, "architectur": [0, 6], "argument": [1, 2, 3], "arrai": [3, 5], "ascii": [4, 5, 6, 8], "assign": 4, "asyn": [0, 1, 2, 3, 4, 5, 6], "asyn_trace_error": 5, "asyn_traceio_driv": 5, "asyn_traceio_hex": 5, "asynchron": 4, "asyncommon": [2, 3], "asyndriv": 1, "asyndrvus": [2, 3], "asynfloat64": [1, 2, 4, 5, 6, 7], "asynint32": [1, 2, 4, 5, 6], "asynint32arrai": [2, 6], "asynint32arrayin": 3, "asynint32arrayout": 3, "asynint32averag": 3, "asynint64": [1, 4, 5, 6], "asyninterpos": 1, "asyninterposeeo": 1, "asynipport": 1, "asynmanag": [1, 4], "asynmanagerlock": 2, "asynmask": 3, "asynoctet": [1, 4, 6], "asynoctetread": 3, "asynoctetsetinputeo": [1, 5], "asynoctetsetoutputeo": [1, 5], "asynoctetwrit": 3, "asynportdriv": 4, "asynprint": 2, "asynrecord": [3, 6], "asynregist": 6, "asynreport": [1, 2], "asynserialport": 1, "asynsetopt": [1, 5], "asynsettraceiomask": [2, 5], "asynsettraceiotruncates": 5, "asynsettracemask": [2, 5], "asyntrac": 5, "asynuint32digit": [1, 2, 4, 6], "atom": [3, 4], "attempt": 8, "author": 6, "autoconnect": 2, "autom": 5, "automat": 1, "averag": 3, "avoid": [1, 4], "axi": 3, "back": [1, 4], "backward": 1, "base": [0, 1], "baud": [1, 5], "bcd": [1, 5], "bcd_sign": [1, 3], "bcd_unsign": 1, "becaus": [1, 3, 4], "been": [1, 4, 5, 8], "befor": [1, 4], "begin": [1, 5], "behavior": 4, "being": [1, 2, 3, 4, 7], "below": [1, 4], "between": [1, 3, 4, 8], "beyond": 1, "bi": [3, 5], "bi_bit": 3, "bi_word": 3, "big": 1, "bin": [3, 5], "binari": [1, 5, 8], "bipolar": [3, 5, 7], "bit": [1, 3, 4, 5, 7, 8], "blank": 3, "block": [2, 4], "bo": [3, 5], "bo_bit": 3, "bo_word": 3, "both": [4, 5], "br": 3, "brief": 2, "broken": 1, "buffer": 4, "build": 5, "buse": 8, "byte": [1, 3, 5, 8], "c": [3, 4, 5, 8], "c0": [4, 5, 7], "c200": [4, 7], "c207": 7, "c240": 4, "c300": 4, "c377": [4, 5, 7], "c40": 3, "c57": 3, "call": [1, 4, 5], "callback": 3, "can": [1, 2, 3, 4, 5, 8], "canblock": 2, "cannot": [3, 4], "carefulli": 4, "case": [1, 4], "caus": 4, "caution": 4, "chang": [1, 4], "channel": [2, 5], "char": 5, "charact": [1, 3, 4, 8], "check": 8, "chicago": 6, "choic": 1, "class": 4, "clear": 3, "client": [4, 8], "cmd": [5, 7], "cn": 5, "code": [0, 1, 3, 4, 5, 6, 7], "coil": [3, 4, 5, 6, 7], "combin": 1, "command": [1, 2, 3, 4, 5], "comment": 8, "common": 8, "commonli": 8, "commun": [1, 4, 6, 7], "compar": 1, "compat": 1, "compil": 4, "complement": 1, "complet": [1, 3], "configur": [1, 4, 5], "connect": [1, 2, 5, 8], "consid": [4, 8], "consider": 1, "consist": [1, 4, 5, 8], "const": 5, "contact": 8, "contain": [0, 1, 3, 8], "contigu": 4, "control": [2, 3, 4, 5, 7, 8], "conveni": 1, "convent": 1, "convers": [0, 1, 3, 5], "convert": [0, 1, 5], "correct": [3, 4], "correctli": 7, "could": [1, 4, 5], "counter": 8, "counterpart": 1, "cpp": 5, "cpu": 1, "cr": [1, 8], "crc": 8, "creat": [4, 5, 6], "ct": 8, "cta": 8, "current": [1, 4, 8], "cycl": 7, "d": 5, "data": [2, 3, 4, 5, 6, 7], "data_typ": 3, "datatyp": [1, 3], "db": 3, "dbd": 5, "dbior": 2, "dbloaddatabas": 5, "dbloadtempl": 5, "debug": [3, 5, 6], "decim": [1, 5, 8], "default": [1, 3], "defin": [1, 3, 8], "definit": 1, "delai": [1, 3, 4, 5], "demonstr": 5, "depend": [1, 3, 4], "describ": [1, 4, 8], "descript": [1, 3, 8], "design": [4, 5], "desir": 1, "detail": 2, "detect": 8, "determin": 3, "dev": [1, 5], "devic": [4, 5, 6, 8], "diagnost": 2, "differ": [1, 4, 5, 8], "digit": [1, 3], "direct": [4, 5], "directli": [4, 8], "directori": [3, 5, 7, 8], "disabl": [2, 3], "disconnectonreadtimeout": 5, "discret": [3, 4, 6, 7], "displai": 3, "dl": 5, "dl05": 8, "dl205": [5, 7], "do": [1, 4, 5], "document": [1, 3, 8], "doe": [1, 3, 4, 5], "domodbusio": [2, 4], "done": [1, 3, 4], "down": 4, "driver": [2, 3, 5, 6, 7, 8], "drvasynipport": [2, 4, 6], "drvasynipportconfigur": [1, 5], "drvasynserialport": [2, 4], "drvasynserialportconfigur": [1, 5], "drvmodbusasyn": [1, 2, 5], "drvmodbusasynconfigur": [3, 4, 5, 6], "drvpvt": 2, "drvuser": [1, 3], "dtyp": [1, 3], "dumb": 4, "dump": 5, "e": [1, 3, 4, 8], "each": [1, 2, 3, 4, 5, 7, 8], "easi": 4, "effici": [4, 8], "eguf": 3, "egul": 3, "either": [1, 3, 4], "element": 3, "els": 3, "empir": 1, "empti": 1, "emul": 5, "enabl": [2, 3, 4, 5], "enable_histogram": 3, "encod": [1, 8], "end": [1, 3, 8], "endian": 1, "engin": 3, "enhanc": 3, "entir": [3, 4], "enum": 1, "environ": 8, "envpath": 5, "eo": 1, "epic": [0, 1, 2, 4, 5, 6], "epicsev": 3, "epicsfloat64": [1, 3], "epicsint32": [1, 3], "epicsint64": [1, 3], "epicsuint16": 3, "epicsuint32": [1, 3], "epicsuint64": 3, "equival": 1, "error": [2, 3, 8], "etc": [1, 3, 4], "ethernet": 8, "even": [1, 4], "event": 7, "everyth": 1, "exampl": [1, 2, 3, 4, 6, 7], "exceptionact": 2, "exceptionnotifi": 2, "exceptionus": 2, "execut": 4, "exist": 4, "expens": 1, "explain": 3, "export": 4, "extend": 1, "extens": [0, 4], "extern": 5, "facil": 4, "fact": [1, 4], "fashion": 1, "featur": [3, 5], "few": 1, "fewer": 4, "ff": 2, "field": [1, 2, 3, 4], "file": [5, 6, 7], "firmwar": 8, "first": [1, 3, 5], "fit": 4, "flag": 1, "float": 1, "float32_b": [1, 3], "float32_be_b": 1, "float32_l": [1, 3], "float32_le_b": 1, "float64_b": 1, "float64_be_b": 1, "float64_l": 1, "float64_le_b": 1, "follow": [1, 2, 3, 4, 5, 7, 8], "forc": 3, "format": [5, 6], "found": [1, 8], "fpga": 8, "frame": [1, 4, 8], "frequent": 1, "from": [0, 1, 2, 3, 4, 5, 7, 8], "function": [1, 3, 5, 6, 7], "g": [1, 3, 4], "gener": [1, 3, 4], "get": 3, "getbound": 3, "global": 8, "gnu": 4, "good": [1, 4], "greater": 1, "guarante": [3, 4], "guid": 1, "h": [1, 4], "ha": [1, 3, 4, 5, 8], "handl": [1, 4], "happen": 3, "hardwar": [1, 4], "harm": 1, "have": [1, 4], "header": 1, "henc": [1, 3], "hex": 5, "high": 1, "histogram": [3, 7], "histogram_bin_tim": 3, "histogram_time_axi": 3, "hold": [1, 3, 4, 5, 6], "hopr": [1, 3], "host": 1, "hostinfo": [1, 5], "how": [1, 2, 5], "howev": [1, 4, 5], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8], "id": 8, "idea": 1, "ident": 1, "identifi": 1, "ieee": 1, "ifac": [2, 3], "ignor": 1, "immedi": [3, 4], "implement": [3, 4], "import": 1, "improv": [1, 4], "inact": 1, "includ": [2, 3, 5, 8], "incorrect": 3, "independ": [1, 6], "indic": 4, "inexpens": 5, "inform": [1, 2, 6], "inherit": 4, "initi": [1, 3, 4], "initial_readback": 3, "inp": [1, 3], "input": [1, 3, 4, 5, 6, 7], "instanti": 5, "int": [1, 5], "int16": [1, 3], "int16sm": [1, 3], "int32": 1, "int32_b": [1, 3], "int32_be_b": 1, "int32_l": [1, 3], "int32_le_b": 1, "int64_b": 1, "int64_be_b": 1, "int64_l": 1, "int64_le_b": 1, "int64in": [3, 5], "int64out": [3, 5], "intarray_in": 3, "intarray_out": 3, "integ": [1, 8], "interest": [3, 4], "interfac": [1, 2, 3, 4, 5, 7], "interfacelist": 2, "interpos": [1, 4], "interpret": 1, "intr": [3, 4], "invok": 5, "io": 4, "io_error": 3, "ioc": [1, 4, 5, 7], "iocboot": 5, "iocinit": 5, "iocsh": [1, 2], "ioctest": 5, "ip": [4, 5, 6, 7, 8], "issu": 1, "its": 4, "itself": [3, 4], "ivan": 0, "just": 5, "k1_cn_in_bit": 5, "k1_cn_in_word": 5, "k1_cn_out_bit": 5, "k1_cn_out_bit_arrai": 5, "k1_cn_out_word": 5, "k1_cn_out_word_arrai": 5, "k1_xn_bit": [2, 5], "k1_xn_word": [2, 5], "k1_yn_in_bit": 5, "k1_yn_in_word": [2, 5], "k1_yn_out_bit": 5, "k1_yn_out_word": 5, "kei": 1, "keitel": 0, "know": [3, 4], "koyo": [1, 2, 3, 5, 7, 8], "koyo1": [1, 2, 5, 6], "koyo2": [5, 6], "koyo_4adc": 6, "koyo_8input": 6, "koyo_8output": 6, "ladder": [4, 5], "largest": 1, "last": [1, 2, 3, 4, 5], "last_io_tim": 3, "later": [3, 4], "layer": [1, 4, 8], "lead": [1, 5], "least": 1, "length": [1, 3, 5, 6], "less": [1, 4, 8], "lesser": 3, "level": [1, 2, 4, 7, 8], "lf": [1, 8], "like": [4, 5], "limit": [1, 3, 4, 6], "line": 4, "linear": 3, "link": [1, 3, 6], "linktyp": [1, 5], "linux": [0, 4, 5], "list": [1, 3, 8], "littl": [0, 1], "load": [1, 2, 5], "local": 1, "locat": [3, 4, 8], "logic": [4, 5, 8], "longin": [3, 5], "longinint32": 3, "longout": [3, 5], "longoutint32": 3, "lopr": [1, 3], "low": [1, 4], "lower": 3, "lrc": 8, "m": 1, "machin": 1, "macro": 3, "made": 3, "magnitud": [1, 5], "mai": [1, 4, 5, 8], "make": 4, "manag": 1, "mani": [1, 4], "manufactur": [1, 8], "mark": 6, "mask": [3, 4], "match": 1, "max": 2, "max_io_tim": 3, "maximum": 3, "mb": 5, "mbap": 1, "mbbi": 3, "mbbidirect": [3, 5], "mbbo": 3, "mbbodirect": [3, 5], "mean": [1, 3, 4], "meaning": 3, "meant": 1, "medm": [2, 6], "memori": [4, 5, 6], "messag": [3, 8], "method": [2, 4], "microsoft": 4, "might": 4, "millisecond": [1, 3], "minimum": 4, "minor": 3, "minu": 3, "miss": 8, "modbu": [0, 2, 3, 5, 7], "modbus_application_protocol_v1_1b": 8, "modbus_data": [1, 3], "modbus_messaging_implementation_guide_v1_0b": 8, "modbus_over_serial_line_v1_02": 8, "modbus_read": 3, "modbusapp": [3, 5, 7], "modbusapp_registerrecorddevicedriv": 5, "modbusarrai": 6, "modbusdatatyp": [1, 6], "modbusdatatype_t": 1, "modbusf1_a0_128bit": 5, "modbusf3_a100_80word": 5, "modbusf3_a200_80word": 5, "modbusf3_a300_80word": 5, "modbusfunct": [1, 2], "modbusinterpos": 1, "modbusinterposeconfig": [4, 5, 6], "modbuslength": [1, 2, 3], "modbuslinktyp": 5, "modbusstartaddress": [1, 2, 4], "modbusstatist": 6, "mode": [3, 4], "model": [4, 8], "modicon": 1, "modifi": [3, 4], "modtcp": 0, "modul": [0, 1, 4, 6], "monitor": 4, "more": [1, 2, 6], "most": [1, 5], "msec": [1, 2, 3, 4, 7], "much": [0, 4, 8], "multidevic": 2, "multipl": [1, 3, 4, 5, 8], "must": [1, 4, 5], "mutex": 4, "n": [1, 5], "na": 3, "name": [1, 3], "nativ": 4, "nbit": 3, "ndevic": 2, "necessari": [1, 3, 4], "need": [1, 4, 5], "nelm": [1, 3], "network": [1, 8], "new": 4, "next": 1, "nibbl": 1, "noautoconnect": [1, 5], "nomenclatur": 5, "non": [1, 5], "none": [1, 5], "noprocesseo": [1, 5], "normal": [1, 3, 4, 5, 8], "note": [2, 3, 4, 5, 6, 8], "now": 0, "nqueu": 2, "nsl": 0, "number": [3, 5, 6, 7], "number_of_charact": 3, "numberconnect": 2, "numer": [1, 5], "o": [1, 2, 3, 4, 5, 7, 8], "object": [5, 8], "obtain": [2, 4], "occasion": 1, "octal": [1, 5, 8], "octet": 5, "off": 2, "offici": 8, "offset": [1, 3, 5, 8], "ok": 2, "onam": 3, "onc": [1, 3, 4], "one": [1, 2, 3, 4, 5], "ones": 1, "onli": [1, 3, 4, 5, 8], "op": 7, "oper": [1, 3, 4, 8], "option": [1, 3, 5], "order": [1, 3], "origin": 0, "osi": 8, "osv": 3, "other": [1, 3, 4, 8], "out": 1, "output": [1, 2, 3, 4, 5, 7, 8], "over": [1, 8], "overli": 4, "overrid": [1, 3], "overview": 6, "p": [1, 3], "pack": 4, "packag": [0, 8], "packet": [1, 8], "paragraph": 4, "parallel": 1, "paramet": [1, 3, 4, 5], "pariti": [1, 5], "part": [3, 4, 8], "partial": 2, "particular": [1, 4], "pass": 4, "pdbbase": 5, "pdf": 8, "per": [1, 3], "perform": [1, 2, 4, 5, 8], "period": [3, 4], "pinterfac": 2, "place": 1, "platform": 6, "plc": [1, 2, 3, 4, 5, 7, 8], "plctcp": 0, "plctype": [1, 2], "plu": 5, "point": [1, 4], "poll": [1, 3, 4], "poll_delai": 3, "poll_trigg": 3, "polldelai": 2, "poller": [3, 4], "pollmsec": 1, "port": [2, 3, 4, 5, 6, 8], "portnam": [1, 3, 5], "posit": 8, "possibl": [1, 4], "ppc32": 4, "practic": 5, "pragma": 4, "prec": [1, 3], "preced": 3, "precis": 3, "prefix": 3, "previou": [1, 4], "previous": 1, "primari": 8, "print": [1, 2, 3], "prior": 4, "prioriti": [1, 5], "probabl": 1, "problem": 1, "proc": 4, "proce": 1, "process": [1, 2, 3, 4], "program": [4, 5, 8], "programm": 8, "protocol": [1, 4, 8], "provid": [3, 4, 7, 8], "pure": 5, "purpos": [4, 5], "quit": 4, "r": [1, 3, 5, 8], "r3": [1, 4], "r4": 3, "rang": [1, 3, 4], "rate": 3, "rather": [1, 4, 8], "re": 0, "read": [1, 2, 3, 5, 6, 7, 8], "read_histogram": 3, "read_ok": 3, "read_regist": 2, "readback": [1, 3, 7], "realist": 5, "reason": 4, "receiv": [1, 4], "recommend": 1, "record": [1, 2, 3, 4, 5, 7], "refer": [1, 3], "regardless": 3, "regist": [3, 4, 5, 6, 7], "rel": [1, 3, 4], "relai": [3, 5, 8], "reliabl": 8, "remov": 1, "repeat": 1, "repli": 8, "report": [2, 8], "request": [1, 2, 4, 8], "requir": [1, 3, 4], "resid": 4, "resourc": 1, "respons": [1, 4, 8], "restrict": 4, "result": [1, 4], "retain": 0, "return": 3, "river": 6, "rolf": 0, "rtu": [4, 5, 6, 8], "run": [2, 3, 4, 5, 7, 8], "safe": 4, "sai": 1, "same": [1, 3, 4, 5], "satisfactori": 1, "scan": [1, 3, 4], "screen": [2, 6], "script": [1, 5], "second": [1, 3, 4], "see": 1, "segment": 1, "select": [2, 3], "send": [1, 4], "sensit": 1, "sent": [2, 3, 8], "separ": [1, 4, 5], "seri": 5, "serial": [4, 5, 6, 8], "server": [1, 2, 4, 5, 8], "set": [1, 2, 3, 4, 5], "sever": [3, 4, 5], "share": 1, "shell": [1, 2], "short": 3, "shot": [2, 7], "should": [1, 3, 4], "show": [2, 5, 7], "shown": [1, 7], "sign": [1, 5], "signal": 3, "signific": 1, "simpl": 5, "simul": [5, 7], "sinc": 3, "singl": [1, 3, 4, 5, 8], "size": 1, "slave": [1, 5, 7, 8], "slaveaddress": 1, "small": 4, "so": [0, 1, 3, 4, 8], "socket": 1, "some": [1, 3, 4, 8], "sp": 8, "space": [4, 8], "spawn": 4, "special": [1, 3, 4, 8], "specif": [1, 2, 3, 8], "specifi": [1, 3, 4, 8], "st": 5, "stage": 8, "standard": [1, 3, 4, 8], "start": [1, 3, 4, 5, 8], "startup": [1, 5], "statist": [3, 7], "statu": 8, "step": 1, "still": 4, "stop": [1, 5], "store": [1, 4], "string": [1, 3], "string_": 1, "string_high": [1, 3], "string_high_low": [1, 3], "string_low": [1, 3], "string_low_high": [1, 3], "stringin": 3, "stringout": 3, "stringwaveformin": 3, "stringwaveformout": 3, "structur": 4, "studio": 4, "substitut": [5, 7], "substr": 1, "subsystem": 4, "success": 3, "support": [1, 4, 5, 6, 8], "swap": 1, "synchronouslock": 2, "syntax": 3, "system": 8, "t": 8, "ta": 8, "tabl": [1, 3, 8], "take": 1, "talk": 1, "tcp": [2, 4, 5, 6, 7, 8], "tcpportnam": 1, "tell": 4, "templat": [1, 6], "termin": [1, 3], "test": [4, 5], "testclient": 5, "testdatatyp": [5, 7], "than": [1, 4, 8], "thei": [1, 4], "them": 4, "thi": [1, 2, 3, 4, 5, 6, 7, 8], "thing": 4, "third": [3, 4], "though": 8, "thread": [1, 3, 4], "through": 1, "thu": [1, 3], "time": [1, 2, 3, 4, 7, 8], "timeout": [1, 3], "timeoutmsec": [1, 5], "timer": 8, "tmod": [2, 3], "top": [4, 7], "trace": [3, 6], "traceerror": 2, "traceiodriv": 2, "traceiohex": 2, "traffic": 1, "transact": [1, 4, 8], "transfer": [1, 2, 3, 8], "translat": 1, "transmit": [1, 8], "treat": 1, "trigger": 3, "triumf": 0, "truncat": 3, "ttynam": [1, 5], "ttys1": [1, 5], "turn": 2, "two": 1, "type": [3, 5, 6, 7], "typic": [1, 4, 8], "udp": [6, 8], "ui32out": 2, "uint16": [1, 3], "uint32_b": 1, "uint32_be_b": 1, "uint32_l": 1, "uint32_le_b": 1, "uint64_b": 1, "uint64_be_b": 1, "uint64_l": 1, "uint64_le_b": 1, "underli": [1, 2, 4], "understand": 1, "unipolar": 3, "unit": 1, "univers": 6, "unsign": [1, 5], "until": [1, 3, 8], "untransl": 1, "up": [1, 3, 4, 5], "upon": 4, "upper": 3, "us": [0, 1, 2, 3, 4, 5, 6, 7, 8], "usag": 1, "user": 1, "usual": [1, 4], "v": [5, 6], "valu": [1, 2, 3, 4, 5, 7, 8], "vc": 8, "vct": 8, "vendor": 8, "version": 1, "versu": [1, 7], "vgx": 8, "vgy": 8, "via": [2, 4], "visual": 4, "vsp": 8, "vt": 8, "vx": 8, "vxwork": [1, 2, 4, 5], "vy": 8, "wa": [0, 3, 4], "wago": 6, "wai": 4, "wait": 4, "waveform": [1, 3, 5, 7], "we": 5, "web": 8, "well": 1, "were": [1, 3], "what": [3, 4], "when": [1, 2, 3, 4, 5, 8], "whenev": 4, "where": 4, "whether": 3, "which": [1, 3, 5, 8], "wide": 4, "win32": 4, "window": 4, "within": [1, 4, 8], "without": [5, 8], "woken": 3, "word": [1, 3, 4, 5, 8], "would": [1, 4, 5], "write": [1, 2, 3, 5, 6, 7, 8], "write_ok": 3, "writedelaymsec": [1, 5], "written": [0, 1, 2, 3, 4, 7], "x": [3, 4, 5, 8], "x0": [4, 5, 7], "x2": 3, "x37": [4, 5, 7], "x64": 4, "x7": 7, "x86": [4, 5], "x86_64": 4, "xn": 5, "y": [4, 5, 8], "y0": [5, 7], "y1": 2, "y37": 5, "y7": 7, "ye": 2, "yn": 5, "zero": [1, 5], "znam": 3, "zstring_": [1, 3], "zstring_high": [1, 3], "zstring_high_low": [1, 3], "zstring_low": [1, 3], "zstring_low_high": [1, 3], "zsv": 3}, "titles": ["Acknowledgments", "Creating a modbus port driver", "Debug tracing", "EPICS device support", "Driver architecture", "Example Applications", "modbus", "medm screens", "Overview of Modbus"], "titleterms": {"acknowledg": 0, "address": 8, "adl": [2, 7], "applic": 5, "architectur": 4, "ascii": 1, "asynfloat64": 3, "asynint32": 3, "asynint32arrai": 3, "asynint64": 3, "asynoctet": 3, "asynrecord": 2, "asynregist": 2, "asynuint32digit": 3, "code": 8, "coil": 8, "commun": 8, "content": 6, "creat": 1, "data": [1, 8], "debug": 2, "devic": [1, 3], "discret": 8, "driver": [1, 4], "drvasynipport": 1, "drvmodbusasynconfigur": 1, "epic": 3, "exampl": 5, "file": 3, "format": 1, "function": [4, 8], "hold": 8, "independ": 4, "inform": 8, "input": 8, "ip": 1, "koyo1": 7, "koyo2": 7, "koyo_4adc": 7, "koyo_8input": 7, "koyo_8output": 7, "length": 8, "limit": 8, "link": 8, "medm": 7, "memori": 8, "modbu": [1, 4, 6, 8], "modbusarrai": 7, "modbusdatatyp": 7, "modbusinterposeconfig": 1, "modbusstatist": 7, "more": 8, "note": 1, "number": 1, "overview": 8, "platform": 4, "port": 1, "read": 4, "regist": [1, 8], "rtu": 1, "screen": 7, "serial": 1, "support": 3, "tabl": 6, "tcp": 1, "templat": 3, "trace": 2, "type": [1, 8], "udp": 1, "v": 8, "wago": 1, "write": 4}}) \ No newline at end of file