cannect 1.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. cannect-1.0.0/LICENSE +21 -0
  2. cannect-1.0.0/PKG-INFO +214 -0
  3. cannect-1.0.0/README.md +188 -0
  4. cannect-1.0.0/pyproject.toml +29 -0
  5. cannect-1.0.0/setup.cfg +4 -0
  6. cannect-1.0.0/src/cannect/__init__.py +30 -0
  7. cannect-1.0.0/src/cannect/api/__init__.py +0 -0
  8. cannect-1.0.0/src/cannect/config.py +114 -0
  9. cannect-1.0.0/src/cannect/core/__init__.py +0 -0
  10. cannect-1.0.0/src/cannect/core/ascet/__init__.py +3 -0
  11. cannect-1.0.0/src/cannect/core/ascet/amd.py +698 -0
  12. cannect-1.0.0/src/cannect/core/ascet/formula.py +33 -0
  13. cannect-1.0.0/src/cannect/core/ascet/oid.py +29 -0
  14. cannect-1.0.0/src/cannect/core/ascet/ws.py +154 -0
  15. cannect-1.0.0/src/cannect/core/can/__init__.py +2 -0
  16. cannect-1.0.0/src/cannect/core/can/ascet/__init__.py +3 -0
  17. cannect-1.0.0/src/cannect/core/can/ascet/_db2code.py +344 -0
  18. cannect-1.0.0/src/cannect/core/can/ascet/_db2elem.py +399 -0
  19. cannect-1.0.0/src/cannect/core/can/ascet/comdef.py +256 -0
  20. cannect-1.0.0/src/cannect/core/can/ascet/comrx.py +139 -0
  21. cannect-1.0.0/src/cannect/core/can/ascet/diag.py +691 -0
  22. cannect-1.0.0/src/cannect/core/can/db/__init__.py +4 -0
  23. cannect-1.0.0/src/cannect/core/can/db/reader.py +148 -0
  24. cannect-1.0.0/src/cannect/core/can/db/schema.py +269 -0
  25. cannect-1.0.0/src/cannect/core/can/db/specification/__init__.py +0 -0
  26. cannect-1.0.0/src/cannect/core/can/db/specification/message.py +230 -0
  27. cannect-1.0.0/src/cannect/core/can/db/specification/styles.py +81 -0
  28. cannect-1.0.0/src/cannect/core/can/db/specification/wrapper.py +161 -0
  29. cannect-1.0.0/src/cannect/core/can/db/vcs.py +104 -0
  30. cannect-1.0.0/src/cannect/core/can/rule.py +229 -0
  31. cannect-1.0.0/src/cannect/core/can/testcase/__init__.py +0 -0
  32. cannect-1.0.0/src/cannect/core/can/testcase/unitcase/__init__.py +0 -0
  33. cannect-1.0.0/src/cannect/core/can/testcase/unitcase/asw2can.py +48 -0
  34. cannect-1.0.0/src/cannect/core/can/testcase/unitcase/decode.py +63 -0
  35. cannect-1.0.0/src/cannect/core/can/testcase/unitcase/diagnosis.py +479 -0
  36. cannect-1.0.0/src/cannect/core/can/testcase/unitcase/encode.py +60 -0
  37. cannect-1.0.0/src/cannect/core/ir/__init__.py +2 -0
  38. cannect-1.0.0/src/cannect/core/ir/changehistory.py +310 -0
  39. cannect-1.0.0/src/cannect/core/ir/delivereables.py +71 -0
  40. cannect-1.0.0/src/cannect/core/ir/diff.py +97 -0
  41. cannect-1.0.0/src/cannect/core/ir/ir.py +581 -0
  42. cannect-1.0.0/src/cannect/core/ir/sdd.py +148 -0
  43. cannect-1.0.0/src/cannect/core/mdf.py +66 -0
  44. cannect-1.0.0/src/cannect/core/subversion.py +136 -0
  45. cannect-1.0.0/src/cannect/core/testcase/__init__.py +3 -0
  46. cannect-1.0.0/src/cannect/core/testcase/plotter.py +181 -0
  47. cannect-1.0.0/src/cannect/core/testcase/style.py +981 -0
  48. cannect-1.0.0/src/cannect/core/testcase/testcase.py +160 -0
  49. cannect-1.0.0/src/cannect/core/testcase/unitcase.py +227 -0
  50. cannect-1.0.0/src/cannect/errors.py +20 -0
  51. cannect-1.0.0/src/cannect/schema/__init__.py +5 -0
  52. cannect-1.0.0/src/cannect/schema/candb.py +226 -0
  53. cannect-1.0.0/src/cannect/schema/datadictionary.py +60 -0
  54. cannect-1.0.0/src/cannect/utils/__init__.py +3 -0
  55. cannect-1.0.0/src/cannect/utils/excel.py +29 -0
  56. cannect-1.0.0/src/cannect/utils/logger.py +81 -0
  57. cannect-1.0.0/src/cannect/utils/ppt.py +236 -0
  58. cannect-1.0.0/src/cannect/utils/tools.py +207 -0
  59. cannect-1.0.0/src/cannect.egg-info/PKG-INFO +214 -0
  60. cannect-1.0.0/src/cannect.egg-info/SOURCES.txt +61 -0
  61. cannect-1.0.0/src/cannect.egg-info/dependency_links.txt +1 -0
  62. cannect-1.0.0/src/cannect.egg-info/requires.txt +17 -0
  63. cannect-1.0.0/src/cannect.egg-info/top_level.txt +1 -0
