У нас во владении фирмы есть замечательные весы фирмы масса-м
Данные в программку вносились вручную. В наше высокотехнологичное время это уже не приемлемо.
Соответственно встала задача данные с весов считывать автоматически
Первым делом нам понадобится кабель. Где его купить я не нашел, но в инструкции неполохо расписано как его спаять
1. Берем клавиатуру и режем ей провод
2. Тоже самое проделываем с ком кабелем
3. Убераем оплетку
4. Прозвантваем провода - тыкаем в ножку и в провод мультиметров в режиме прозвонки
5. Выяснив соответсвие ножек и проводов, скручиваем их согласно схеме
кабель готов
Дальше задача получить данные
для этого надо 3 действия
1. Открыть нужный порт на запись
2. Установить режим работы
3. Установить таймауты
Долгое премя я не мог считать данные именно из-за последнего обстоятельства
Вот пример кода на руби:
@port = 'COM5'
system("mode #{@port}: BAUD=4800 PARITY=E data=8 stop=1 xon=off")
#DCB: 28 4800 1 0 0 0 0 0 512 520 4352 19 0 0 0 0 0 0 0 0
#DCB: 28 4800 1 0 0 0 0 0 512 520 4352 19 0 0 0 0 0 0 0 0
require 'dl/win32'
get_osfhandle = Win32API.new("msvcrt","_get_osfhandle", %w{i}, 'I')
setCommTimeouts = Win32API.new("kernel32", "SetCommTimeouts", %w{i p}, 'N')
getCommTimeouts = Win32API.new("kernel32", "GetCommTimeouts", %w{i p}, 'V')
getCommState = Win32API.new("kernel32", "GetCommState", %w{i p}, 'N')
setCommState = Win32API.new("kernel32", "SetCommState", %w{i p}, 'N')
$sp = File.open("\\\\.\\COM5","rb+")
$fn = $sp.fileno
$fh = get_osfhandle.call($fn)
# Get DCB; change any parameters that need fiddling; set DCB
dcb = "\0"*80
getCommState.call($fh,dcb)
dcb_u = dcb.unpack("L2B4B2B6B2BB17S3C8S")
printf("DCB:")
dcb_u.each {|v| printf(" %d",v)}
printf("\n")
dcb_u[1] = 4800 # Baud rate
dcb = dcb_u.pack("L2B4B2B6B2BB17S3C8S")
#puts setCommState.call($fh,dcb)
# Set the timeout array to the values TeraTerm uses
params = [1,1,1,1,0x1A4].pack('LLLLL')
puts setCommTimeouts.Call($fh,params)
start = Time.now
10000.times do
$sp.write(69.chr)
a = $sp.read(2)
res = 0
a = a.reverse
a.each_byte do |b|
res = res*0xFF
res += b
end
puts res
end
$sp.close
понедельник, 7 декабря 2009 г.
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий