Help with Mercedes w211 E55
I cleared everything hit write and then read. After it read the configuration nothing showed up so I then added this script
-- Log messages from CAN bus -- be sure to set the correct baud rate in the CAN settings -------------------------------------------------- -- change this to 0 for CAN bus 1, or 1 for CAN bus 2 canBus = 0 -------------------------------------------------- --this function drains all pending CAN messages --and outputs messages to the log function outputCAN() repeat id, ext, data = rxCAN(canBus, 1000) if id ~= nil then print('[' ..id ..']: ') for i = 1,#data do print(data ..', ') end println('') end until id == nil println('Timeout: no CAN data') end function onTick() outputCAN() end setTickRate(30)
It said the exact same thing as above. No numbers.
-- Log messages from CAN bus -- be sure to set the correct baud rate in the CAN settings -------------------------------------------------- -- change this to 0 for CAN bus 1, or 1 for CAN bus 2 canBus = 0 -------------------------------------------------- --this function drains all pending CAN messages --and outputs messages to the log function outputCAN() repeat id, ext, data = rxCAN(canBus, 1000) if id ~= nil then print('[' ..id ..']: ') for i = 1,#data do print(data ..', ') end println('') end until id == nil println('Timeout: no CAN data') end function onTick() outputCAN() end setTickRate(30)
It said the exact same thing as above. No numbers.
-
- Posts: 5
- Joined: Tue Feb 07, 2017 4:29 am
- Location: Murfreesboro TN
- Contact:
yeah, i convinced him to go RCP, knowing it's featureset and limited understanding of the scripting process (and complications of scripting) involved, i'm used to a can config similar to link g4+ for setup.
i'm sending him a new cable tomorrow, i Remember that I hooked up both Can 1 and 2 to both H and L can on the oem hub, so I'm anticipating the 120ohm terminating resistor possibly being a reason behind the issues.
as for the reverse engineering part, all the variables are straight forward for the most part, but they're using bitmasks on nearly every one aside from TPS that makes things difficult. I also don't currently own a RCP system so it definitely makes it difficult to help identify exact problems.
growing pains make us taller. we will persevere
i'm sending him a new cable tomorrow, i Remember that I hooked up both Can 1 and 2 to both H and L can on the oem hub, so I'm anticipating the 120ohm terminating resistor possibly being a reason behind the issues.
as for the reverse engineering part, all the variables are straight forward for the most part, but they're using bitmasks on nearly every one aside from TPS that makes things difficult. I also don't currently own a RCP system so it definitely makes it difficult to help identify exact problems.
growing pains make us taller. we will persevere
-
- Posts: 5
- Joined: Tue Feb 07, 2017 4:29 am
- Location: Murfreesboro TN
- Contact:
Can Id= 0x236 (566)
Information is in the first 2 bytes, So:
Length=2 and,
Offset=0
The Variable inside the 2 bytes is xxx##### ######xx, So:
Bitmask= 0x1FFC
Steering Wheel Centerline value =1024,
Locked Left value= 776
Locked Right value = 1272
run the variable through the formula x*1/8+-128,
you get a min/max of -31 and 31
If anyone is interested in explaining how this variable script would be initiated, i'm all ears
Information is in the first 2 bytes, So:
Length=2 and,
Offset=0
The Variable inside the 2 bytes is xxx##### ######xx, So:
Bitmask= 0x1FFC
Steering Wheel Centerline value =1024,
Locked Left value= 776
Locked Right value = 1272
run the variable through the formula x*1/8+-128,
you get a min/max of -31 and 31
If anyone is interested in explaining how this variable script would be initiated, i'm all ears
-
- Posts: 5
- Joined: Tue Feb 07, 2017 4:29 am
- Location: Murfreesboro TN
- Contact:
Hi Bewbzout and Mitch,
Mitch? we've been in contact via FB messenger some days ago or am I wrong?
Do you have a CAN script up and running which is mapping some parameters as it should, and just need to extract the steering angle, which you are asking for in the thread above?
With the data you provided here is what I would add when using just the scripting area (and not the direct CAN mapping, where I have not played around much at all and there seems to be a bug in Version 2.11.0 too)
Otherwise if you have no CAN script running at all then come back here too.
-Mike
Mitch? we've been in contact via FB messenger some days ago or am I wrong?
Do you have a CAN script up and running which is mapping some parameters as it should, and just need to extract the steering angle, which you are asking for in the thread above?
With the data you provided here is what I would add when using just the scripting area (and not the direct CAN mapping, where I have not played around much at all and there seems to be a bug in Version 2.11.0 too)
I did not tested this on the bench but you may try it out and come back with your findings.SteerAngleId = addChannel("SteerAngle", 25, 3, -31, 31, 'unit') --unknown units
CAN_map = {
[566] = function(data) processSteering(data)
end}
function processSteering(data)
local loByte = bit.band(data[2], 0xFC)
local hiByte = bit.band(data[1], 0x1F)
local value = ((hiByte * 64) + (loByte / 4)) * 0.125 - 128
setChannel(SteerAngleId, value)
end
Otherwise if you have no CAN script running at all then come back here too.
-Mike
Ok finally I got CAN data. I have some questions on how I got it though. First Mitch sent me another cable with only one channel which could be it but I don't think so. Second I'm wondering if this whole time using my tablet was the problem instead of hooked up to the laptop with the cable? Third which I believe is the the problem was when I would copy that script using my tablet it would put the script into a sentence format.
Anyway I'm totally stoked that I can finally start using this thing.
Next is to see if I can get some data
Anyway I'm totally stoked that I can finally start using this thing.
Next is to see if I can get some data
So Mitch had me load this script for steering angle
--Testing for Josh Chapin
--Steering angle test
--how frequently we poll for CAN messages
tickRate = 30
--the CAN baud rate
CAN_baud = 500000
--CAN channel to listen on. 0=first CAN channel, 1=second
CAN_chan = 0
--add your virtual channels here
--format addChannel(<name>, <sample rate>, <precision>, <min>, <max>, [units])
--muxId = addChannel("Mux", 10, 0, -30, 130, "C")
--coolantId = addChannel("tCoolant", 10, 0, -30, 130, "C")
--rpmId = addChannel("RPM", 10, 0, 0, 20000)
--rpm2Id = addChannel("RPM2", 10, 0, 0, 20000)
--tpsvId = addChannel("vTPS", 10, 2, 0, 5)
--tpsId = addChannel("rTPS", 10, 2, 0, 16, "#")
--batId = addChannel("vBatt", 10, 1, 0, 20, "#")
--airtId = addChannel("tAir", 10, 0, -30, 130,"C")
--gearId = addChannel("Gear", 10, 0, 0, 6,"#")
--oilpId = addChannel("pOil", 10, 1, -30, 130,"C")
--oiltId = addChannel("tOil", 10, 0, 0, 8,"bar")
--ignId = addChannel("iOut", 10, 1, -20, 60,"deg")
--injId = addChannel("zInjection", 10, 0, 0, 720,"deg")
--lamId = addChannel("lMeasured", 10, 3, 0, 2,"#")
--manId = addChannel("pManifold", 10, 1, 0, 300,"kPaA")
--lamsId = addChannel("lSetpoint", 10, 3, 0, 2,"#")
--lauId = addChannel("Launch", 10, 3, 0, 2,"#")
SteerAngleId = addChannel("SteerAngle", 25, 3, -31, 31, 'Degrees')
----------------------------------------
--customize here for CAN channel mapping
--format is:
--[CAN Id] = function(data) map_chan(<chan_id>, <data>, <CAN offset>, <CAN length>, <multiplier>, <adder>, [filter])
----------------------------------------
[566] = function(data) processSteering(data)
end}
function processSteering(data)
local loByte = bit.band(data[2], 0xFC)
local hiByte = bit.band(data[1], 0x1F)
local value = ((hiByte * 64) + (loByte / 4)) * 0.125 - 128
setChannel(SteerAngleId, value)
--CAN_map = {
--[814] = function(data)
--if map_chan(muxId, data, 0, 1, 1, 0) == 1 then
--map_chan(coolantId, data, 1, 1, 0.62745, -30)
--map_chan(rpmId, data, 2, 2, 1, 0)
--map_chan(tpsvId, data, 4, 1, 0.019608, 0)
--map_chan(tpsId, data, 5, 1 , 1, 1)
--map_chan(batId, data, 6, 1, 0.078, 0)
--map_chan(airtId, data, 7, 1, 0.62745, -30)
--elseif map_chan(muxId, data, 0, 1, 1, 0) == 2 then
--map_chan(oilpId, data, 2, 1, 1, 0)
--map_chan(oiltId, data, 3, 1, 0.62745, -30)
--map_chan(mapsId, data, 4, 1, 1, 0)
--end
end
}
function onTick()
processCAN(CAN_chan)
end
--===========do not edit below===========
function processCAN(chan)
local msg = 0
repeat
local id, e, data = rxCAN(chan, 0)
if id ~= nil then
local map = CAN_map[id]
if map ~= nil then
map(data)
end
end
msg = msg + 1
until id == nil or msg > 100
end
--Map CAN channel, little endian format
function map_chan(cid, data, offset, len, mult, add, filter)
if offset + len > #data then return end
offset = offset + 1
local value = 0
local shift = 1
while len > 0 do
value = value + (data[offset] * shift)
shift = shift * 256
offset = offset + 1
len = len - 1
end
local cv = value * mult + add
if filter ~= nil then cv = filter(cv) end
setChannel(cid, cv)
end
initCAN(CAN_chan, CAN_baud)
setTickRate(tickRate)
I am getting a startup error that states
([string "--testing for josh chapin..."] :37.0: unexpected symbol error
Anyone know what it's referring to and what we need to do to change the script? Thank you
--Testing for Josh Chapin
--Steering angle test
--how frequently we poll for CAN messages
tickRate = 30
--the CAN baud rate
CAN_baud = 500000
--CAN channel to listen on. 0=first CAN channel, 1=second
CAN_chan = 0
--add your virtual channels here
--format addChannel(<name>, <sample rate>, <precision>, <min>, <max>, [units])
--muxId = addChannel("Mux", 10, 0, -30, 130, "C")
--coolantId = addChannel("tCoolant", 10, 0, -30, 130, "C")
--rpmId = addChannel("RPM", 10, 0, 0, 20000)
--rpm2Id = addChannel("RPM2", 10, 0, 0, 20000)
--tpsvId = addChannel("vTPS", 10, 2, 0, 5)
--tpsId = addChannel("rTPS", 10, 2, 0, 16, "#")
--batId = addChannel("vBatt", 10, 1, 0, 20, "#")
--airtId = addChannel("tAir", 10, 0, -30, 130,"C")
--gearId = addChannel("Gear", 10, 0, 0, 6,"#")
--oilpId = addChannel("pOil", 10, 1, -30, 130,"C")
--oiltId = addChannel("tOil", 10, 0, 0, 8,"bar")
--ignId = addChannel("iOut", 10, 1, -20, 60,"deg")
--injId = addChannel("zInjection", 10, 0, 0, 720,"deg")
--lamId = addChannel("lMeasured", 10, 3, 0, 2,"#")
--manId = addChannel("pManifold", 10, 1, 0, 300,"kPaA")
--lamsId = addChannel("lSetpoint", 10, 3, 0, 2,"#")
--lauId = addChannel("Launch", 10, 3, 0, 2,"#")
SteerAngleId = addChannel("SteerAngle", 25, 3, -31, 31, 'Degrees')
----------------------------------------
--customize here for CAN channel mapping
--format is:
--[CAN Id] = function(data) map_chan(<chan_id>, <data>, <CAN offset>, <CAN length>, <multiplier>, <adder>, [filter])
----------------------------------------
[566] = function(data) processSteering(data)
end}
function processSteering(data)
local loByte = bit.band(data[2], 0xFC)
local hiByte = bit.band(data[1], 0x1F)
local value = ((hiByte * 64) + (loByte / 4)) * 0.125 - 128
setChannel(SteerAngleId, value)
--CAN_map = {
--[814] = function(data)
--if map_chan(muxId, data, 0, 1, 1, 0) == 1 then
--map_chan(coolantId, data, 1, 1, 0.62745, -30)
--map_chan(rpmId, data, 2, 2, 1, 0)
--map_chan(tpsvId, data, 4, 1, 0.019608, 0)
--map_chan(tpsId, data, 5, 1 , 1, 1)
--map_chan(batId, data, 6, 1, 0.078, 0)
--map_chan(airtId, data, 7, 1, 0.62745, -30)
--elseif map_chan(muxId, data, 0, 1, 1, 0) == 2 then
--map_chan(oilpId, data, 2, 1, 1, 0)
--map_chan(oiltId, data, 3, 1, 0.62745, -30)
--map_chan(mapsId, data, 4, 1, 1, 0)
--end
end
}
function onTick()
processCAN(CAN_chan)
end
--===========do not edit below===========
function processCAN(chan)
local msg = 0
repeat
local id, e, data = rxCAN(chan, 0)
if id ~= nil then
local map = CAN_map[id]
if map ~= nil then
map(data)
end
end
msg = msg + 1
until id == nil or msg > 100
end
--Map CAN channel, little endian format
function map_chan(cid, data, offset, len, mult, add, filter)
if offset + len > #data then return end
offset = offset + 1
local value = 0
local shift = 1
while len > 0 do
value = value + (data[offset] * shift)
shift = shift * 256
offset = offset + 1
len = len - 1
end
local cv = value * mult + add
if filter ~= nil then cv = filter(cv) end
setChannel(cid, cv)
end
initCAN(CAN_chan, CAN_baud)
setTickRate(tickRate)
I am getting a startup error that states
([string "--testing for josh chapin..."] :37.0: unexpected symbol error
Anyone know what it's referring to and what we need to do to change the script? Thank you
-
- Posts: 67
- Joined: Sun Dec 11, 2016 1:07 am
Looks like the error is around the use of the } symbols, it appears to be unbalanced.
[566] = function(data) processSteering(data)
end}
Recommend asking the person that supplied it to you to test it again and possibly fix the error; it's hard to tell from here how it should work. They can possibly provide a quick fix for you!
[566] = function(data) processSteering(data)
end}
Recommend asking the person that supplied it to you to test it again and possibly fix the error; it's hard to tell from here how it should work. They can possibly provide a quick fix for you!
Although I did not wrote the script but just suggested how the steering angle could be calculated some posts above and given some information from before, here is the slightly modified script you posted lately... give it a try and come back with your findings please!
--Steering angle test
--how frequently we poll for CAN messages
tickRate = 30
--the CAN baud rate
CAN_baud = 500000
--CAN channel to listen on. 0=first CAN channel, 1=second
CAN_chan = 0
--add your virtual channels here
--format addChannel(<name>, <sample rate>, <precision>, <min>, <max>, [units])
--muxId = addChannel("Mux", 10, 0, -30, 130, "C")
--coolantId = addChannel("tCoolant", 10, 0, -30, 130, "C")
--rpmId = addChannel("RPM", 10, 0, 0, 20000)
--rpm2Id = addChannel("RPM2", 10, 0, 0, 20000)
--tpsvId = addChannel("vTPS", 10, 2, 0, 5)
--tpsId = addChannel("rTPS", 10, 2, 0, 16, "#")
--batId = addChannel("vBatt", 10, 1, 0, 20, "#")
--airtId = addChannel("tAir", 10, 0, -30, 130,"C")
--gearId = addChannel("Gear", 10, 0, 0, 6,"#")
--oilpId = addChannel("pOil", 10, 1, -30, 130,"C")
--oiltId = addChannel("tOil", 10, 0, 0, 8,"bar")
--ignId = addChannel("iOut", 10, 1, -20, 60,"deg")
--injId = addChannel("zInjection", 10, 0, 0, 720,"deg")
--lamId = addChannel("lMeasured", 10, 3, 0, 2,"#")
--manId = addChannel("pManifold", 10, 1, 0, 300,"kPaA")
--lamsId = addChannel("lSetpoint", 10, 3, 0, 2,"#")
--lauId = addChannel("Launch", 10, 3, 0, 2,"#")
SteerAngleId = addChannel("SteerAngle", 25, 3, -31, 31, 'Degrees')
----------------------------------------
--customize here for CAN channel mapping
--format is:
--[CAN Id] = function(data) map_chan(<chan_id>, <data>, <CAN offset>, <CAN length>, <multiplier>, <adder>, [filter])
----------------------------------------
function processSteering(data)
local loByte = bit.band(data[2], 0xFC)
local hiByte = bit.band(data[1], 0x1F)
local value = ((hiByte * 64) + (loByte / 4)) * 0.125 - 128
setChannel(SteerAngleId, value)
end
CAN_map = {
[566] = function(data) processSteering(data)
--[814] = function(data)
--if map_chan(muxId, data, 0, 1, 1, 0) == 1 then
--map_chan(coolantId, data, 1, 1, 0.62745, -30)
--map_chan(rpmId, data, 2, 2, 1, 0)
--map_chan(tpsvId, data, 4, 1, 0.019608, 0)
--map_chan(tpsId, data, 5, 1 , 1, 1)
--map_chan(batId, data, 6, 1, 0.078, 0)
--map_chan(airtId, data, 7, 1, 0.62745, -30)
--elseif map_chan(muxId, data, 0, 1, 1, 0) == 2 then
--map_chan(oilpId, data, 2, 1, 1, 0)
--map_chan(oiltId, data, 3, 1, 0.62745, -30)
--map_chan(mapsId, data, 4, 1, 1, 0)
--end
end
}
function onTick()
processCAN(CAN_chan)
end
--===========do not edit below===========
function processCAN(chan)
local msg = 0
repeat
local id, e, data = rxCAN(chan, 0)
if id ~= nil then
local map = CAN_map[id]
if map ~= nil then
map(data)
end
end
msg = msg + 1
until id == nil or msg > 100
end
--Map CAN channel, little endian format
function map_chan(cid, data, offset, len, mult, add, filter)
if offset + len > #data then return end
offset = offset + 1
local value = 0
local shift = 1
while len > 0 do
value = value + (data[offset] * shift)
shift = shift * 256
offset = offset + 1
len = len - 1
end
local cv = value * mult + add
if filter ~= nil then cv = filter(cv) end
setChannel(cid, cv)
end
initCAN(CAN_chan, CAN_baud)
setTickRate(tickRate)