Page 2 of 3

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: Mon May 08, 2017 1:58 pm
by brentp
Hi, really odd that you're not seeing output after that script. Can you save your current configuration and attach it to a reply here? I'd like to see if it's getting munged somehow, preventing it from running and you seeing any output.

Sorry for the hassle, we'll figure it out!

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: Wed May 10, 2017 7:58 pm
by brentp
Hi Mitch, are you also helping out Bewbzout?

Bewbzout, if you can save and attach your config here, I can double check to make sure there's nothing amiss with the script. Thanks!

Posted: Thu May 11, 2017 1:11 am
by Bewbzout
Sorry I haven't replied for awhile. Work has been crazy. I will try and get that to you soon Brent. Thank you again guys for the help.

Posted: Thu May 11, 2017 2:07 am
by Mitch Detailed
brentp wrote:Hi Mitch, are you also helping out Bewbzout?
Yessir, everything has been referenced for me to help him out.

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 06, 2017 2:06 pm
by Bewbzout
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

Posted: Tue Jun 06, 2017 6:05 pm
by brentp
Glad you're getting further!

Connecting via laptop or via wireless won't change the CAN operation, once it is setup correctly.

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

Posted: Tue Jun 13, 2017 7:32 pm
by dewittpayne
The obvious conclusion is that '--' is not the 'ignore comment line' character. Try removing all the comments and see what happens.

Posted: Tue Jun 13, 2017 8:10 pm
by brentp
The -- is actually valid syntax in Lua, denoting a comment.

The error is likely further down, and the point it referenced is where it thinks the start of the error exists.

Posted: Tue Jun 13, 2017 8:14 pm
by brentp
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!

Posted: Wed Jun 14, 2017 12:22 am
by MikeD
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)