Haltech PS1000 - PS2000: Difference between revisions
No edit summary |
|||
| (4 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
[[Image:Haltech_PS2000.png]] | |||
The following script will map the common Haltech CAN bus channels to RaceCapture/Pro: | |||
<pre> | |||
--Designed for Haltech PS1000/PS2000 CAN Logging | |||
--HALTECH CAN V2 Broadcast Protocol | |||
--============================== Set Variables ================================= | |||
setTickRate(30) | |||
-- | initCAN(0, 1000000) | ||
CAN_chan = 0 -- 0=first CAN channel, 1=second | |||
--comment out channels if reqd | |||
--note Haltech quotes IDs in HEX and must be converted to Decimal | |||
--usage: map_chan(var, data, starting byte, byte length, Unit, Offset) | |||
CAN_map = { | |||
[864] = function(data) | |||
map_chan(rpmId, data, 0, 2, 1, 0) | |||
map_chan(mapId, data, 2, 2, 0.1, -101.3) | |||
map_chan(tpsId, data, 4, 2, 0.1, 0) | |||
end, | |||
[865] = function(data) | |||
map_chan(fpsId, data, 0, 2, 0.1, 0) | |||
map_chan(opsId, data, 2, 2, 0.1, 0) | |||
end, | |||
[866] = function(data) | |||
map_chan(idcId, data, 0, 2, 0.1, 0) | |||
end, | |||
[872] = function(data) | |||
map_chan(afrId, data, 0, 2, 0.001, 0) | |||
end, | |||
[992] = function(data) | |||
map_chan(ctsId, data, 0, 2, 0.1, -273.1) | |||
map_chan(atsId, data, 2, 2, 0.1, -273.1) | |||
map_chan(ftsId, data, 4, 2, 0.1, -273.1) | |||
map_chan(otsId, data, 6, 2, 0.1, -273.1) | |||
end, | |||
[993] = function(data) | |||
map_chan(flxId, data, 4, 2, 0.1, 0) end | |||
} | |||
--=============================== Add Virtual Channels ========================== | |||
-- | --usage: addChannel("Name",samplerate{1,10,25,50,100,200},precision(2),min(0),max(1000),units) | ||
rpmId = addChannel("RPM", 25, 0, 0, 10000, 'RPM') | |||
mapId = addChannel("MAP", 10, 1, 0, 100, 'kPa') | |||
tpsId = addChannel("TPS", 10, 1, 0, 100, '%') | |||
fpsId = addChannel("FPS", 10, 1, 0, 100, 'kPa') | |||
opsId = addChannel("OPS", 10, 1, 0, 100, 'kPa') | |||
idcId = addChannel("IDC", 10, 0, 0, 100, '%') | |||
afrId = addChannel("AFR", 10, 2, 0, 5, 'Lambda') | |||
ctsId = addChannel("CTS", 10, 1, 0, 200, 'C') | |||
atsId = addChannel("IAT", 10, 1, 0, 200, 'C') | |||
ftsId = addChannel("FTS", 10, 1, 0, 200, 'C') | |||
otsId = addChannel("OTS", 10, 1, 0, 200, 'C') | |||
flxId = addChannel("FLX", 10, 0, 0, 100, '%') | |||
-- | --========================== Init =================================== | ||
function onTick() | function onTick() | ||
processCAN() | |||
end | end | ||
--=========== | --========================== CAN ============================= | ||
function processCAN( | |||
function processCAN() --finds an id that exists then passes it to | |||
repeat | |||
local id, e, data = rxCAN(0) | |||
if id ~= nil then -- step through CAN data until you get a value | |||
local map = CAN_map[id] | |||
if map ~= nil then | |||
map(data) --this runs map_chan function with the CAN 'data' | |||
end | |||
end | |||
until id == nil | |||
end | end | ||
function map_chan(cid, data, offset, len, mult, add) --eg (rpmId, data, 0, 2, 1, 0) | |||
function map_chan(cid, data, offset, len, mult, add) | offset = offset + 1 | ||
local value = 0 | |||
while len > 0 do | |||
value = (value * 256) + data[offset] | |||
offset = offset + 1 | offset = offset + 1 | ||
len = len - 1 | |||
end | |||
setChannel(cid, (value * mult) + add) | |||
end | end | ||
</pre> | </pre> | ||
Latest revision as of 01:47, 31 July 2015
The following script will map the common Haltech CAN bus channels to RaceCapture/Pro:
--Designed for Haltech PS1000/PS2000 CAN Logging
--HALTECH CAN V2 Broadcast Protocol
--============================== Set Variables =================================
setTickRate(30)
initCAN(0, 1000000)
CAN_chan = 0 -- 0=first CAN channel, 1=second
--comment out channels if reqd
--note Haltech quotes IDs in HEX and must be converted to Decimal
--usage: map_chan(var, data, starting byte, byte length, Unit, Offset)
CAN_map = {
[864] = function(data)
map_chan(rpmId, data, 0, 2, 1, 0)
map_chan(mapId, data, 2, 2, 0.1, -101.3)
map_chan(tpsId, data, 4, 2, 0.1, 0)
end,
[865] = function(data)
map_chan(fpsId, data, 0, 2, 0.1, 0)
map_chan(opsId, data, 2, 2, 0.1, 0)
end,
[866] = function(data)
map_chan(idcId, data, 0, 2, 0.1, 0)
end,
[872] = function(data)
map_chan(afrId, data, 0, 2, 0.001, 0)
end,
[992] = function(data)
map_chan(ctsId, data, 0, 2, 0.1, -273.1)
map_chan(atsId, data, 2, 2, 0.1, -273.1)
map_chan(ftsId, data, 4, 2, 0.1, -273.1)
map_chan(otsId, data, 6, 2, 0.1, -273.1)
end,
[993] = function(data)
map_chan(flxId, data, 4, 2, 0.1, 0) end
}
--=============================== Add Virtual Channels ==========================
--usage: addChannel("Name",samplerate{1,10,25,50,100,200},precision(2),min(0),max(1000),units)
rpmId = addChannel("RPM", 25, 0, 0, 10000, 'RPM')
mapId = addChannel("MAP", 10, 1, 0, 100, 'kPa')
tpsId = addChannel("TPS", 10, 1, 0, 100, '%')
fpsId = addChannel("FPS", 10, 1, 0, 100, 'kPa')
opsId = addChannel("OPS", 10, 1, 0, 100, 'kPa')
idcId = addChannel("IDC", 10, 0, 0, 100, '%')
afrId = addChannel("AFR", 10, 2, 0, 5, 'Lambda')
ctsId = addChannel("CTS", 10, 1, 0, 200, 'C')
atsId = addChannel("IAT", 10, 1, 0, 200, 'C')
ftsId = addChannel("FTS", 10, 1, 0, 200, 'C')
otsId = addChannel("OTS", 10, 1, 0, 200, 'C')
flxId = addChannel("FLX", 10, 0, 0, 100, '%')
--========================== Init ===================================
function onTick()
processCAN()
end
--========================== CAN =============================
function processCAN() --finds an id that exists then passes it to
repeat
local id, e, data = rxCAN(0)
if id ~= nil then -- step through CAN data until you get a value
local map = CAN_map[id]
if map ~= nil then
map(data) --this runs map_chan function with the CAN 'data'
end
end
until id == nil
end
function map_chan(cid, data, offset, len, mult, add) --eg (rpmId, data, 0, 2, 1, 0)
offset = offset + 1
local value = 0
while len > 0 do
value = (value * 256) + data[offset]
offset = offset + 1
len = len - 1
end
setChannel(cid, (value * mult) + add)
end

