Haltech PS1000 - PS2000

Revision as of 17:05, 14 July 2015 by Brentp (talk | contribs)

Haltech PS2000

Under development.

The following script will map the common Haltech CAN bus channels:

--Haltech PS1000 CAN Logging

tickRate = 10 --polling rate
CAN_baud = 1000000 --the CAN baud rate
CAN_chan = 0 --CAN channel to listen on. 0=first CAN channel, 1=second

--add your virtual channels here
--addChannel("Name",samplerate{1,10,25,50,100,200},precision(2),min(0),max(1000),units)
rpm_Id = addChannel("RPM", 50, 0, 0, 10000, "RPM")
map_Id = addChannel("MAP", 10, 0, 0, 100, 'kPa')
tps_Id = addChannel("TPS", 10, 1, 0, 100, '%')
fps_Id = addChannel("FuelPress", 10, 1, 0, 100, 'kPa')
ops_Id = addChannel("OilPress", 10, 1, 0, 100, 'kPa')
idc1_Id = addChannel("InjDutyCyc", 10, 0, 0, 100, '%')
lambda_Id = addChannel("AFR", 10, 3, 0, 5, 'Lambda')
cts_Id = addChannel("Coolant", 1, 1, 0, 200, 'C')
ats_Id = addChannel("IAT", 1, 1, 0, 200, 'C')
fts_Id = addChannel("FuelTemp", 1, 1, 0, 200, 'C')
ots_Id = addChannel("OilTemp", 1, 1, 0, 200, 'C')
flex_Id = addChannel("FuelComp", 1, 0, 0, 100, '%')

--customize here for CAN channel mapping
--format is: [CAN Id] = function(data) map_chan(<channel id>, data, <CAN offset>, <CAN length>, <multiplier>, <adder>)
CAN_map = {
[360] = function(data) map_chan(rpm_Id, data, 0, 2, 1, 0) end,
[360] = function(data) map_chan(map_Id, data, 2, 2, 10, -1013) end,
[360] = function(data) map_chan(tps_Id, data, 4, 2, 10, 0) end,
--[360] = function(data) map_chan(cps_Id, data, 6, 2, 10, 0) end, 
[361] = function(data) map_chan(fps_Id, data, 0, 2, 10, -1013) end,
[361] = function(data) map_chan(ops_Id, data, 2, 2, 10, -1013) end,
--[361] = function(data) map_chan(accel_pos_Id, data, 4, 2, 10, 0) end,
--[361] = function(data) map_chan(waste_gate_pres_Id, data, 6, 2, 10, -1013) end,
[362] = function(data) map_chan(idc1_Id, data, 0, 2, 10, -1013) end,
--[362] = function(data) map_chan(idc2_Id, data, 2, 2, 10, -1013) end,
--[362] = function(data) map_chan(ignL_Id, data, 4, 2, 10, 0) end,
--[362] = function(data) map_chan(ignT_Id, data, 6, 2, 10, 0) end,
[368] = function(data) map_chan(lambda_Id, data, 0, 2, 1000, 0) end,
[3E0] = function(data) map_chan(cts_Id, data, 0, 2, 10, 2731) end,
[3E0] = function(data) map_chan(ats_Id, data, 2, 2, 10, 2731) end,
[3E0] = function(data) map_chan(fts_Id, data, 4, 2, 10, 2731) end,
[3E0] = function(data) map_chan(ots_Id, data, 6, 2, 10, 2731) end,
[3E1] = function(data) map_chan(flex_Id, data, 4, 2, 10, 0) end
}

function onTick()
    processCAN(CAN_chan)
end

--===========do not edit below===========
function processCAN(chan)
    repeat
        local id, e, data = rxCAN(chan)
        if id ~= nil then
            local map = CAN_map[id]
            if map ~= nil then
                map(data)         
            end
        end
    until id == nil
end

--Map CAN channel
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
        len = len - 1
    end
    setChannel(cid, (value * mult) + add)
end

map_chan = (be_mode == 1) and map_chan_be or map_chan_le
initCAN(CAN_chan, CAN_baud)
setTickRate(tickRate)