Can msg send
This commit is contained in:
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
50
.idea/workspace.xml
generated
50
.idea/workspace.xml
generated
@@ -1,7 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="72cc40b1-c3bf-43e3-bbc5-daa6555ea73d" name="Default Changelist" comment="" />
|
<list default="true" id="72cc40b1-c3bf-43e3-bbc5-daa6555ea73d" name="Default Changelist" comment="">
|
||||||
|
<change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/kx.py" beforeDir="false" afterPath="$PROJECT_DIR$/kx.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.py" afterDir="false" />
|
||||||
|
</list>
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||||
@@ -14,7 +19,11 @@
|
|||||||
</list>
|
</list>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
|
<component name="Git.Settings">
|
||||||
|
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||||
|
</component>
|
||||||
<component name="ProjectId" id="1tfF9PwSNSXsgpWLjjHxA5A61PP" />
|
<component name="ProjectId" id="1tfF9PwSNSXsgpWLjjHxA5A61PP" />
|
||||||
|
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
|
||||||
<component name="ProjectViewState">
|
<component name="ProjectViewState">
|
||||||
<option name="hideEmptyMiddlePackages" value="true" />
|
<option name="hideEmptyMiddlePackages" value="true" />
|
||||||
<option name="showExcludedFiles" value="true" />
|
<option name="showExcludedFiles" value="true" />
|
||||||
@@ -22,6 +31,8 @@
|
|||||||
</component>
|
</component>
|
||||||
<component name="PropertiesComponent">
|
<component name="PropertiesComponent">
|
||||||
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
|
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
|
||||||
|
<property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
|
||||||
|
<property name="last_opened_file_path" value="$PROJECT_DIR$/../texas_test" />
|
||||||
</component>
|
</component>
|
||||||
<component name="RunManager" selected="Python.main">
|
<component name="RunManager" selected="Python.main">
|
||||||
<configuration name="main" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
|
<configuration name="main" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
|
||||||
@@ -87,29 +98,38 @@
|
|||||||
<servers />
|
<servers />
|
||||||
</component>
|
</component>
|
||||||
<component name="WindowStateProjectService">
|
<component name="WindowStateProjectService">
|
||||||
<state width="1899" height="285" key="GridCell.Tab.0.bottom" timestamp="1623333108256">
|
<state x="740" y="280" key="FileChooserDialogImpl" timestamp="1625210370146">
|
||||||
<screen x="0" y="0" width="1920" height="1050" />
|
<screen x="0" y="0" width="1920" height="1050" />
|
||||||
</state>
|
</state>
|
||||||
<state width="1899" height="285" key="GridCell.Tab.0.bottom/0.0.1920.1050/1920.0.1920.1050@0.0.1920.1050" timestamp="1623333108256" />
|
<state x="740" y="280" key="FileChooserDialogImpl/0.0.1920.1050/1920.0.1920.1050@0.0.1920.1050" timestamp="1625210370146" />
|
||||||
<state width="1882" height="285" key="GridCell.Tab.0.bottom/0.0.1920.1050/1920.0.1920.1050@1920.0.1920.1050" timestamp="1623328090440" />
|
<state width="1899" height="285" key="GridCell.Tab.0.bottom" timestamp="1625231013474">
|
||||||
<state width="1899" height="285" key="GridCell.Tab.0.center" timestamp="1623333108256">
|
|
||||||
<screen x="0" y="0" width="1920" height="1050" />
|
<screen x="0" y="0" width="1920" height="1050" />
|
||||||
</state>
|
</state>
|
||||||
<state width="1899" height="285" key="GridCell.Tab.0.center/0.0.1920.1050/1920.0.1920.1050@0.0.1920.1050" timestamp="1623333108256" />
|
<state width="1899" height="285" key="GridCell.Tab.0.bottom/0.0.1920.1050/1920.0.1920.1050@0.0.1920.1050" timestamp="1625231013474" />
|
||||||
<state width="1882" height="285" key="GridCell.Tab.0.center/0.0.1920.1050/1920.0.1920.1050@1920.0.1920.1050" timestamp="1623328090440" />
|
<state width="1899" height="285" key="GridCell.Tab.0.bottom/0.0.1920.1050/1920.0.1920.1050@1920.0.1920.1050" timestamp="1625226001969" />
|
||||||
<state width="1899" height="285" key="GridCell.Tab.0.left" timestamp="1623333108256">
|
<state width="1899" height="285" key="GridCell.Tab.0.center" timestamp="1625231013474">
|
||||||
<screen x="0" y="0" width="1920" height="1050" />
|
<screen x="0" y="0" width="1920" height="1050" />
|
||||||
</state>
|
</state>
|
||||||
<state width="1899" height="285" key="GridCell.Tab.0.left/0.0.1920.1050/1920.0.1920.1050@0.0.1920.1050" timestamp="1623333108256" />
|
<state width="1899" height="285" key="GridCell.Tab.0.center/0.0.1920.1050/1920.0.1920.1050@0.0.1920.1050" timestamp="1625231013474" />
|
||||||
<state width="1882" height="285" key="GridCell.Tab.0.left/0.0.1920.1050/1920.0.1920.1050@1920.0.1920.1050" timestamp="1623328090440" />
|
<state width="1899" height="285" key="GridCell.Tab.0.center/0.0.1920.1050/1920.0.1920.1050@1920.0.1920.1050" timestamp="1625226001969" />
|
||||||
<state width="1899" height="285" key="GridCell.Tab.0.right" timestamp="1623333108256">
|
<state width="1899" height="285" key="GridCell.Tab.0.left" timestamp="1625231013474">
|
||||||
<screen x="0" y="0" width="1920" height="1050" />
|
<screen x="0" y="0" width="1920" height="1050" />
|
||||||
</state>
|
</state>
|
||||||
<state width="1899" height="285" key="GridCell.Tab.0.right/0.0.1920.1050/1920.0.1920.1050@0.0.1920.1050" timestamp="1623333108256" />
|
<state width="1899" height="285" key="GridCell.Tab.0.left/0.0.1920.1050/1920.0.1920.1050@0.0.1920.1050" timestamp="1625231013474" />
|
||||||
<state width="1882" height="285" key="GridCell.Tab.0.right/0.0.1920.1050/1920.0.1920.1050@1920.0.1920.1050" timestamp="1623328090440" />
|
<state width="1899" height="285" key="GridCell.Tab.0.left/0.0.1920.1050/1920.0.1920.1050@1920.0.1920.1050" timestamp="1625226001969" />
|
||||||
<state x="2576" y="349" key="com.intellij.ide.util.TipDialog" timestamp="1623318929088">
|
<state width="1899" height="285" key="GridCell.Tab.0.right" timestamp="1625231013474">
|
||||||
|
<screen x="0" y="0" width="1920" height="1050" />
|
||||||
|
</state>
|
||||||
|
<state width="1899" height="285" key="GridCell.Tab.0.right/0.0.1920.1050/1920.0.1920.1050@0.0.1920.1050" timestamp="1625231013474" />
|
||||||
|
<state width="1899" height="285" key="GridCell.Tab.0.right/0.0.1920.1050/1920.0.1920.1050@1920.0.1920.1050" timestamp="1625226001969" />
|
||||||
|
<state x="656" y="349" key="com.intellij.ide.util.TipDialog" timestamp="1625209374327">
|
||||||
|
<screen x="0" y="0" width="1920" height="1050" />
|
||||||
|
</state>
|
||||||
|
<state x="656" y="349" key="com.intellij.ide.util.TipDialog/0.0.1920.1050/1920.0.1920.1050@0.0.1920.1050" timestamp="1625209374327" />
|
||||||
|
<state x="2576" y="349" key="com.intellij.ide.util.TipDialog/0.0.1920.1050/1920.0.1920.1050@1920.0.1920.1050" timestamp="1623318929088" />
|
||||||
|
<state x="2543" y="227" width="672" height="678" key="search.everywhere.popup" timestamp="1625214536301">
|
||||||
<screen x="1920" y="0" width="1920" height="1050" />
|
<screen x="1920" y="0" width="1920" height="1050" />
|
||||||
</state>
|
</state>
|
||||||
<state x="2576" y="349" key="com.intellij.ide.util.TipDialog/0.0.1920.1050/1920.0.1920.1050@1920.0.1920.1050" timestamp="1623318929088" />
|
<state x="2543" y="227" width="672" height="678" key="search.everywhere.popup/0.0.1920.1050/1920.0.1920.1050@1920.0.1920.1050" timestamp="1625214536301" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
Binary file not shown.
BIN
__pycache__/kx.cpython-38.pyc
Normal file
BIN
__pycache__/kx.cpython-38.pyc
Normal file
Binary file not shown.
BIN
__pycache__/main.cpython-38.pyc
Normal file
BIN
__pycache__/main.cpython-38.pyc
Normal file
Binary file not shown.
BIN
__pycache__/protocol_kx.cpython-38.pyc
Normal file
BIN
__pycache__/protocol_kx.cpython-38.pyc
Normal file
Binary file not shown.
48
kx.py
48
kx.py
@@ -3,6 +3,8 @@ import can
|
|||||||
import cantools
|
import cantools
|
||||||
import os
|
import os
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
import struct
|
||||||
|
import time
|
||||||
|
|
||||||
|
|
||||||
K = np.zeros(protocol_kx.KX_K_COUNT)
|
K = np.zeros(protocol_kx.KX_K_COUNT)
|
||||||
@@ -21,21 +23,55 @@ class KX:
|
|||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
resetMsg = can.Message(arbitration_id=0xA, data=[99, self.sbl_id], is_extended_id=False)
|
resetMsg = can.Message(arbitration_id=0xA, data=[99, self.sbl_id], is_extended_id=False)
|
||||||
|
try:
|
||||||
self.can0.send(resetMsg)
|
self.can0.send(resetMsg)
|
||||||
|
print(f"Message sent on{self.can0.channel_info}")
|
||||||
|
except self.can0.CanError:
|
||||||
|
print("Message NOT sent")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def sendK(self):
|
def sendK(self):
|
||||||
msg = protocol_kx.CANMsgK(self.sbl_id, 0, protocol_kx.KX_FLAG_SEND, K[0])
|
|
||||||
i = 0
|
i = 0
|
||||||
for element in K:
|
for element in K:
|
||||||
msg.k = element
|
ba = bytearray(struct.pack("f", element))
|
||||||
msg.index = i
|
messageK = can.Message(arbitration_id=0x2BB, data=[self.sbl_id, i, 0,
|
||||||
i = i + 1
|
protocol_kx.KX_FLAG_SEND, ba[0], ba[1], ba[2], ba[3]], is_extended_id=False)
|
||||||
messageK = can.Message(protocol_kx.KX_FLAG_SEND, data=msg, is_extended_id=False)
|
try:
|
||||||
self.can0.send(messageK)
|
self.can0.send(messageK)
|
||||||
|
time.sleep(0.01)
|
||||||
|
print(f"Message sent on{self.can0.channel_info}")
|
||||||
|
except self.can0.CanError:
|
||||||
|
print("Message NOT sent")
|
||||||
|
i = i + 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def writeToFlashK(self):
|
def writeToFlashK(self):
|
||||||
msg = protocol_kx.CANMsgK(self.sbl_id, 0, protocol_kx.KX_FLAG_WRITE_REQ, K)
|
msg = protocol_kx.CANMsgK(self.sbl_id, 0, protocol_kx.KX_FLAG_WRITE_REQ, K)
|
||||||
messageK = can.Message(protocol_kx.KX_FLAG_READ, data=msg, is_extended_id=False)
|
messageK = can.Message(arbitration_id=0x2BB, data=[self.sbl_id, 0, 0,
|
||||||
|
protocol_kx.KX_FLAG_WRITE_REQ], is_extended_id=False)
|
||||||
|
try:
|
||||||
self.can0.send(messageK)
|
self.can0.send(messageK)
|
||||||
|
time.sleep(0.01)
|
||||||
|
print(f"Flash sent on{self.can0.channel_info}")
|
||||||
|
except self.can0.CanError:
|
||||||
|
print("Flash NOT sent")
|
||||||
|
|
||||||
|
|
||||||
|
def send_test_source_enable(self, x, y, xVel, yVel):
|
||||||
|
resetMsg = can.Message(
|
||||||
|
arbitration_id=0xA,
|
||||||
|
data=[
|
||||||
|
0x53,
|
||||||
|
0xFF,
|
||||||
|
struct.pack('b', int(x))[0],
|
||||||
|
struct.pack('B', int(y))[0],
|
||||||
|
struct.pack('b', int(xVel))[0],
|
||||||
|
struct.pack('b', int(yVel))[0],
|
||||||
|
0x68,
|
||||||
|
0xA4
|
||||||
|
],
|
||||||
|
is_extended_id=False
|
||||||
|
)
|
||||||
|
self.can0.send(resetMsg)
|
||||||
7
main.py
7
main.py
@@ -1,13 +1,15 @@
|
|||||||
import kx
|
import kx
|
||||||
import can
|
import can
|
||||||
import protocol_kx
|
import protocol_kx
|
||||||
|
import struct
|
||||||
import os
|
import os
|
||||||
|
import time
|
||||||
|
|
||||||
|
|
||||||
can0 = can.interface.Bus(bustype='socketcan', channel='can0', bitrate=500000)
|
can0 = can.interface.Bus(bustype='socketcan', channel='can0', bitrate=500000)
|
||||||
|
|
||||||
|
|
||||||
KXLOX = kx.KX(protocol_kx.KDescription.K_TEST_SOURCE_2_SIGLVL.value, 950, 255, can0)
|
KXLOX = kx.KX(protocol_kx.KDescription.K_TEST_SOURCE_2_SIGLVL.value, 950, 255, can0)
|
||||||
|
KXLOX.KXInit(protocol_kx.KDescription.K_SBL_ID.value, 43)
|
||||||
KXLOX.KXInit(protocol_kx.KDescription.K_TEST_SOURCE_1_POS_X_MAX.value, 21)
|
KXLOX.KXInit(protocol_kx.KDescription.K_TEST_SOURCE_1_POS_X_MAX.value, 21)
|
||||||
KXLOX.KXInit(protocol_kx.KDescription.K_TEST_SOURCE_1_POS_Y_MAX.value, 21)
|
KXLOX.KXInit(protocol_kx.KDescription.K_TEST_SOURCE_1_POS_Y_MAX.value, 21)
|
||||||
KXLOX.KXInit(protocol_kx.KDescription.K_TEST_SOURCE_1_POS_X_MIN.value, 1)
|
KXLOX.KXInit(protocol_kx.KDescription.K_TEST_SOURCE_1_POS_X_MIN.value, 1)
|
||||||
@@ -18,5 +20,6 @@ KXLOX.KXInit(protocol_kx.KDescription.K_TEST_SOURCE_1_SIGLVL.value, 450)
|
|||||||
KXLOX.KXInit(protocol_kx.KDescription.K_TEST_SOURCES_ENABLED.value, 1)
|
KXLOX.KXInit(protocol_kx.KDescription.K_TEST_SOURCES_ENABLED.value, 1)
|
||||||
KXLOX.sendK()
|
KXLOX.sendK()
|
||||||
KXLOX.writeToFlashK()
|
KXLOX.writeToFlashK()
|
||||||
os.wait(100)
|
time.sleep(0.1)
|
||||||
KXLOX.reset()
|
KXLOX.reset()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user