我有一个写入串行设备的小shell脚本:
#!/usr/bin/ruby
require 'rubygems'
require 'serialport'
@sp = SerialPort.new "/dev/tty.usbserial-A6004cNN", 19200
@sp.write ["\x01\x01\x04\x00", "n", "\xff\xff\xff"]
当我在该目录中运行./script.sh
时,这不会写入串行设备。但是当我跳进IRB并运行时:
require 'serialport' #=> true
@sp = SerialPort.new "/dev/tty.usbserial-A6004cNN", 19200 #=> #<SerialPort:0x1016bd698>
@sp.write ["\x01\x01\x04\x00", "n", "\xff\xff\xff"] #=> 8
这种方式有效......我很困惑。这可能是我输出字节数组的方式吗?这似乎不对,它只是原始的红宝石,并没有明显的依赖性。此外,脚本不会抛出异常,它执行得很好,但设备只是没有响应。
我该如何调试?我不知道从哪里开始。
答案 0 :(得分:4)
我不知道SerialPort gem,但是可能会在脚本退出之前缓冲输出到串口并且不刷新,而IRB在返回提示时给它时间来刷新缓冲区。我尝试添加@sp.flush
,看看是否有帮助。
答案 1 :(得分:0)
不要让它成为shell脚本,而是将其作为.rb ruby脚本,然后用
调用它。ruby <name_of_my_script>.rb
然后一切都应该正常。