Posted: Sat May 06, 2017 9:00 pm
by Bewbzout
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.
Posted: Tue May 09, 2017 3:52 am
by Mitch Detailed
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
Posted: Tue May 09, 2017 4:00 am
by Mitch Detailed
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
Posted: Sat May 13, 2017 2:37 pm
by MikeD
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)
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
I did not tested this on the bench but you may try it out and come back with your findings.
Otherwise if you have no CAN script running at all then come back here too.
-Mike
Posted: Tue Jun 13, 2017 2:12 pm
by Bewbzout
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