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串口的库。
我正在使用这个宝石,我的设备规格如下。
当我收到如下数据时,解压缩的数据仍然带有奇偶校验位。
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
,因为它是偶然的奇偶校验。
要将字节转换回它应该是什么,我喜欢这个
data = sp.gets #gets 11100001 for 'a' (even parity)
data.bytes.to_a.each do |byte|
puts (byte & 127).chr
end
现在,对我而言,这是一种低级别的方式。我期待serialport gem进行这种奇偶校验,但据我读到它的文档,它没有说明奇偶校验。
我错过了一个已经在gem中实现的方法,或者我上面的工作是不必要的,因为我的责任是检查奇偶校验并发现错误?
答案 0 :(得分:3)
SerialPort :: ODD,SerialPort :: MARK,SerialPort :: SPACE (Posix不支持MARK和SPACE)
在坏参数上引发argError。
SerialPort :: new和SerialPort :: open没有块返回 SerialPort的实例。 SerialPort ::使用块传递打开 一个SerialPort到块并在块退出时关闭它 (比如File :: open)。
**实例方法**
获取并设置调制解调器参数。哈希键是“波特”,“data_bits”, “stop_bits”和“parity”(见上文)。
散列中不存在或设置为nil的参数保持不变。 set_modem_params方法的默认参数值为: databits = 8,stopbits = 1,parity =(databits == 8? SerialPort :: NONE:SerialPort :: EVEN)。
获取并设置相应的调制解调器参数。
获取并设置流控制:SerialPort :: NONE,SerialPort :: HARD, SerialPort :: SOFT,或(SerialPort :: HARD | SerialPort :: SOFT)。
注意:并非所有平台都支持SerialPort :: HARD模式。 SerialPort :: HARD使用RTS / CTS握手; DSR / DTR不是 支撑。
获取并设置读取和写入的超时值(以毫秒为单位)。 否定读取超时将返回所有可用数据 等待,零读取超时将至少返回一个 字节可用,并且当读取时返回正读取超时 请求的字节数可用或者之间的间隔 两个字节的到达超过了超时值。
注意:读取超时与多线程不能很好地混合。
注意:在Posix下,写入超时未实现。
在给定时间内休息一下。
时间 - > anInteger:休息时间的十分之一秒。 注意:在Posix下,此值非常近似。
返回具有每个行状态位状态的散列。钥匙是 “rts”,“dtr”,“cts”,“dsr”,“dcd”和“ri”。
注意:在Windows下,不包括rts和dtr值。
ri() - > 0或1
rts =(0或1)
获取并设置相应的行状态位。
注意:在Windows下,rts()和dtr()未实现