宝石
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()不实现