/ / Анализиране на ASCII комуникацията с хардуера чрез Java / Scala? - Java, Scala, парсинг, хардуер-интерфейс

Разработване на ASCII комуникация с хардуер, използващ Java / Scala? - java, scala, parsing, хардуерен интерфейс

Пиша софтуер, който ще интерфейс външно устройство чрез обмен на ASCII команди. Пример:

POS? 1 2
=>1=-1158.4405
=>2=+0000.0000

където по-горе се иска позицията на моторизиран микроскоп за 1-ва и 2-та оси. Той отговаря с позиции в хм. | Повече ▼ подробности и примери.

Моят въпрос: има ли библиотека, която би улеснила разбирането на такива низови изходи и / или би помогнало да се генерират заявки? В противен случай, какви са най-добрите практики за анализиране и комуникация с хардуера, използвайки Java / Scala?

Отговори:

1 за отговор № 1

Опитвате се да се справите със следния синтаксис (вж 12.1 Format):

 Reply syntax:
[<argument>[{SP<argument>}]"="]<value>LF
Multi-line reply syntax:
{[<argument>[{SP<argument>}]"="]<value>SP LF}
[<argument>[{SP<argument>}]"="]<value>LF for the last line!

Това е моят код:

import scala.util.parsing.combinator._

case class Result(argument: String, value: Float)

class ReplyParser extends RegexParsers{
override def skipWhitespace = false
private def floatingPointNumber: Parser[String] =
"""(-|+)?(d+(.d*)?|d*.d+)""".r
private def value: Parser[Float] = floatingPointNumber ^^ (_.toFloat)
private def argument: Parser[String] = "[^= n]+".r
private def arguments: Parser[List[String]] = rep1sep(argument," ") <~ "="
private def result: Parser[List[Result]] = arguments.? ~ value ^^ {
case arguments ~ value =>
arguments.getOrElse(List("")).map {
Result(_,value)
}
}
def reply: Parser[List[Result]] = rep1sep(result, " n".r) <~ " " ^^ {
case result => result.flatten
}
}

object Parsing extends ReplyParser {
def main(args: Array[String]) {
val result = parseAll(reply,"a=+000.123 nc d=-999.567 n789 ")
println(s"$result")
}
}