cannect-1.0.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 JeHyeuk
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
cannect-1.0.0/PKG-INFO ADDED
@@ -0,0 +1,214 @@
1
+ Metadata-Version: 2.4
2
+ Name: cannect
3
+ Version: 1.0.0
4
+ Summary: HYUNDAI-KEFICO EMS/ASW CONVENIENCE TOOL
5
+ Requires-Python: >=3.8
6
+ Description-Content-Type: text/markdown
7
+ License-File: LICENSE
8
+ Requires-Dist: kaleido
9
+ Requires-Dist: lxml
10
+ Requires-Dist: mdfreader
11
+ Requires-Dist: numpy
12
+ Requires-Dist: pandas
13
+ Requires-Dist: plotly
14
+ Requires-Dist: psutil
15
+ Requires-Dist: pyautogui
16
+ Requires-Dist: pygetwindow
17
+ Requires-Dist: pyperclip
18
+ Requires-Dist: python-can
19
+ Requires-Dist: python-docx
20
+ Requires-Dist: python-dotenv
21
+ Requires-Dist: python-pptx
22
+ Requires-Dist: pywin32
23
+ Requires-Dist: tqdm
24
+ Requires-Dist: xlsxwriter
25
+ Dynamic: license-file
26
+
27
+ # cannect
28
+
29
+ <b>HMG/EMS ASW CONVENIENCE TOOL</b><br>
30
+ THIS FRAMEWORK IS PURPOSE-BUILT AND WILL NOT FUNCTION IN ENVIRONMENTS WHERE THE DOMAIN IS NOT VERIFIED OR AUTHORIZED. ALL RESOURCES REFER TO THE COMPANY'S INTERNAL NETWORK(INTRANET), AND THIS FRAMEWORK PROVIDES CONVENIENCE TOOLS FOR THOSE RESOURCES. THE RESOURCES THEMSELVES ARE PROCESSED TO PREVENT REMOVAL FROM THE INTRANET, AND USERS MUST EXERCISE CAUTION. ANY ATTEMPT TO EXPORT INTERNAL RESOURCES USING THIS FRAMEWORK MAY RESULT IN DISADVANTAGES OR DISCIPLINARY ACTION IN ACCORDANCE WITH THE COMPANY'S SECURITY POLICY.<br><br>
31
+ <b>HMG/EMS ASW 편의 도구</b><br>
32
+ 이 프레임워크는 특수한 목적을 위해 제작되었으며 사용하는 도메인이 검증 또는 허용되지 않은 환경에서는 작동이 불가합니다. 모든 리소스는 회사 내부망을 참조하며 본 프레임워크는 그 리소스에 대한 편의 도구를 제공합니다. 리소스 자체는 회사 내부망에서 반출되지 않도록 처리되며 사용자 또한 유의하여 사용하여야 합니다. 만일 이 프레임워크를 사용하여 내부 리소스를 반출하려는 시도를 할 경우 사내 보안 정책에 의거 불이익 또는 처벌을 받을 수 있습니다
33
+
34
+ ## USER GUIDE
35
+ ### INITIALIZE
36
+
37
+ 리소스 사용을 위한 내부 서버 mount 필요하다. (매 실행 시 상위에 삽입되어야 하는 코드)
38
+ ```commandline
39
+ from cannect import mount
40
+
41
+ mount(r"D:\SVN") # 사용자 Local의 SVN 최상위 경로를 입력
42
+ # 또는
43
+ mount() # 미입력 시, 내부 서버에 있는 SVN 경로를 사용(성능 저하 모드 및 사용자간 충돌 가능성 내포)
44
+ ```
45
+
46
+ ### 1. ASCET MODULE(AMD)
47
+ #### 1.1. Ascet.Amd
48
+ ▲*.main.amd ▲*.data.amd ▲*.implementation.amd ▲*.specification.amd 에 대한 Ascet.AmdIO의 Wrapper 클래스이다.
49
+
50
+ ```commandline
51
+ from cannect import Ascet
52
+
53
+ # READ *.amd
54
+ # INSTANCE {amd} CONTAINS FOLLOWING ATTRIBUTES
55
+ # .name: [str] NAME OF MODULE
56
+ # .main: [<Ascet.AmdIO>] Ascet.AmdIO({*.main.amd})
57
+ # .impl: [<Ascet.AmdIO>] Ascet.AmdIO({*.implementation.amd})
58
+ # .data: [<Ascet.AmdIO>] Ascet.AmdIO({*.data.amd})
59
+ # .spec: [<Ascet.AmdIO>] Ascet.AmdIO({*.specification.amd})
60
+
61
+ src = # {*.main.amd} 또는 {*.zip} (모델 전체 경로)
62
+ amd = Ascet.Amd(src)
63
+ ```
64
+
65
+ #### 1.2. Ascet.AmdIO
66
+ 개별 *.amd 파일에 대한 IO 클래스이다.
67
+
68
+ ##### 1.2.1. <i>.root</i>
69
+ ```commandline
70
+ main = amd.main
71
+ print(main.root)
72
+ ```
73
+ ```commandline
74
+ 결과
75
+ name ComDef_HEV
76
+ nameSpace /HNB_GASOLINE/_29_CommunicationVehicle/Standar...
77
+ OID _040g00002u801q070g7g807i9bh0a
78
+ timeStamp 2025-10-01T06:48:17
79
+ componentType ASCET_Module
80
+ specificationType CCode
81
+ defaultProjectName ComDef_HEV_DEFAULT
82
+ defaultProjectOID _040g1j9410g01q87180hrfqf5892o
83
+ path D:\ETASData\ASCET6.1\Export\ComDef_HEV\ComDef_...
84
+ file ComDef_HEV.main.amd
85
+ model ComDef_HEV
86
+ type ComponentMain
87
+ dtype: object
88
+ ```
89
+ ##### 1.2.2. <i>.digestValue</i> & <i>.signatureValue</i>
90
+ ```commandline
91
+ print(main.digestValue)
92
+ print("---")
93
+ print(main.signatureValue)
94
+ ```
95
+ ```commandline
96
+ 결과
97
+ P4vSzV9B/VN5kcuO0ICAfxWO2vo=
98
+ ---
99
+ bB8aNE2ULCnQ+BB5y5HVHnwsnRZUzbCX1cqPHZ2hik1e3CZ4aMXmeZezMZl2nrXd
100
+ dieNjpiHg2iTOdQurIad4mLu0ixv2UVLa7FC0SgkBarFV7VgAYAXq8x7xd/KrEaA
101
+ EAeJmWb+uKW5hkQwrQ7bHe3BuNOoPmX1uIFZv7aKqmZDVdypC+0C3q1CbbeMjfWU
102
+ xwMQ8jsUjXlJCjdtpyBhPlS8O/dJ5tm7mnNTrSk8wp+nSbk17E5g9xy9SmyC3CUZ
103
+ 0I7XDtbazFkOQKSkBgwpmEv0qkdeeQJ/JuSePXFi66E962zf+CqQ4PTZX2e9lW1u
104
+ k8jWuLYv6t5ckBo/Tn6hoQ==
105
+ ```
106
+ ##### 1.2.3. <i>.dataframe(tag:str, depth:str)</i>
107
+ tag의 Attribute를 데이터프레임으로 변환한다.<br>
108
+ @param tag: [str] 변환하고자 하는 태그 이름 e.g. "Element", "MethodSignature"<br>
109
+ @param depth: [str] 선택한 태그 하위 태그 적용 깊이 e.g. "recursive"
110
+
111
+ ```commandline
112
+ print(main.dataframe('Element', depth='recursive'))
113
+ print('---')
114
+ print(main.dataframe('MethodSignature', depth='tag'))
115
+ ```
116
+ ```commandline
117
+ 결과
118
+ name OID ignore comment modelType basicModelType unit kind scope virtual dependent volatile calibrated set get read write reference maxSizeX componentName componentID model
119
+ 0 ABS_ActvSta_Can _040g1ngg00p91o07186g9qpv1tv0a false ABS_ActiveStatus ##2G##ESC - TCS11 - ABS_ACT scalar udisc message exported false false true true false false true true false NaN NaN NaN ComDef_HEV
120
+ 1 ABS_DfctvSta_Can _040g1ngg01a01no71c8g7rr1uh8ga false ABS_DefectiveStatus ##2G##ESC - TCS11 - ABS_DEF scalar udisc message exported false false true true false false true true false NaN NaN NaN ComDef_HEV
121
+ 2 ABS_DiagSta_Can _040g1ngg00p91o07182g9bnv64o0e false ABS_DiagnosticStatus ##2G##ESC - TCS11 - ABS_DIAG scalar udisc message exported false false true true false false true true false NaN NaN NaN ComDef_HEV
122
+ ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
123
+ 1172 xEV_TotGridEnergy_Can _040g1ngg01a01og70g8g5pjg6r3lc false Total grid energy into the battery scalar cont message exported false false true true false false true true false NaN NaN NaN ComDef_HEV
124
+ 1173 CRC16bit_Calculator _040g1ngg00p91og70gbg6kpeec400 false CRC 16bit Calculator Instance complex class NaN local NaN NaN NaN NaN false false true true false NaN /HNB_GASOLINE/_29_CommunicationVehicle/CANInte... _040g1ngg01pp1oo708a0du6locrr2 ComDef_HEV
125
+ 1174 CRC8bit_Calculator _040g1ngg01a01o8704fg42b3o0102 false CRC 8bit Calculator Instance complex class NaN local NaN NaN NaN NaN false false true true false NaN /HNB_GASOLINE/_29_CommunicationVehicle/CANInte... _040g1ngg01pp1oo708cg4rviuqor2 ComDef_HEV
126
+
127
+ [1175 rows x 22 columns]
128
+ ---
129
+ name OID public default defaultMethod hidden availableForOS model
130
+ 0 _ABS_ESC_01_10ms _040g1ngg00p91o870kb0a7d8r4524 true false true false true ComDef_HEV
131
+ 1 _ACU_02_00ms _040g030000001mo7109g4avsmjn5i true false false false true ComDef_HEV
132
+ 2 _BCM_12_200ms _040g030000001mo710eg5p0lpf73a true false false false true ComDef_HEV
133
+ .. ... ... ... ... ... ... ... ...
134
+ 62 _SMK_02_200ms _040g1j9410g01q071g90p9vm1m4g2 true false false false true ComDef_HEV
135
+ 63 _TMU_01_200ms _040g1ngg00p91o871cbg8vcrhmigk true false false false true ComDef_HEV
136
+ 64 _WAKEUP_01_00ms _040g030000001mo7109g4a84q0t5g true false false false true ComDef_HEV
137
+
138
+ [65 rows x 8 columns]
139
+ ```
140
+ ##### 1.2.4. <i>.datadict(tag:str, depth:str)</i>
141
+ 1.2.3.절의 dictionary 형태 (예제 없음)
142
+
143
+ ##### 1.2.5. <i>.export(path:str)</i>
144
+ 파일로 저장
145
+ ```commandline
146
+ main.export(r'./')
147
+ ```
148
+
149
+ ##### 1.2.6. 기타 기능
150
+ ```commandline
151
+ # .export_to_downloads()
152
+ # 1.2.5.절의 저장 경로를 C:\User\Downloads 로 지정
153
+ ```
154
+
155
+ ```commandline
156
+ # .findParent(*elems:Element)
157
+ # Element의 부모 Element 를 리턴
158
+ ```
159
+
160
+ ```commandline
161
+ # .serialize()
162
+ # export를 위한 문자열을 리턴
163
+ ```
164
+
165
+ ```commandline
166
+ # .strictFind(tag:str, **kwargs)
167
+ # 태그와 Attribute가 kwargs의 조건을 만족하는 태그를 리턴
168
+ ```
169
+
170
+ ```commandline
171
+ # .replace(tag:str, attr_name:str, attr_value:dict)
172
+ # @tag와 @attr_name에 부합하는 태그를 찾은 뒤 attr_value.key값을 attr_value.value로 변경
173
+ ```
174
+
175
+ #### 1.3. WorkspaceIO
176
+ 워크스페이스 또는 SVN 전체 프로젝트 접근
177
+
178
+ ### 2. CAN
179
+ #### 2.1. Database
180
+ ```commandline
181
+ from cannect import DataBaseCAN
182
+
183
+ db = DataBaseCAN.Reader(src='')
184
+ # 특정 프로젝트를 위한 DB를 사용할 경우 json 파일 형식의 데이터를 @src에 사용
185
+ # 미적용 시 SVN 내 최신 DB 사용
186
+ print(db)
187
+ ```
188
+
189
+ ```commandline
190
+ 결과
191
+ ECU Message ID DLC Send Type Cycle Time Signal Definition Length StartBit Sig Receivers UserSigValidity Value Table Value Type GenSigStartValue Factor Offset Min Max Unit Local Network Wake Up Request Network Request Holding Time Description Version Requirement ID Required Date Remark Status ByteOrder ICE Channel ICE WakeUp HEV Channel HEV WakeUp SystemConstant Codeword Formula SignedProcessing InterfacedVariable SignalRenamed
192
+ 0 CGW_CCU ABS_ESC_01_10ms 0x06F 8 P 10 ABS_ESC_Crc1Val ABS_ESC_CyclicRedundancyCheck1Value 16 0 AWD,EMS,TCU,SCU_FF IG1 0x0~0xFFFF:CRCValue Unsigned 0xFFFF 1.0 0.0 0.0 0.0 No 0 "The data area for CRC calculation is based on... 21.09.03 Official Intel P P OneToOne //Internal
193
+ 1 CGW_CCU ABS_ESC_01_10ms 0x06F 8 P 10 ABS_ESC_AlvCnt1Val ABS_ESC_AliveCounter1Value 8 16 AWD,EMS,TCU,SCU_FF IG1 0x0~0xFF:AlvCntValue Unsigned 0x0 1.0 0.0 0.0 0.0 No 0 "For the first transmission request for a data... 21.09.03 Official Intel P P OneToOne //Internal
194
+ 2 CGW_CCU ABS_ESC_01_10ms 0x06F 8 P 10 ABS_WrngLmpSta ABS_WarningLampStatus ##2G##ESC - TCS15 - ABS_... 2 24 AWD,TCU,SCU_FF IG1 0x0:ABS Warning lamp OFF/0x1:ABS Warning lamp ... Unsigned 0x0 1.0 0.0 0.0 0.0 No 0 The signal indicates the status of the ABS War... 19.07.02 Official Intel P OneToOne FD_stAbsWrngLmp
195
+ ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
196
+ 1791 EMS EMS_LDCBMS1 0x52C 8 P 50 CF_Ems1_Alive 2 54 LDC IG1 unsigned 0x0 0.0 0.0 0.0 3.0 No 0 19.06.25 "'2025.07.02. 자체 DB 개정\n- 현재 EMS 송출 중이나, 수신처 없... Official Intel L MICROEPT_48V_SC == 1 Cfg_MeptSys_C > 0 //Internal
197
+ 1792 EMS EMS_LDCBMS1 0x52C 8 P 50 CF_stDesModDcdc 4 56 LDC IG1 0x0:Init (wake-up)/0x5:Idle / Neutral/0x8:Forw... unsigned 0x0 0.0 0.0 0.0 15.0 No 0 Desired LDC operation mode by EMS 19.06.25 "'2025.07.02. 자체 DB 개정\n- 현재 EMS 송출 중이나, 수신처 없... Official Intel L MICROEPT_48V_SC == 1 Cfg_MeptSys_C > 0 Ldc_stDesMod
198
+ 1793 EMS EMS_LDCBMS1 0x52C 8 P 50 CF_Ems1_ChkSum 4 60 LDC IG1 0x0:No error/0x1:Engine speed sensor defective unsigned 0x0 0.0 0.0 0.0 15.0 No 0 "This signal indicates Checksum for robustness... 19.06.25 "'2025.07.02. 자체 DB 개정\n- 현재 EMS 송출 중이나, 수신처 없... Official Intel L MICROEPT_48V_SC == 1 Cfg_MeptSys_C > 0 //Internal
199
+
200
+ [1794 rows x 39 columns]
201
+ ```
202
+
203
+ 2.1.1. Database/Reader - 속성
204
+ ```commandline
205
+ print(db.source) # json 파일 전체 경로 / pd.DataFrame 입력 시 "direct"
206
+ print(db.traceability) # 원본 DB 이름 (Excel 파일명)
207
+ print(db.revision) # 원본 DB의 SVN Revision 및 로컬 재생성 횟수
208
+ ```
209
+ ```commandline
210
+ 결과
211
+ E:\SVN\dev.bsw\ ...{보안상 생략}... \dev\자체제어기_KEFICO-EMS_CANFD_r21713@03.json
212
+ 자체제어기_KEFICO-EMS_CANFD
213
+ r21713@03
214
+ ```
@@ -0,0 +1,188 @@
1
+ # cannect
2
+
3
+ <b>HMG/EMS ASW CONVENIENCE TOOL</b><br>
4
+ THIS FRAMEWORK IS PURPOSE-BUILT AND WILL NOT FUNCTION IN ENVIRONMENTS WHERE THE DOMAIN IS NOT VERIFIED OR AUTHORIZED. ALL RESOURCES REFER TO THE COMPANY'S INTERNAL NETWORK(INTRANET), AND THIS FRAMEWORK PROVIDES CONVENIENCE TOOLS FOR THOSE RESOURCES. THE RESOURCES THEMSELVES ARE PROCESSED TO PREVENT REMOVAL FROM THE INTRANET, AND USERS MUST EXERCISE CAUTION. ANY ATTEMPT TO EXPORT INTERNAL RESOURCES USING THIS FRAMEWORK MAY RESULT IN DISADVANTAGES OR DISCIPLINARY ACTION IN ACCORDANCE WITH THE COMPANY'S SECURITY POLICY.<br><br>
5
+ <b>HMG/EMS ASW 편의 도구</b><br>
6
+ 이 프레임워크는 특수한 목적을 위해 제작되었으며 사용하는 도메인이 검증 또는 허용되지 않은 환경에서는 작동이 불가합니다. 모든 리소스는 회사 내부망을 참조하며 본 프레임워크는 그 리소스에 대한 편의 도구를 제공합니다. 리소스 자체는 회사 내부망에서 반출되지 않도록 처리되며 사용자 또한 유의하여 사용하여야 합니다. 만일 이 프레임워크를 사용하여 내부 리소스를 반출하려는 시도를 할 경우 사내 보안 정책에 의거 불이익 또는 처벌을 받을 수 있습니다
7
+
8
+ ## USER GUIDE
9
+ ### INITIALIZE
10
+
11
+ 리소스 사용을 위한 내부 서버 mount 필요하다. (매 실행 시 상위에 삽입되어야 하는 코드)
12
+ ```commandline
13
+ from cannect import mount
14
+
15
+ mount(r"D:\SVN") # 사용자 Local의 SVN 최상위 경로를 입력
16
+ # 또는
17
+ mount() # 미입력 시, 내부 서버에 있는 SVN 경로를 사용(성능 저하 모드 및 사용자간 충돌 가능성 내포)
18
+ ```
19
+
20
+ ### 1. ASCET MODULE(AMD)
21
+ #### 1.1. Ascet.Amd
22
+ ▲*.main.amd ▲*.data.amd ▲*.implementation.amd ▲*.specification.amd 에 대한 Ascet.AmdIO의 Wrapper 클래스이다.
23
+
24
+ ```commandline
25
+ from cannect import Ascet
26
+
27
+ # READ *.amd
28
+ # INSTANCE {amd} CONTAINS FOLLOWING ATTRIBUTES
29
+ # .name: [str] NAME OF MODULE
30
+ # .main: [<Ascet.AmdIO>] Ascet.AmdIO({*.main.amd})
31
+ # .impl: [<Ascet.AmdIO>] Ascet.AmdIO({*.implementation.amd})
32
+ # .data: [<Ascet.AmdIO>] Ascet.AmdIO({*.data.amd})
33
+ # .spec: [<Ascet.AmdIO>] Ascet.AmdIO({*.specification.amd})
34
+
35
+ src = # {*.main.amd} 또는 {*.zip} (모델 전체 경로)
36
+ amd = Ascet.Amd(src)
37
+ ```
38
+
39
+ #### 1.2. Ascet.AmdIO
40
+ 개별 *.amd 파일에 대한 IO 클래스이다.
41
+
42
+ ##### 1.2.1. <i>.root</i>
43
+ ```commandline
44
+ main = amd.main
45
+ print(main.root)
46
+ ```
47
+ ```commandline
48
+ 결과
49
+ name ComDef_HEV
50
+ nameSpace /HNB_GASOLINE/_29_CommunicationVehicle/Standar...
51
+ OID _040g00002u801q070g7g807i9bh0a
52
+ timeStamp 2025-10-01T06:48:17
53
+ componentType ASCET_Module
54
+ specificationType CCode
55
+ defaultProjectName ComDef_HEV_DEFAULT
56
+ defaultProjectOID _040g1j9410g01q87180hrfqf5892o
57
+ path D:\ETASData\ASCET6.1\Export\ComDef_HEV\ComDef_...
58
+ file ComDef_HEV.main.amd
59
+ model ComDef_HEV
60
+ type ComponentMain
61
+ dtype: object
62
+ ```
63
+ ##### 1.2.2. <i>.digestValue</i> & <i>.signatureValue</i>
64
+ ```commandline
65
+ print(main.digestValue)
66
+ print("---")
67
+ print(main.signatureValue)
68
+ ```
69
+ ```commandline
70
+ 결과
71
+ P4vSzV9B/VN5kcuO0ICAfxWO2vo=
72
+ ---
73
+ bB8aNE2ULCnQ+BB5y5HVHnwsnRZUzbCX1cqPHZ2hik1e3CZ4aMXmeZezMZl2nrXd
74
+ dieNjpiHg2iTOdQurIad4mLu0ixv2UVLa7FC0SgkBarFV7VgAYAXq8x7xd/KrEaA
75
+ EAeJmWb+uKW5hkQwrQ7bHe3BuNOoPmX1uIFZv7aKqmZDVdypC+0C3q1CbbeMjfWU
76
+ xwMQ8jsUjXlJCjdtpyBhPlS8O/dJ5tm7mnNTrSk8wp+nSbk17E5g9xy9SmyC3CUZ
77
+ 0I7XDtbazFkOQKSkBgwpmEv0qkdeeQJ/JuSePXFi66E962zf+CqQ4PTZX2e9lW1u
78
+ k8jWuLYv6t5ckBo/Tn6hoQ==
79
+ ```
80
+ ##### 1.2.3. <i>.dataframe(tag:str, depth:str)</i>
81
+ tag의 Attribute를 데이터프레임으로 변환한다.<br>
82
+ @param tag: [str] 변환하고자 하는 태그 이름 e.g. "Element", "MethodSignature"<br>
83
+ @param depth: [str] 선택한 태그 하위 태그 적용 깊이 e.g. "recursive"
84
+
85
+ ```commandline
86
+ print(main.dataframe('Element', depth='recursive'))
87
+ print('---')
88
+ print(main.dataframe('MethodSignature', depth='tag'))
89
+ ```
90
+ ```commandline
91
+ 결과
92
+ name OID ignore comment modelType basicModelType unit kind scope virtual dependent volatile calibrated set get read write reference maxSizeX componentName componentID model
93
+ 0 ABS_ActvSta_Can _040g1ngg00p91o07186g9qpv1tv0a false ABS_ActiveStatus ##2G##ESC - TCS11 - ABS_ACT scalar udisc message exported false false true true false false true true false NaN NaN NaN ComDef_HEV
94
+ 1 ABS_DfctvSta_Can _040g1ngg01a01no71c8g7rr1uh8ga false ABS_DefectiveStatus ##2G##ESC - TCS11 - ABS_DEF scalar udisc message exported false false true true false false true true false NaN NaN NaN ComDef_HEV
95
+ 2 ABS_DiagSta_Can _040g1ngg00p91o07182g9bnv64o0e false ABS_DiagnosticStatus ##2G##ESC - TCS11 - ABS_DIAG scalar udisc message exported false false true true false false true true false NaN NaN NaN ComDef_HEV
96
+ ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
97
+ 1172 xEV_TotGridEnergy_Can _040g1ngg01a01og70g8g5pjg6r3lc false Total grid energy into the battery scalar cont message exported false false true true false false true true false NaN NaN NaN ComDef_HEV
98
+ 1173 CRC16bit_Calculator _040g1ngg00p91og70gbg6kpeec400 false CRC 16bit Calculator Instance complex class NaN local NaN NaN NaN NaN false false true true false NaN /HNB_GASOLINE/_29_CommunicationVehicle/CANInte... _040g1ngg01pp1oo708a0du6locrr2 ComDef_HEV
99
+ 1174 CRC8bit_Calculator _040g1ngg01a01o8704fg42b3o0102 false CRC 8bit Calculator Instance complex class NaN local NaN NaN NaN NaN false false true true false NaN /HNB_GASOLINE/_29_CommunicationVehicle/CANInte... _040g1ngg01pp1oo708cg4rviuqor2 ComDef_HEV
100
+
101
+ [1175 rows x 22 columns]
102
+ ---
103
+ name OID public default defaultMethod hidden availableForOS model
104
+ 0 _ABS_ESC_01_10ms _040g1ngg00p91o870kb0a7d8r4524 true false true false true ComDef_HEV
105
+ 1 _ACU_02_00ms _040g030000001mo7109g4avsmjn5i true false false false true ComDef_HEV
106
+ 2 _BCM_12_200ms _040g030000001mo710eg5p0lpf73a true false false false true ComDef_HEV
107
+ .. ... ... ... ... ... ... ... ...
108
+ 62 _SMK_02_200ms _040g1j9410g01q071g90p9vm1m4g2 true false false false true ComDef_HEV
109
+ 63 _TMU_01_200ms _040g1ngg00p91o871cbg8vcrhmigk true false false false true ComDef_HEV
110
+ 64 _WAKEUP_01_00ms _040g030000001mo7109g4a84q0t5g true false false false true ComDef_HEV
111
+
112
+ [65 rows x 8 columns]
113
+ ```
114
+ ##### 1.2.4. <i>.datadict(tag:str, depth:str)</i>
115
+ 1.2.3.절의 dictionary 형태 (예제 없음)
116
+
117
+ ##### 1.2.5. <i>.export(path:str)</i>
118
+ 파일로 저장
119
+ ```commandline
120
+ main.export(r'./')
121
+ ```
122
+
123
+ ##### 1.2.6. 기타 기능
124
+ ```commandline
125
+ # .export_to_downloads()
126
+ # 1.2.5.절의 저장 경로를 C:\User\Downloads 로 지정
127
+ ```
128
+
129
+ ```commandline
130
+ # .findParent(*elems:Element)
131
+ # Element의 부모 Element 를 리턴
132
+ ```
133
+
134
+ ```commandline
135
+ # .serialize()
136
+ # export를 위한 문자열을 리턴
137
+ ```
138
+
139
+ ```commandline
140
+ # .strictFind(tag:str, **kwargs)
141
+ # 태그와 Attribute가 kwargs의 조건을 만족하는 태그를 리턴
142
+ ```
143
+
144
+ ```commandline
145
+ # .replace(tag:str, attr_name:str, attr_value:dict)
146
+ # @tag와 @attr_name에 부합하는 태그를 찾은 뒤 attr_value.key값을 attr_value.value로 변경
147
+ ```
148
+
149
+ #### 1.3. WorkspaceIO
150
+ 워크스페이스 또는 SVN 전체 프로젝트 접근
151
+
152
+ ### 2. CAN
153
+ #### 2.1. Database
154
+ ```commandline
155
+ from cannect import DataBaseCAN
156
+
157
+ db = DataBaseCAN.Reader(src='')
158
+ # 특정 프로젝트를 위한 DB를 사용할 경우 json 파일 형식의 데이터를 @src에 사용
159
+ # 미적용 시 SVN 내 최신 DB 사용
160
+ print(db)
161
+ ```
162
+
163
+ ```commandline
164
+ 결과
165
+ ECU Message ID DLC Send Type Cycle Time Signal Definition Length StartBit Sig Receivers UserSigValidity Value Table Value Type GenSigStartValue Factor Offset Min Max Unit Local Network Wake Up Request Network Request Holding Time Description Version Requirement ID Required Date Remark Status ByteOrder ICE Channel ICE WakeUp HEV Channel HEV WakeUp SystemConstant Codeword Formula SignedProcessing InterfacedVariable SignalRenamed
166
+ 0 CGW_CCU ABS_ESC_01_10ms 0x06F 8 P 10 ABS_ESC_Crc1Val ABS_ESC_CyclicRedundancyCheck1Value 16 0 AWD,EMS,TCU,SCU_FF IG1 0x0~0xFFFF:CRCValue Unsigned 0xFFFF 1.0 0.0 0.0 0.0 No 0 "The data area for CRC calculation is based on... 21.09.03 Official Intel P P OneToOne //Internal
167
+ 1 CGW_CCU ABS_ESC_01_10ms 0x06F 8 P 10 ABS_ESC_AlvCnt1Val ABS_ESC_AliveCounter1Value 8 16 AWD,EMS,TCU,SCU_FF IG1 0x0~0xFF:AlvCntValue Unsigned 0x0 1.0 0.0 0.0 0.0 No 0 "For the first transmission request for a data... 21.09.03 Official Intel P P OneToOne //Internal
168
+ 2 CGW_CCU ABS_ESC_01_10ms 0x06F 8 P 10 ABS_WrngLmpSta ABS_WarningLampStatus ##2G##ESC - TCS15 - ABS_... 2 24 AWD,TCU,SCU_FF IG1 0x0:ABS Warning lamp OFF/0x1:ABS Warning lamp ... Unsigned 0x0 1.0 0.0 0.0 0.0 No 0 The signal indicates the status of the ABS War... 19.07.02 Official Intel P OneToOne FD_stAbsWrngLmp
169
+ ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
170
+ 1791 EMS EMS_LDCBMS1 0x52C 8 P 50 CF_Ems1_Alive 2 54 LDC IG1 unsigned 0x0 0.0 0.0 0.0 3.0 No 0 19.06.25 "'2025.07.02. 자체 DB 개정\n- 현재 EMS 송출 중이나, 수신처 없... Official Intel L MICROEPT_48V_SC == 1 Cfg_MeptSys_C > 0 //Internal
171
+ 1792 EMS EMS_LDCBMS1 0x52C 8 P 50 CF_stDesModDcdc 4 56 LDC IG1 0x0:Init (wake-up)/0x5:Idle / Neutral/0x8:Forw... unsigned 0x0 0.0 0.0 0.0 15.0 No 0 Desired LDC operation mode by EMS 19.06.25 "'2025.07.02. 자체 DB 개정\n- 현재 EMS 송출 중이나, 수신처 없... Official Intel L MICROEPT_48V_SC == 1 Cfg_MeptSys_C > 0 Ldc_stDesMod
172
+ 1793 EMS EMS_LDCBMS1 0x52C 8 P 50 CF_Ems1_ChkSum 4 60 LDC IG1 0x0:No error/0x1:Engine speed sensor defective unsigned 0x0 0.0 0.0 0.0 15.0 No 0 "This signal indicates Checksum for robustness... 19.06.25 "'2025.07.02. 자체 DB 개정\n- 현재 EMS 송출 중이나, 수신처 없... Official Intel L MICROEPT_48V_SC == 1 Cfg_MeptSys_C > 0 //Internal
173
+
174
+ [1794 rows x 39 columns]
175
+ ```
176
+
177
+ 2.1.1. Database/Reader - 속성
178
+ ```commandline
179
+ print(db.source) # json 파일 전체 경로 / pd.DataFrame 입력 시 "direct"
180
+ print(db.traceability) # 원본 DB 이름 (Excel 파일명)
181
+ print(db.revision) # 원본 DB의 SVN Revision 및 로컬 재생성 횟수
182
+ ```
183
+ ```commandline
184
+ 결과
185
+ E:\SVN\dev.bsw\ ...{보안상 생략}... \dev\자체제어기_KEFICO-EMS_CANFD_r21713@03.json
186
+ 자체제어기_KEFICO-EMS_CANFD
187
+ r21713@03
188
+ ```
@@ -0,0 +1,29 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "cannect"
7
+ version = "1.0.0"
8
+ description = "HYUNDAI-KEFICO EMS/ASW CONVENIENCE TOOL"
9
+ readme = "README.md"
10
+ requires-python = ">=3.8"
11
+ dependencies = [
12
+ "kaleido",
13
+ "lxml",
14
+ "mdfreader",
15
+ "numpy",
16
+ "pandas",
17
+ "plotly",
18
+ "psutil",
19
+ "pyautogui",
20
+ "pygetwindow",
21
+ "pyperclip",
22
+ "python-can",
23
+ "python-docx",
24
+ "python-dotenv",
25
+ "python-pptx",
26
+ "pywin32",
27
+ "tqdm",
28
+ "xlsxwriter"
29
+ ]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,30 @@
1
+ __all__ = [
2
+
3
+ # .core
4
+ "Ascet",
5
+ "AscetCAN",
6
+ "DataBaseCAN",
7
+ "IR",
8
+ "Subversion",
9
+
10
+ # .utils
11
+ "ComExcel",
12
+ "Logger",
13
+ "Tools",
14
+
15
+ # .schema
16
+ "DataDictionary",
17
+ ]
18
+
19
+ from cannect.config import mount
20
+ from cannect.core import ascet as Ascet
21
+ from cannect.core.can import AscetCAN, DataBaseCAN
22
+ from cannect.core.subversion import Subversion
23
+ from cannect.core.testcase import TestCase, UnitTestCase, Plot
24
+ from cannect.core.ir import IR
25
+ from cannect.core.ir.changehistory import ChangeHistoryManager
26
+
27
+ from cannect.schema import DataDictionary
28
+
29
+ from cannect.utils import ComExcel, Logger
30
+ from cannect.utils import tools as Tools
File without changes
@@ -0,0 +1,114 @@
1
+ from cannect.schema.datadictionary import DataDictionary
2
+ from cannect.errors import InternalServerError
3
+ from datetime import datetime
4
+ from pathlib import Path
5
+ import os, psutil
6
+
7
+
8
+ __namespace__ = {
9
+ "21301106": "김남균",
10
+ "22011005": "강지원",
11
+ "22011029": "김병욱",
12
+ "22011032": "김성령",
13
+ "22011033": "김성호",
14
+ "22011057": "김한솔",
15
+ "22011072": "문병헌",
16
+ "22011085": "박원진",
17
+ "22011110": "안성웅",
18
+ "22011115": "양웅",
19
+ "22011133": "이동훈",
20
+ "22403040": "이승욱",
21
+ "22011148": "이제혁",
22
+ "22011154": "이진노",
23
+ "22011160": "임동훈",
24
+ "22403041": "조규나",
25
+ "22011187": "조재형",
26
+ "22011206": "한대성"
27
+ }
28
+
29
+
30
+ E = ENV = env = DataDictionary(**os.environ)
31
+ E.COMPANY = "HYUNDAI KEFICO Co.,Ltd."
32
+ E.COPYRIGHT = f'Copyright {E.COMPANY} 2020-{datetime.now().year}. All rights reserved.'
33
+ E.DIVISION = "ELECTRIFICATION PT CONTROL TEAM 1"
34
+ E.KOREANAME = __namespace__.get(E.USERNAME, '알 수 없음')
35
+
36
+
37
+ def mount(svn_path=None):
38
+ """
39
+ cannect 사용자 초기 환경 설정(Configuration)
40
+ - KEFICO 도메인이 아닌 경우 오류 표출
41
+ - KEFICO 서버 접근 권한 및 SVN 권한 확인
42
+ - 전역 환경 변수 설정
43
+ :return:
44
+ """
45
+ global E
46
+
47
+ if svn_path is None:
48
+ svn_path = Path(r"\\kefico\keti\ENT\SDT\SVN")
49
+ else:
50
+ svn_path = Path(svn_path)
51
+
52
+ # 운영 환경; KEFICO 도메인 확인
53
+ if not (
54
+ E.get('USERDNSDOMAIN', '') == 'KEFICO.GLOBAL' and
55
+ E.get('USERDOMAIN', '') == 'HKEFICO' and
56
+ E.get('USERDOMAIN_ROAMINGPROFILE', '') == 'HKEFICO'
57
+ ):
58
+ raise PermissionError(f'USER: {e.get("USERNAME")} NOT AUTHORIZED')
59
+
60
+ # 전역 환경 변수 설정
61
+ E.DOWNLOADS = E.USERPROFILE / 'Downloads'
62
+ E.SVN = svn_path
63
+ E.SVN_CAN = svn_path / 'dev.bsw/hkmc.ems.bsw.docs/branches/HEPG_Ver1p1/11_ProjectManagement'
64
+ E.SVN_CANDB = E.SVN_CAN / 'CAN_Database'
65
+ E.SVN_CONF = svn_path / 'GSL_Build/1_AswCode_SVN/PostAppSW/0_XML/DEM_Rename'
66
+ E.SVN_HISTORY = svn_path / 'GSL_Release/4_SW변경이력'
67
+ E.SVN_IR = svn_path / 'GSL_Build/8_IntegrationRequest'
68
+ E.SVN_MODEL = svn_path / 'model/ascet/trunk'
69
+ E.SVN_UNECE = svn_path / 'Autron_CoWork/사이버보안/Module_Test_Results'
70
+ E.SVN_SDD = svn_path / 'GSL_Build/7_Notes'
71
+ for p in psutil.disk_partitions():
72
+ if (Path(p.device) / "ETASData").exists():
73
+ E.ETAS = Path(p.device) / "ETASData"
74
+ if (E.ETAS / "ASCET6.1").exists():
75
+ E.ASCET = Path(E.ETAS / "ASCET6.1")
76
+
77
+ # 접근 권한 1차 확인; KEFICO 서버 권한 확인
78
+ for key, path in E.items():
79
+ if key.startswith("SVN"):
80
+ if not path.exists():
81
+ raise InternalServerError(f"{{{path}}} NOT EXIST IN {E.COMPANY} SERVER")
82
+
83
+ # 접근 권한 2차 확인; SVN 권한 확인
84
+ for path in [
85
+ E.SVN_CAN,
86
+ E.SVN_CONF,
87
+ E.SVN_HISTORY,
88
+ E.SVN_IR,
89
+ E.SVN_MODEL,
90
+ E.SVN_UNECE,
91
+ E.SVN_SDD
92
+ ]:
93
+ if not (path / ".svn").is_dir():
94
+ raise InternalServerError(f"{{{path}}} IS NOT LINKED TO SVN")
95
+ return
96
+
97
+ # Initialize
98
+ if E.USERNAME == '22011148':
99
+ mount(svn_path=Path(r"E:\SVN"))
100
+ else:
101
+ mount()
102
+
103
+
104
+ if __name__ == "__main__":
105
+ print(env.KOREANAME)
106
+ print(env.TEMP)
107
+ print(env.USERPROFILE / 'Downloads')
108
+ print(env.SVN)
109
+ print(env.SVN_CAN)
110
+ print(env.SVN_CANDB)
111
+ print(env.SVN_SDD)
112
+ print(env.ETAS)
113
+ print(env.ASCET)
114
+ # print(env)
File without changes
@@ -0,0 +1,3 @@
1
+ from .amd import Amd, AmdIO, AmdEL, AmdSC
2
+ from .oid import generateOID
3
+ from .ws import WorkspaceIO