ruby串行端口gem,负责检查奇偶校验错误



宝石

serialport(1.0.4)
作者:Guillaume Pierronnet,Alan Stern,Daniel E.Shipton,Tobin
Richard、Hector Parra、Ryan C.Payne
主页:http://github.com/hparra/ruby-serialport/
用于使用RS-232串行端口的库。

我正在使用这个宝石,我的设备规格如下。

  • 9600个基点
  • 7位
  • 1个停止位
  • EVEN奇偶校验

当我收到下面这样的数据时,解压缩的数据仍然带有奇偶校验位。

sp = SerialPort.new("/dev/serial-device", 9600, 7, 1, SerialPort::EVEN)
data = sp.gets
data.chars.each do |char|
  puts char.unpack("B*")
end

前任。如果sp接收到a,则解包数据是11100001而不是01100001,因为它是EVEN奇偶校验。


为了将字节转换回它应该是什么,我确实喜欢这个

data = sp.gets #gets 11100001 for 'a' (even parity)
data.bytes.to_a.each do |byte|
  puts (byte & 127).chr
end

现在,对我来说,这是一种低级的方式。我原以为serialportgem会进行奇偶校验,但就我阅读它的文档而言,它并没有说明任何关于奇偶校验的内容。

我是错过了一个已经在gem中实现的方法,还是我的上述工作是必要的,因为我有责任检查奇偶校验并发现错误?

串行端口::ODD,串行端口:(Posix不支持MARK和SPACE)

对错误的参数引发argError。

SerialPort::new和SerialPort::open不带块返回SerialPort的实例。串行端口::通过块通道打开到块的串行端口,并在块退出时关闭它(如文件::打开)。

**实例方法**

  • modem_params()->aHash
  • modem_params=(aHash)->aHash
  • get_modem_params()->aHash
  • set_modem_params(aHash)->aHash
  • set_modem_params(波特率[,数据位[,停止位[,奇偶校验]]])

获取并设置调制解调器参数。哈希键为"baud"、"data_bits"、,"stop_bits"one_answers"parity"(见上文)。

哈希中不存在或设置为nil的参数保持不变。set_modem_params方法的默认参数值为:数据位=8,停止位=1,奇偶校验=(数据位==8?串行端口::无:串行端口:偶数)。

  • baud()->anInteger
  • baud=(anInteger)->anInteger
  • data_bits()->4、5、6、7或8
  • data_bits=(anInteger)->anInteger
  • stop_bit()->1或2
  • stop_bits=(anInteger)->anInteger
  • parity()->anInteger:串行端口::无,串行端口:偶数,串行端口::ODD、串行端口:MARK或串行端口:SPACE
  • 奇偶校验=(anInteger)->anInteger

获取并设置相应的调制解调器参数。

  • flow_control()->anInteger
  • flow_control=(anInteger)->anInteger

获取并设置流量控制:SerialPort::NONE,SerialPort::HARD,串行端口::SOFT,或(串行端口:硬|串行端口:软)。

注意:并非所有平台都支持串行端口::HARD模式。串行端口::HARD使用RTS/CTS握手;DSR/DTR不是支持。

  • read_timeout()->anInteger
  • read_timeout=(anInteger)->anInteger
  • write_timeout()->anInteger
  • write_timeout=(anInteger)->anInteger

获取和设置读取和写入的超时值(以毫秒为单位)。负读取超时将返回所有可用数据等待,直到至少一个字节可用,并且当请求的可用字节数或两个字节的到达超过了超时值。

注意:读取超时与多线程处理不能很好地结合在一起。

注意:在Posix下,不实现写入超时。

  • 中断(时间)->零

在给定的时间内发送一个休息时间。

time->anInteger:中断时间为每秒十分。注:在Posix下,此值非常近似。

  • signals()->aHash

返回一个散列,其中包含每个行状态位的状态。钥匙是"rts"、"dtr"、"cts"、"dsr"、"dcd"one_answers"ri"。

注意:在Windows下,rts和dtr值不包括在内。

  • rts()
  • dtr()
  • cts()
  • dsr()
  • dcd()
  • ri()->0或1

  • rts=(0或1)

  • dtr=(0或1)->0或1

获取并设置相应的线路状态位。

注意:在Windows下,rts()和dtr()不实现

最新更新