CAN data processing method and system, electronic equipment and storage medium
By providing a CAN data processing method, using Python scripts and cantools library to parse and analyze CAN data, the economic and technical obstacles of parsing CAN data in the existing technology are solved, and efficient data analysis and processing are achieved.
Patent Information
- Application Number
- CN202510035090.6
- Authority / Receiving Office
- CN · China
- Patent Type
- Applications(China)
- Current Assignee / Owner
- Filing Date
- 2025-01-09
- Publication Date
- 2025-04-11
AI Technical Summary
In the prior art, parsing CAN data requires expensive diagnostic instruments, long data loading time, low manual screening efficiency, and high programming requirements, resulting in economic and technical obstacles.
Provides a CAN data processing method. By running Python scripts, open the front-end interface, select DBC files and BLF files, and use the cantools library for parsing and analysis. Users can set analysis indicators on the interface and generate data test results.
It reduces the difficulty of analysis, improves work efficiency, reduces manual operations, and significantly improves analysis efficiency when processing large amounts of data.
Smart Images

Figure CN119814601A_ABST
Abstract
Description
Technical Field
[0001] The present invention relates to the technical field of automobile message analysis, and in particular to a CAN data processing method, system, electronic equipment and storage medium. Background Art
[0002] In the current automotive field, the amount of CAN (Controller Area Network) message signal data transmitted in the current intelligent driving vehicle controller is huge. In the existing technology, after completing the test data collection, the tester relies on manually using software such as Vector CANoe to open the blf file for data inspection and analysis, or write scripts for data analysis. This will cause the following problems: (1) Economic and technical barriers: Parsing CAN data requires expensive diagnostic instruments or parsing equipment, which brings significant economic and technical barriers to vehicle CAN message parsing.
[0003] (2) Limitations of existing analysis methods: Using software such as Vector CANoe to open blf files for manual inspection has the following disadvantages: Long data loading time: When the amount of data is large, the time it takes for the software to load data increases significantly. Low manual screening efficiency: Manual screening of messages is inefficient and can easily miss important information.
[0004] (3) High programming requirements: Programming with Python or CAPL requires a high level of technical skills. In addition, due to the large number of projects, recoding is required when the project changes, which consumes a lot of manpower and material resources.
[0005] The above problems need to be solved urgently. Summary of the invention
[0006] The purpose of the present invention is to overcome at least one technical problem existing in the prior art, and to provide a CAN data processing method, system, electronic device and storage medium.
[0007] On the one hand, an embodiment of the present invention provides a CAN data processing method, the method comprising: S1: opening a front-end interface by running a Python script; S2: selecting a DBC file of a corresponding project, and loading the DBC file to obtain DBC message information of each frame message in the DBC file; S3: selecting a data file path to be processed, using the BLFReader function in the cantools library to read the BLF file, and obtaining the BLF message information of each frame message in each frame BLF file by parsing the loaded DBC file; S4: a user sets at least one analysis indicator in the front-end interface according to analysis requirements, and the analysis indicator includes a signal name and an analysis condition corresponding thereto; S5: a Python script traverses all files under the input path, and checks the signal values of all nodes according to the order of timestamps; S6: comparing the signal values of all nodes with at least one analysis indicator set to obtain file data that meets the conditions, and storing it in a preset list; S7: using the Open function to create a file package named with the analysis data name and the analysis indicator, and writing the data in the list line by line into the file package to generate a data test result; S8: using the close method to correctly close the file package.
[0008] Furthermore, the step S2: selecting the DBC file of the corresponding project, and loading the DBC file to obtain the DBC message information of each frame message in the DBC file includes: S201: reading the DBC file in the vehicle controller through a Python script; S202: using the load file function in the cantools library to load the DBC file to obtain the DBC message information of each frame message in the DBC file.
[0009] Furthermore, the DBC message information includes a timestamp, a signal name and a corresponding signal value.
[0010] Furthermore, the step S3: selecting the data file path to be processed, using the BLFReader function in the cantools library to read the BLF file, and obtaining the BLF message information in each frame message in each frame BLF file by parsing the loaded DBC file includes: reading the signal value in each frame message in each frame BLF file in turn, and extracting the signal to be analyzed.
[0011] Furthermore, the step S4: the user sets at least one analysis indicator in the front-end interface according to the analysis requirements, and the analysis indicator includes a signal name and a corresponding analysis condition, and also includes: a Python script obtains the analysis indicator through a graphical interface, and automatically generates a corresponding conditional screening code based on the analysis indicator.
[0012] Furthermore, the step S6: obtaining qualified file data based on comparison of the signal values of all the nodes and at least one analysis indicator set, and storing it in a preset list also includes: S601: obtaining non-compliant file data based on comparison of the signal values of all the nodes and at least one analysis indicator set, interrupting the control program, and displaying the non-compliant file data; or S602: obtaining non-compliant file data based on comparison of the signal values of all the nodes and at least one analysis indicator set, skipping the non-compliant data and checking the signal value of the next node, and displaying all non-compliant file data after the test is completed.
[0013] Furthermore, after the step S8: using the close method to correctly close the file package, the step also includes: S9: using the SMTP protocol and the Email library to send the file containing the data test result to a designated user.
[0014] In a second aspect, an embodiment of the present invention provides a CAN data processing system, the system applies the above-mentioned CAN data processing method, and the system includes: an execution Python script module, which is suitable for opening a front-end interface by running a Python script; a loading DBC file module, which is suitable for selecting a DBC file of a corresponding project, and loading the DBC file to obtain DBC message information of each frame message in the DBC file; a reading BLF file module, which is suitable for selecting a data file path to be processed, using the BLFReader function in the cantools library to read the BLF file, and by using the loaded DBC file to parse and obtain the BLF message information in each frame message of each frame BLF file; a setting analysis indicator module, which is suitable for users to set the root At least one analysis indicator is set in the front-end interface according to the analysis requirements, and the analysis indicator includes a signal name and a corresponding analysis condition; a data analysis module is suitable for a Python script to traverse all files under the input path, and check the signal values of all nodes according to the sequence of timestamps; a comparison module is suitable for comparing the signal values of all nodes with at least one analysis indicator set to obtain qualified file data, and store it in a preset list; a test result generation module is suitable for using an Open function to create a file package named with the analysis data name and the analysis indicator, and writing the data in the list into the file package line by line to generate a data test result; a data saving module is suitable for using a close method to correctly close the file package.
[0015] In a third aspect, an embodiment of the present invention further provides an electronic device, comprising: a memory, a processor, and a computer program stored in the memory and executable on the processor, wherein the computer program implements the above-mentioned CAN data processing method when executed by the processor.
[0016] In a fourth aspect, an embodiment of the present invention further provides a readable storage medium, when instructions in the storage medium are executed by a processor of an electronic device, the electronic device is enabled to execute the above-mentioned CAN data processing method.
[0017] The beneficial effects of the present invention are: (1) Reduce analysis difficulty: For testers who are not familiar with Python code, they only need to provide business process analysis conditions, and the Python script can automatically generate conditional code, significantly reducing the difficulty of analysis.
[0018] (2) Flexible analysis indicator combination: Analysis indicators and corresponding analysis conditions can be freely combined, which greatly facilitates function development and verification.
[0019] (3) Improve work efficiency: Recommended configurations can be saved for multiple projects, reducing the number of repeated coding times and significantly improving work efficiency. BRIEF DESCRIPTION OF THE DRAWINGS
[0020] The present invention will be further described below in conjunction with the accompanying drawings and embodiments.
[0021] Figure 1 This is a flow chart of a CAN data processing method provided in Example 1 of the present invention.
[0022] Figure 2 This is a schematic diagram of the structure of a CAN data processing system provided in Example 2 of the present invention.
[0023] Figure 3 This is a partial block diagram of an electronic device provided in Embodiment 3 of the present invention. DETAILED DESCRIPTION
[0024] It should be mentioned before discussing the exemplary embodiments in more detail that some exemplary embodiments are described as processes or methods depicted as flow charts. Although the flow charts describe the operations as sequential processes, many of the operations therein can be implemented in parallel, concurrently or simultaneously. In addition, the order of the operations can be rearranged. The process can be terminated when its operation is completed, but can also have additional steps not included in the accompanying drawings. The process can correspond to a method, function, procedure, subroutine, subprogram, etc.
[0025] It should be understood that, although the terms "first", "second", etc. may be used herein to describe various units, these units should not be limited by these terms. These terms are used only to distinguish one unit from another unit. For example, without departing from the scope of the exemplary embodiments, the first unit may be referred to as the second unit, and similarly the second unit may be referred to as the first unit. The term "and / or" used herein includes any and all combinations of one or more of the listed associated items.
[0026] The present invention will now be described in detail with reference to the accompanying drawings. This figure is a simplified schematic diagram, which only illustrates the basic structure of the present invention in a schematic manner, and therefore only shows the components related to the present invention.
[0027] Example 1 For ease of understanding, the inventive concept is generally described below before describing the embodiments of the present invention in detail: The present application provides a CAN data processing method based on Python, including: executing Python scripts: running Python scripts to open a user-friendly front-end interface; loading DBC (Data Base Commande, database management) files: selecting the DBC file of the corresponding project, and using the load_file function in the cantools library to load the DBC file; reading BLF (Binary Logging Format) files: selecting the data file path to be processed, using BLFReader in the cantools library to read the BLF file, and using the loaded DBC file to parse the message; setting analysis indicators: filling in the signal name and analysis conditions according to the analysis requirements; data analysis: the Python script traverses all files under the input path, checks the signal values of all nodes according to the order of timestamps, finds data that meets the conditions, and stores these data in a list; data preservation: then use the open function to create a file named with the analysis data name + analysis indicator, write the list content line by line, and ensure that the file is closed correctly using the close method. Optional email notification: using the SMTP protocol and email library, an email containing the test results is sent to the specified recipient. It allows non-professional programmers to flexibly set analysis conditions and analysis indicators through a graphical interface, lowering the technical threshold; it reduces manual operations through automated data processing and improves analysis efficiency, especially when processing large amounts of data; it can save recommended configurations for multiple projects, reducing the number of repeated coding times and significantly improving work efficiency.
[0028] The specific implementation is as follows: like Figure 1 As shown, it is a flow chart of a CAN data processing method provided by the present invention.
[0029] As an example, the method includes: S1: Open the front-end interface by running the Python script.
[0030] Preferably, the S1: opening the front-end interface by running a Python script includes: running a Python script to open a user-friendly front-end interface.
[0031] S2: Select a DBC file of a corresponding project, and load the DBC file to obtain DBC message information of each frame message in the DBC file.
[0032] Preferably, the step S2: selecting a DBC file of a corresponding project, and loading the DBC file to obtain DBC message information of each frame message in the DBC file includes: S201: Read the DBC file in the vehicle controller through the Python script; S202: Use the load file function in the cantools library to load the DBC file to obtain DBC message information of each frame message in the DBC file.
[0033] The DBC message information includes the timestamp, signal name and the corresponding signal value. By parsing the DBC file through the data analysis script, there is no need for manual parsing, which can improve the parsing efficiency of the DBC file and save the time and labor cost of DBC file parsing.
[0034] S3: Select the data file path to be processed, use the BLFReader function in the cantools library to read the BLF file, and parse the loaded DBC file to obtain the BLF message information in each frame message of each frame of the BLF file.
[0035] Preferably, the step S3: selecting the data file path to be processed, using the BLFReader function in the cantools library to read the BLF file, and obtaining the BLF message information in each frame message in each frame BLF file by parsing the loaded DBC file includes: reading the signal values in each frame message in each frame BLF file in turn, and extracting the signal to be analyzed.
[0036] S4: The user sets at least one analysis indicator in the front-end interface according to analysis requirements, and the analysis indicator includes a signal name and a corresponding analysis condition.
[0037] Preferably, the analysis indicators in step S4 include: Analysis indicator 1: Driver takeover: Condition 1: EMS_1_AcceleratorPosRaw > 1 or Condition 2: EMS_1_ECGPOvrd > 1 or Condition 3: EMS_2_BrakePedalStsForTCU == 1 or Condition 4: EPS_2_TorsionBarTorqueDir > 0.2; and / or Analysis indicator 2: AEB (Autonomous Emergency Brake) caused by pedestrians: AEB Partial Brake_PED Condition 1: FRM_3_AEBMode == 2 and Condition 2: FRM_2_AEBTarDec > -9 and Condition 3: FRM_2_AEBTarDec < -1 and Condition 4: FRM_3_FrontObject_Type == 4; and / or Analysis Indicator 3: Number of successful lane changes to the left Condition 1: ESP_1_VehicleSpeedVSOSig > 60 and Condition 2: ALCEnabled_Request == 1 and Condition 3: CEM_1_DirectionIndLeft == 1 and Condition 4: EPS_2_TorsionBarTorque < 0.2 and Condition 5: LaneChange_Status == 0x5.
[0038] That is, since different projects have different requirements, relevant technicians can change the above conditions based on different requirements during the actual application process. More specifically, in the actual application process, relevant technicians need to enter the above conditions on the front-end interface. Since the above condition code only consists of a signal name and a signal value, even ordinary technicians can operate it. It should be noted that one or more of the above analysis indicators can be entered at the same time.
[0039] Preferably, in step S4: the user sets at least one analysis indicator in the front-end interface according to the analysis requirements, and the analysis indicator includes the signal name and the corresponding analysis conditions, and then further includes: the Python script obtains the analysis indicator through a graphical interface, and automatically generates the corresponding conditional screening code based on the analysis indicator. That is, for testers who are not familiar with Python code, they only need to provide business process analysis conditions, and the Python script can automatically generate conditional codes, significantly reducing the difficulty of analysis. And because the analysis indicators and corresponding analysis conditions can be freely combined, it provides great convenience for function development verification.
[0040] S5: The Python script traverses all files in the input path and checks the signal values of all nodes according to the order of timestamps.
[0041] S6: Compare the signal values of all the nodes with at least one set analysis index to obtain file data that meets the conditions, and store the file data in a preset list.
[0042] Preferably, step S6 includes a Python script traversing all files under the input path, checking the signal values of all nodes according to the order of timestamps, finding data that meets the conditions, and storing the data in a list.
[0043] Preferably, the step S6: obtaining qualified file data based on the comparison of the signal values of all nodes with at least one set analysis index and storing the qualified file data in a preset list further comprises: S601: Based on the comparison between the signal values of all the nodes and at least one set analysis index, the non-compliant file data is obtained, the control program is interrupted, and the non-compliant file data is displayed; or S602: Based on the comparison between the signal values of all the nodes and at least one set analysis index, the non-compliant file data is obtained, the non-compliant data is skipped to check the signal value of the next node, and all non-compliant file data is displayed after the test is completed. That is, in the process of the Python script traversing all the files under the input path, if there is non-compliant data or problematic data, the pre-written program can be used to directly skip the problematic data or non-compliant data, directly check the data of the next node, and finally all the non-compliant data and problematic data are integrated and displayed; it is also possible to directly interrupt the program when encountering non-compliant data or problematic data, and directly display the non-compliant data or problematic data.
[0044] S7: Use the Open function to create a file package named after the analysis data name and the analysis index, and write the data in the list into the file package line by line to generate data test results.
[0045] Preferably, the file package may be named “2024.11.12.14:50+driver takes over”.
[0046] S8: Use the close method to properly close the file package.
[0047] Preferably, after the step S8: using the close method to correctly close the file package, the step also includes: S9: using the SMTP protocol and the Email library to send the file containing the data test result to a designated user.
[0048] The above-mentioned embodiment realizes fast and accurate analysis of vehicle CAN messages by combining software tools and automated scripts, so that non-professional programmers can flexibly set analysis conditions and analysis indicators through a graphical interface, thereby lowering the threshold technology; manual operations are reduced through automated data processing, thereby improving analysis efficiency, especially when processing large amounts of data; recommended configurations can be saved according to multiple projects, reducing the number of repeated coding times and significantly improving work efficiency; and by freely combining analysis indicators and corresponding analysis conditions, great convenience is provided for function development and verification.
[0049] Example 2 See also Figure 2 , this embodiment provides a schematic diagram of the structure of a CAN data processing system.
[0050] As an example, the system applies the CAN data processing method described in Example 1, and the system includes: The Python script execution module 210 is adapted to open a front-end interface by running a Python script.
[0051] The DBC file loading module 220 is adapted to select a DBC file of a corresponding project, and load the DBC file to obtain DBC message information of each frame message in the DBC file.
[0052] The BLF file reading module 230 is adapted to select a data file path to be processed, use the BLFReader function in the cantools library to read the BLF file, and parse the loaded DBC file to obtain the BLF message information in each frame message in each frame of the BLF file.
[0053] The analysis indicator setting module 240 is adapted for the user to set at least one analysis indicator in the front-end interface according to analysis requirements, and the analysis indicator includes a signal name and a corresponding analysis condition.
[0054] The data analysis module 250 is adapted to use a Python script to traverse all files under the input path and check the signal values of all nodes according to the order of timestamps.
[0055] The comparison module 260 is adapted to obtain file data that meets the conditions based on the comparison between the signal values of all the nodes and at least one set analysis index, and store the file data in a preset list.
[0056] The test result generating module 270 is adapted to use the Open function to create a file package named with the analysis data name and the analysis index, and write the data in the list into the file package line by line to generate data test results.
[0057] The data saving module 280 is adapted to use a close method to correctly close the file package.
[0058] It is not difficult to find that this embodiment is a system embodiment corresponding to the first embodiment, and this embodiment can be implemented in conjunction with the first embodiment. The relevant technical details mentioned in the first embodiment are still valid in this embodiment, and in order to reduce repetition, they are not repeated here. Accordingly, the relevant technical details mentioned in this embodiment can also be applied in the first embodiment.
[0059] It is worth mentioning that all modules involved in this embodiment are logical units. In practical applications, a logical unit can be a physical unit, a part of a physical unit, or a combination of multiple physical units. In addition, in order to highlight the innovative part of the present invention, this embodiment does not introduce units that are not closely related to solving the technical problem proposed by the present invention, but this does not mean that there are no other units in this embodiment.
[0060] Example 3 See also Figure 3 An embodiment of the present invention further provides an electronic device, comprising: a memory and a processor; the memory stores at least one program instruction; the processor implements the CAN data processing method provided in Example 1 by loading and executing the at least one program instruction.
[0061] The memory 702 and the processor 701 are connected in a bus manner, and the bus may include any number of interconnected buses and bridges, and the bus connects various circuits of one or more processors 701 and the memory 702 together. The bus can also connect various other circuits such as peripheral devices, voltage regulators, and power management circuits, which are well known in the art and are therefore not further described herein. The bus interface provides an interface between the bus and the transceiver. The transceiver can be one element or multiple elements, such as multiple receivers and transmitters, providing a unit for communicating with various other devices on a transmission medium. The data processed by the processor 701 is transmitted on a wireless medium via an antenna, and further, the antenna also receives data and transmits the data to the processor 701.
[0062] The processor 701 is responsible for managing the bus and general processing, and can also provide various functions, including timing, peripheral interfaces, voltage regulation, power management and other control functions. The memory 702 can be used to store data used by the processor 701 when performing operations.
[0063] Example 4 The embodiment of the present invention further provides a storage medium, on which a CAN data processing method is stored, and when the CAN data processing program is executed by a processor, the steps of the CAN data processing method described above are implemented. Since the storage medium adopts all the technical solutions of all the above embodiments, it has at least all the beneficial effects brought by the technical solutions of the above embodiments, which will not be described one by one here.
[0064] The above is only an embodiment of the present invention. The common sense such as the known specific structure and characteristics in the scheme is not described in detail here. The ordinary technicians in the relevant field know all the common technical knowledge in the technical field of the invention before the application date or priority date, can know all the existing technologies in the field, and have the ability to apply the conventional experimental means before that date. The ordinary technicians in the relevant field can improve and implement this scheme in combination with their own abilities under the enlightenment given by this application. Some typical known structures or known methods should not become obstacles for ordinary technicians in the relevant field to implement this application. It should be pointed out that for those skilled in the art, without departing from the structure of the present invention, several deformations and improvements can be made, which should also be regarded as the scope of protection of the present invention, which will not affect the effect of the implementation of the present invention and the practicality of the patent. The scope of protection required by this application shall be based on the content of its claims, and the specific implementation methods and other records in the specification can be used to interpret the content of the claims.
Claims
1. A CAN data processing method, characterized in that: The method comprises: S1: Open the front-end interface by running the Python script; S2: Select a DBC file of a corresponding project, and load the DBC file to obtain DBC message information of each frame message in the DBC file; S3: Select the data file path to be processed, use the BLFReader function in the cantools library to read the BLF file, and parse the loaded DBC file to obtain the BLF message information in each frame message of each frame of the BLF file; S4: The user sets at least one analysis indicator in the front-end interface according to the analysis requirements, and the analysis indicator includes a signal name and a corresponding analysis condition; S5: The Python script traverses all files in the input path and checks the signal values of all nodes according to the order of timestamps; S6: Compare the signal values of all nodes with at least one set analysis index to obtain file data that meets the conditions, and store the file data in a preset list; S7: Use the Open function to create a file package named after the analysis data name and the analysis index, and write the data in the list into the file package line by line to generate data test results; S8: Use the close method to properly close the file package.
2. The CAN data processing method according to claim 1, characterized in that: The step S2: selecting a DBC file of a corresponding project, and loading the DBC file to obtain DBC message information of each frame message in the DBC file includes: S201: Read the DBC file in the vehicle controller through the Python script; S202: Use the load file function in the cantools library to load the DBC file to obtain DBC message information of each frame message in the DBC file.
3. The CAN data processing method according to claim 2, characterized in that: The DBC message information includes a timestamp, a signal name and a corresponding signal value.
4. The CAN data processing method according to claim 1, characterized in that: The step S3: selecting the data file path to be processed, using the BLFReader function in the cantools library to read the BLF file, and obtaining the BLF message information in each frame message in each frame BLF file by parsing the loaded DBC file, including: reading the signal value in each frame message in each frame BLF file in turn, and extracting the signal to be analyzed.
5. The CAN data processing method according to claim 1, characterized in that: The step S4: the user sets at least one analysis indicator in the front-end interface according to the analysis requirements, and the analysis indicator includes a signal name and a corresponding analysis condition, and further includes: a Python script obtains the analysis indicator through a graphical interface, and automatically generates a corresponding conditional screening code based on the analysis indicator.
6. The CAN data processing method according to claim 1, characterized in that: The step S6: obtaining qualified file data based on the comparison of the signal values of all nodes with at least one set analysis index and storing the qualified file data in a preset list also includes: S601: Comparing the signal values of all nodes with at least one set analysis index to obtain file data that does not meet the conditions, interrupting the control program, and displaying the file data that does not meet the conditions; or S602: Compare the signal values of all nodes with at least one set analysis index to obtain file data that does not meet the conditions, skip the data that does not meet the conditions and check the signal value of the next node, and display all file data that does not meet the conditions after the test is completed.
7. The CAN data processing method according to claim 1, characterized in that: The step S8: after correctly closing the file package using the close method, further includes: S9: Use the SMTP protocol and the Email library to send the file containing the data test results to the designated user.
8. A CAN data processing system, characterized in that: The system applies the CAN data processing method according to any one of claims 1 to 7, and the system comprises: Execute Python script module, suitable for opening the front-end interface by running Python script; The DBC file loading module is suitable for selecting a DBC file of a corresponding project and loading the DBC file to obtain DBC message information of each frame message in the DBC file; The BLF file reading module is suitable for selecting the data file path to be processed, using the BLFReader function in the cantools library to read the BLF file, and parsing the loaded DBC file to obtain the BLF message information in each frame message of each frame of the BLF file; Setting analysis index module, applicable to the user to set at least one analysis index in the front-end interface according to the analysis requirements, the analysis index includes the signal name and the corresponding analysis condition; Data analysis module, suitable for Python scripts to traverse all files under the input path and check the signal values of all nodes according to the order of timestamps; A comparison module, adapted to obtain qualified file data based on the comparison of the signal values of all the nodes and at least one set analysis index, and store the qualified file data in a preset list; A test result generation module, adapted to use an Open function to create a file package named with the analysis data name and the analysis index, and write the data in the list into the file package line by line to generate data test results; The data saving module is adapted to correctly close the file package using the close method.
9. An electronic device, characterized in that: include: A memory, a processor, and a computer program stored in the memory and executable on the processor, wherein the computer program, when executed by the processor, implements the CAN data processing method according to any one of claims 1 to 7.
10. A readable storage medium, characterized in that: When the instructions in the storage medium are executed by a processor of an electronic device, the electronic device is enabled to execute the CAN data processing method according to any one of claims 1 to 7.
Citation Information
Patent Citations
CAN communication automation test method
CN116489043A
Data analysis method and device, electronic equipment and storage medium
CN117176507A
Python-based automobile message analysis method
CN118631917A
Data analysis method and device
CN118646813A
Automobile bus data analysis method and device and electronic equipment
CN119088639A