WP_Query Object
(
    [query] => Array
        (
            [paged] => 32
            [pagename] => about-us/news
        )

    [query_vars] => Array
        (
            [paged] => 32
            [pagename] => about-us/news
            [error] => 
            [m] => 
            [p] => 0
            [post_parent] => 
            [subpost] => 
            [subpost_id] => 
            [attachment] => 
            [attachment_id] => 0
            [name] => 
            [page_id] => 0
            [second] => 
            [minute] => 
            [hour] => 
            [day] => 0
            [monthnum] => 0
            [year] => 0
            [w] => 0
            [category_name] => 
            [tag] => 
            [cat] => 
            [tag_id] => 
            [author] => 
            [author_name] => 
            [feed] => 
            [tb] => 
            [meta_key] => 
            [meta_value] => 
            [preview] => 
            [s] => 
            [sentence] => 
            [title] => 
            [fields] => 
            [menu_order] => 
            [embed] => 
            [category__in] => Array
                (
                )

            [category__not_in] => Array
                (
                    [0] => 1047
                )

            [category__and] => Array
                (
                )

            [post__in] => Array
                (
                )

            [post__not_in] => Array
                (
                )

            [post_name__in] => Array
                (
                )

            [tag__in] => Array
                (
                )

            [tag__not_in] => Array
                (
                )

            [tag__and] => Array
                (
                )

            [tag_slug__in] => Array
                (
                )

            [tag_slug__and] => Array
                (
                )

            [post_parent__in] => Array
                (
                )

            [post_parent__not_in] => Array
                (
                )

            [author__in] => Array
                (
                )

            [author__not_in] => Array
                (
                )

            [orderby] => date
            [post_type] => Array
                (
                    [0] => post
                    [1] => developer_blog
                )

            [post_status] => publish
            [order] => DESC
            [tax_query] => Array
                (
                    [0] => Array
                        (
                            [taxonomy] => blog-group
                            [field] => slug
                            [terms] => Array
                                (
                                    [0] => public
                                )

                            [operator] => IN
                        )

                    [1] => Array
                        (
                            [taxonomy] => blog-group
                            [field] => slug
                            [terms] => Array
                                (
                                    [0] => general-user
                                    [1] => technical-asociate
                                    [2] => qualified-sales-representative
                                    [3] => kvaser-internal
                                )

                            [operator] => NOT IN
                        )

                )

            [ignore_sticky_posts] => 
            [suppress_filters] => 
            [cache_results] => 1
            [update_post_term_cache] => 1
            [lazy_load_term_meta] => 1
            [update_post_meta_cache] => 1
            [posts_per_page] => 10
            [nopaging] => 
            [comments_per_page] => 50
            [no_found_rows] => 
            [taxonomy] => blog-group
            [term] => public
        )

    [tax_query] => WP_Tax_Query Object
        (
            [queries] => Array
                (
                    [0] => Array
                        (
                            [taxonomy] => blog-group
                            [terms] => Array
                                (
                                    [0] => public
                                )

                            [field] => slug
                            [operator] => IN
                            [include_children] => 1
                        )

                    [1] => Array
                        (
                            [taxonomy] => blog-group
                            [terms] => Array
                                (
                                    [0] => general-user
                                    [1] => technical-asociate
                                    [2] => qualified-sales-representative
                                    [3] => kvaser-internal
                                )

                            [field] => slug
                            [operator] => NOT IN
                            [include_children] => 1
                        )

                    [2] => Array
                        (
                            [taxonomy] => category
                            [terms] => Array
                                (
                                    [0] => 1047
                                )

                            [field] => term_id
                            [operator] => NOT IN
                            [include_children] => 
                        )

                )

            [relation] => AND
            [table_aliases:protected] => Array
                (
                    [0] => wp_term_relationships
                )

            [queried_terms] => Array
                (
                    [blog-group] => Array
                        (
                            [terms] => Array
                                (
                                    [0] => public
                                )

                            [field] => slug
                        )

                )

            [primary_table] => wp_posts
            [primary_id_column] => ID
        )

    [meta_query] => WP_Meta_Query Object
        (
            [queries] => Array
                (
                )

            [relation] => 
            [meta_table] => 
            [meta_id_column] => 
            [primary_table] => 
            [primary_id_column] => 
            [table_aliases:protected] => Array
                (
                )

            [clauses:protected] => Array
                (
                )

            [has_or_relation:protected] => 
        )

    [date_query] => 
    [queried_object] => WP_Post Object
        (
            [ID] => 1277
            [post_author] => 38
            [post_date] => 2014-11-21 12:03:40
            [post_date_gmt] => 2013-12-19 15:28:51
            [post_content] => 
            [post_title] => News
            [post_excerpt] => 
            [post_status] => publish
            [comment_status] => open
            [ping_status] => open
            [post_password] => 
            [post_name] => news
            [to_ping] => 
            [pinged] => 
            [post_modified] => 2021-08-12 09:14:30
            [post_modified_gmt] => 2021-08-12 09:14:30
            [post_content_filtered] => 
            [post_parent] => 23
            [guid] => https://www.kvaser.com/?page_id=1277
            [menu_order] => 5
            [post_type] => page
            [post_mime_type] => 
            [comment_count] => 0
            [filter] => raw
        )

    [queried_object_id] => 1277
    [request] => SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) WHERE 1=1  AND ( 
  wp_term_relationships.term_taxonomy_id IN (1026) 
  AND 
  wp_posts.ID NOT IN (
				SELECT object_id
				FROM wp_term_relationships
				WHERE term_taxonomy_id IN (1025,1027,1028,1029)
			) 
  AND 
  wp_posts.ID NOT IN (
				SELECT object_id
				FROM wp_term_relationships
				WHERE term_taxonomy_id IN (1058)
			)
) AND wp_posts.post_type IN ('post', 'developer_blog') AND ((wp_posts.post_status = 'publish')) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 310, 10
    [posts] => Array
        (
            [0] => WP_Post Object
                (
                    [ID] => 39849
                    [post_author] => 14
                    [post_date] => 2018-03-27 11:06:25
                    [post_date_gmt] => 2018-03-27 11:06:25
                    [post_content] => [vc_row][vc_column][vc_column_text]In version 1.5 of the Python wrapper, a lot of improvements were made. Two new libraries were wrapped; LINlib, which holds the LIN bus API, and kvaDbLib which contains the Database API (and there will be some blog on how to use those in the future).

The biggest change was however under the hood were the code has been restructured to make it more maintainable and easier to use. The ‘old’ way is still available but is deprecated and will be removed in the future. This is an example of how it used to look in v1.4:[/vc_column_text][vc_code_raket language="python" code="aW1wb3J0JTIwY2FubGliLmNhbmxpYiUyMGFzJTIwY2FubGliJTBBJTBBJTBBZGVmJTIwc2V0VXBDaGFubmVsJTI4Y2hhbm5lbCUzRDAlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvcGVuRmxhZ3MlM0RjYW5saWIuY2FuT1BFTl9BQ0NFUFRfVklSVFVBTCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJpdHJhdGUlM0RjYW5saWIuY2FuQklUUkFURV81MDBLJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYml0cmF0ZUZsYWdzJTNEY2FubGliLmNhbkRSSVZFUl9OT1JNQUwlMjklM0ElMEElMjAlMjAlMjAlMjBjbCUyMCUzRCUyMGNhbmxpYi5jYW5saWIlMjglMjklMjAlMjMlMjBkZXByZWNhdGVkJTIwaW4lMjB2MS41JTBBJTIwJTIwJTIwJTIwY2glMjAlM0QlMjBjbC5vcGVuQ2hhbm5lbCUyOGNoYW5uZWwlMkMlMjBvcGVuRmxhZ3MlMjklMEElMjAlMjAlMjAlMjBwcmludCUyOCUyMlVzaW5nJTIwY2hhbm5lbCUzQSUyMCUyNXMlMkMlMjBFQU4lM0ElMjAlMjVzJTIyJTIwJTI1JTIwJTI4Y2guZ2V0Q2hhbm5lbERhdGFfTmFtZSUyOCUyOSUyQyUyMCUyMyUyMGRlcHJlY2F0ZWQlMjBpbiUyMHYxLjUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjaC5nZXRDaGFubmVsRGF0YV9FQU4lMjglMjklMjklMjklMjAlMjMlMjBkZXByZWNhdGVkJTIwaW4lMjB2MS41JTBBJTIwJTIwJTIwJTIwY2guc2V0QnVzT3V0cHV0Q29udHJvbCUyOGJpdHJhdGVGbGFncyUyOSUwQSUyMCUyMCUyMCUyMGNoLnNldEJ1c1BhcmFtcyUyOGJpdHJhdGUlMjklMEElMjAlMjAlMjAlMjBjaC5idXNPbiUyOCUyOSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMGNoJTBBJTBBJTBBZGVmJTIwdGVhckRvd25DaGFubmVsJTI4Y2glMjklM0ElMEElMjAlMjAlMjAlMjBjaC5idXNPZmYlMjglMjklMEElMjAlMjAlMjAlMjBjaC5jbG9zZSUyOCUyOSUwQSUwQSUwQWNsJTIwJTNEJTIwY2FubGliLmNhbmxpYiUyOCUyOSUyMCUyMyUyMGRlcHJlY2F0ZWQlMjBpbiUyMHYxLjUlMEFwcmludCUyOCUyMmNhbmxpYiUyMHZlcnNpb24lM0ElMjAlMjVzJTIyJTIwJTI1JTIwY2wuZ2V0VmVyc2lvbiUyOCUyOSUyOSUwQSUwQWNoMCUyMCUzRCUyMHNldFVwQ2hhbm5lbCUyOGNoYW5uZWwlM0QwJTI5JTBBY2gxJTIwJTNEJTIwc2V0VXBDaGFubmVsJTI4Y2hhbm5lbCUzRDElMjklMEElMEFtc2dJZCUyMCUzRCUyMDEwMCUwQW1zZyUyMCUzRCUyMCU1QjElMkMlMjAyJTJDJTIwMyUyQyUyMDQlNUQlMEFmbGclMjAlM0QlMjBjYW5saWIuY2FuTVNHX0VYVCUwQWNoMS53cml0ZSUyOG1zZ0lkJTJDJTIwbXNnJTJDJTIwZmxnJTI5JTBBJTIzJTIwZGVwcmVjYXRlZCUyMGluJTIwdjEuNSUwQSUwQXdoaWxlJTIwVHJ1ZSUzQSUwQSUyMCUyMCUyMCUyMHRyeSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyOG1zZ0lkJTJDJTIwbXNnJTJDJTIwZGxjJTJDJTIwZmxnJTJDJTIwdGltZSUyOSUyMCUzRCUyMGNoMC5yZWFkJTI4JTI5JTIwJTIzJTIwZGVwcmVjYXRlZCUyMGluJTIwdjEuNSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGRhdGElMjAlM0QlMjAlMjclMjcuam9pbiUyOGZvcm1hdCUyOHglMkMlMjAlMjcwMnglMjclMjklMjBmb3IlMjB4JTIwaW4lMjBtc2clMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOCUyMnRpbWUlM0ElMjU5ZCUyMGlkJTNBJTI1OWQlMjBmbGFnJTNBMHglMjUwMnglMjBkbGMlM0ElMjVkJTIwZGF0YSUzQSUyNXMlMjIlMjAlMjUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjh0aW1lJTJDJTIwbXNnSWQlMkMlMjBmbGclMkMlMjBkbGMlMkMlMjBkYXRhJTI5JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYnJlYWslMEElMjAlMjAlMjAlMjBleGNlcHQlMjAlMjhjYW5saWIuY2FuTm9Nc2clMjklMjBhcyUyMGV4JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcGFzcyUwQSUyMCUyMCUyMCUyMGV4Y2VwdCUyMCUyOGNhbmxpYi5jYW5FcnJvciUyOSUyMGFzJTIwZXglM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOGV4JTI5JTBBJTBBdGVhckRvd25DaGFubmVsJTI4Y2gwJTI5JTBBdGVhckRvd25DaGFubmVsJTI4Y2gxJTI5"][vc_column_text]Listing 1: Code to send single frame[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][vc_column_text]Running the above now gives a note that we are using deprecated functions.[/vc_column_text][vc_code_raket code="Y2FubGliJTVDZGVwcmVjYXRpb24ucHklM0EyNDAlM0ElMjBLdkRlcHJlY2F0ZWRVc2FnZSUzQSUyMEElMjBkZXByZWNhdGVkJTIwZnVuY3Rpb24lMjB3YXMlMEElMjBjYWxsZWQlMjElMjBSdW4lMjBweXRob24lMjB3aXRoJTIwLVdkJTIwZmxhZyUyMGZvciUyMG1vcmUlMjBpbmZvcm1hdGlvbi4lMEElMjAlMjAlMjJSdW4lMjBweXRob24lMjB3aXRoJTIwLVdkJTIwZmxhZyUyMGZvciUyMG1vcmUlMjBpbmZvcm1hdGlvbi4lMjIlMjklMjklMEFjYW5saWIlMjB2ZXJzaW9uJTNBJTIwOC4yMiUwQVVzaW5nJTIwY2hhbm5lbCUzQSUyMEt2YXNlciUyMFVTQmNhbiUyMFBybyUyMDJ4SFMlMjB2MiUyMCUyOGNoYW5uZWwlMjAwJTI5JTJDJTIwRUFOJTNBJTIwNzMtMzAxMzAtMDA3NTItOSUwQVVzaW5nJTIwY2hhbm5lbCUzQSUyMEt2YXNlciUyMFVTQmNhbiUyMFBybyUyMDJ4SFMlMjB2MiUyMCUyOGNoYW5uZWwlMjAxJTI5JTJDJTIwRUFOJTNBJTIwNzMtMzAxMzAtMDA3NTItOSUwQXRpbWUlM0ElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjA5JTIwaWQlM0ElMjAlMjAlMjAlMjAlMjAlMjAxMDAlMjAlMjBmbGFnJTNBMHgwNCUyMCUyMGRsYyUzQTQlMjAlMjBkYXRhJTNBMDEwMjAzMDQ="][vc_column_text]Let us run the same code using the warning control flag -Wd as suggested:[/vc_column_text][vc_code_raket code="Y2FubGliJTVDZGVwcmVjYXRpb24ucHklM0EyMzglM0ElMjBLdkRlcHJlY2F0ZWRVc2FnZSUzQSUyMEElMjBkZXByZWNhdGVkJTIwZnVuY3Rpb24lMjB3YXMlMjBjYWxsZWQlMjElMjBSdW4lMEElMjAlMjAlMjAlMjAlMjBweXRob24lMjB3aXRoJTIwLVdkJTIwZmxhZyUyMGZvciUyMG1vcmUlMjBpbmZvcm1hdGlvbi4lMEElMjAlMjAlMjJSdW4lMjBweXRob24lMjB3aXRoJTIwLVdkJTIwZmxhZyUyMGZvciUyMG1vcmUlMjBpbmZvcm1hdGlvbi4lMjIlMjklMjklMEFzZW5kX3NpbmdsZV9mcmFtZV92MS40LnB5JTNBMjMlM0ElMjBLdkRlcHJlY2F0aW9uV2FybmluZyUzQSUyMENyZWF0aW5nJTIwQ0FOTGliJTIwb2JqZWN0cyUyMGlzJTBBJTIwJTIwJTIwJTIwJTIwZGVwcmVjYXRlZCUyQyUyMGFsbCUyMGZ1bmN0aW9uYWxpdHklMjBoYXMlMjBiZWVuJTIwbW92ZWQlMjB0byUyMHRoZSUyMGNhbmxpYiUyMG1vZHVsZSUyMGl0c2VsZi4lMEElMjAlMjBjbCUyMCUzRCUyMGNhbmxpYi5jYW5saWIlMjglMjklMjAlMjMlMjBkZXByZWNhdGVkJTIwaW4lMjB2MS41JTBBc2VuZF9zaW5nbGVfZnJhbWVfdjEuNC5weSUzQTI0JTNBJTIwS3ZEZXByZWNhdGlvbldhcm5pbmclM0ElMjBnZXRWZXJzaW9uJTIwaGFzJTIwYmVlbiUyMGRlcHJlY2F0ZWQlMkMlMEElMjAlMjAlMjAlMjAlMjB1c2UlMjBkbGx2ZXJzaW9uJTIwaW5zdGVhZCUyMSUwQSUyMCUyMHByaW50JTI4JTIyY2FubGliJTIwdmVyc2lvbiUzQSUyMCUyNXMlMjIlMjAlMjUlMjBjbC5nZXRWZXJzaW9uJTI4JTI5JTI5JTBBY2FubGliJTIwdmVyc2lvbiUzQSUyMDguMjElMEFzZW5kX3NpbmdsZV9mcmFtZV92MS40LnB5JTNBOCUzQSUyMEt2RGVwcmVjYXRpb25XYXJuaW5nJTNBJTIwQ3JlYXRpbmclMjBDQU5MaWIlMjBvYmplY3RzJTIwaXMlMEElMjAlMjAlMjAlMjAlMjBkZXByZWNhdGVkJTJDJTIwYWxsJTIwZnVuY3Rpb25hbGl0eSUyMGhhcyUyMGJlZW4lMjBtb3ZlZCUyMHRvJTIwdGhlJTIwY2FubGliJTIwbW9kdWxlJTIwaXRzZWxmLiUwQSUyMCUyMGNsJTIwJTNEJTIwY2FubGliLmNhbmxpYiUyOCUyOSUyMCUyMyUyMGRlcHJlY2F0ZWQlMjBpbiUyMHYxLjUlMEFzZW5kX3NpbmdsZV9mcmFtZV92MS40LnB5JTNBMTAlM0ElMjBLdkRlcHJlY2F0aW9uV2FybmluZyUzQSUyMGdldENoYW5uZWxEYXRhX05hbWUlMjBoYXMlMjBiZWVuJTBBJTIwJTIwJTIwJTIwJTIwZGVwcmVjYXRlZCUyQyUyMHVzZSUyMENoYW5uZWxEYXRhJTI4Q2hhbm5lbC5pbmRleCUyOS5kZXZpY2VfbmFtZSUyMGluc3RlYWQlMjElMEElMjAlMjBwcmludCUyOCUyMlVzaW5nJTIwY2hhbm5lbCUzQSUyMCUyNXMlMkMlMjBFQU4lM0ElMjAlMjVzJTIyJTIwJTI1JTIwJTI4Y2guZ2V0Q2hhbm5lbERhdGFfTmFtZSUyOCUyOSUyQyUyMCUyMyUyMGRlcHJlY2F0ZWQlMjBpbiUyMHYxJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwLjUlMEFjYW5saWIlNUNjYW5saWIlNUNjaGFubmVsLnB5JTNBNTM3JTNBJTIwS3ZEZXByZWNhdGlvbldhcm5pbmclM0ElMjBnZXRDaGFubmVsRGF0YV9OYW1lJTIwaGFzJTIwYmVlbiUwQSUyMCUyMCUyMCUyMCUyMGRlcHJlY2F0ZWQlMkMlMjB1c2UlMjBDaGFubmVsRGF0YSUyOGNoYW5uZWwlMjkuZGV2aWNlX25hbWUlMjBpbnN0ZWFkJTIxJTBBJTIwJTIwcmV0dXJuJTIwd3JhcHBlci5nZXRDaGFubmVsRGF0YV9OYW1lJTI4c2VsZi5pbmRleCUyOSUwQXNlbmRfc2luZ2xlX2ZyYW1lX3YxLjQucHklM0ExMSUzQSUyMEt2RGVwcmVjYXRpb25XYXJuaW5nJTNBJTIwZ2V0Q2hhbm5lbERhdGFfRUFOJTIwaGFzJTIwYmVlbiUwQSUyMCUyMCUyMCUyMCUyMGRlcHJlY2F0ZWQlMkMlMjB1c2UlMjBDaGFubmVsRGF0YSUyOENoYW5uZWwuaW5kZXglMjkuY2FyZF91cGNfbm8lMjBpbnN0ZWFkJTIxJTBBJTIwJTIwY2guZ2V0Q2hhbm5lbERhdGFfRUFOJTI4JTI5JTI5JTI5JTIwJTIzJTIwZGVwcmVjYXRlZCUyMGluJTIwdjEuNSUwQWNhbmxpYiU1Q2NhbmxpYiU1Q2NoYW5uZWwucHklM0E1NTglM0ElMjBLdkRlcHJlY2F0aW9uV2FybmluZyUzQSUyMGdldENoYW5uZWxEYXRhX0VBTiUyMGhhcyUyMGJlZW4lMEElMjAlMjAlMjAlMjAlMjBkZXByZWNhdGVkJTJDJTIwdXNlJTIwQ2hhbm5lbERhdGElMjhjaGFubmVsJTI5LmNhcmRfdXBjX25vJTIwaW5zdGVhZCUyMSUwQSUyMCUyMHJldHVybiUyMHdyYXBwZXIuZ2V0Q2hhbm5lbERhdGFfRUFOJTI4c2VsZi5pbmRleCUyOSUwQVVzaW5nJTIwY2hhbm5lbCUzQSUyMEt2YXNlciUyMFVTQmNhbiUyMFBybyUyMDJ4SFMlMjB2MiUyMCUyOGNoYW5uZWwlMjAwJTI5JTJDJTIwRUFOJTNBJTIwNzMtMzAxMzAtMDA3NTItOSUwQVVzaW5nJTIwY2hhbm5lbCUzQSUyMEt2YXNlciUyMFVTQmNhbiUyMFBybyUyMDJ4SFMlMjB2MiUyMCUyOGNoYW5uZWwlMjAxJTI5JTJDJTIwRUFOJTNBJTIwNzMtMzAxMzAtMDA3NTItOSUwQXNlbmRfc2luZ2xlX2ZyYW1lX3YxLjQucHklM0EzMiUzQSUyMEt2RGVwcmVjYXRpb25XYXJuaW5nJTNBJTIwQ2FsbGluZyUyMENoYW5uZWwud3JpdGUlMjglMjklMjB3aXRoJTBBJTIwJTIwJTIwJTIwJTIwaW5kaXZpZHVhbCUyMGFyZ3VtZW50cyUyMGlzJTIwZGVwcmVjYXRlZCUyQyUyMHBsZWFzZSUyMHVzZSUyMGElMjBGcmFtZSUyMG9iamVjdCUyMG9yJTIwQ2hhbm5lbC4lMEElMjAlMjAlMjAlMjAlMjB3cml0ZV9yYXclMjglMjklMEElMjAlMjBjaDEud3JpdGUlMjhtc2dJZCUyQyUyMG1zZyUyQyUyMGZsZyUyOSUyMCUyMyUyMGRlcHJlY2F0ZWQlMjBpbiUyMHYxLjUlMEF0aW1lJTNBJTIwJTIwJTIwJTIwJTIwJTIwJTIwMTQlMjBpZCUzQSUyMCUyMCUyMCUyMCUyMCUyMDEwMCUyMGZsYWclM0EweDA0JTIwJTIwZGxjJTNBNCUyMCUyMGRhdGElM0EwMTAyMDMwNA=="][vc_column_text]This time we get a detailed notification that creating CANlib objects on line 8 and line 23 is deprecated, and that all functionality has been moved to the canlib module. The getChannelData_EAN on line 11 is also deprecated and should be replaced by ChannelData(channel).card_upc_no . We should also use the Frame object instead of individual arguments in our call to write on line 32 and, even though we do not get a deprecation warning, the Frame object should also be used in our read function on line 36 as well. The Frame object can then be printed directly. Let us adjust our code accordingly:[/vc_column_text][vc_code_raket language="python" code="ZnJvbSUyMGNhbmxpYiUyMGltcG9ydCUyMGNhbmxpYiUyQyUyMEZyYW1lJTBBZnJvbSUyMGNhbmxpYi5jYW5saWIlMjBpbXBvcnQlMjBDaGFubmVsRGF0YSUwQSUwQSUwQWRlZiUyMHNldFVwQ2hhbm5lbCUyOGNoYW5uZWwlM0QwJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3BlbkZsYWdzJTNEY2FubGliLmNhbk9QRU5fQUNDRVBUX1ZJUlRVQUwlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBiaXRyYXRlJTNEY2FubGliLmNhbkJJVFJBVEVfNTAwSyUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJpdHJhdGVGbGFncyUzRGNhbmxpYi5jYW5EUklWRVJfTk9STUFMJTI5JTNBJTBBJTIwJTIwJTIwJTIwY2glMjAlM0QlMjBjYW5saWIub3BlbkNoYW5uZWwlMjhjaGFubmVsJTJDJTIwb3BlbkZsYWdzJTI5JTBBJTIwJTIwJTIwJTIwcHJpbnQlMjglMjJVc2luZyUyMGNoYW5uZWwlM0ElMjAlMjVzJTJDJTIwRUFOJTNBJTIwJTI1cyUyMiUyMCUyNSUyMCUyOENoYW5uZWxEYXRhJTI4Y2hhbm5lbCUyOS5kZXZpY2VfbmFtZSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMENoYW5uZWxEYXRhJTI4Y2hhbm5lbCUyOS5jYXJkX3VwY19ubyUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyOSUwQSUyMCUyMCUyMCUyMGNoLnNldEJ1c091dHB1dENvbnRyb2wlMjhiaXRyYXRlRmxhZ3MlMjklMEElMjAlMjAlMjAlMjBjaC5zZXRCdXNQYXJhbXMlMjhiaXRyYXRlJTI5JTBBJTIwJTIwJTIwJTIwY2guYnVzT24lMjglMjklMEElMjAlMjAlMjAlMjByZXR1cm4lMjBjaCUwQSUwQSUwQWRlZiUyMHRlYXJEb3duQ2hhbm5lbCUyOGNoJTI5JTNBJTBBJTIwJTIwJTIwJTIwY2guYnVzT2ZmJTI4JTI5JTBBJTIwJTIwJTIwJTIwY2guY2xvc2UlMjglMjklMEElMEElMEFwcmludCUyOCUyMmNhbmxpYiUyMHZlcnNpb24lM0ElMjIlMkMlMjBjYW5saWIuZGxsdmVyc2lvbiUyOCUyOSUyOSUwQSUwQWNoMCUyMCUzRCUyMHNldFVwQ2hhbm5lbCUyOGNoYW5uZWwlM0QwJTI5JTBBY2gxJTIwJTNEJTIwc2V0VXBDaGFubmVsJTI4Y2hhbm5lbCUzRDElMjklMEElMEFmcmFtZSUyMCUzRCUyMEZyYW1lJTI4aWRfJTNEMTAwJTJDJTIwZGF0YSUzRCU1QjElMkMlMjAyJTJDJTIwMyUyQyUyMDQlNUQlMkMlMjBmbGFncyUzRGNhbmxpYi5jYW5NU0dfRVhUJTI5JTBBY2gxLndyaXRlJTI4ZnJhbWUlMjklMEElMEF3aGlsZSUyMFRydWUlM0ElMEElMjAlMjAlMjAlMjB0cnklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmcmFtZSUyMCUzRCUyMGNoMC5yZWFkJTI4JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjhmcmFtZSUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJyZWFrJTBBJTIwJTIwJTIwJTIwZXhjZXB0JTIwJTI4Y2FubGliLmNhbk5vTXNnJTI5JTIwYXMlMjBleCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHBhc3MlMEElMjAlMjAlMjAlMjBleGNlcHQlMjAlMjhjYW5saWIuY2FuRXJyb3IlMjklMjBhcyUyMGV4JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjhleCUyOSUwQSUwQXRlYXJEb3duQ2hhbm5lbCUyOGNoMCUyOSUwQXRlYXJEb3duQ2hhbm5lbCUyOGNoMSUyOQ=="][vc_column_text]Listing 2: Code to send single frame using Python canlib v1.5[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][vc_column_text]When we added Frame and ChannelData to the import line, we also took the opportunity to transform the import statement into a slightly more readable format. Running the new code shows a clean output:[/vc_column_text][vc_code_raket code="Y2FubGliJTIwdmVyc2lvbiUzQSUyMDguMjIlMEFVc2luZyUyMGNoYW5uZWwlM0ElMjBLdmFzZXIlMjBVU0JjYW4lMjBQcm8lMjAyeEhTJTIwdjIlMjAlMjhjaGFubmVsJTIwMCUyOSUyQyUyMEVBTiUzQSUyMDczLTMwMTMwLTAwNzUyLTklMEFVc2luZyUyMGNoYW5uZWwlM0ElMjBLdmFzZXIlMjBVU0JjYW4lMjBQcm8lMjAyeEhTJTIwdjIlMjAlMjhjaGFubmVsJTIwMSUyOSUyQyUyMEVBTiUzQSUyMDczLTMwMTMwLTAwNzUyLTklMEFGcmFtZSUyOGlkJTNEMTAwJTJDJTIwZGF0YSUzRGJ5dGVhcnJheSUyOGIlMjclNUN4MDElNUN4MDIlNUN4MDMlNUN4MDQlMjclMjklMkMlMjBkbGMlM0Q0JTJDJTIwZmxhZ3MlM0Q0JTJDJTIwdGltZXN0YW1wJTNEMTAlMjk="][vc_column_text]Take a look through the release notes to get an overview of what has changed, and use the Python warning control flag -Wd to make sure that your code is up-to-date. This new way of doing things will really increase the maintainability of the library, and hopefully will also make it easier to get going with controlling Kvaser devices using Python.[/vc_column_text][/vc_column][/vc_row]
                    [post_title] => Improved API in Python canlib v1.5
                    [post_excerpt] => 
                    [post_status] => publish
                    [comment_status] => closed
                    [ping_status] => closed
                    [post_password] => 
                    [post_name] => improved-api-python-canlib-v1-5
                    [to_ping] => 
                    [pinged] => 
                    [post_modified] => 2022-10-04 11:08:15
                    [post_modified_gmt] => 2022-10-04 11:08:15
                    [post_content_filtered] => 
                    [post_parent] => 0
                    [guid] => https://www.kvaser.com/?post_type=developer_blog&p=39849
                    [menu_order] => 0
                    [post_type] => developer_blog
                    [post_mime_type] => 
                    [comment_count] => 0
                    [filter] => raw
                )

            [1] => WP_Post Object
                (
                    [ID] => 19835
                    [post_author] => 5
                    [post_date] => 2018-03-20 20:20:30
                    [post_date_gmt] => 2018-03-20 20:20:30
                    [post_content] => [vc_row][vc_column][vc_single_image image="20611"][vc_column_text]Kvaser’s new Wi-Fi Pairing Tool allows users to connect wirelessly, without a router. This one-button pairing tool circumvents customers having to set up a Wi-Fi network just for the Kvaser BlackBird v2 and also makes configuration quicker and simpler.

Assuming you have already installed the Kvaser BlackBird v2 driver on your PC, simply:[/vc_column_text][vc_row_inner][vc_column_inner][vc_column_text]
  1. Attach the Kvaser BlackBird v2 to the PC’s USB port.
  2. Run the Kvaser Device Guide.
  3. Right click on the appropriate BlackBird in the list and select ‘Pair via Wi-Fi’.
  4. Set the Geographical Region on the Configuration tab and then press ‘Pair Device and PC’.
  5. When the pairing is finished, close the Wi-Fi Pairing Tool, detach the BlackBird v2 from your PC and apply power on the CAN 1 connector.
  6. The BlackBird will show up as a remote device in the Kvaser Device Guide list when the Wi-Fi connection is reestablished.
[/vc_column_text][/vc_column_inner][/vc_row_inner][vc_column_text]If you have questions or need help with this tool, please visit Kvaser Support, send us an email directly at [email protected].[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_raket_product list_style="list" post_id="8509"][/vc_column][/vc_row] [post_title] => Introducing the Kvaser Wi-Fi Pairing Tool [post_excerpt] => [post_status] => publish [comment_status] => closed [ping_status] => closed [post_password] => [post_name] => introducing-kvaser-wi-fi-pairing-tool [to_ping] => [pinged] => [post_modified] => 2022-09-29 05:16:50 [post_modified_gmt] => 2022-09-29 05:16:50 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?p=19835 [menu_order] => 0 [post_type] => post [post_mime_type] => [comment_count] => 0 [filter] => raw ) [2] => WP_Post Object ( [ID] => 20065 [post_author] => 3931 [post_date] => 2018-03-12 08:04:44 [post_date_gmt] => 2018-03-12 08:04:44 [post_content] => [vc_row][vc_column][vc_column_text][/vc_column_text][vc_column_text]C Quigley, D Charles, R McLaughlin of Warwick Control Technologies present a method for reverse engineering the messages on a CAN bus using electrical signal clusters.[/vc_column_text][vc_column_text]

Abstract

There are many applications in which you may need to reverse engineer the Controller Area Network (CAN), e.g.:
  • Automotive competitor analysis
  • Telematics applications such fleet management
  • Disabled driver applications
  The typical reverse engineering process is concerned with moving a sensor and watching the CAN bus for message changes. For example, wind down a door window and see if this kicks off changes in CAN message data. Many CAN buses have many messages originating from many Electronic Control Units (ECUs). This means it is difficult to watch all of them at the same time. It would be far easier if you could simply watch a smaller number of CAN messages to observe changes by isolating the ECUs the messages originate from. This paper describes a process that allows the user to identify which CAN messages are transmitted by a particular ECU. This is achieved by getting the electrical signature of each CAN message and matching known CAN messages with unknown ones. Therefore, the transmitting ECU of the unknown CAN messages can be determined. The method for determining which Identifiers come from a particular ECU is to first get electrical signature plots of known diagnostic response messages and compare with electrical signature plots of the real time control messages. The authors show how to achieve this using Warwick Control’s tool X-Analyser, coupled with a PicoScope PC oscilloscope and a Kvaser CAN USB interface. This paper requires prior basic knowledge of the workings of the CAN bus technology.[/vc_column_text][vc_button_raket title="Download Paper (PDF)" text="" page_id="http://canlandbucket.s3-website-eu-west-1.amazonaws.com/productionResourcesFiles/ebba4210-6c52-493d-a2ea-525dff614b21/Use%20of%20CAN%20Bus%20Message%20Electrical%20Signatures%20for%20Automotive%20Reverse%20Engineering.pdf"][/vc_column][/vc_row][vc_row][vc_column][vc_raket_associate post_id="9819"][/vc_column][/vc_row] [post_title] => The Use of CAN Bus Message Electrical Signatures for Automotive Reverse Engineering [post_excerpt] => [post_status] => publish [comment_status] => closed [ping_status] => closed [post_password] => [post_name] => use-can-bus-message-electrical-signatures-automotive-reverse-engineering [to_ping] => [pinged] => [post_modified] => 2022-09-29 05:16:50 [post_modified_gmt] => 2022-09-29 05:16:50 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?p=20065 [menu_order] => 0 [post_type] => post [post_mime_type] => [comment_count] => 0 [filter] => raw ) [3] => WP_Post Object ( [ID] => 39850 [post_author] => 4840 [post_date] => 2018-03-06 11:21:31 [post_date_gmt] => 2018-03-06 11:21:31 [post_content] => [vc_row][vc_column][vc_column_text]The purpose with this document is to show how to migrate from CAN CLASSIC to CAN FD. We will only cover what’s needed to change in your code if you have an existing project (based on Kvaser CANLib SDK). Of course, you can also use this text if you intend to start a new project. We will not cover the definition of CAN FD and the changes needed on the physical bus. For more information about CAN FD, please look at our homepage (https://www.kvaser.com/about-can/can-fd/). There is also more information in our training section (https://www.kvaser.com/training-materials/). You will need to register (free) and login to be able to download the documents. Recommended documents to download (and read):
  • CAN Protocol Tutorial
  • CAN FD For Different Stakeholders
  • Comparing CAN FD with Classical CAN
[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="CanFDTest"][vc_column_text]We have created a project called “CanFDTest” in the Embarcadero DELPHI environment (Pascal). If you don’t have the DELPHI environment, our intention is that the code can be read with any text editor. All-important code is located in the RunCanFDExamplePlease procedure, which is listed in appendix A. In this procedure, we initialize the bus, send one frame, receive one frame and finalize the bus.[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Hardware needed"][vc_column_text]This example has been tested on both a virtual computer (Microsoft HYPER-V, WIN10 64bit) and a standard laptop. We have used both virtual interfaces and Kvaser interfaces when testing the example.
  • No hardware (Kvaser CAN interfaces) are needed to run the example if the virtual channels on the Kvaser driver are used.
[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Tools needed for “CanFDTest”"][vc_column_text]The example is found in the Delphi® project “CanFDTest_xxx”. It is not necessary to run the example, more important is to open the file “CanFDtestUnit.pas” and study the procedure RunCanFDExamplePlease(). EMBARCADERO DELPHI Delphi® is a software provided by EMBARCADERO®. At the time of writing (10.01.2018), they provide a free version called “DELPHI STARTER”, which can be found here: https://www.embarcadero.com/products/delphi/starter Kvaser CANlib SDK The CANlib Software Development Kit (Kvaser Caleb SDK) is needed to run the example, but is really life without CANlib, worth living? You can find the SDK at: https://www.kvaser.com/download/ Driver for Kvaser CAN hardware This driver includes a virtual hardware that can do just about everything our real hardware can do. This makes it possible to try CAN FD without a physical interface. Once you get a Kvaser interface you can seamlessly transition from the virtual driver to a real CAN FD bus-line. You can find the drivers at: https://www.kvaser.com/download/ We provide drivers for Windows, Linux and DIADEM. This example uses the Windows drivers. Kvaser HELP files When you visit the KVASER homepage, please also visit CANlib Help (this help is included in CANlib SDK) (https://www.kvaser.com/canlib-webhelp/)
  • DELPHI, CANlib SDK and DRIVER must be installed before running this example (CanFDTest).
[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="The program CanFDTest"][vc_column_text]The example program, CanFDTest, is built up using four PAS files:
  • CANlib.pas
  • CanFDTestUnit.pas
  • DummyUnit.pas
  • MyHelpUnit.pas
CANlib.pas Normally, this file is distributed in the Kvaser CANlib SDK. To make life a bit easier, the PAS file is copied to our project instead of setting up a search path in DELPHI to the file. CanFDTestUnit.pas Contains all main information in this example. The procedure RunCanFDExamplePlease() is included at the end of this document. DummyUnit.pas Contains some “dummy functions” for debugging. These functions “do nothing”, but they are a good point to set a breakpoint on for debugging. The compiler cannot optimize the variables used in the dummy functions, so they are always available for inspection. MyHelpUnit.pas Contains some functions that helps us but do not call on the SDK. How to use the example CanFDTest Unzip it and open the project by opening the file “CanFDTest.dproj” (requires DELPHI). If you don’t want to run the example, then open the file “CanFDTestUnit.pas” in a text editor of your choosing.[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="The procedure RunCanFDExamplePlease"][vc_column_text]This is divided into four sections:
  • Initialization
  • Sending
  • Receiving
  • Finalization
The code shown here is condensed and not complete, please look at the source code. Section: Initializing Selecting CLASSIC CAN or CAN FD Set the constant MyApp to either canFD or canCLASSIC CAN. Set TX_MySelCh to the interface you want to use as sender. Set RX_MySelCh to the interface you want to use as receiver. All (almost) Kvaser CAN interfaces can be both senders and receivers at the same time. We select to use one as TX and one as RX in this example to make it easier to follow the code. First we run three commands: canInitializeLibrary() canGetChannelData()
  • No change for Can FD
We know now how many interfaces we have and their names. We are now ready to open two of them. canOpenChannel()
  • Editing needed for Can FD!
CAN CLASSIC TX_MyHnd := canOpenChannel(TX_MySelCh - 1, canOPEN_ACCEPT_VIRTUAL); RX_MyHnd := canOpenChannel(RX_MySelCh - 1, canOPEN_ACCEPT_VIRTUAL); CAN FD TX_MyHnd := canOpenChannel(TX_MySelCh - 1, canOPEN_ACCEPT_VIRTUAL OR canOPEN_CAN_FD); RX_MyHnd := canOpenChannel(RX_MySelCh - 1, canOPEN_ACCEPT_VIRTUAL OR canOPEN_CAN_FD); It is important to use the FLAG: canOPEN_CAN_FD when opening a FD channel. We are using combination of “canOPEN_ACCEPT_VIRTUAL OR canOPEN_CAN_FD” to open a virtual interface and to set the mode to FD. The interfaces are opened and now we must set their parameters. canSetBusParams() and canSetBusParamsFD()
  • Editing and adding information needed for FD!
  • It is possible to use other values than the predefined (not covered here).
CAN CLASSIC Uses only canSetBusParams() together with the canBITRATE_xxx. TX := canSetBusParams(TX_MyHnd, canBITRATE_500K, 0, 0, 0, 0, 0); RX := canSetBusParams(RX_MyHnd, canBITRATE_500K, 0, 0, 0, 0, 0); CAN FD Uses canSetBusParams() and canSetBusParamsFD() together with the canFD_BITRATE_xxx. TX := canSetBusParams(TX_MyHnd, canFD_BITRATE_500K_80P, 0, 0, 0, 0, 0); RX := canSetBusParams(RX_MyHnd, canFD_BITRATE_500K_80P, 0, 0, 0, 0, 0); TX := canSetBusParamsFD(TX_MyHnd, canFD_BITRATE_1M_80P, 0, 0, 0); RX := canSetBusParamsFD(RX_MyHnd, canFD_BITRATE_1M_80P, 0, 0, 0);
  • Please note, do NOT use the canBITRATE_xxx values for FD!
All parameters are now set and we are ready to go online so we end the initializing section by opening the bus and doing some cleaning. canBusOn() canFlushTransmitQueue() canFlushReceiveQueue()
  • No change for CAN FD
  Section: Sending We have activated the bus and the interfaces wait for us to do something. We shall now send one frame from one of our selected interfaces. canWrite()
  • Editing needed for CAN FD!
(We can use the commands canWrite() and canWriteWait() but we only use canWrite in this example.) Recommendation: READ THE HELP! CAN CLASSIC BUF  := 'Hello!'; id   := 111; dlc  := 8; // For Classic CAN dlc can be at most 8* Flag := canMSG_STD; R := canWrite(TX_MyHnd, id, @BUF, dlc, Flag); CAN FD BUF  := 'Hello World!'; id   := 222; dlc  := 16; // for CAN FD dlc CAN be one of the following 0-8,12, 16, 20, 24, 32, 48, 64 Flag := canMSG_STD OR canFDMSG_FDF OR canFDMSG_BRS; R := canWrite(TX_MyHnd, id, @BUF, dlc, Flag);
  • New buffer size to hold up to 64 bytes
  • Add canFDMSG_FDF to flag (Indicates that the frame is an FD frame)
  • Add canFDMSG_BRS to flag (Indicate if frame should be sent with bit rate switch)
Please note that canFDMSG_BRS is optional. When adding the BRS flag, the data part is sent with the FD-bitrate instead of the arbitration bitrate. It is still possible to send classic CAN frames even if you have enabled FD! Using only canMSG_STD or canMSG_EXT creates a classic frame.   Section: Receiving canRead()
  • Editing needed for CAN FD!
(There are four versions (at least) of canRead() that can be used for receiving FD traffic. We only use canRead() in this example, so we recommend that you read the ‘Help’ file!) R   := canRead(RX_MyHnd, id, @BUF, dlc, Flag, myTime); We do not need to change anything in the read command, but …
  • Make sure that the buffer has a minimum length of 64 bytes. Even if we don’t intend to send frames longer than 24 bytes, someone else might.
  • Study the returned FLAG values, which contains some new values. They are a combination of the canMSG_xxx, canMSGERR_xxx and canFDMSG_xxx
Even if we are alone on the bus and we only sent one frame, the received frame might not be the one we expected. If, for example, the value canMSG_ERROR_FRAME is included in the Flag, then the frame is an error frame instead of our expected frame.
  • Always check the returned value [R] and the returned Flag!
We have now received our own frame.   Section: Finalization The finalization does not need editing. canBusOff() canClose() canUnloadLibrary()
  • No change for CAN FD
[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Summary"][vc_column_text]Of course, there are plenty that can be done with the SDK, but we limit this example to just sending one frame and then receiving it. If you want to extend this example, modify it as you wish and use it in combination with the Kvaser CANKing software to send and receive frames. You can find this free software on our homepage (same place as the SDK and drivers).  With CANKing you can generate frames and also simulate errors (and more). We hope this document helps you and gives you some information when using CAN FD together with Kvaser equipment.[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Commands used for CAN FD:"][vc_column_text]Please pay extra attention to the commands mentioned below, they are all necessary for CAN FD and editing of your code is needed. Please note that there may be more commands/flags needed for CAN FD that are not mentioned in this document. Always check HELP before using any of the mentioned commands. canOpenChannel() canGetBusParamsFD() canSetBusParams() canSetBusParamsFD() canWrite() canRead()   Not used in this document canWriteWait()  not used in this document canReadSpecific()  not used in this document canReadSpecificSkip() not used in this document canReadWait()   not used in this document [/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Appendix A Procedure RunCanFDExamplePlease"][vc_code_raket language="csharp" code="cHJvY2VkdXJlJTIwVEZvcm1DYW5GRHRlc3QuUnVuQ2FuRkRFeGFtcGxlUGxlYXNlJTNCJTBBJTIwJTIwdmFyJTBBJTIwJTIwJTIwJTIwSSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQSUyMGludGVnZXIlM0IlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMkYlMkYlMjBJTlQzMiUwQSUyMCUyMCUyMCUyME4lMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0ElMjBpbnRlZ2VyJTNCJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTJGJTJGJTIwSU5UMzIlMEElMjAlMjAlMjAlMjBSJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNBJTIwaW50ZWdlciUzQiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyRiUyRiUyMElOVDMyJTBBJTIwJTIwJTIwJTIwVFglMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0ElMjBpbnRlZ2VyJTNCJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTJGJTJGJTIwSU5UMzIlMEElMjAlMjAlMjAlMjBSWCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQSUyMGludGVnZXIlM0IlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMkYlMkYlMjBJTlQzMiUwQSUyMCUyMCUyMCUyMG51bUNoJTIwJTIwJTIwJTIwJTIwJTIwJTNBJTIwaW50ZWdlciUzQiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyRiUyRiUyMElOVDMyJTBBJTIwJTIwJTIwJTIwTXlDaE5hbWVzJTIwJTIwJTNBJTIwYXJyYXklMjBvZiUyMHN0cmluZyUzQiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyRiUyRiUwQSUyMCUyMCUyMCUyMFRYX015SG5kJTIwJTIwJTIwJTNBJTIwY2FuSGFuZGxlJTNCJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTJGJTJGJTIwY2FuSGFuZGxlJTIwJTNEJTIwaW50ZWdlciUyMCUzRCUyMElOVDMyJTBBJTIwJTIwJTIwJTIwUlhfTXlIbmQlMjAlMjAlMjAlM0ElMjBjYW5IYW5kbGUlM0IlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMkYlMkYlMjBjYW5IYW5kbGUlMjAlM0QlMjBpbnRlZ2VyJTIwJTNEJTIwSU5UMzIlMEElMjAlMjAlMjAlMjBCVUYlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0ElMjBUQnl0ZUJVRjAwNjQlM0IlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMkYlMkYlMjBBcnJheSUyMDY0JTIwYnl0ZXMlMjBvZiUyMDhiaXQlMjBjaGFyJTBBJTIwJTIwJTIwJTIwTXlTdHJpbmdCdWYlM0ElMjBUQnl0ZUJVRjEwMjQlM0IlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMkYlMkYlMjBBcnJheSUyMDEwMjQlMjBieXRlcyUyMG9mJTIwOGJpdCUyMGNoYXIlMEElMjAlMjAlMjAlMjBpZCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQSUyMExvbmdpbnQlM0IlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMkYlMkYlMjBXYXJuaW5nJTIwTE9OR0lOVCUyMGlzJTIwMzJiJTIwb3IlMjA2NGIlMjBkZXBlbmRpbmclMjBvZiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyRiUyRiUyMHRhcmdldCUyMHBsYXRmb3JtLiUyMGNoZWNrJTIwaWYlMjB1c2luZyUyMGlPUyUyMG9yJTIwTElOVVglMjElMEElMjAlMjAlMjAlMjBkbGMlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0ElMjBDYXJkaW5hbCUzQiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyRiUyRiUyMFVJTlQzMiUwQSUyMCUyMCUyMCUyMEZsYWclMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0ElMjBDYXJkaW5hbCUzQiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyRiUyRiUyMFVJTlQzMiUwQSUyMCUyMCUyMCUyMEhlbHBGbGFnJTIwJTIwJTIwJTNBJTIwVEhlbHBGbGFnJTIwYWJzb2x1dGUlMjBGbGFnJTNCJTIwJTJGJTJGJTIwVUlOVDMyJTJDJTIwSGVscEZsYWclMjBzaGFyZSUyMGFkcmVzcyUyMHdpdGglMjBGbGFnJTBBJTIwJTIwJTIwJTIwbXlUaW1lJTIwJTIwJTIwJTIwJTIwJTNBJTIwQ2FyZGluYWwlM0IlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMkYlMkYlMjBVSU5UMzIlMEElMEElMjAlMjBiZWdpbiUwQSUyMCUyMCUyMCUyMEklMjAlM0ElM0QlMjBzaXplb2YlMjhpZCUyOSUzQiUwQSUyMCUyMCUyMCUyMGR1bW15JTI4SSUyOSUzQiUwQSUwQSUyMCUyMCUyMCUyMGJlZ2luJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwY2FzZSUyME15QXBwJTIwb2YlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjYW5DTCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJlZ2luJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwTWVtby5MaW5lcy5BZGQlMjglMjdIZWxsbyUyMSUyMFN0YXJ0aW5nJTIwVGVzdENhbkxJQl9TVEQuJTIwVXNpbmclMjBDTEFTU0lDJTIwQ0FOJTI3JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZW5kJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY2FuRkQlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBiZWdpbiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyME1lbW8uTGluZXMuQWRkJTI4JTI3SGVsbG8lMjElMjBTdGFydGluZyUyMFRlc3RDYW5MSUJfU1RELiUyMFVzaW5nJTIwRkQlMjBDQU4lMjclMjklM0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbmQlM0IlMEElMjAlMjAlMjAlMjAlMjAlMjBlbmQlM0IlMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMkYlMkYlMkYlMjAlMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMEElMjAlMjAlMjAlMjAlMjAlMjAlMkYlMkYlMkYlMjBTZWN0aW9uJTIwb25lJTJDJTIwSU5JVElBTElaQVRJT04lMEElMjAlMjAlMjAlMjAlMjAlMjAlMkYlMkYlMkYlMjAlMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMEElMjAlMjAlMjAlMjAlMjAlMjAlMkYlMkYlMjBPcGVuJTIwQ2FuTGliLkRMTCUwQSUyMCUyMCUyMCUyMCUyMCUyMGNhbkluaXRpYWxpemVMaWJyYXJ5JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTJGJTJGJTIwTm8lMjBlcnJvcmNoZWNraW5nJTIwaGVyZSUyQyUyMHdpbGwlMjBiZSUyMGRvbmUlMjBsYXRlciUyMHdoZW4lMjBvcGVuaW5nJTIwY2hhbm5lbC4uLiUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyRiUyRiUyMEZpbmQlMjBvdXQlMjBob3clMjBtYW55JTIwY2hhbm5lbHMlMjhpbnRlcmZhY2VzJTI5JTIwd2UlMjBjYW4lMjB1c2UlMEElMjAlMjAlMjAlMjAlMjAlMjBSJTIwJTNBJTNEJTIwY2FuR2V0TnVtYmVyT2ZDaGFubmVscyUyOG51bUNoJTI5JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBNeUVycm9yQ2hlY2slMjhNZW1vJTJDJTIwUiUyQyUyMCUyN2NhbkdldE51bWJlck9mQ2hhbm5lbHMlMjclMjklMjB0aGVuJTBBJTIwJTIwJTIwJTIwJTIwJTIwYmVnaW4lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBleGl0JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwZW5kJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwTWVtby5MaW5lcy5BZGQlMjglMjdGb3VuZCUyMCUyNyUyMCUyQiUyMG51bUNoLlRvU3RyaW5nJTIwJTJCJTIwJTI3JTIwY2hhbm5lbHMlMjclMjklM0IlMEElMEElMjAlMjAlMjAlMjAlMjAlMjBzZXRsZW5ndGglMjhNeUNoTmFtZXMlMkMlMjBudW1DaCUyOSUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMGZvciUyMEklMjAlM0ElM0QlMjBMb3clMjhNeUNoTmFtZXMlMjklMjB0byUyMEhpZ2glMjhNeUNoTmFtZXMlMjklMjBkbyUwQSUyMCUyMCUyMCUyMCUyMCUyMGJlZ2luJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY2FuR2V0Q2hhbm5lbERhdGElMjhJJTJDJTIwY2FuQ0hBTk5FTERBVEFfREVWREVTQ1JfQVNDSUklMkMlMjBNeVN0cmluZ0J1ZiUyQyUyMHNpemVvZiUyOE15U3RyaW5nQnVmJTI5JTI5JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY2FuR2V0Q2hhbm5lbERhdGElMjhJJTJDJTIwY2FuQ0hBTk5FTERBVEFfQ0hBTl9OT19PTl9DQVJEJTJDJTIwTiUyQyUyMHNpemVvZiUyOE4lMjklMjklM0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBNeUNoTmFtZXMlNUJJJTVEJTIwJTNBJTNEJTIwJTI4SSUyQjElMjkuVG9TdHJpbmclMkIlMjclMjAlMjAlMjclMkJzdHJpbmclMjhNeVN0cmluZ0J1ZiUyOSUyQiUyNyUyMCUyNyUyMCUyQiUyMCUyOE4lMkIxJTI5LlRvU3RyaW5nJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwTWVtby5MaW5lcy5BZGQlMjglMjdGb3VuZCUyMGNoYW5uZWwlM0ElMjAlMjclMjAlMkIlMjBNeUNoTmFtZXMlNUJJJTVEJTI5JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwZW5kJTNCJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTJGJTJGJTIwQ2hlY2slMjB0aGF0JTIwdGhlJTIwc2VsZWN0ZWQlMjBjaGFubmVscyUyMGV4aXN0JTBBJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBNeUVycm9yQ2hlY2slMjhNZW1vJTJDJTIwVFhfTXlTZWxDaCUyQyUyMFJYX015U2VsQ2glMkMlMjAxJTJDJTIwbnVtQ2glMkMlMjAlMjdudW1DaCUyNyUyOSUyMHRoZW4lMEElMjAlMjAlMjAlMjAlMjAlMjBiZWdpbiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGV4aXQlM0IlMEElMjAlMjAlMjAlMjAlMjAlMjBlbmQlM0IlMEElMEElMjAlMjAlMjAlMjAlMjAlMjBNZW1vLkxpbmVzLkFkZCUyOCUyN1NlbGVjdGVkJTIwVFglM0ElMjclMjAlMkIlMjBNeUNoTmFtZXMlNUJUWF9NeVNlbENoJTIwLSUyMDElNUQlMjklM0IlMEElMjAlMjAlMjAlMjAlMjAlMjBNZW1vLkxpbmVzLkFkZCUyOCUyN1NlbGVjdGVkJTIwUlglM0ElMjclMjAlMkIlMjBNeUNoTmFtZXMlNUJSWF9NeVNlbENoJTIwLSUyMDElNUQlMjklM0IlMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMkYlMkYlMjBOZXh0JTIwc3RlcCUyMGlzJTIwdG8lMjBvcGVuJTIwdGhlJTIwQ2hhbm5lbHMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMkYlMkYlMjBQbGVhc2UlMjBjaGVjayUyMHRoZSUyMEZMQUdzJTIxJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTJGJTJGJTIwQ0FOJTIwRkQlMjBuZWVkcyUyMGRpZmZlcmVudCUyMHNldHRpbmdzJTIxJTBBJTIwJTIwJTIwJTIwJTIwJTIwY2FzZSUyME15QXBwJTIwb2YlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjYW5DTCUzQSUyMCUyRiUyRiUyMENsYXNzaWMlMjBDQU4lMjBjb21tdW5pY2F0aW9uJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYmVnaW4lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBUWF9NeUhuZCUyMCUzQSUzRCUyMGNhbk9wZW5DaGFubmVsJTI4VFhfTXlTZWxDaCUyMC0lMjAxJTJDJTIwY2FuT1BFTl9BQ0NFUFRfVklSVFVBTCUyOSUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMFJYX015SG5kJTIwJTNBJTNEJTIwY2FuT3BlbkNoYW5uZWwlMjhSWF9NeVNlbENoJTIwLSUyMDElMkMlMjBjYW5PUEVOX0FDQ0VQVF9WSVJUVUFMJTI5JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBNeUVycm9yQ2hlY2slMjhNZW1vJTJDJTIwVFhfTXlIbmQlMkMlMjBSWF9NeUhuZCUyQyUyMCUyN2Nhbk9wZW5DaGFubmVsJTI3JTI5JTIwdGhlbiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJlZ2luJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZXhpdCUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGVuZCUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGVuZCUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNhbkZEJTNBJTIwJTJGJTJGJTIwQ0FOJTIwRkQlMjBjb21tdW5pY2F0aW9uJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYmVnaW4lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBUWF9NeUhuZCUzQSUzRGNhbk9wZW5DaGFubmVsJTI4VFhfTXlTZWxDaC0xJTJDJTIwY2FuT1BFTl9BQ0NFUFRfVklSVFVBTCUyME9SJTIwY2FuT1BFTl9DQU5fRkQlMjklM0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBSWF9NeUhuZCUzQSUzRGNhbk9wZW5DaGFubmVsJTI4UlhfTXlTZWxDaC0xJTJDJTIwY2FuT1BFTl9BQ0NFUFRfVklSVFVBTCUyME9SJTIwY2FuT1BFTl9DQU5fRkQlMjklM0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyME15RXJyb3JDaGVjayUyOE1lbW8lMkMlMjBUWF9NeUhuZCUyQyUyMFJYX015SG5kJTJDJTIwJTI3Y2FuT3BlbkNoYW5uZWwlMjBGRCUyNyUyOSUyMHRoZW4lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBiZWdpbiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGV4aXQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbmQlM0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbmQlM0IlMEElMjAlMjAlMjAlMjAlMjAlMjBlbmQlM0IlMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMkYlMkYlMkYlMjAlMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMEElMjAlMjAlMjAlMjAlMjAlMjAlMkYlMkYlMkYlMEElMjAlMjAlMjAlMjAlMjAlMjAlMkYlMkYlMkYlMjBOb3clMjBpcyUyMGElMjBnb29kJTIwdGltZSUyMHRvJTIwZW5hYmxlJTIwbWVzc2FnZXMlMkMlMjBidXQlMjB3ZSUyMGRvJTIwbm90JTIwbmVlZCUyMGl0JTIwaW4lMjB0aGlzJTIwZXhhbXBsZSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyRiUyRiUyRiUyMGNhblNldE5vdGlmeSUyOE15SG5kJTJDJTIwU2VsZi5IYW5kbGUlMkMlMjAlMjRGRkZGRkZGRiUyOSUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyRiUyRiUyRiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyRiUyRiUyRiUyMCUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUwQSUyMCUyMCUyMCUyMCUyMCUyMGNhc2UlMjBNeUFwcCUyMG9mJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY2FuQ0wlM0ElMjAlMkYlMkYlMjBDbGFzc2ljJTIwQ0FOJTIwY29tbXVuaWNhdGlvbiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJlZ2luJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwVFglMjAlM0ElM0QlMjBjYW5TZXRCdXNQYXJhbXMlMjhUWF9NeUhuZCUyQyUyMGNhbkJJVFJBVEVfNTAwSyUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTI5JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwUlglMjAlM0ElM0QlMjBjYW5TZXRCdXNQYXJhbXMlMjhSWF9NeUhuZCUyQyUyMGNhbkJJVFJBVEVfNTAwSyUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTI5JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBNeUVycm9yQ2hlY2slMjhNZW1vJTJDJTIwVFglMkMlMjBSWCUyQyUyMCUyN2NhblNldEJ1c1BhcmFtcyUyNyUyOSUyMHRoZW4lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBiZWdpbiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGV4aXQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbmQlM0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbmQlM0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjYW5GRCUzQSUyMCUyRiUyRiUyMENBTiUyMEZEJTIwY29tbXVuaWNhdGlvbiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJlZ2luJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwVFglMjAlM0ElM0QlMjBjYW5TZXRCdXNQYXJhbXMlMjhUWF9NeUhuZCUyQyUyMGNhbkZEX0JJVFJBVEVfNTAwS184MFAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyOSUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMFJYJTIwJTNBJTNEJTIwY2FuU2V0QnVzUGFyYW1zJTI4UlhfTXlIbmQlMkMlMjBjYW5GRF9CSVRSQVRFXzUwMEtfODBQJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMjklM0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyME15RXJyb3JDaGVjayUyOE1lbW8lMkMlMjBUWCUyQyUyMFJYJTJDJTIwJTI3Y2FuU2V0QnVzUGFyYW1zJTI3JTI5JTIwdGhlbiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJlZ2luJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZXhpdCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGVuZCUzQiUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMFRYJTIwJTNBJTNEJTIwY2FuU2V0QnVzUGFyYW1zRkQlMjhUWF9NeUhuZCUyQyUyMGNhbkZEX0JJVFJBVEVfMU1fODBQJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTI5JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwUlglMjAlM0ElM0QlMjBjYW5TZXRCdXNQYXJhbXNGRCUyOFJYX015SG5kJTJDJTIwY2FuRkRfQklUUkFURV8xTV84MFAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMjklM0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyME15RXJyb3JDaGVjayUyOE1lbW8lMkMlMjBUWCUyQyUyMFJYJTJDJTIwJTI3Y2FuU2V0QnVzUGFyYW1zRkQlMjclMjklMjB0aGVuJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYmVnaW4lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBleGl0JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZW5kJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZW5kJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwZW5kJTNCJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTJGJTJGJTIwVHVybiUyMEJVUyUyMG9uJTBBJTIwJTIwJTIwJTIwJTIwJTIwVFglMjAlM0ElM0QlMjBjYW5CdXNPbiUyOFRYX015SG5kJTI5JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwUlglMjAlM0ElM0QlMjBjYW5CdXNPbiUyOFJYX015SG5kJTI5JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBNeUVycm9yQ2hlY2slMjhNZW1vJTJDJTIwVFglMkMlMjBSWCUyQyUyMCUyN2NhbkJ1c09uJTI3JTI5JTIwdGhlbiUwQSUyMCUyMCUyMCUyMCUyMCUyMGJlZ2luJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZXhpdCUwQSUyMCUyMCUyMCUyMCUyMCUyMGVuZCUzQiUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyRiUyRiUyMFJlbW92ZSUyMGFsbCUyMHBlbmRpbmclMjB0cmFuc21pc3Npb25zJTJDJTIwbWlnaHQlMjBub3QlMjBiZSUyMG5lZWRlZCUwQSUyMCUyMCUyMCUyMCUyMCUyMFRYJTIwJTNBJTNEJTIwY2FuRmx1c2hUcmFuc21pdFF1ZXVlJTI4VFhfTXlIbmQlMjklM0IlMEElMjAlMjAlMjAlMjAlMjAlMjBSWCUyMCUzQSUzRCUyMGNhbkZsdXNoVHJhbnNtaXRRdWV1ZSUyOFJYX015SG5kJTI5JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBNeUVycm9yQ2hlY2slMjhNZW1vJTJDJTIwVFglMkMlMjBSWCUyQyUyMCUyN2NhbkZsdXNoVHJhbnNtaXRRdWV1ZSUyNyUyOSUyMHRoZW4lMEElMjAlMjAlMjAlMjAlMjAlMjBiZWdpbiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGV4aXQlMEElMjAlMjAlMjAlMjAlMjAlMjBlbmQlM0IlMEElMEElMjAlMjAlMjAlMjAlMjAlMjBzbGVlcCUyODI1MCUyOSUzQiUyMCUyRiUyRiUyMFRha2UlMjBhJTIwc2hvcnQlMjBuYXAuLi4lMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMkYlMkYlMjBSZW1vdmUlMjBhbGwlMjBwZW5kaW5nJTIwdHJhbnNtaXNzaW9ucyUyQyUyMGRvJTIwd2UlMjByZWFsbHklMjB3YW5uYSUyMGRvJTIwdGhpcyUyMGluJTIwYSUyMHNoYXJwJTIwYXBwbGljYXRpb24lM0YlMEElMjAlMjAlMjAlMjAlMjAlMjAlMkYlMkYlMjBNaWdodCUyMHJlbW92ZSUyMHdhbnRlZCUyMGZyYW1lcy4lMEElMjAlMjAlMjAlMjAlMjAlMjBUWCUyMCUzQSUzRCUyMGNhbkZsdXNoUmVjZWl2ZVF1ZXVlJTI4VFhfTXlIbmQlMjklM0IlMEElMjAlMjAlMjAlMjAlMjAlMjBSWCUyMCUzQSUzRCUyMGNhbkZsdXNoUmVjZWl2ZVF1ZXVlJTI4UlhfTXlIbmQlMjklM0IlMEElMjAlMjAlMjAlMjAlMjAlMjBpZiUyME15RXJyb3JDaGVjayUyOE1lbW8lMkMlMjBUWCUyQyUyMFJYJTJDJTIwJTI3Y2FuRmx1c2hSZWNlaXZlUXVldWUlMjclMjklMjB0aGVuJTBBJTIwJTIwJTIwJTIwJTIwJTIwYmVnaW4lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBleGl0JTBBJTIwJTIwJTIwJTIwJTIwJTIwZW5kJTNCJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTJGJTJGJTIwQ0FOJTIwaXMlMjBvcGVuJTIwZm9yJTIwdHJhZmZpYyUwQSUyMCUyMCUyMCUyMCUyMCUyME1lbW8uTGluZXMuQWRkJTI4JTI3Q0FOJTIwb3BlbiUyQyUyMHdhaXRpbmclMjclMjklM0IlMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMkYlMkYlMkYlMjAlMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMEElMjAlMjAlMjAlMjAlMjAlMjAlMkYlMkYlMkYlMjBTZWN0aW9uJTIwdHdvJTJDJTIwU2VuZGluZyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyRiUyRiUyRiUyMCUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyRiUyRiUyMENyZWF0ZSUyMG9uZSUyMGZyYW1lJTIwYW5kJTIwdHJhbnNtaXQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMkYlMkYlMjBUcmFuc21pdHRpbmclMjBmcm9tJTIwVFhfTXlTZWxDaCUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMGNhc2UlMjBNeUFwcCUyMG9mJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY2FuQ0wlM0ElMjAlMkYlMkYlMjBDbGFzc2ljJTIwQ0FOJTIwY29tbXVuaWNhdGlvbiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJlZ2luJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwQlVGJTIwJTNBJTNEJTIwJTI3SGVsbG8lMjElMjclM0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZCUyMCUyMCUzQSUzRCUyMDExMSUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGRsYyUyMCUzQSUzRCUyMDglM0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMkYlMkYlMkYlMjBGb3IlMjBDbGFzc2ljJTIwQ0FOJTIwZGxjJTIwY2FuJTIwYmUlMjBhdCUyMG1vc3QlMjA4JTJDJTIwdW5sZXNzJTIwY2FuT1BFTl9BQ0NFUFRfTEFSR0VfRExDJTIwaXMlMjB1c2VkLiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyRiUyRiUyRiUyMENhbldyaXRlJTIwY2FuJTIwb25seSUyMHRyYW5zZmVyJTIwbWF4JTIwOCUyMGJ5dGVzJTJDJTIwcmVnYXJkbGVzcyUyMG9mJTIwZGxjJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTJGJTJGJTJGJTIwSW4lMjB0aGlzJTIwZXhhbXBsZSUyMEJVRiUyMGlzJTIwNjQlMjBieXRlcyUyMHdpZGUlMkMlMjBidXQlMjBvbmx5JTIwOCUyMGJ5dGVzJTIwY2FuJTIwYmUlMjBzZW50LiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMEZsYWclMjAlM0ElM0QlMjBjYW5NU0dfU1REJTNCJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwUiUyMCUzQSUzRCUyMGNhbldyaXRlJTI4VFhfTXlIbmQlMkMlMjBpZCUyQyUyMCU0MEJVRiUyQyUyMGRsYyUyQyUyMEZsYWclMjklM0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyME15RXJyb3JDaGVjayUyOE1lbW8lMkMlMjBSJTJDJTIwJTI3Y2FuV3JpdGUlMjclMjklMjB0aGVuJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYmVnaW4lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBleGl0JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZW5kJTNCJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwTWVtby5MaW5lcy5BZGQlMjglMjdUWCUyMElEJTNBJTI3JTJCaWQuVG9TdHJpbmclMkIlMjclMjBkbGMlM0ElMjclMkJkbGMuVG9TdHJpbmclMkIlMjclMjBCJTIwJTNBJTI3JTJCTXlDb252ZXJ0JTI4QlVGJTJDJTIwZGxjJTI5JTI5JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZW5kJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY2FuRkQlM0ElMjAlMkYlMkYlMjBDQU4lMjBGRCUyMGNvbW11bmljYXRpb24lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBiZWdpbiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMEJVRiUyMCUyMCUzQSUzRCUyMCUyN0hlbGxvJTIwV29ybGQlMjElMjclM0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZCUyMCUyMCUyMCUzQSUzRCUyMDIyMiUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGRsYyUyMCUyMCUzQSUzRCUyMDE2JTNCJTIwJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTJGJTJGJTIwZm9yJTIwQ0FOJTIwRkQlMjBkbGMlMjBDQU4lMjBiZSUyMG9uZSUyMG9mJTIwdGhlJTIwZm9sbG93aW5nJTIwMC04JTJDJTIwMTIlMkMlMjAxNiUyQyUyMDIwJTJDJTIwMjQlMkMlMjAzMiUyQyUyMDQ4JTJDJTIwNjQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBGbGFnJTIwJTNBJTNEJTIwY2FuTVNHX1NURCUyME9SJTIwY2FuRkRNU0dfRkRGJTIwT1IlMjBjYW5GRE1TR19CUlMlM0IlMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBSJTIwJTNBJTNEJTIwY2FuV3JpdGUlMjhUWF9NeUhuZCUyQyUyMGlkJTJDJTIwJTQwQlVGJTJDJTIwZGxjJTJDJTIwRmxhZyUyOSUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwTXlFcnJvckNoZWNrJTI4TWVtbyUyQyUyMFIlMkMlMjAlMjdjYW5Xcml0ZSUyMCUyOEZEJTI5JTI3JTI5JTIwdGhlbiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJlZ2luJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZXhpdCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGVuZCUzQiUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyME1lbW8uTGluZXMuQWRkJTI4JTI3VFglMjBJRCUzQSUyNyUyMCUyQiUyMGlkLlRvU3RyaW5nJTIwJTJCJTIwJTI3JTIwZGxjJTNBJTI3JTIwJTJCJTIwZGxjLlRvU3RyaW5nJTIwJTJCJTIwJTI3JTIwYnl0ZXMlMjAlM0ElMjclMjAlMkIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBNeUNvbnZlcnQlMjhCVUYlMkMlMjBkbGMlMjklMjklM0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbmQlM0IlMEElMjAlMjAlMjAlMjAlMjAlMjBlbmQlM0IlMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMkYlMkYlMkYlMjAlMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMEElMjAlMjAlMjAlMjAlMjAlMjAlMkYlMkYlMkYlMjBTZWN0aW9uJTIwdGhyZWUlMkMlMjBSZWNpZXZpbmclMEElMjAlMjAlMjAlMjAlMjAlMjAlMkYlMkYlMkYlMjAlMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMEElMjAlMjAlMjAlMjAlMjAlMjAlMkYlMkYlMjBOb3clMjBpZiUyMHdlJTIwYXJlJTIwbHVja3klMkMlMjBzb21lJTIwYnl0ZXMlMjBoYXZlJTIwYXJyaXZlZCUyMHRvJTIwUlglMEElMjAlMjAlMjAlMjAlMjAlMjBCVUYlMjAlM0ElM0QlMjAlMjclMjclM0IlMEElMjAlMjAlMjAlMjAlMjAlMjBJJTIwJTIwJTIwJTNBJTNEJTIwMCUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMHJlcGVhdCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGluYyUyOEklMjklM0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzbGVlcCUyODEwMCUyOSUzQiUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyRiUyRiUyMEFsd2F5cyUyMHVzZSUyMDY0JTIwYnl0ZSUyMHdpZGUlMjBidWZmZXIlMjB0byUyMGF2b2lkJTIwZXJyb3JzJTIxJTIxJTIxJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZGxjJTIwJTIwJTNBJTNEJTIwNCUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMEZsYWclMjAlM0ElM0QlMjAwJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwUiUyMCUyMCUyMCUyMCUzQSUzRCUyMGNhblJlYWQlMjhSWF9NeUhuZCUyQyUyMGlkJTJDJTIwJTQwQlVGJTJDJTIwZGxjJTJDJTIwRmxhZyUyQyUyMG15VGltZSUyOSUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyRiUyRiUyRiUyMFdBUk5JTkclMkMlMjBtYWtlJTIwc3VyZSUyMHRoYXQlMjBCVUYlMjBpcyUyMG1taW5pbXVtJTIwNjQlMjBieXRlcyUyMHdpZGUlMjElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBNZW1vLkxpbmVzLkFkZCUyOCUyN1JlYWQlMjBhdHRlbXAlMjBubyUyMCUyNyUyMCUyQiUyMEkuVG9TdHJpbmclMjAlMkIlMjAlMjclMjBSZXN1bHQlMjAlM0ElMjclMjAlMkIlMjBSLlRvU3RyaW5nJTI5JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwdW50aWwlMjAlMjhJJTIwJTNFJTNEJTIwNSUyOSUyME9SJTIwJTI4UiUyMCUzRCUyMGNhbk9LJTI5JTNCJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwY2FzZSUyMFIlMjBvZiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNhbk9LJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYmVnaW4lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBkdW1teSUyOGlkJTJDJTIwQlVGJTJDJTIwZGxjJTJDJTIwRmxhZyUyQyUyMEhlbHBGbGFnLmNhbk1TR19GbGFnJTJDJTIwbXlUaW1lJTI5JTNCJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTJGJTJGJTIwRXhhbWluZSUyMHRoZSUyMEZsYWclMjhIZWxwRmxhZyUyOSUyMGFuZCUyMGRvJTIwc29tZXRpbmcuLi4lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyME15Y2FuTVNHX1JUUiUyMGluJTIwSGVscEZsYWcuY2FuTVNHX0ZsYWclMjB0aGVuJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwTWVtby5MaW5lcy5BZGQlMjglMjdSWCUyMEZsYWclM0ElMjAlM0NNeWNhbk1TR19SVFIlM0UlMjclMjklM0IlMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyME15Y2FuTVNHX1NURCUyMGluJTIwSGVscEZsYWcuY2FuTVNHX0ZsYWclMjB0aGVuJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwTWVtby5MaW5lcy5BZGQlMjglMjdSWCUyMEZsYWclM0ElMjAlM0NNeWNhbk1TR19TVEQlM0UlMjclMjklM0IlMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyME15Y2FuTVNHX0VYVCUyMGluJTIwSGVscEZsYWcuY2FuTVNHX0ZsYWclMjB0aGVuJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwTWVtby5MaW5lcy5BZGQlMjglMjdSWCUyMEZsYWclM0ElMjAlM0NNeWNhbk1TR19FWFQlM0UlMjclMjklM0IlMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyME15Y2FuTVNHX0VSUk9SX0ZSQU1FJTIwaW4lMjBIZWxwRmxhZy5jYW5NU0dfRmxhZyUyMHRoZW4lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBNZW1vLkxpbmVzLkFkZCUyOCUyN1JYJTIwRmxhZyUzQSUyMCUzQ015Y2FuTVNHX0VSUk9SX0ZSQU1FJTNFJTI3JTI5JTNCJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBNeWNhbkZETVNHX0ZERiUyMGluJTIwSGVscEZsYWcuY2FuTVNHX0ZsYWclMjB0aGVuJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwTWVtby5MaW5lcy5BZGQlMjglMjdSWCUyMEZsYWclM0ElMjAlM0NNeWNhbkZETVNHX0ZERiUzRSUyNyUyOSUzQiUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwTXljYW5GRE1TR19CUlMlMjBpbiUyMEhlbHBGbGFnLmNhbk1TR19GbGFnJTIwdGhlbiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyME1lbW8uTGluZXMuQWRkJTI4JTI3UlglMjBGbGFnJTNBJTIwJTNDTXljYW5GRE1TR19CUlMlM0UlMjclMjklM0IlMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBNZW1vLkxpbmVzLkFkZCUyOCUyN1JYJTIwSUQlM0ElMjclMjAlMkIlMjBpZC5Ub1N0cmluZyUyMCUyQiUyMCUyNyUyMGRsYyUzQSUyNyUyMCUyQiUyMGRsYy5Ub1N0cmluZyUyMCUyQiUyMCUyNyUyMGJ5dGVzJTIwJTNBJTI3JTIwJTJCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwTXlDb252ZXJ0JTI4QlVGJTJDJTIwZGxjJTI5JTI5JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZW5kJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY2FuRVJSX05PTVNHJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYmVnaW4lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBNZW1vLkxpbmVzLkFkZCUyOCUyN09vb3BzJTJDJTIwbm8lMjBkYXRhJTNGJTNGJTNGJTNGJTI3JTI5JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZW5kJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwZWxzZSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJlZ2luJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwTWVtby5MaW5lcy5BZGQlMjglMjdTb21lJTIwZXJyb3IlMjBoYXBwZW5lZCUyQyUyMGNoZWNrJTIxJTIwJTI3JTIwJTJCJTIwUi5Ub1N0cmluZyUyOSUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGVuZCUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMGVuZCUzQiUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyRiUyRiUyRiUyMCUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUyQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyRiUyRiUyRiUyMFNlY3Rpb24lMjB0aHJlZSUyQyUyMEZpbmFsaXppbmclMEElMjAlMjAlMjAlMjAlMjAlMjAlMkYlMkYlMkYlMjAlMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMkElMEElMjAlMjAlMjAlMjAlMjAlMjAlMkYlMkYlMjBXZSUyMGFyZSUyMGRvbmUlMEElMjAlMjAlMjAlMjAlMjAlMjBNZW1vLkxpbmVzLkFkZCUyOCUyN0RPTkUlMkMlMjBzdGFydCUyMHRoZSUyMGNsZWFudXAlMjBwcm9jZXNzJTI3JTI5JTNCJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwVFglMjAlM0ElM0QlMjBjYW5CdXNPZmYlMjhUWF9NeUhuZCUyOSUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMFJYJTIwJTNBJTNEJTIwY2FuQnVzT2ZmJTI4UlhfTXlIbmQlMjklM0IlMEElMjAlMjAlMjAlMjAlMjAlMjBpZiUyME15RXJyb3JDaGVjayUyOE1lbW8lMkMlMjBUWCUyQyUyMFJYJTJDJTIwJTI3Y2FuQnVzT2ZmJTI3JTI5JTIwdGhlbiUwQSUyMCUyMCUyMCUyMCUyMCUyMGJlZ2luJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZXhpdCUwQSUyMCUyMCUyMCUyMCUyMCUyMGVuZCUzQiUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMFRYJTIwJTNBJTNEJTIwY2FuQ2xvc2UlMjhUWF9NeUhuZCUyOSUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMFJYJTIwJTNBJTNEJTIwY2FuQ2xvc2UlMjhSWF9NeUhuZCUyOSUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwTXlFcnJvckNoZWNrJTI4TWVtbyUyQyUyMFRYJTJDJTIwUlglMkMlMjAlMjdjYW5DbG9zZSUyNyUyOSUyMHRoZW4lMEElMjAlMjAlMjAlMjAlMjAlMjBiZWdpbiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGV4aXQlMEElMjAlMjAlMjAlMjAlMjAlMjBlbmQlM0IlMEElMEElMjAlMjAlMjAlMjAlMjAlMjBNZW1vLkxpbmVzLkFkZCUyOCUyN0lmJTIweW91JTIwY2FuJTIwcmVhZCUyMHRoaXMlMkMlMjBldmVyeXRoaW5nJTIwd29ya2VkJTIxJTI3JTI5JTNCJTBBJTIwJTIwJTIwJTIwZW5kJTNCJTBBJTIwJTIwZW5kJTNCJTBB"][/vc_column][/vc_row] [post_title] => Kvaser SDK migration from CAN CLASSIC to CAN FD [post_excerpt] => [post_status] => publish [comment_status] => closed [ping_status] => closed [post_password] => [post_name] => kvaser-sdk-migration-can-classic-can-fd [to_ping] => [pinged] => [post_modified] => 2022-10-04 11:25:37 [post_modified_gmt] => 2022-10-04 11:25:37 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?post_type=developer_blog&p=39850 [menu_order] => 0 [post_type] => developer_blog [post_mime_type] => [comment_count] => 0 [filter] => raw ) [4] => WP_Post Object ( [ID] => 39852 [post_author] => 14 [post_date] => 2018-03-01 11:35:33 [post_date_gmt] => 2018-03-01 11:35:33 [post_content] => [vc_row][vc_column][vc_column_text]In the latest version of CanKing (v6.6), a new DBC Formatter has been included. We will here take a look at this formatter and see how it can be used to show signal values in the output window of CanKing. We will be using the Kvaser Virtual CAN Driver, so no interface is needed to follow along.[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Configure CanKing to use Kvaser Virtual CAN Driver 1 and 2"][vc_column_text]Start CanKing and create a new project using Template and click OK. Among the templates, select 2 CAN channels from the Standard tab and click OK. Make sure that two virtual channels from the same virtual device is selected (0 - Kvaser Virtual CAN Driver and 1 - Kvaser Virtual CAN Driver) and that the CAN mode and bus parameters are set identically.[/vc_column_text][vc_row_inner][vc_column_inner width="1/6"][/vc_column_inner][vc_column_inner width="2/3"][vc_single_image image="19725"][vc_column_text]Figure 1: Select virtual device channels and make sure the Bus Configuration match between the channels in the CAN 1 and CAN 2 windows.[/vc_column_text][/vc_column_inner][vc_column_inner width="1/6"][/vc_column_inner][/vc_row_inner][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Configure CanKing formatters"][vc_column_text]Go to the Select formatters window. This can be done by selecting Select formatters from the Window menu. If the Select formatters window is not available, make sure the window is enabled in the View menu.[/vc_column_text][vc_row_inner][vc_column_inner width="1/2"][vc_single_image image="19726"][vc_column_text]Figure 2: Bring the Select formatters window into focus.[/vc_column_text][/vc_column_inner][vc_column_inner width="1/2"][vc_single_image image="19727"][vc_column_text]Figure 3: Open the Select formatters window from the View menu.[/vc_column_text][/vc_column_inner][/vc_row_inner][vc_column_text]Remove the default Standard Text Format formatter by selecting it in the list of active formatters and click Remove. If the default formatter is not removed, we would end up with duplicated messages in the output window. Select DBC Formatter from the available formatters and click Use. To configure the newly added DBC formatter, select the formatter in the list of active formatters and click the Options button. Here we can choose what databases to use for the channels configured in the two windows CAN 1 and CAN 2. Press the open button for CAN 1 and select the 'ExampleDatabase.dbc'1 . We deselect Show data since we are not interested to see the full data of the CAN message. Click OK when done. We also add a Direction Filter to the active formatters since we are not interested in both TX and RX messages. Note that the order of active formatters does matter and it is a good practice to do the filtering first. So we move the direction filter to the top of the active formatters by selecting it and click Up.[/vc_column_text][vc_row_inner][vc_column_inner width="1/2"][vc_single_image image="19728"][vc_column_text]Figure 4: Replace the Standard Text Formater with the DBC Formatter in the Active Formatters list[/vc_column_text][/vc_column_inner][vc_column_inner width="1/2"][vc_single_image image="19729"][vc_column_text]Figure 5: The DBC Formatter option window[/vc_column_text][/vc_column_inner][/vc_row_inner][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Fixed positions in CanKing output window"][vc_column_text]When working with database files and signals it is often useful to use the Fixed Positions option in the output window. Instead of showing a scrolling list of messages, each CAN message will be shown in a fixed position with respect to their CAN identifier and new messages will overwrite old messages with the same identifier. Right click in the data area of the output window and select Fixed Positions.[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Configure generation of data"][vc_row_inner][vc_column_inner width="1/2"][vc_column_text]Now it is time to generate some data that matches our selected database with the Traffic Generator (aka CAN Bus Loader). Since the database contains messages with CAN identifiers from 0 to 6 we configure the Traffic Generator to generate messages with the same range of ids. Open the Traffic Generator, which can be found under the Messages menu in the main window, and select the Id tab. In the CAN Identifier frame, set lowest to 0 and highest to 6. Make sure Use extended (29-bit) identifiers is unchecked since our database uses standard identifiers.[/vc_column_text][vc_column_text]Go to the Data tab and select Random data and make sure Random length is unchecked. While we are here, we also go to the Options tab and check the Start automatically on “Start Run” checkbox. This is a convenience feature that will start and stop the traffic generator when the Start Run and Stop buttons in the main window are pressed.[/vc_column_text][/vc_column_inner][vc_column_inner width="1/2"][vc_single_image image="19730"][vc_column_text]Figure 6: Configure the Traffic generator to generate messages with CAN identifiers 0 to 6.[/vc_column_text][/vc_column_inner][/vc_row_inner][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Generate traffic"][vc_column_text]We are now ready to start generating traffic. Press Start run in the main window to get the CAN controllers on-line and the traffic generator to start generating messages.[/vc_column_text][vc_row_inner][vc_column_inner width="1/6"][/vc_column_inner][vc_column_inner width="2/3"][vc_single_image image="19731"][vc_column_text]Figure 7: Resulting output window showing signal values according to selected database.[/vc_column_text][/vc_column_inner][vc_column_inner width="1/6"][/vc_column_inner][/vc_row_inner][vc_column_text]Hopefully this article gave you some insight in the workings of filtering in CanKing. If you have any questions or feedback please feel free to e-mail them to [email protected].[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_separator_raket][vc_column_text] 'ExampleDatabase.dbc' can be downloaded from https://www.kvaser.com/wp-content/uploads/2018/04/exampledatabasedbc.zip.[/vc_column_text][/vc_column][/vc_row] [post_title] => Database formatter in CanKing [post_excerpt] => [post_status] => publish [comment_status] => closed [ping_status] => closed [post_password] => [post_name] => database-formatter-canking [to_ping] => [pinged] => [post_modified] => 2022-10-04 11:38:31 [post_modified_gmt] => 2022-10-04 11:38:31 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?post_type=developer_blog&p=39852 [menu_order] => 0 [post_type] => developer_blog [post_mime_type] => [comment_count] => 0 [filter] => raw ) [5] => WP_Post Object ( [ID] => 39853 [post_author] => 14 [post_date] => 2018-02-22 11:40:12 [post_date_gmt] => 2018-02-22 11:40:12 [post_content] => [vc_row][vc_column][vc_column_text]We have seen in earlier blog articles how to create a DBC database and how to use signals from the database while sending and receiving CAN traffic.1 This time we’ll take a look at how we can use the DBC database to show signals from logged data.[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][vc_header_raket header_type="h3" header="Configure the logger"][vc_column_text]
In order to capture our signals we need to first configure our logger. I have a Kvaser Memorator Pro 5xHS (00778-9) connected to my PC, you should change the EAN number in the code below to match your own device.
[/vc_column_text][vc_code_raket language="python" code="ZnJvbSUyMGNhbmxpYiUyMGltcG9ydCUyMGt2RGV2aWNlJTBBZnJvbSUyMGNhbmxpYiUyMGltcG9ydCUyMGt2YW1lbW9saWJ4bWwlMEElMEElMjMlMjBVc2UlMjAuc3RyaXAlMjglMjklMjB0byUyMHJlbW92ZSUyMGZpcnN0JTIwbmV3bGluZSUyQyUyMG90aGVyd2lzZSUyMHdlJTIwZ2V0JTIwdGhlJTIwZXJyb3IlM0ElMEElMjMlMjBYTUwlMjBkZWNsYXJhdGlvbiUyMGFsbG93ZWQlMjBvbmx5JTIwYXQlMjB0aGUlMjBzdGFydCUyMG9mJTIwdGhlJTIwZG9jdW1lbnQlMEFDT05GSUdfWE1MJTIwJTNEJTIwJTIyJTIyJTIyJTBBJTNDJTNGeG1sJTIwdmVyc2lvbiUzRCUyMjEuMCUyMiUyMCUzRiUzRSUwQSUzQyUyMURPQ1RZUEUlMjBLVkFTRVIlM0UlMEElM0NLVkFTRVIlM0UlMEElMjAlMjAlM0NWRVJTSU9OJTNFMi4wJTNDJTJGVkVSU0lPTiUzRSUwQSUyMCUyMCUzQ0JJTkFSWV9WRVJTSU9OJTNFNi4wJTNDJTJGQklOQVJZX1ZFUlNJT04lM0UlMEElMjAlMjAlM0NTRVRUSU5HUyUzRSUwQSUyMCUyMCUyMCUyMCUzQ01PREUlMjBmaWZvX21vZGUlM0QlMjJOTyUyMiUyMGxvZ19hbGwlM0QlMjJZRVMlMjIlMkYlM0UlMEElMjAlMjAlM0MlMkZTRVRUSU5HUyUzRSUwQSUyMCUyMCUzQ0NBTl9CVVMlM0UlMEElMjAlMjAlMjAlMjAlM0NQQVJBTUVURVJTJTIwYml0cmF0ZSUzRCUyMjEwMDAwMDAlMjIlMjBjaGFubmVsJTNEJTIyMCUyMiUyMHNpbGVudCUzRCUyMllFUyUyMiUyMHNqdyUzRCUyMjElMjIlMjB0c2VnMSUzRCUyMjUlMjIlMjB0c2VnMiUzRCUyMjIlMjIlMkYlM0UlMEElMjAlMjAlMjAlMjAlM0NQQVJBTUVURVJTJTIwYml0cmF0ZSUzRCUyMjEwMDAwMDAlMjIlMjBjaGFubmVsJTNEJTIyMSUyMiUyMHNpbGVudCUzRCUyMllFUyUyMiUyMHNqdyUzRCUyMjElMjIlMjB0c2VnMSUzRCUyMjUlMjIlMjB0c2VnMiUzRCUyMjIlMjIlMkYlM0UlMEElMjAlMjAlM0MlMkZDQU5fQlVTJTNFJTBBJTIwJTIwJTNDVFJJR0dFUkJMT0NLJTJGJTNFJTBBJTIwJTIwJTNDU0NSSVBUUyUyRiUzRSUwQSUzQyUyRktWQVNFUiUzRSUwQSUyMiUyMiUyMi5zdHJpcCUyOCUyOSUwQSUwQSUwQWRlZiUyMGluaXRfY2FyZCUyOGRldiUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMiUyMiUyMkZvcm1hdCUyMGRpc2slMjBvbiUyMGRldmljZSUyMiUyMiUyMiUwQSUyMCUyMCUyMCUyMCUyMyUyME9wZW4lMjB0aGUlMjBkZXZpY2UlMEElMjAlMjAlMjAlMjBkZXYubWVtb09wZW4lMjglMjklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBJbml0aWFsaXplJTIwdGhlJTIwU0QlMjBjYXJkJTIwd2l0aCUyMGRlZmF1bHQlMjB2YWx1ZXMlMEElMjAlMjAlMjAlMjBwcmludCUyOCUyN0Zvcm1hdHRpbmclMjBDYXJkJTIwb24lM0ElNUNuJTI1cyUyNyUyMCUyNSUyMGRldiUyOSUwQSUyMCUyMCUyMCUyMGRldi5tZW1vLmRldmljZUZvcm1hdERpc2slMjglMjklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBDb252ZXJ0JTIwdGhlJTIwWE1MJTIwY29uZmlndXJhdGlvbiUyMHRvJTIwYSUyMGJpbmFyeSUyMGNvbmZpZ3VyYXRpb24lMEElMjAlMjAlMjAlMjBjb25maWdfbGlmJTIwJTNEJTIwa3ZhbWVtb2xpYnhtbC5rdmFYbWxUb0J1ZmZlciUyOENPTkZJR19YTUwlMjklMEElMEElMjAlMjAlMjAlMjAlMjMlMjB3cml0ZSUyMHRoZSUyMGNvbmZpZ3VyYXRpb24lMEElMjAlMjAlMjAlMjBkZXYubWVtby5rbWZXcml0ZUNvbmZpZyUyOGNvbmZpZ19saWYlMjklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBDbG9zZSUyMHRoZSUyMGRldmljZSUwQSUyMCUyMCUyMCUyMGRldi5tZW1vQ2xvc2UlMjglMjklMEElMEElMEFkZWYlMjBtYWluJTI4JTI5JTNBJTBBJTIwJTIwJTIwJTIwJTIzJTIwQ29ubmVjdCUyMHRvJTIwb3VyJTIwS3Zhc2VyJTIwTWVtb3JhdG9yJTIwUHJvJTIwNXhIUyUyMHdpdGglMjBFQU4lMjAwMDc3OC05JTBBJTIwJTIwJTIwJTIwZGV2JTIwJTNEJTIwa3ZEZXZpY2Uua3ZEZXZpY2UlMjhlYW4lM0QlMjI3My0zMDEzMC0wMDc3OC05JTIyJTI5JTBBJTIwJTIwJTIwJTIwaW5pdF9jYXJkJTI4ZGV2JTI5JTBBJTBBJTBBaWYlMjBfX25hbWVfXyUyMCUzRCUzRCUyMCUyN19fbWFpbl9fJTI3JTNBJTBBJTIwJTIwJTIwJTIwbWFpbiUyOCUyOQ=="][vc_column_text]Listing 2: Basic configuration to log everything on channel 0 and 1 at 1000 kbit/s using a Kvaser Memorator Pro 5xHS.[/vc_column_text][vc_column_text]
Running the code in Listing 2 prepares our Kvaser Memorator device by initializing the SD-card and downloading a “log-all” configuration.
[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][vc_header_raket header_type="h3" header="Creating the sample data using framebox"][vc_column_text]
Now we need some data, so why not create a script that generates random data based on the signal definitions available in a given database. In our case we use a database with two messages defined, EngineData and GearBoxInfo, each containing a number of signals (PetrolLevel, EngPower, and so on).
[/vc_column_text][vc_code_raket language="python" code="JTIzJTIwRGVjbGFyZSUyMHRoZSUyMHNpZ25hbCUyMG5hbWUlMjBhbmQlMjB0aGUlMjBuYW1lJTIwb2YlMjB0aGUlMjBtZXNzYWdlJTIwdGhlJTIwc2lnbmFsJTBBJTIzJTIwY2FuJTIwYmUlMjBmb3VuZCUyMGluLiUyMEUuZy4lMjB0aGUlMjBzaWduYWwlMjAlMjdQZXRyb2xMZXZlbCUyNyUyMGNhbiUyMGJlJTIwZm91bmQlMjBpbiUwQSUyMyUyMHRoZSUyMG1lc3NhZ2UlMjAlMjdFbmdpbmVEYXRhJTI3LiUwQVNJR05BTFMlMjAlM0QlMjAlN0IlMEElMjAlMjAlMjAlMjAlMjdQZXRyb2xMZXZlbCUyNyUzQSUyMCUyN0VuZ2luZURhdGElMjclMkMlMEElMjAlMjAlMjAlMjAlMjdFbmdQb3dlciUyNyUzQSUyMCUyN0VuZ2luZURhdGElMjclMkMlMEElMjAlMjAlMjAlMjAlMjdFbmdGb3JjZSUyNyUzQSUyMCUyN0VuZ2luZURhdGElMjclMkMlMEElMjAlMjAlMjAlMjAlMjdJZGxlUnVubmluZyUyNyUzQSUyMCUyN0VuZ2luZURhdGElMjclMkMlMEElMjAlMjAlMjAlMjAlMjdFbmdUZW1wJTI3JTNBJTIwJTI3RW5naW5lRGF0YSUyNyUyQyUwQSUyMCUyMCUyMCUyMCUyN0VuZ1NwZWVkJTI3JTNBJTIwJTI3RW5naW5lRGF0YSUyNyUyQyUwQSUyMCUyMCUyMCUyMCUyN0Vjb01vZGUlMjclM0ElMjAlMjdHZWFyQm94SW5mbyUyNyUyQyUwQSUyMCUyMCUyMCUyMCUyN1NoaWZ0UmVxdWVzdCUyNyUzQSUyMCUyN0dlYXJCb3hJbmZvJTI3JTJDJTBBJTIwJTIwJTIwJTIwJTI3R2VhciUyNyUzQSUyMCUyN0dlYXJCb3hJbmZvJTI3JTJDJTBBJTdE"][vc_column_text]
When we later would like to give a signal a random value, we actually do not care about what message the signal is housed in, we just would like to set a value on a specific signal, whatever message that signal belongs to. The Framebox is our helper class to accomplish this. Given a database, db, we first create a framebox containing our messages mentioned in the SIGNALS definition above. We can then set a signal value through the framebox using framebox.signal('PetrolLevel').phys=35 with confidence that the value will end up in the correct message.2 Let us take a look at the function that is responsible for sending and receiving random signal values using a framebox.
[/vc_column_text][vc_code_raket language="python" code="ZGVmJTIwc2VuZF9yZWNlaXZlX3VzaW5nX2ZyYW1lYm94JTI4ZGIlMkMlMjBxdWFudGl0eSUyQyUyMGNoX3R4JTJDJTIwY2hfcnglMjklM0ElMEElMjAlMjAlMjAlMjAlMjMlMjBDcmVhdGUlMjBmcmFtZWJveCUwQSUyMCUyMCUyMCUyMGZyYW1lYm94JTIwJTNEJTIwa3ZhZGJsaWIuRnJhbWVCb3glMjhkYiUyOSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMEFkZCUyMG91ciUyMG1lc3NhZ2VzJTIwdG8lMjB0aGUlMjBmcmFtZWJveCUwQSUyMCUyMCUyMCUyMGZvciUyMG1zZ19uYW1lJTIwaW4lMjBzZXQlMjhTSUdOQUxTLnZhbHVlcyUyOCUyOSUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZyYW1lYm94LmFkZF9tZXNzYWdlJTI4bXNnX25hbWUlMjklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBSYW5kb21seSUyMGZpbGwlMjBzaWduYWxzJTIwd2l0aCUyMHZhbHVlcyUwQSUyMCUyMCUyMCUyMGZvciUyMGklMjBpbiUyMHJhbmdlJTI4cXVhbnRpdHklMjklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzZXRfcmFuZG9tX2ZyYW1lYm94X3NpZ25hbCUyOGRiJTJDJTIwZnJhbWVib3glMjklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBTZW5kJTIwYWxsJTIwZnJhbWVzJTIwY29udGFpbmVkJTIwaW4lMjB0aGUlMjBmcmFtZWJveCUyMCUyOG9uZSUyMGZyYW1lJTIwZm9yJTIwZWFjaCUyMG1lc3NhZ2UlMjklMEElMjAlMjAlMjAlMjBmb3IlMjBmcmFtZSUyMGluJTIwZnJhbWVib3guZnJhbWVzJTI4JTI5JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwbGV0JTIwdGhlJTIwZGF0YWJhc2UlMjBpbnRlcnByZXQlMjB0aGUlMjBmcmFtZSUyQyUyMGElMjBib3VuZCUyMG1lc3NhZ2UlMjB3aWxsJTIwYmUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjByZXR1cm5lZCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJtc2clMjAlM0QlMjBkYi5pbnRlcnByZXQlMjhmcmFtZSUzRGZyYW1lJTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwcHJpbnQlMjB0aGUlMjBjb250ZW50cyUyMG9mJTIwdGhlJTIwYm91bmQlMjBtZXNzYWdlJTIwdXNpbmclMjBvdXIlMjBvd24lMjBzdHJpbmclMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBjb252ZXJ0ZXIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOCUyN1NlbmRpbmclMjAlMjVzJTVDbiUyNyUyMCUyNSUyMGJtZXNzYWdlX3N0ciUyOGJtc2clMjklMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBzZW5kJTIwdGhlJTIwZnJhbWUlMkMlMjB3YWl0JTIwZm9yJTIwVHglMjBhY2tub3dsZWRnZSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNoX3R4LndyaXRlV2FpdCUyOGZyYW1lJTJDJTIwdGltZW91dCUzRDUwMDAlMjklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBSZWNlaXZlJTIwb3VyJTIwQ0FOJTIwZnJhbWVzJTBBJTIwJTIwJTIwJTIwdHJ5JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwd2hpbGUlMjBUcnVlJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwcmVjZWl2ZSUyMG9uZSUyMGZyYW1lJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZnJhbWUlMjAlM0QlMjBjaF9yeC5yZWFkJTI4dGltZW91dCUzRDUwMCUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMGxldCUyMHRoZSUyMGRhdGFiYXNlJTIwaW50ZXJwcmV0JTIwdGhlJTIwZnJhbWUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBibXNnJTIwJTNEJTIwZGIuaW50ZXJwcmV0JTI4ZnJhbWUlM0RmcmFtZSUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMHByaW50JTIwdGhlJTIwY29udGVudHMlMjBvZiUyMHRoZSUyMGJvdW5kJTIwbWVzc2FnZXMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOCUyN1JlY2VpdmVkJTIwJTI1cyU1Q24lMjclMjAlMjUlMjBibWVzc2FnZV9zdHIlMjhibXNnJTI5JTI5JTBBJTIwJTIwJTIwJTIwJTIzJTIwc3RvcCUyMHdoZW4lMjB3ZSUyMGRpZCUyMG5vdCUyMHJlY2VpdmUlMjBhbnklMjBtb3JlJTIwQ0FOJTIwZnJhbWVzJTBBJTIwJTIwJTIwJTIwZXhjZXB0JTIwY2FubGliLkNhbk5vTXNnJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjglMjJSZWNlaXZlZCUyMGFsbCUyMGZyYW1lcyUyMSUyMiUyOQ=="][vc_column_text]
Given the database DB, we now want to create a random value for a random signal. We do this by first randomly selecting a signal from the SIGNALS definition above and then defer the actual finding of a valid value to the function get_random_value().
[/vc_column_text][vc_code_raket language="python" code="ZGVmJTIwc2V0X3JhbmRvbV9mcmFtZWJveF9zaWduYWwlMjhkYiUyQyUyMGZyYW1lYm94JTI5JTNBJTBBJTIwJTIwJTIwJTIwJTIzJTIwcGljayUyMGElMjBzaWduYWwlMjBuYW1lJTIwYXQlMjByYW5kb20lMEElMjAlMjAlMjAlMjBzaWdfbmFtZSUyMCUzRCUyMHJhbmRvbS5jaG9pY2UlMjhsaXN0JTI4U0lHTkFMUyUyOSUyOSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMGdldCUyMGElMjByYW5kb20lMkMlMjBidXQlMjB2YWxpZCUyQyUyMHZhbHVlJTBBJTIwJTIwJTIwJTIwdmFsdWUlMjAlM0QlMjBnZXRfcmFuZG9tX3ZhbHVlJTI4ZGIlMkMlMjBzaWdfbmFtZSUyOSUwQSUwQSUyMCUyMCUyMCUyMHByaW50JTI4JTIyU2V0dGluZyUyMCUyNXMlMjB0byUyMCUyNXMlMjIlMjAlMjUlMjAlMjhzaWdfbmFtZSUyQyUyMHZhbHVlJTI5JTI5JTBBJTIwJTIwJTIwJTIwJTIzJTIwc2V0JTIwdGhlJTIwc2lnbmFsJTIwdmFsdWUlMjB0aHJvdWdoJTIwb3VyJTIwZnJhbWVib3glMEElMjAlMjAlMjAlMjBmcmFtZWJveC5zaWduYWwlMjhzaWdfbmFtZSUyOS5waHlzJTIwJTNEJTIwdmFsdWU="][vc_column_text]
Later on, we would like to print the contents of bound messages so we add the bmessage_str() function to convert the content of a bound message to a string. The only thing we have to add now is some configuration of the channels. Let us take a look at our complete program before running it.
[/vc_column_text][vc_code_raket language="python" code="aW1wb3J0JTIwcmFuZG9tJTBBZnJvbSUyMGNhbmxpYiUyMGltcG9ydCUyMGNhbmxpYiUwQWZyb20lMjBjYW5saWIlMjBpbXBvcnQlMjBrdmFkYmxpYiUwQSUwQSUyMyUyMERlY2xhcmUlMjB0aGUlMjBzaWduYWwlMjBuYW1lJTIwYW5kJTIwdGhlJTIwbmFtZSUyMG9mJTIwdGhlJTIwbWVzc2FnZSUyMHRoZSUyMHNpZ25hbCUwQSUyMyUyMGNhbiUyMGJlJTIwZm91bmQlMjBpbi4lMjBFLmcuJTIwdGhlJTIwc2lnbmFsJTIwJTI3UGV0cm9sTGV2ZWwlMjclMjBjYW4lMjBiZSUyMGZvdW5kJTIwaW4lMEElMjMlMjB0aGUlMjBtZXNzYWdlJTIwJTI3RW5naW5lRGF0YSUyNy4lMEFTSUdOQUxTJTIwJTNEJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTI3UGV0cm9sTGV2ZWwlMjclM0ElMjAlMjdFbmdpbmVEYXRhJTI3JTJDJTBBJTIwJTIwJTIwJTIwJTI3RW5nUG93ZXIlMjclM0ElMjAlMjdFbmdpbmVEYXRhJTI3JTJDJTBBJTIwJTIwJTIwJTIwJTI3RW5nRm9yY2UlMjclM0ElMjAlMjdFbmdpbmVEYXRhJTI3JTJDJTBBJTIwJTIwJTIwJTIwJTI3SWRsZVJ1bm5pbmclMjclM0ElMjAlMjdFbmdpbmVEYXRhJTI3JTJDJTBBJTIwJTIwJTIwJTIwJTI3RW5nVGVtcCUyNyUzQSUyMCUyN0VuZ2luZURhdGElMjclMkMlMEElMjAlMjAlMjAlMjAlMjdFbmdTcGVlZCUyNyUzQSUyMCUyN0VuZ2luZURhdGElMjclMkMlMEElMjAlMjAlMjAlMjAlMjdFY29Nb2RlJTI3JTNBJTIwJTI3R2VhckJveEluZm8lMjclMkMlMEElMjAlMjAlMjAlMjAlMjdTaGlmdFJlcXVlc3QlMjclM0ElMjAlMjdHZWFyQm94SW5mbyUyNyUyQyUwQSUyMCUyMCUyMCUyMCUyN0dlYXIlMjclM0ElMjAlMjdHZWFyQm94SW5mbyUyNyUyQyUwQSU3RCUwQSUwQSUwQWRlZiUyMG9wZW5fY2hhbm5lbCUyOGNoYW5uZWwlMjklM0ElMEElMjAlMjAlMjAlMjAlMjIlMjIlMjJPcGVuJTIwYSUyMG5ldyUyMGNoYW5uZWwlMjAlMkMlMjBzZXQlMjBiaXRyYXRlJTIwMU1iaXQlMkZzJTIwYW5kJTIwZ28lMjBidXMlMjBvbi4lMjIlMjIlMjIlMEElMjAlMjAlMjAlMjBjaCUyMCUzRCUyMGNhbmxpYi5vcGVuQ2hhbm5lbCUyOGNoYW5uZWwlMkMlMjBjYW5saWIuY2FuT1BFTl9BQ0NFUFRfVklSVFVBTCUyOSUwQSUyMCUyMCUyMCUyMGNoLnNldEJ1c091dHB1dENvbnRyb2wlMjhjYW5saWIuY2FuRFJJVkVSX05PUk1BTCUyOSUwQSUyMCUyMCUyMCUyMGNoLnNldEJ1c1BhcmFtcyUyOGNhbmxpYi5jYW5CSVRSQVRFXzFNJTI5JTBBJTIwJTIwJTIwJTIwY2guYnVzT24lMjglMjklMEElMjAlMjAlMjAlMjByZXR1cm4lMjBjaCUwQSUwQSUwQWRlZiUyMGNsb3NlX2NoYW5uZWwlMjhjaCUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMiUyMiUyMkdvJTIwYnVzJTIwb2ZmJTIwYW5kJTIwY2xvc2UlMjBjaGFubmVsLiUyMiUyMiUyMiUwQSUyMCUyMCUyMCUyMGNoLmJ1c09mZiUyOCUyOSUwQSUyMCUyMCUyMCUyMGNoLmNsb3NlJTI4JTI5JTBBJTBBJTBBZGVmJTIwZ2V0X3JhbmRvbV9ib3VuZF9zaWduYWwlMjhkYiUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMiUyMiUyMkNyZWF0ZSUyMGElMjBibXNnJTJDJTIwcmFuZG9tbHklMjBjaG9vc2luZyUyMGElMjBtZXNzYWdlJTJGc2lnbmFsJTIwcGFpciUyMGZyb20lMjBTSUdOQUxTJTIyJTIyJTIyJTBBJTIwJTIwJTIwJTIwJTIzJTIwcGljayUyMGElMjBzaWduYWwlMjBuYW1lJTIwYXQlMjByYW5kb20lMEElMjAlMjAlMjAlMjBzaWdfbmFtZSUyMCUzRCUyMHJhbmRvbS5jaG9pY2UlMjhsaXN0JTI4U0lHTkFMUyUyOSUyOSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMGdldCUyMHRoZSUyMG1lc3NhZ2UlMjBuYW1lJTBBJTIwJTIwJTIwJTIwbXNnX25hbWUlMjAlM0QlMjBTSUdOQUxTJTVCc2lnX25hbWUlNUQlMEElMEElMjAlMjAlMjAlMjAlMjMlMjBnZXQlMjB0aGUlMjBtZXNzYWdlJTIwZnJvbSUyMG91ciUyMGRhdGFiYXNlJTBBJTIwJTIwJTIwJTIwbXNnJTIwJTNEJTIwZGIuZ2V0X21lc3NhZ2VfYnlfbmFtZSUyOG1zZ19uYW1lJTI5JTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwY3JlYXRlJTIwYSUyMEJvdW5kU2lnbmFsJTJDJTIwY29udGFpbmluZyUyMGFuJTIwZW1wdHklMjBmcmFtZSUwQSUyMCUyMCUyMCUyMCUyMyUyMHdpdGglMjBjb3JyZWN0JTIwSUQlMjBhbmQlMjBETEMlMEElMjAlMjAlMjAlMjBic2lnJTIwJTNEJTIwbXNnLmdldF9zaWduYWxfYnlfbmFtZSUyOHNpZ19uYW1lJTI5LmJpbmQlMjglMjklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBnZXQlMjB0aGUlMjBzaWduYWwlMkMlMjB3aGljaCUyMGhvbGRzJTIwdGhlJTIwZGVmaW5pdGlvbnMlMEElMjAlMjAlMjAlMjBzaWclMjAlM0QlMjBic2lnLnNpZ25hbCUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMGdldCUyMHRoZSUyMHNpZ25hbCUyN3MlMjBsaW1pdHMlMEElMjAlMjAlMjAlMjBsaW1pdHMlMjAlM0QlMjBzaWcubGltaXRzJTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwY3JlYXRlJTIwYSUyMHZhbHVlJTIwJTI4d2l0aCUyMG1hbnklMjBkZWNpbWFscyUyOSUyMHdpdGhpbiUyMHRoZSUyMGxpbWl0cyUwQSUyMCUyMCUyMCUyMHZhbHVlJTIwJTNEJTIwcmFuZG9tLnVuaWZvcm0lMjhsaW1pdHMubWluJTJDJTIwbGltaXRzLm1heCUyOSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMHJvdW5kJTIwdmFsdWUlMjBkZXBlbmRpbmclMjBvbiUyMHR5cGUuLi4lMEElMjAlMjAlMjAlMjBpZiUyMHNpZy50eXBlJTIwaXMlMjBrdmFkYmxpYi5TaWduYWxUeXBlLlVOU0lHTkVEJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwLi4ucmVtb3ZlJTIwZGVjaW1hbHMlMjBpZiUyMHRoZSUyMHNpZ25hbCUyMHdhcyUyMG9mJTIwdHlwZSUyMHVuc2lnbmVkJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdmFsdWUlMjAlM0QlMjBpbnQlMjhyb3VuZCUyOHZhbHVlJTI5JTI5JTBBJTIwJTIwJTIwJTIwZWxzZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMC4uLm90aGVyd2lzZSUyQyUyMHJvdW5kJTIwdG8lMjBnZXQlMjBvbmx5JTIwb25lJTIwZGVjaW1hbCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHZhbHVlJTIwJTNEJTIwcm91bmQlMjh2YWx1ZSUyQyUyMDElMjklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBOb3clMjB3ZSUyMHdvdWxkJTIwbGlrZSUyMHRvJTIwc2V0JTIwdGhlJTIwcGh5c2ljYWwlMjB2YWx1ZSUwQSUyMCUyMCUyMCUyMGJzaWcucGh5cyUyMCUzRCUyMHZhbHVlJTBBJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwYnNpZyUwQSUwQSUwQWRlZiUyMGJzaWduYWxfc3RyJTI4YnNpZ25hbCUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMiUyMiUyMkNyZWF0ZSUyMGElMjBuaWNlJTIwbG9va2luZyUyMHN0cmluZyUyMG9mJTIwdGhlJTIwY29udGVudHMlMjBvZiUyMHRoZSUyMGJvdW5kJTIwc2lnbmFsJTIyJTIyJTIyJTBBJTIwJTIwJTIwJTIwdmFsdWUlMjAlM0QlMjBic2lnbmFsLnBoeXMlMEElMjAlMjAlMjAlMjBpZiUyMGJzaWduYWwuc2lnbmFsLnR5cGUlMjBpcyUyMGt2YWRibGliLlNpZ25hbFR5cGUuVU5TSUdORUQlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjByZW1vdmUlMjBkZWNpbWFscyUyMGlmJTIwdGhlJTIwc2lnbmFsJTIwd2FzJTIwb2YlMjB0eXBlJTIwdW5zaWduZWQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB2YWx1ZSUyMCUzRCUyMGludCUyOHZhbHVlJTI5JTBBJTIwJTIwJTIwJTIwZWxzZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMG90aGVyd2lzZSUyQyUyMHJvdW5kJTIwdG8lMjBnZXQlMjBvbmx5JTIwb25lJTIwZGVjaW1hbCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHZhbHVlJTIwJTNEJTIwcm91bmQlMjh2YWx1ZSUyQyUyMDElMjklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBjcmVhdGUlMjBhZGp1c3RlZCUyMHN0cmluZ3MlMjBmb3IlMjBwcmV0dGllciUyMHByaW50aW5nJTBBJTIwJTIwJTIwJTIwbmFtZSUyMCUzRCUyMHN0ciUyOGJzaWduYWwubmFtZSUyOS5yanVzdCUyODExJTI5JTBBJTIwJTIwJTIwJTIwdmFsJTIwJTNEJTIwc3RyJTI4dmFsdWUlMjkucmp1c3QlMjg1JTI5JTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwJTI3JTI1MTJzJTNBJTIwJTI1M3MlMjAlMjVzJTI3JTIwJTI1JTIwJTI4bmFtZSUyQyUyMHZhbCUyQyUyMGJzaWduYWwudW5pdCUyOSUwQSUwQSUwQWRlZiUyMGJtZXNzYWdlX3N0ciUyOGJtc2clMjklM0ElMEElMjAlMjAlMjAlMjAlMjIlMjIlMjJDcmVhdGUlMjBhJTIwbmljZSUyMGxvb2tpbmclMjBzdHJpbmclMjBvZiUyMHRoZSUyMGNvbnRlbnRzJTIwb2YlMjB0aGUlMjBib3VuZCUyMG1lc3NhZ2UlMjIlMjIlMjIlMEElMjAlMjAlMjAlMjB0eHQlMjAlM0QlMjAlMjclMjclMEElMjAlMjAlMjAlMjBmb3IlMjBic2lnJTIwaW4lMjBibXNnJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdHh0JTIwJTJCJTNEJTIwJTI3JTVDbiU1Q3QlMjVzJTI3JTIwJTI1JTIwYnNpZ25hbF9zdHIlMjhic2lnJTI5JTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwdHh0JTBBJTBBJTBBZGVmJTIwZ2V0X3JhbmRvbV92YWx1ZSUyOGRiJTJDJTIwc2lnX25hbWUlMjklM0ElMEElMjAlMjAlMjAlMjAlMjMlMjBnZXQlMjB0aGUlMjBtZXNzYWdlJTIwbmFtZSUwQSUyMCUyMCUyMCUyMG1zZ19uYW1lJTIwJTNEJTIwU0lHTkFMUyU1QnNpZ19uYW1lJTVEJTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwZ2V0JTIwdGhlJTIwbWVzc2FnZSUyMGZyb20lMjBvdXIlMjBkYXRhYmFzZSUwQSUyMCUyMCUyMCUyMG1zZyUyMCUzRCUyMGRiLmdldF9tZXNzYWdlX2J5X25hbWUlMjhtc2dfbmFtZSUyOSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMGdldCUyMHRoZSUyMHNpZ25hbCUyQyUyMHdoaWNoJTIwaG9sZHMlMjB0aGUlMjBkZWZpbml0aW9ucyUwQSUyMCUyMCUyMCUyMHNpZyUyMCUzRCUyMG1zZy5nZXRfc2lnbmFsX2J5X25hbWUlMjhzaWdfbmFtZSUyOSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMGdldCUyMHRoZSUyMHNpZ25hbCUyN3MlMjBsaW1pdHMlMEElMjAlMjAlMjAlMjBsaW1pdHMlMjAlM0QlMjBzaWcubGltaXRzJTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwY3JlYXRlJTIwYSUyMHZhbHVlJTIwJTI4d2l0aCUyMG1hbnklMjBkZWNpbWFscyUyOSUyMHdpdGhpbiUyMHRoZSUyMGxpbWl0cyUwQSUyMCUyMCUyMCUyMHZhbHVlJTIwJTNEJTIwcmFuZG9tLnVuaWZvcm0lMjhsaW1pdHMubWluJTJDJTIwbGltaXRzLm1heCUyOSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMHJvdW5kJTIwdmFsdWUlMjBkZXBlbmRpbmclMjBvbiUyMHR5cGUuLi4lMEElMjAlMjAlMjAlMjBpZiUyMCUyOHNpZy50eXBlJTIwaXMlMjBrdmFkYmxpYi5TaWduYWxUeXBlLlVOU0lHTkVEJTIwb3IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzaWcudHlwZSUyMGlzJTIwa3ZhZGJsaWIuU2lnbmFsVHlwZS5TSUdORUQlMjklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjAuLi5yZW1vdmUlMjBkZWNpbWFscyUyMGlmJTIwdGhlJTIwc2lnbmFsJTIwd2FzJTIwb2YlMjB0eXBlJTIwdW5zaWduZWQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB2YWx1ZSUyMCUzRCUyMGludCUyOHJvdW5kJTI4dmFsdWUlMjklMjklMEElMjAlMjAlMjAlMjBlbHNlJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwLi4ub3RoZXJ3aXNlJTJDJTIwcm91bmQlMjB0byUyMGdldCUyMG9ubHklMjBvbmUlMjBkZWNpbWFsJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdmFsdWUlMjAlM0QlMjByb3VuZCUyOHZhbHVlJTJDJTIwMSUyOSUwQSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMHZhbHVlJTBBJTBBJTBBZGVmJTIwc2V0X3JhbmRvbV9mcmFtZWJveF9zaWduYWwlMjhkYiUyQyUyMGZyYW1lYm94JTI5JTNBJTBBJTIwJTIwJTIwJTIwJTIzJTIwcGljayUyMGElMjBzaWduYWwlMjBuYW1lJTIwYXQlMjByYW5kb20lMEElMjAlMjAlMjAlMjBzaWdfbmFtZSUyMCUzRCUyMHJhbmRvbS5jaG9pY2UlMjhsaXN0JTI4U0lHTkFMUyUyOSUyOSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMGdldCUyMGElMjByYW5kb20lMkMlMjBidXQlMjB2YWxpZCUyQyUyMHZhbHVlJTBBJTIwJTIwJTIwJTIwdmFsdWUlMjAlM0QlMjBnZXRfcmFuZG9tX3ZhbHVlJTI4ZGIlMkMlMjBzaWdfbmFtZSUyOSUwQSUwQSUyMCUyMCUyMCUyMHByaW50JTI4JTIyU2V0dGluZyUyMCUyNXMlMjB0byUyMCUyNXMlMjIlMjAlMjUlMjAlMjhzaWdfbmFtZSUyQyUyMHZhbHVlJTI5JTI5JTBBJTIwJTIwJTIwJTIwJTIzJTIwc2V0JTIwdGhlJTIwc2lnbmFsJTIwdmFsdWUlMjB0aHJvdWdoJTIwb3VyJTIwZnJhbWVib3glMEElMjAlMjAlMjAlMjBmcmFtZWJveC5zaWduYWwlMjhzaWdfbmFtZSUyOS5waHlzJTIwJTNEJTIwdmFsdWUlMEElMEElMEFkZWYlMjBzZW5kX3JlY2VpdmVfdXNpbmdfZnJhbWVib3glMjhkYiUyQyUyMHF1YW50aXR5JTJDJTIwY2hfdHglMkMlMjBjaF9yeCUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMyUyMENyZWF0ZSUyMGZyYW1lYm94JTBBJTIwJTIwJTIwJTIwZnJhbWVib3glMjAlM0QlMjBrdmFkYmxpYi5GcmFtZUJveCUyOGRiJTI5JTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwQWRkJTIwb3VyJTIwbWVzc2FnZXMlMjB0byUyMHRoZSUyMGZyYW1lYm94JTBBJTIwJTIwJTIwJTIwZm9yJTIwbXNnX25hbWUlMjBpbiUyMHNldCUyOFNJR05BTFMudmFsdWVzJTI4JTI5JTI5JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZnJhbWVib3guYWRkX21lc3NhZ2UlMjhtc2dfbmFtZSUyOSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMFJhbmRvbWx5JTIwZmlsbCUyMHNpZ25hbHMlMjB3aXRoJTIwdmFsdWVzJTBBJTIwJTIwJTIwJTIwZm9yJTIwaSUyMGluJTIwcmFuZ2UlMjhxdWFudGl0eSUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNldF9yYW5kb21fZnJhbWVib3hfc2lnbmFsJTI4ZGIlMkMlMjBmcmFtZWJveCUyOSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMFNlbmQlMjBhbGwlMjBmcmFtZXMlMjBjb250YWluZWQlMjBpbiUyMHRoZSUyMGZyYW1lYm94JTIwJTI4b25lJTIwZnJhbWUlMjBmb3IlMjBlYWNoJTIwbWVzc2FnZSUyOSUwQSUyMCUyMCUyMCUyMGZvciUyMGZyYW1lJTIwaW4lMjBmcmFtZWJveC5mcmFtZXMlMjglMjklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBsZXQlMjB0aGUlMjBkYXRhYmFzZSUyMGludGVycHJldCUyMHRoZSUyMGZyYW1lJTJDJTIwYSUyMGJvdW5kJTIwbWVzc2FnZSUyMHdpbGwlMjBiZSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMHJldHVybmVkJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYm1zZyUyMCUzRCUyMGRiLmludGVycHJldCUyOGZyYW1lJTNEZnJhbWUlMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBwcmludCUyMHRoZSUyMGNvbnRlbnRzJTIwb2YlMjB0aGUlMjBib3VuZCUyMG1lc3NhZ2UlMjB1c2luZyUyMG91ciUyMG93biUyMHN0cmluZyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMGNvbnZlcnRlciUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50JTI4JTI3U2VuZGluZyUyMCUyNXMlNUNuJTI3JTIwJTI1JTIwYm1lc3NhZ2Vfc3RyJTI4Ym1zZyUyOSUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMHNlbmQlMjB0aGUlMjBmcmFtZSUyQyUyMHdhaXQlMjBmb3IlMjBUeCUyMGFja25vd2xlZGdlJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY2hfdHgud3JpdGVXYWl0JTI4ZnJhbWUlMkMlMjB0aW1lb3V0JTNENTAwMCUyOSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMFJlY2VpdmUlMjBvdXIlMjBDQU4lMjBmcmFtZXMlMEElMjAlMjAlMjAlMjB0cnklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB3aGlsZSUyMFRydWUlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjByZWNlaXZlJTIwb25lJTIwZnJhbWUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmcmFtZSUyMCUzRCUyMGNoX3J4LnJlYWQlMjh0aW1lb3V0JTNENTAwJTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwbGV0JTIwdGhlJTIwZGF0YWJhc2UlMjBpbnRlcnByZXQlMjB0aGUlMjBmcmFtZSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJtc2clMjAlM0QlMjBkYi5pbnRlcnByZXQlMjhmcmFtZSUzRGZyYW1lJTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwcHJpbnQlMjB0aGUlMjBjb250ZW50cyUyMG9mJTIwdGhlJTIwYm91bmQlMjBtZXNzYWdlcyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50JTI4JTI3UmVjZWl2ZWQlMjAlMjVzJTVDbiUyNyUyMCUyNSUyMGJtZXNzYWdlX3N0ciUyOGJtc2clMjklMjklMEElMjAlMjAlMjAlMjAlMjMlMjBzdG9wJTIwd2hlbiUyMHdlJTIwZGlkJTIwbm90JTIwcmVjZWl2ZSUyMGFueSUyMG1vcmUlMjBDQU4lMjBmcmFtZXMlMEElMjAlMjAlMjAlMjBleGNlcHQlMjBjYW5saWIuQ2FuTm9Nc2clM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOCUyMlJlY2VpdmVkJTIwYWxsJTIwZnJhbWVzJTIxJTIyJTI5JTBBJTBBJTBBZGVmJTIwbWFpbiUyOCUyOSUzQSUwQSUyMCUyMCUyMCUyMHByaW50JTI4JTIya3ZhZGJsaWIlMjB2JTI1cyUyMiUyMCUyNSUyMGt2YWRibGliLmRsbHZlcnNpb24lMjglMjklMjklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBvcGVuJTIwdGhlJTIwZGF0YWJhc2UlMjB3ZSUyMHdvdWxkJTIwbGlrZSUyMHRvJTIwdXNlJTBBJTIwJTIwJTIwJTIwZGIlMjAlM0QlMjBrdmFkYmxpYi5EYmMlMjhmaWxlbmFtZSUzRCUyN2VuZ2luZV9leGFtcGxlLmRiYyUyNyUyOSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyME9wZW4lMjBhbmQlMjBzZXR1cCUyMGNoYW5uZWxzJTBBJTIwJTIwJTIwJTIwY2gwJTIwJTNEJTIwb3Blbl9jaGFubmVsJTI4MCUyOSUwQSUyMCUyMCUyMCUyMGNoMSUyMCUzRCUyMG9wZW5fY2hhbm5lbCUyODElMjklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBMb29wJTIwdGhlJTIwc2VuZGluZyUyMHR3aWNlJTIwc28lMjB3ZSUyMHNlbmQlMjBmb3VyJTIwQ0FOJTIwZnJhbWVzJTIwaW4lMjB0b3RhbCUwQSUyMCUyMCUyMCUyMGZvciUyMGklMjBpbiUyMHJhbmdlJTI4MiUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMHF1YW50aXR5JTIwc3BlY2lmaWVzJTIwaG93JTIwbWFueSUyMHRpbWUlMjB3ZSUyMHNob3VsZCUyMHNldCUyMGElMjByYW5kb20lMjB2YWx1ZSUyMG9uJTIwYSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMHJhbmRvbSUyMHNpZ25hbCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNlbmRfcmVjZWl2ZV91c2luZ19mcmFtZWJveCUyOGRiJTNEZGIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBxdWFudGl0eSUzRDIwJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY2hfdHglM0RjaDAlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjaF9yeCUzRGNoMSUyOSUwQSUyMCUyMCUyMCUyMGNsb3NlX2NoYW5uZWwlMjhjaDAlMjklMEElMjAlMjAlMjAlMjBjbG9zZV9jaGFubmVsJTI4Y2gxJTI5JTBBJTBBJTBBaWYlMjBfX25hbWVfXyUyMCUzRCUzRCUyMCUyN19fbWFpbl9fJTI3JTNBJTBBJTIwJTIwJTIwJTIwbWFpbiUyOCUyOQ=="][vc_column_text]
After arming our logger device by applying CAN power and disconnecting USB, we can now finally run the program on a second device that is connected to the same CAN bus (I used a Kvaser USBcan Pro) and note that the sent and received signals are identical!
[/vc_column_text][vc_code_raket language="t" code="a3ZhZGJsaWIlMjB2OC4yMi4zNjAlMEFTZXR0aW5nJTIwRW5nU3BlZWQlMjB0byUyMDY3NzglMEFTZXR0aW5nJTIwRW5nRm9yY2UlMjB0byUyMDI1MCUwQSUyMCUyMCUzQSUwQVNlbmRpbmclMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBFY29Nb2RlJTNBJTIwJTIwJTIwJTIwJTIwMSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMFNoaWZ0UmVxdWVzdCUzQSUyMCUyMCUyMCUyMCUyMDAlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBHZWFyJTNBJTIwJTIwJTIwJTIwJTIwMiUwQSUwQVNlbmRpbmclMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBQZXRyb2xMZXZlbCUzQSUyMCUyMCUyMCUyMCUyMDAlMjBsJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwRW5nUG93ZXIlM0ElMjAlMjAlMjAlMjA2MiUyMGtXJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwRW5nRm9yY2UlM0ElMjAlMjAlMjAyMjMlMjBOJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwSWRsZVJ1bm5pbmclM0ElMjAlMjAlMjAlMjAlMjAxJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwRW5nVGVtcCUzQSUyMCUyMCUyMCUyMCUyMDYlMjBkZWdDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwRW5nU3BlZWQlM0ElMjAlMjA2Nzc4JTIwcnBtJTBBJTBBUmVjZWl2ZWQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBFY29Nb2RlJTNBJTIwJTIwJTIwJTIwJTIwMSUyMCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMFNoaWZ0UmVxdWVzdCUzQSUyMCUyMCUyMCUyMCUyMDAlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBHZWFyJTNBJTIwJTIwJTIwJTIwJTIwMiUwQSUwQVJlY2VpdmVkJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwUGV0cm9sTGV2ZWwlM0ElMjAlMjAlMjAlMjAlMjAwJTIwbCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMEVuZ1Bvd2VyJTNBJTIwJTIwJTIwJTIwNjIlMjBrVyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMEVuZ0ZvcmNlJTNBJTIwJTIwJTIwMjIzJTIwTiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMElkbGVSdW5uaW5nJTNBJTIwJTIwJTIwJTIwJTIwMSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMEVuZ1RlbXAlM0ElMjAlMjAlMjAlMjAlMjA2JTIwZGVnQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMEVuZ1NwZWVkJTNBJTIwJTIwNjc3OCUyMHJwbSUwQSUyMCUyMCUzQSUwQVJlY2VpdmVkJTIwYWxsJTIwZnJhbWVzJTIx"][/vc_column][/vc_row][vc_row disable_element="yes"][vc_column][vc_column_text]The next step is to use our previously generated bound signal, print the contents and send it on our transmit channel (ch_tx). We also read it as an incoming frame from our receiving channel (ch_rx) and prints the contents to see that it matches what we sent.[/vc_column_text][vc_code_raket language="python" code="YnNpZzAlMjAlM0QlMjBnZXRfcmFuZG9tX2JvdW5kX3NpZ25hbCUyOGRiJTI5JTBBcHJpbnQlMjAlMjglRTIlODAlOTlTZW5kaW5nJTIwJTI1cyUyMCVFMiU4MCU5OSUyMCUyNSUyMGJzaWduYWxfc3RyJTI4YnNpZzAlMjklMjklMEElMEElMjMlMjBzZW5kJTIwZnJhbWUlMEFjaF90eC53cml0ZSUyOGJzaWcwLmZyYW1lJTI5JTBBJTBBJTIzJTIwcmVhZCUyMGZyYW1lJTBBZnJhbWUlMjAlM0QlMjBjaF9yeC5yZWFkJTI4dGltZW91dCUzRDEwMCUyOSUwQWJtc2cxJTIwJTNEJTIwZGIuaW50ZXJwcmV0JTI4ZnJhbWUlM0RmcmFtZSUyOSUwQXByaW50JTI4JUUyJTgwJTk5UmVjZWl2aW5nJTIwJTI1cyVFMiU4MCU5OSUyMCUyNSUyMGJtZXNzYWdlX3N0ciUyOGJtc2cxJTI5JTI5JTBB"][vc_column_text]To print a bound message we actually just loop through all contained bound signals and print those.[/vc_column_text][vc_code_raket language="python" code="ZGVmJTIwYm1lc3NhZ2Vfc3RyJTI4Ym1zZyUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMiVFMiU4MCU5RCVFMiU4MCU5RENyZWF0ZSUyMGElMjBuaWNlJTIwbG9va2luZyUyMHN0cmluZyUyMG9mJTIwdGhlJTIwY29udGVudHMlMjBvZiUyMHRoZSUyMGJvdW5kJTIwbWVzc2FnZSVFMiU4MCU5RCVFMiU4MCU5RCVFMiU4MCU5RCUwQSUyMCUyMCUyMCUyMHR4dCUyMCUzRCUyMCVFMiU4MCU5OSVFMiU4MCU5OSUwQSUyMCUyMCUyMCUyMGZvciUyMGJzaWclMjBpbiUyMGJtc2clM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB0eHQlMjAlMkIlM0QlMjAlRTIlODAlOTklMjVzJUUyJTgwJTk5JTIwJTI1JTIwYnNpZ25hbF9zdHIlMjhic2lnJTI5JTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwdHh0JTBB"][vc_column_text]The only thing we have to add now is some configuration of the channels. Let us take a look at our complete program before running it.[/vc_column_text][vc_code_raket language="python" code="aW1wb3J0JTIwcmFuZG9tJTBBZnJvbSUyMGNhbmxpYiUyMGltcG9ydCUyMGNhbmxpYiUwQWZyb20lMjBjYW5saWIlMjBpbXBvcnQlMjBrdmFkYmxpYiUwQSUwQSUwQSUyMyUyMGRlY2xhcmUlMjBtZXNzYWdlcyUyMGFuZCUyMG9uZSUyMHNpZ25hbCUyMGluJTIwZWFjaCUyMG1lc3NhZ2UlMEFTSUdOQUxTJTIwJTNEJTIwJTdCJTIwJUUyJTgwJTk5TElNXzAwMiVFMiU4MCU5OSUyMCUzQSUyMCVFMiU4MCU5OUxvYWQlMjAlRTIlODAlOTklMjAlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlRTIlODAlOTlFQ01fMDA0JUUyJTgwJTk5JTIwJTNBJTIwJUUyJTgwJTk5RnVlbCUyMCVFMiU4MCU5OSUyMCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCVFMiU4MCU5OUVDTV8wMDMlRTIlODAlOTklMjAlM0ElMjAlRTIlODAlOTlFbmdpbmVUZW1wJTIwJUUyJTgwJTk5JTIwJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJUUyJTgwJTk5RUNNXzAwMSVFMiU4MCU5OSUyMCUzQSUyMCVFMiU4MCU5OUVuZ2luZVNwZWVkJTIwJUUyJTgwJTk5JTdEJTBBJTBBJTBBZGVmJTIwb3Blbl9jaGFubmVsJTI4Y2hhbm5lbCUyOSUyMCUzQSUwQSUyMCUyMCUyMCUyMCVFMiU4MCU5RCVFMiU4MCU5RCVFMiU4MCU5RE9wZW4lMjBhJTIwbmV3JTIwY2hhbm5lbCUyMCUyQyUyMHNldCUyMGJpdHJhdGUlMjAxTWJpdCUyRnMlMjBhbmQlMjBnbyUyMGJ1cyUyMG9uLiUyMCVFMiU4MCU5RCVFMiU4MCU5RCVFMiU4MCU5RCUwQSUyMCUyMCUyMCUyMGNoJTIwJTNEJTIwY2FubGliJTIwLiUyMG9wZW5DaGFubmVsJTI4Y2hhbm5lbCUyMCUyQyUyMGNhbmxpYiUyMC5jYW5PUEVOX0FDQ0VQVF9WSVJUVUFMJTI5JTBBJTIwJTIwJTIwJTIwY2glMjAuJTIwc2V0QnVzT3V0cHV0Q29udHJvbCUyOCUyMGNhbmxpYiUyMC5jYW5EUklWRVJfTk9STUFMJTI5JTBBJTIwJTIwJTIwJTIwY2glMjAuJTIwc2V0QnVzUGFyYW1zJTI4JTIwY2FubGliJTIwLmNhbkJJVFJBVEVfMU0lMjklMEElMjAlMjAlMjAlMjBjaCUyMC5idXNPbiUyOCUyOSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMGNoJTBBJTBBJTBBZGVmJTIwY2xvc2VfY2hhbm5lbCUyOGNoJTI5JTIwJTNBJTBBJTIwJTIwJTIwJTIwJUUyJTgwJTlEJUUyJTgwJTlEJUUyJTgwJTlER28lMjBidXMlMjBvZmYlMjBhbmQlMjBjbG9zZSUyMGNoYW5uZWwlMjAuJTIwJUUyJTgwJTlEJUUyJTgwJTlEJUUyJTgwJTlEJTBBJTIwJTIwJTIwJTIwY2glMjAuJTIwYnVzT2ZmJTIwJTI4JTI5JTBBJTIwJTIwJTIwJTIwY2glMjAuJTIwY2xvc2UlMjAlMjglMjklMEElMEElMEFkZWYlMjBnZXRfcmFuZG9tX2JvdW5kX3NpZ25hbCUyOGRiJTI5JTIwJTNBJTBBJTIwJTIwJTIwJTIwJUUyJTgwJTlEJUUyJTgwJTlEJUUyJTgwJTlEQ3JlYXRlJTIwYSUyMGJtc2clMkMlMjByYW5kb21seSUyMGNob29zaW5nJTIwYSUyMG1lc3NhZ2UlMkZzaWduYWwlMjBwYWlyJTIwZnJvbSUyMFNJR05BTFMlRTIlODAlOUQlRTIlODAlOUQlRTIlODAlOUQlMEElMjAlMjAlMjAlMjAlMjMlMjBwaWNrJTIwYSUyMG1lc3NhZ2UlMjBuYW1lJTIwYXQlMjByYW5kb20lMEElMjAlMjAlMjAlMjBtc2dfbmFtZSUyMCUzRCUyMHJhbmRvbS4lMjBjaG9pY2UlMjAlMjglMjBsJTIwaSUyMHMlMjB0JTIwJTI4U0lHTkFMUyUyOSUyMCUyOSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMGdldCUyMHRoZSUyMG1lc3NhZ2UlMjBmcm9tJTIwb3VyJTIwZGF0YWJhc2UlMEElMjAlMjAlMjAlMjBtc2clMjAlM0QlMjBkYi5nZXRfbWVzc2FnZV9ieV9uYW1lJTI4bXNnX25hbWUlMjklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBnZXQlMjB0aGUlMjBzaWduYWwlMjBjb250YWluZWQlMjBpbiUyMHRoZSUyMG1lc3NhZ2UlMjBhbmQlMEElMjAlMjAlMjAlMjAlMjMlMjBjcmVhdGUlMjBhJTIwQm91bmRTaWduYWwlMjAlMkMlMjBjb250YWluaW5nJTIwYW4lMjBlbXB0eSUyMGZyYW1lJTBBJTIwJTIwJTIwJTIwJTIzJTIwd2l0aCUyMGNvcnJlY3QlMjBJRCUyMGFuZCUyMERMQyUwQSUyMCUyMCUyMCUyMHNpZ19uYW1lJTIwJTNEJTIwU0lHTkFMUyU1Qm1zZ19uYW1lJTVEJTBBJTIwJTIwJTIwJTIwYnNpZyUyMCUzRCUyMG1zZy5nZXRfc2lnbmFsX2J5X25hbWUlMjhzaWdfbmFtZSUyOSUyMC4lMjBiaW5kJTIwJTI4JTI5JTBBJTIwJTIwJTIwJTIwJTIzJTIwZ2V0JTIwdGhlJTIwc2lnbmFsJTIwJTJDJTIwd2hpY2glMjBob2xkcyUyMHRoZSUyMGRlZmluaXRpb25zJTBBJTIwJTIwJTIwJTIwc2lnJTIwJTNEJTIwYnNpZyUyMC4lMjBzaWduYWwlMEElMEElMjAlMjAlMjAlMjAlMjMlMjBnZXQlMjB0aGUlMjBzaWduYWwlMjAlRTIlODAlOTklMjBzJTIwbGltaXRzJTBBJTIwJTIwJTIwJTIwbGltaXRzJTIwJTNEJTIwc2lnJTIwLiUyMGxpbWl0cyUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMGNyZWF0ZSUyMGElMjB2YWx1ZSUyMCUyOHdpdGglMjBtYW55JTIwZGVjaW1hbHMlMjklMjB3aXRoaW4lMjB0aGUlMjBsaW1pdHMlMEElMjAlMjAlMjAlMjB2YWx1ZSUyMCUzRCUyMHJhbmRvbS4lMjB1bmlmb3JtJTI4JTIwbGltaXRzJTIwLm1pbiUyQyUyMGxpbWl0cyUyMC5tYXglMjklMEElMEElMjAlMjAlMjAlMjAlMjMlMjByb3VuZCUyMHZhbHVlJTIwZGVwZW5kaW5nJTIwb24lMjB0eXBlJTIwLiUyMC4lMjAuJTBBJTIwJTIwJTIwJTIwaWYlMjBzaWclMjAuJTIwdHlwZSUyMGklMjBzJTIwa3ZhZGJsaWIlMjAuJTIwU2lnbmFsVHlwZSUyMC5VTlNJR05FRCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMC4lMjAuJTIwLiUyMHJlbW92ZSUyMGRlY2ltYWxzJTIwaSUyMGYlMjB0aGUlMjBzaWduYWwlMjB3YXMlMjBvZiUyMHR5cGUlMjB1bnNpZ25lZCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHZhbHVlJTIwJTNEJTIwaW50JTIwJTI4dmFsdWUlMjklMEElMjAlMjAlMjAlMjBlbHNlJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwLiUyMC4lMjAuJTIwb3RoZXJ3aXNlJTIwJTJDJTIwcm91bmQlMjB0byUyMGdldCUyMG9ubHklMjBvbmUlMjBkZWNpbWFsJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdmFsdWUlMjAlM0QlMjByb3VuZCUyOHZhbHVlJTIwJTJDJTIwMSUyOSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyME5vdyUyMHdlJTIwd291bGQlMjBsaWtlJTIwdG8lMjBzZXQlMjB0aGUlMjBwaHlzaWNhbCUyMHZhbHVlJTBBJTIwJTIwJTIwJTIwYnNpZyUyMC4lMjBwaHlzJTIwJTNEJTIwdmFsdWUlMEElMEElMjAlMjAlMjAlMjByZXR1cm4lMjBic2lnJTBBJTBBJTBBZGVmJTIwYnNpZ25hbF9zdHIlMjAlMjglMjBic2lnbmFsJTIwJTI5JTIwJTNBJTBBJTIwJTIwJTIwJTIwJUUyJTgwJTlEJUUyJTgwJTlEJUUyJTgwJTlEQ3JlYXRlJTIwYSUyMG5pY2UlMjBsb29raW5nJTIwc3RyaW5nJTIwb2YlMjB0aGUlMjBjb250ZW50cyUyMG9mJTIwdGhlJTIwYm91bmQlMjBzaWduYWwlMjAlRTIlODAlOUQlRTIlODAlOUQlRTIlODAlOUQlMEElMjAlMjAlMjAlMjB2YWx1ZSUyMCUzRCUyMGJzaWduYWwlMjAuJTIwcGh5cyUwQSUyMCUyMCUyMCUyMGlmJTIwYnNpZ25hbCUyMC4lMjBzaWduYWwlMjAuJTIwdHlwZSUyMGklMjBzJTIwa3ZhZGJsaWIlMjAuJTIwU2lnbmFsVHlwZSUyMC5VTlNJR05FRCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMHJlbW92ZSUyMGRlY2ltYWxzJTIwaSUyMGYlMjB0aGUlMjBzaWduYWwlMjB3YXMlMjBvZiUyMHR5cGUlMjB1bnNpZ25lZCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHZhbHVlJTIwJTNEJTIwaW50JTIwJTI4dmFsdWUlMjklMEElMjAlMjAlMjAlMjBlbHNlJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwb3RoZXJ3aXNlJTIwJTJDJTIwcm91bmQlMjB0byUyMGdldCUyMG9ubHklMjBvbmUlMjBkZWNpbWFsJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdmFsdWUlMjAlM0QlMjByb3VuZCUyOHZhbHVlJTIwJTJDJTIwMSUyOSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMGNyZWF0ZSUyMGFkanVzdGVkJTIwc3RyaW5ncyUyMGZvciUyMHByZXR0aWVyJTIwcHJpbnRpbmclMEElMjAlMjAlMjAlMjBuYW1lJTIwJTNEJTIwc3RyJTIwJTI4JTIwYnNpZ25hbCUyMC5uYW1lJTI5JTIwLiUyMHJqdXN0JTIwJTI4MTElMjklMEElMjAlMjAlMjAlMjB2YWwlMjAlM0QlMjBzdHIlMjAlMjh2YWx1ZSUyOSUyMC4lMjByanVzdCUyMCUyODUlMjklMEElMjAlMjAlMjAlMjByZXR1cm4lMjAlRTIlODAlOTklMjVzJTIwJTNBJTIwJTI1cyUyMCUyNXMlMjAlRTIlODAlOTklMjAlMjUlMjAlMjhuYW1lJTJDJTIwdmFsJTIwJTJDJTIwYnNpZ25hbCUyMC4lMjB1bml0JTIwJTI5JTBBJTBBJTBBZGVmJTIwYm1lc3NhZ2Vfc3RyJTI4Ym1zZyUyOSUyMCUzQSUwQSUyMCUyMCUyMCUyMCVFMiU4MCU5RCVFMiU4MCU5RCVFMiU4MCU5RENyZWF0ZSUyMGElMjBuaWNlJTIwbG9va2luZyUyMHN0cmluZyUyMG9mJTIwdGhlJTIwY29udGVudHMlMjBvZiUyMHRoZSUyMGJvdW5kJTIwbWVzc2FnZSVFMiU4MCU5RCVFMiU4MCU5RCVFMiU4MCU5RCUwQSUyMCUyMCUyMCUyMHR4dCUyMCUzRCUyMCVFMiU4MCU5OSUyMCVFMiU4MCU5OSUwQSUyMCUyMCUyMCUyMGZvciUyMGJzaWclMjBpbiUyMGJtc2clM0ElMEElMjAlMjAlMjAlMjB0eHQlMjAlMkIlM0QlMjAlRTIlODAlOTklMjVzJTIwJUUyJTgwJTk5JTIwJTI1JTIwYnNpZ25hbF9zdHIlMjAlMjglMjBic2lnJTIwJTI5JTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwdHh0JTBBJTBBJTBBZGVmJTIwc2VuZF9yZWNlaXZlX3VzaW5nX2JvdW5kX3NpZ25hbHMlMjhkYiUyQyUyMHF1YW50aXR5JTIwJTJDJTIwY2hfdHglMkMlMjBjaF9yeCUyOSUyMCUzQSUwQSUyMCUyMCUyMCUyMGZvciUyMGklMjBpbiUyMHJhbmdlJTI4cXVhbnRpdHklMjklMjAlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBic2lnMCUyMCUzRCUyMGdldF9yYW5kb21fYm91bmRfc2lnbmFsJTI4ZGIlMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyMCUyOCUyMCVFMiU4MCU5OVNlbmRpbmclMjAlMjVzJTIwJUUyJTgwJTk5JTIwJTI1JTIwYnNpZ25hbF9zdHIlMjAlMjglMjBic2lnMCUyMCUyOSUyMCUyOSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMHNlbmQlMjBmcmFtZSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNoX3R4LiUyMHdyaXRlJTIwJTI4JTIwYnNpZzAlMjAuJTIwZnJhbWUlMjklMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjByZWFkJTIwZnJhbWUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmcmFtZSUyMCUzRCUyMGNoX3J4LiUyMHJlYWQlMjh0aW1lb3V0JTNEMTAwJTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYm1zZzElMjAlM0QlMjBkYi4lMjBpbnRlcnByZXQlMjAlMjhmcmFtZSUzRGZyYW1lJTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjAlMjglMjAlRTIlODAlOTklMjBSZWNlaXZpbmclMjAlMjVzJTIwJUUyJTgwJTk5JTIwJTI1JTIwYm1lc3NhZ2Vfc3RyJTI4Ym1zZzElMjklMjAlMjklMEElMEElMEFkZWYlMjBtYWluJTI4JTI5JTIwJTNBJTBBJTIwJTIwJTIwJTIwJTIzJTIwb3BlbiUyMHRoZSUyMGRhdGFiYXNlJTIwd2UlMjB3b3VsZCUyMGxpa2UlMjB0byUyMHVzZSUwQSUyMCUyMCUyMCUyMGRiJTIwJTNEJTIwa3ZhZGJsaWIlMjAuRGJjJTI4JTIwZmlsZW5hbWUlM0QlRTIlODAlOTlkYl9oaXN0b2dyYW0lMjAuJTIwZGJjJTIwJUUyJTgwJTk5JTIwJTI5JTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwT3BlbiUyMGFuZCUyMHNldHVwJTIwY2hhbm5lbHMlMEElMjAlMjAlMjAlMjBjaDAlMjAlM0QlMjBvcGVuX2NoYW5uZWwlMjgwJTI5JTBBJTIwJTIwJTIwJTIwY2gxJTIwJTNEJTIwb3Blbl9jaGFubmVsJTI4MSUyOSUwQSUwQSUyMCUyMCUyMCUyMHNlbmRfcmVjZWl2ZV91c2luZ19ib3VuZF9zaWduYWxzJTI4ZGIlM0RkYiUyQyUyMHF1YW50aXR5JTNEMTAlMkMlMEFjaF90eCUzRGNoMCUyMCUyQyUyMGNoX3J4JTNEY2gxJTI5JTBBJTBBJTIwJTIwJTIwJTIwY2xvc2VfY2hhbm5lbCUyOGNoMCUyOSUwQSUyMCUyMCUyMCUyMGNsb3NlX2NoYW5uZWwlMjhjaDElMjklMEElMEElMEFpZiUyMF9fbmFtZV9fJTIwJTNEJTNEJTIwJUUyJTgwJTk5X19tYWluX18lRTIlODAlOTklMjAlM0ElMEElMjAlMjAlMjAlMjBtYWluJTI4JTI5JTBB"][vc_column_text]Listing 3: Program used to create, send and receive random signals based on DBC database.[/vc_column_text][vc_column_text]After arming our logger device by applying CAN power and disconnecting USB, we can now finally run the code in Listing 3 on a second device (I used a Kvaser USBcan Pro) and note that the sent and received signals are identical![/vc_column_text][vc_code_raket code="U2VuZGluZyUyMCUyMCUyMEVuZ2luZVNwZWVkJTNBJTIwNTkyOSUyMHJwbSUwQVJlY2VpdmluZyUyMEVuZ2luZVNwZWVkJTNBJTIwNTkyOSUyMHJwbSUwQVNlbmRpbmclMjAlMjAlMjBFbmdpbmVTcGVlZCUzQSUyMDIzNCUyMHJwbSUwQVJlY2VpdmluZyUyMEVuZ2luZVNwZWVkJTNBJTIwMjM0JTIwcnBtJTBBU2VuZGluZyUyMCUyMCUyMCUyMCUyMEZ1ZWwlM0ElMjAyMDcuNyUyMGwlMkYxMDAlMjBrbSUwQVJlY2VpdmluZyUyMCUyMCUyMEZ1ZWwlM0ElMjAyMDcuNyUyMGwlMkYxMDAlMjBrbSUwQVNlbmRpbmclMjAlMjAlMjAlMjAlMjBMb2FkJTNBJTIwNjcuMSUyMG1ldHJpYyUyMHRvbiUwQVJlY2VpdmluZyUyMCUyMCUyMExvYWQlM0ElMjA2Ny4xJTIwbWV0cmljJTIwdG9uJTBBU2VuZGluZyUyMCUyMCUyMCUyMCUyMExvYWQlM0ElMjA3LjYlMjBtZXRyaWMlMjB0b24lMEFSZWNlaXZpbmclMjAlMjAlMjBMb2FkJTNBJTIwNy42JTIwbWV0cmljJTIwdG9uJTBBU2VuZGluZyUyMCUyMCUyMCUyMCUyMEZ1ZWwlM0ElMjA0Ni4wJTIwbCUyRjEwMCUyMGttJTBBUmVjZWl2aW5nJTIwJTIwJTIwRnVlbCUzQSUyMDQ2LjAlMjBsJTJGMTAwJTIwa20lMEFTZW5kaW5nJTIwJTIwJTIwRW5naW5lVGVtcCUzQSUyMDE4MC4wJTIwQ2Vsc2l1cyUwQVJlY2VpdmluZyUyMEVuZ2luZVRlbXAlM0ElMjAxODAuMCUyMENlbHNpdXMlMEFTZW5kaW5nJTIwJTIwJTIwJTIwJTIwRnVlbCUzQSUyMDIxOC4xJTIwbCUyRjEwMCUyMGttJTBBUmVjZWl2aW5nJTIwJTIwJTIwRnVlbCUzQSUyMDIxOC4xJTIwbCUyRjEwMCUyMGttJTBBU2VuZGluZyUyMCUyMCUyMCUyMCUyMExvYWQlM0ElMjA0LjQlMjBtZXRyaWMlMjB0b24lMEFSZWNlaXZpbmclMjAlMjAlMjBMb2FkJTNBJTIwNC40JTIwbWV0cmljJTIwdG9uJTBBU2VuZGluZyUyMCUyMCUyMCUyMCUyMEZ1ZWwlM0ElMjAxMi4zJTIwbCUyRjEwMCUyMGttJTBBUmVjZWl2aW5nJTIwJTIwJTIwRnVlbCUzQSUyMDEyLjMlMjBsJTJGMTAwJTIwa20="][vc_raw_html]JTNDc3BhbiUyMGlkJTNEJTIyZm5yLjQlMjIlM0UlM0MlMkZzcGFuJTNFJTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][vc_header_raket header_type="h3" header="Examining the logged data"][vc_column_text]Now that we have logged data on our Kvaser Memorator Pro, let us examine what is in there. We have gone through this in earlier blog articles3 so let us here just recap the essential part were we do the printing (full code listing will follow). When we write the raw frame contents, we use canlib’s built in string conversion[/vc_column_text][vc_code_raket language="python" code="ZGVmJTIwcmVhZF9yYXdfZXZlbnRzJTI4ZGV2JTJDJTIwZmlsZUluZHglMjklM0ElMEElMjAlMjAlMjAlMjAlMjMlMjByZWFkJTIwZXZlbnRzJTIwZnJvbSUyMGxvZ2ZpbGUlMjBudW1iZXIlMjBpbmRpY2F0ZWQlMjBieSUyMGZpbGVJbmR4JTBBJTIwJTIwJTIwJTIwbXlFdmVudHMlMjAlM0QlMjBkZXYubWVtb1JlYWRFdmVudHMlMjhmaWxlSW5keCUyOSUwQSUyMCUyMCUyMCUyMGZvciUyMGV2ZW50JTIwaW4lMjBteUV2ZW50cyUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMHByaW50JTIwZXZlbnQlMjB3aXRoJTIwYnVpbHQlMjBpbiUyMHN0cmluZyUyMGNvbnZlcnNpb24lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOGV2ZW50JTI5JTBBJTIwJTIwJTIwJTIwcHJpbnQlMjglMjIlNUNuJTIyJTI5"][vc_column_text]
Using the read_raw_events function results in the following output:
[/vc_column_text][vc_code_raket language="t" code="Rm91bmQlMjAxJTIwZmlsZSUyMG9uJTIwY2FyZCUzQSUwQSUyQXQlM0ElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAtJTIwRUFOJTNBNzMtMzAxMzAtMDA3NzgtOSUyMCUyMHMlMkZuJTNBMTAyMyUyMCUyMEZXJTNBdjMuOC4zODQlMjAlMjBMSU8lM0F2MC4wJTBBJTIwdCUzQSUyMCUyMCUyMCUyMDAuMjUwMDUxMjg3JTIwJTIwRGF0ZVRpbWUlM0ElMjAyMDE4LTAyLTA5JTIwMDklM0EwNCUzQTI1JTBBJTIwdCUzQSUyMCUyMCUyMCUyMDAuMjUwMDUxMjg3JTIwTG9nJTIwVHJpZ2dlciUyMEV2ZW50JTIwJTI4dHlwZSUzQSUyMDB4MSUyQyUyMHRyaWdubyUzQSUyMDB4MDAlMkMlMjBwcmUtdHJpZ2dlciUzQSUyMDAlMkMlMjBwb3N0LSUwQSUyMCUyMCUyMCUyMCUyMCUyMHRyaWdnZXIlM0ElMjAtMSUyOSUwQSUwQSUyMHQlM0ElMjAlMjAlMjAlMjA5LjczMjQ5NDgzNyUyMCUyMERhdGVUaW1lJTNBJTIwMjAxOC0wMi0wOSUyMDA5JTNBMDQlM0EzNCUwQSUyMHQlM0ElMjAlMjAlMjAxMi4wOTQwNTkwODclMjAlMjBjaCUzQTAlMjBmJTNBJTIwJTIwJTIwJTIwMiUyMGlkJTNBJTIwM2ZjJTIwZGxjJTNBJTIwMSUyMGQlM0E0MiUwQSUyMHQlM0ElMjAlMjAlMjAxMi4xMDEwODcyMTIlMjAlMjBjaCUzQTAlMjBmJTNBJTIwJTIwJTIwJTIwMiUyMGlkJTNBJTIwJTIwNjQlMjBkbGMlM0ElMjA4JTIwZCUzQTdhJTIwMWElMjA5YyUyMDAwJTIwZGYlMjAwMCUyMDM4JTIwMTglMEElMjB0JTNBJTIwJTIwJTIwMTIuNjIzMTk1OTYyJTIwJTIwY2glM0EwJTIwZiUzQSUyMCUyMCUyMCUyMDIlMjBpZCUzQSUyMDNmYyUyMGRsYyUzQSUyMDElMjBkJTNBNDMlMEElMjB0JTNBJTIwJTIwJTIwMTIuNjI0NjIxMDg3JTIwJTIwY2glM0EwJTIwZiUzQSUyMCUyMCUyMCUyMDIlMjBpZCUzQSUyMCUyMDY0JTIwZGxjJTNBJTIwOCUyMGQlM0ExMyUyMDA4JTIwODYlMjBmNSUyMDQ0JTIwMDElMjBhNCUyMDM4JTBBJTIwdCUzQSUyMCUyMCUyMDIwLjIzMjQ3NTE2MiUyMCUyMERhdGVUaW1lJTNBJTIwMjAxOC0wMi0wOSUyMDA5JTNBMDQlM0E0NSUwQSUwQSUwQSUwQQ=="][vc_column_text]
So let us now use the database to extract our signals from those message events and replace the printed output with the name and value of our corresponding signal. This is done by converting each read message event into a frame, then let the database interpret the frame which results in a bound message. Then we can just iterate over the bound message, as we have done before, to get hold of the contained signals. The last step is to adjust the printing to fit the built in string formatting.
[/vc_column_text][vc_code_raket language="python" code="ZGVmJTIwcmVhZF9zaWduYWxfZXZlbnRzJTI4ZGV2JTJDJTIwZmlsZUluZHglMjklM0ElMEElMjAlMjAlMjAlMjAlMjMlMjBvcGVuJTIwdGhlJTIwZGF0YWJhc2UlMjB3ZSUyMHdvdWxkJTIwbGlrZSUyMHRvJTIwdXNlJTBBJTIwJTIwJTIwJTIwZGIlMjAlM0QlMjBrdmFkYmxpYi5EYmMlMjhmaWxlbmFtZSUzRCUyN2VuZ2luZV9leGFtcGxlLmRiYyUyNyUyOSUwQSUwQSUyMCUyMCUyMCUyMG15RXZlbnRzJTIwJTNEJTIwZGV2Lm1lbW9SZWFkRXZlbnRzJTI4ZmlsZUluZHglMjklMEElMjAlMjAlMjAlMjBmb3IlMjBldmVudCUyMGluJTIwbXlFdmVudHMlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBvbmx5JTIwbWVzc2FnZSUyMGV2ZW50cyUyMGhhdmUlMjBhJTIwZGF0YSUyMGZyYW1lJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjB0eXBlJTI4ZXZlbnQlMjklMjBpcyUyMGt2bWxpYi5ldmVudHMuTWVzc2FnZUV2ZW50JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwY29udmVydCUyMHRoZSUyMG1lc3NhZ2UlMjBldmVudCUyMGludG8lMjBhJTIwZnJhbWUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmcmFtZSUyMCUzRCUyMGV2ZW50LmFzZnJhbWUlMjglMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBsZXQlMjB0aGUlMjBkYXRhYmFzZSUyMGludGVycHJldCUyMHRoZSUyMGZyYW1lJTJDJTIwYSUyMGJvdW5kJTIwbWVzc2FnZSUyMHdpbGwlMjBiZSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMHJldHVybmVkJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYm1zZyUyMCUzRCUyMGRiLmludGVycHJldCUyOGZyYW1lJTNEZnJhbWUlMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBnZW5lcmF0ZSUyMGElMjBuaWNlJTIwbG9va2luZyUyMHN0cmluZyUyMGZyb20lMjB0aGUlMjBib3VuZCUyMG1lc3NhZ2UlMkMlMjBhbmQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBwcmludCUyMG9uJTIwYSUyMGZvcm1hdCUyMG1hdGNoaW5nJTIwdGhlJTIwYnVpbHQlMjBpbiUyMHN0cmluZyUyMGNvbnZlcnNpb24lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjB1c2VkJTIwZm9yJTIwb3RoZXIlMjB0eXBlcyUyMG9mJTIwZXZlbnRzJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdGltZXN0YW1wJTIwJTNEJTIwZXZlbnQuYXNmcmFtZSUyOCUyOS50aW1lc3RhbXAlMjAlMkYlMjAxMDAwMDAwMDAwJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjglMjclMjB0JTNBJTI1MTRzJTIwJTIwU2lnbmFsJTIwJTI1cyUyMCUyNyUyMCUyNSUyMCUyOHRpbWVzdGFtcCUyQyUyMGJtZXNzYWdlX3N0ciUyOGJtc2clMjklMjklMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbHNlJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjhldmVudCUyOSUwQSUyMCUyMCUyMCUyMHByaW50JTI4JTIyJTVDbiUyMiUyOQ=="][vc_column_text]
Using the read_signal_events() function results in the following output:
[/vc_column_text][vc_code_raket language="t" code="Rm91bmQlMjAxJTIwZmlsZSUyMG9uJTIwY2FyZCUzQSUwQSUyQXQlM0ElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAtJTIwRUFOJTNBNzMtMzAxMzAtMDA3NzgtOSUyMCUyMHMlMkZuJTNBMTAyMyUyMEZXJTNBdjMuOC4zODQlMjBMSU8lM0F2MC4wJTBBJTIwdCUzQSUyMCUyMCUyMDAuMjUwMDUxMjg3JTIwJTIwRGF0ZVRpbWUlM0ElMjAyMDE4LTAyLTA5JTIwMDklM0EwNCUzQTI1JTBBJTIwdCUzQSUyMCUyMCUyMDAuMjUwMDUxMjg3JTIwTG9nJTIwVHJpZ2dlciUyMEV2ZW50JTIwJTI4dHlwZSUzQSUyMDB4MSUyQyUyMHRyaWdubyUzQSUyMDB4MDAlMkMlMjBwcmUtdHJpZ2dlciUzQSUyMDAlMkMlMjBwb3N0LSUwQSUyMCUyMCUyMCUyMCUyMCUyMHRyaWdnZXIlM0ElMjAtMSUyOSUwQSUyMCUyMCUyMCUyMCUwQSUyMHQlM0ElMjAlMjAlMjA5LjczMjQ5NDgzNyUyMCUyMERhdGVUaW1lJTNBJTIwMjAxOC0wMi0wOSUyMDA5JTNBMDQlM0EzNCUwQSUyMHQlM0ElMjAlMjAxMi4wOTQwNTkwODclMjAlMjBTaWduYWwlMjAlMjAlMjAlMjAlMjBFY29Nb2RlJTNBJTIwJTIwMSUyMCUyMCUyMFNoaWZ0UmVxdWVzdCUzQSUyMCUyMDAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBHZWFyJTNBJTIwJTIwJTIwMiUwQSUyMHQlM0ElMjAlMjAxMi4xMDEwODcyMTIlMjAlMjBTaWduYWwlMjBQZXRyb2xMZXZlbCUzQSUyMCUyMDAlMjBsJTIwJTIwJTIwJTIwJTIwRW5nUG93ZXIlM0ElMjA2MiUyMGtXJTIwRW5nRm9yY2UlM0ElMjAyMjMlMjBOJTBBJTIwJTIwJTIwJTIwJTIwJTIwSWRsZVJ1bm5pbmclM0ElMjAxJTIwRW5nVGVtcCUzQSUyMCUyMCUyMDYlMjBkZWdDJTIwRW5nU3BlZWQlM0ElMjA2Nzc4JTIwcnBtJTBBJTIwdCUzQSUyMCUyMDEyLjYyMzE5NTk2MiUyMCUyMFNpZ25hbCUyMEVjb01vZGUlM0ElMjAxJTIwU2hpZnRSZXF1ZXN0JTNBJTIwMCUyMEdlYXIlM0ElMjAzJTIwJTBBJTIwdCUzQSUyMCUyMDEyLjYyNDYyMTA4NyUyMCUyMFNpZ25hbCUyMFBldHJvbExldmVsJTNBMjQ1JTIwbCUyMCUyMCUyMCUyMCUyMEVuZ1Bvd2VyJTNBMTQ1JTIwa1clMjBFbmdGb3JjZSUzQSUyMDMyNCUyME4lMEElMjAlMjAlMjAlMjAlMjAlMjBJZGxlUnVubmluZyUzQSUyMDElMjBFbmdUZW1wJTNBJTIwLTM4JTIwZGVnQyUyMEVuZ1NwZWVkJTNBJTIwMjA2NyUyMHJwbSUyMCUwQSUyMHQlM0ElMjAlMjAyMC4yMzI0NzUxNjIlMjAlMjBEYXRlVGltZSUzQSUyMDIwMTgtMDItMDklMjAwOSUzQTA0JTNBNDU="][vc_column_text]
Finally, here is the complete listing of our program.
[/vc_column_text][vc_code_raket language="python" code="ZnJvbSUyMGNhbmxpYiUyMGltcG9ydCUyMGt2RGV2aWNlJTBBZnJvbSUyMGNhbmxpYiUyMGltcG9ydCUyMGt2YWRibGliJTBBZnJvbSUyMGNhbmxpYiUyMGltcG9ydCUyMGt2bWxpYiUwQSUwQSUwQWRlZiUyMHJlYWRfcmF3X2V2ZW50cyUyOGRldiUyQyUyMGZpbGVJbmR4JTI5JTNBJTBBJTIwJTIwJTIwJTIwJTIzJTIwcmVhZCUyMGV2ZW50cyUyMGZyb20lMjBsb2dmaWxlJTIwbnVtYmVyJTIwaW5kaWNhdGVkJTIwYnklMjBmaWxlSW5keCUwQSUyMCUyMCUyMCUyMG15RXZlbnRzJTIwJTNEJTIwZGV2Lm1lbW9SZWFkRXZlbnRzJTI4ZmlsZUluZHglMjklMEElMjAlMjAlMjAlMjBmb3IlMjBldmVudCUyMGluJTIwbXlFdmVudHMlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBwcmludCUyMGV2ZW50JTIwd2l0aCUyMGJ1aWx0JTIwaW4lMjBzdHJpbmclMjBjb252ZXJzaW9uJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjhldmVudCUyOSUwQSUyMCUyMCUyMCUyMHByaW50JTI4JTIyJTVDbiUyMiUyOSUwQSUwQSUwQWRlZiUyMGJzaWduYWxfc3RyJTI4YnNpZ25hbCUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMiUyMiUyMkNyZWF0ZSUyMGElMjBuaWNlJTIwbG9va2luZyUyMHN0cmluZyUyMG9mJTIwdGhlJTIwY29udGVudHMlMjBvZiUyMHRoZSUyMGJvdW5kJTIwc2lnbmFsJTIyJTIyJTIyJTBBJTIwJTIwJTIwJTIwdmFsdWUlMjAlM0QlMjBic2lnbmFsLnBoeXMlMEElMjAlMjAlMjAlMjBpZiUyMGJzaWduYWwuc2lnbmFsLnR5cGUlMjBpcyUyMGt2YWRibGliLlNpZ25hbFR5cGUuVU5TSUdORUQlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjByZW1vdmUlMjBkZWNpbWFscyUyMGlmJTIwdGhlJTIwc2lnbmFsJTIwd2FzJTIwb2YlMjB0eXBlJTIwdW5zaWduZWQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB2YWx1ZSUyMCUzRCUyMGludCUyOHZhbHVlJTI5JTBBJTIwJTIwJTIwJTIwZWxzZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMG90aGVyd2lzZSUyQyUyMHJvdW5kJTIwdG8lMjBnZXQlMjBvbmx5JTIwb25lJTIwZGVjaW1hbCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHZhbHVlJTIwJTNEJTIwcm91bmQlMjh2YWx1ZSUyQyUyMDElMjklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBjcmVhdGUlMjBhZGp1c3RlZCUyMHN0cmluZ3MlMjBmb3IlMjBwcmV0dGllciUyMHByaW50aW5nJTBBJTIwJTIwJTIwJTIwbmFtZSUyMCUzRCUyMHN0ciUyOGJzaWduYWwubmFtZSUyOS5yanVzdCUyODExJTI5JTBBJTIwJTIwJTIwJTIwdmFsJTIwJTNEJTIwc3RyJTI4dmFsdWUlMjkucmp1c3QlMjg1JTI5JTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwJTI3JTI1cyUzQSUyMCUyNXMlMjAlMjVzJTI3JTIwJTI1JTIwJTI4bmFtZSUyQyUyMHZhbCUyQyUyMGJzaWduYWwudW5pdCUyOSUwQSUwQSUwQWRlZiUyMGJtZXNzYWdlX3N0ciUyOGJtc2clMjklM0ElMEElMjAlMjAlMjAlMjAlMjIlMjIlMjJDcmVhdGUlMjBhJTIwbmljZSUyMGxvb2tpbmclMjBzdHJpbmclMjBvZiUyMHRoZSUyMGNvbnRlbnRzJTIwb2YlMjB0aGUlMjBib3VuZCUyMG1lc3NhZ2UlMjIlMjIlMjIlMEElMjAlMjAlMjAlMjB0eHQlMjAlM0QlMjAlMjclMjclMEElMjAlMjAlMjAlMjBmb3IlMjBic2lnJTIwaW4lMjBibXNnJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdHh0JTIwJTJCJTNEJTIwJTI3JTI1cyUyNyUyMCUyNSUyMGJzaWduYWxfc3RyJTI4YnNpZyUyOSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMHR4dCUwQSUwQSUwQWRlZiUyMHJlYWRfc2lnbmFsX2V2ZW50cyUyOGRldiUyQyUyMGZpbGVJbmR4JTI5JTNBJTBBJTIwJTIwJTIwJTIwJTIzJTIwb3BlbiUyMHRoZSUyMGRhdGFiYXNlJTIwd2UlMjB3b3VsZCUyMGxpa2UlMjB0byUyMHVzZSUwQSUyMCUyMCUyMCUyMGRiJTIwJTNEJTIwa3ZhZGJsaWIuRGJjJTI4ZmlsZW5hbWUlM0QlMjdlbmdpbmVfZXhhbXBsZS5kYmMlMjclMjklMEElMEElMjAlMjAlMjAlMjBteUV2ZW50cyUyMCUzRCUyMGRldi5tZW1vUmVhZEV2ZW50cyUyOGZpbGVJbmR4JTI5JTBBJTIwJTIwJTIwJTIwZm9yJTIwZXZlbnQlMjBpbiUyMG15RXZlbnRzJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwb25seSUyMG1lc3NhZ2UlMjBldmVudHMlMjBoYXZlJTIwYSUyMGRhdGElMjBmcmFtZSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwdHlwZSUyOGV2ZW50JTI5JTIwaXMlMjBrdm1saWIuZXZlbnRzLk1lc3NhZ2VFdmVudCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMGNvbnZlcnQlMjB0aGUlMjBtZXNzYWdlJTIwZXZlbnQlMjBpbnRvJTIwYSUyMGZyYW1lJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZnJhbWUlMjAlM0QlMjBldmVudC5hc2ZyYW1lJTI4JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwbGV0JTIwdGhlJTIwZGF0YWJhc2UlMjBpbnRlcnByZXQlMjB0aGUlMjBmcmFtZSUyQyUyMGElMjBib3VuZCUyMG1lc3NhZ2UlMjB3aWxsJTIwYmUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjByZXR1cm5lZCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJtc2clMjAlM0QlMjBkYi5pbnRlcnByZXQlMjhmcmFtZSUzRGZyYW1lJTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwZ2VuZXJhdGUlMjBhJTIwbmljZSUyMGxvb2tpbmclMjBzdHJpbmclMjBmcm9tJTIwdGhlJTIwYm91bmQlMjBtZXNzYWdlJTJDJTIwYW5kJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwcHJpbnQlMjBvbiUyMGElMjBmb3JtYXQlMjBtYXRjaGluZyUyMHRoZSUyMGJ1aWx0JTIwaW4lMjBzdHJpbmclMjBjb252ZXJzaW9uJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwdXNlZCUyMGZvciUyMG90aGVyJTIwdHlwZXMlMjBvZiUyMGV2ZW50cyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRpbWVzdGFtcCUyMCUzRCUyMGV2ZW50LmFzZnJhbWUlMjglMjkudGltZXN0YW1wJTIwJTJGJTIwMTAwMDAwMDAwMCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50JTI4JTI3JTIwdCUzQSUyNTE0cyUyMCUyMFNpZ25hbCUyMCUyNXMlMjAlMjclMjAlMjUlMjAlMjh0aW1lc3RhbXAlMkMlMjBibWVzc2FnZV9zdHIlMjhibXNnJTI5JTI5JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZWxzZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50JTI4ZXZlbnQlMjklMEElMjAlMjAlMjAlMjBwcmludCUyOCUyMiU1Q24lMjIlMjklMEElMEElMEFkZWYlMjByZWFkX2xvZyUyOGRldiUyQyUyMHJlYWRfZnVuY3Rpb24lMjklM0ElMEElMjAlMjAlMjAlMjAlMjMlMjBDb25uZWN0JTIwdG8lMjBvdXIlMjBLdmFzZXIlMjBNZW1vcmF0b3IlMjBQcm8lMjA1eEhTJTIwd2l0aCUyMEVBTiUyMDAwNzc4LTklMEElMjAlMjAlMjAlMjBkZXYlMjAlM0QlMjBrdkRldmljZS5rdkRldmljZSUyOGVhbiUzRCUyMjczLTMwMTMwLTAwNzc4LTklMjIlMjklMEElMjAlMjAlMjAlMjBkZXYub3BlbiUyOCUyOSUwQSUyMCUyMCUyMCUyMGRldi5tZW1vT3BlbiUyOCUyOSUwQSUyMCUyMCUyMCUyMGZpbGVDb3VudCUyMCUzRCUyMGRldi5tZW1vLmxvZ0ZpbGVHZXRDb3VudCUyOCUyOSUwQSUyMCUyMCUyMCUyMHByaW50JTI4JTIyRm91bmQlMjAlMjVkJTIwZmlsZSUyNXMlMjBvbiUyMGNhcmQlM0ElMjIlMjAlMjUlMjAlMjhmaWxlQ291bnQlMkMlMjAlMjJzJTIyJTIwaWYlMjBmaWxlQ291bnQlMjAlM0UlMjAxJTIwZWxzZSUyMCUyMiUyMiUyOSUyOSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMExvb3AlMjB0aHJvdWdoJTIwYWxsJTIwbG9nZmlsZXMlMjBhbmQlMjB3cml0ZSUyMHRoZWlyJTIwY29udGVudHMlMjB0byUyMHN0ZG91dCUwQSUyMCUyMCUyMCUyMGZvciUyMGZpbGVJbmR4JTIwaW4lMjByYW5nZSUyOGZpbGVDb3VudCUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJlYWRfZnVuY3Rpb24lMjhkZXYlMkMlMjBmaWxlSW5keCUyOSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMERlbGV0ZSUyMGFsbCUyMGxvZ2ZpbGVzJTBBJTIwJTIwJTIwJTIwJTIzZGV2Lm1lbW8ubG9nRmlsZURlbGV0ZUFsbCUyOCUyOSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMENsb3NlJTIwZGV2aWNlJTBBJTIwJTIwJTIwJTIwZGV2Lm1lbW9DbG9zZSUyOCUyOSUwQSUyMCUyMCUyMCUyMGRldi5jbG9zZSUyOCUyOSUwQSUwQSUwQWRlZiUyMG1haW4lMjglMjklM0ElMEElMjAlMjAlMjAlMjAlMjMlMjBjb25uZWN0JTIwdG8lMjBvdXIlMjBLdmFzZXIlMjBNZW1vcmF0b3IlMjBQcm8lMjA1eEhTJTIwd2l0aCUyMEVBTiUyMDAwNzc4LTklMEElMjAlMjAlMjAlMjBkZXYlMjAlM0QlMjBrdkRldmljZS5rdkRldmljZSUyOGVhbiUzRCUyMjczLTMwMTMwLTAwNzc4LTklMjIlMjklMEElMEElMjAlMjAlMjAlMjAlMjMlMjByZWFkJTIwYW5kJTIwcHJpbnQlMjByYXclMjBldmVudHMlMjBmcm9tJTIwdGhlJTIwZGV2aWNlJTBBJTIwJTIwJTIwJTIwcmVhZF9sb2clMjhkZXYlMkMlMjByZWFkX3Jhd19ldmVudHMlMjklMEElMjAlMjAlMjAlMjAlMjMlMjByZWFkJTIwYW5kJTIwcHJpbnQlMjBzaWduYWxzJTIwZnJvbSUyMHRoZSUyMGRldmljZSUwQSUyMCUyMCUyMCUyMHJlYWRfbG9nJTI4ZGV2JTJDJTIwcmVhZF9zaWduYWxfZXZlbnRzJTI5JTBBJTBBJTBBaWYlMjBfX25hbWVfXyUyMCUzRCUzRCUyMCUyN19fbWFpbl9fJTI3JTNBJTBBJTIwJTIwJTIwJTIwbWFpbiUyOCUyOQ=="][vc_raw_html]JTNDc3BhbiUyMGlkJTNEJTIyZm5yLjUlMjIlM0UlM0MlMkZzcGFuJTNFJTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][vc_header_raket header_type="h3" header="Convert logged data to a signal based format"][vc_column_text]
If we already have extracted our logged data from our Kvaser Memorator into e.g. a .kme50 file, we can still expose our signals by feeding the database to the converter library and convert our data to a signal based format. Here we will convert our .kme50 file into the csv signal format.4
[/vc_column_text][vc_code_raket language="python" code="JTIzJTIwc2V0JTIwb3V0cHV0JTIwZm9ybWF0JTBBZm10JTIwJTNEJTIwa3ZsY2xpYi5Xcml0ZXJGb3JtYXQlMjhrdmxjbGliLkZJTEVfRk9STUFUX0NTVl9TSUdOQUwlMjklMEElMjMlMjB0aGUlMjBuYW1lJTIwb2YlMjB0aGUlMjBmb3JtYXR0ZXIlMjBpcyUyMGZldGNoZWQlMjB1c2luZyUyMGt2bGNHZXRXcml0ZXJOYW1lJTI4JTI5JTIwaW50ZXJuYWxseSUwQXByaW50JTI4JTIyT3V0cHV0JTIwZm9ybWF0JTIwaXMlMjAlMjclMjVzJTI3JTIyJTIwJTI1JTIwZm10Lm5hbWUlMjklMEElMEElMjMlMjBzZXQlMjByZXN1bHRpbmclMjBvdXRwdXQlMjBmaWxlbmFtZSUyMHRha2luZyUyMGFkdmFudGFnZSUyMG9mJTIwdGhlJTIwZXh0ZW5zaW9uJTIwZGVmaW5lZCUwQSUyMyUyMGluJTIwdGhlJTIwZm9ybWF0LiUyMCUyOFVzZXMlMjBrdmxjR2V0V3JpdGVyRXh0ZW5zaW9uJTI4JTI5JTIwdW5kZXIlMjB0aGUlMjBob29kLiUyOSUwQW91dGZpbGUlMjAlM0QlMjAlMjJteXJlc3VsdC4lMjIlMjAlMkIlMjBmbXQuZXh0ZW5zaW9uJTBBcHJpbnQlMjglMjJPdXRwdXQlMjBmaWxlbmFtZSUyMGlzJTIwJTI3JTI1cyUyNyUyMiUyMCUyNSUyMG91dGZpbGUlMjklMEElMEElMjMlMjBjcmVhdGUlMjBjb252ZXJ0ZXIlMEFrYyUyMCUzRCUyMGt2bGNsaWIuQ29udmVydGVyJTI4b3V0ZmlsZSUyQyUyMGZtdCUyOSUwQSUwQSUyMyUyMGFkZCUyMGRhdGFiYXNlJTIwZmlsZSUwQWNoYW5uZWxfbWFzayUyMCUzRCUyMGt2bGNsaWIuQ2hhbm5lbE1hc2suT05FJTIwJTdDJTIwa3ZsY2xpYi5DaGFubmVsTWFzay5UV08lMEFrYy5hZGREYXRhYmFzZUZpbGUlMjglMjJlbmdpbmVfZXhhbXBsZS5kYmMlMjIlMkMlMjBjaGFubmVsX21hc2slMjklMEElMEElMjMlMjBTZXQlMjBpbnB1dCUyMGZpbGVuYW1lJTIwYW5kJTIwZm9ybWF0JTBBaW5wdXRmaWxlJTIwJTNEJTIwJTIyZW5naW5lX2V4YW1wbGUua21lNTAlMjIlMEFwcmludCUyOCUyMklucHV0JTIwZmlsZW5hbWUlMjBpcyUyMCUyNyUyNXMlMjclMjIlMjAlMjUlMjBpbnB1dGZpbGUlMjklMEFrYy5zZXRJbnB1dEZpbGUlMjhpbnB1dGZpbGUlMkMlMjBmaWxlX2Zvcm1hdCUzRGt2bGNsaWIuRklMRV9GT1JNQVRfS01FNTAlMjk="][vc_column_text]
The full listing of our programs is shown below.
[/vc_column_text][vc_code_raket language="python" code="ZnJvbSUyMGNhbmxpYiUyMGltcG9ydCUyMGt2bGNsaWIlMEElMEElMEFkZWYlMjB0cnlTZXRQcm9wZXJ0eSUyOGNvbnZlcnRlciUyQyUyMHByb3BlcnR5JTJDJTIwdmFsdWUlM0ROb25lJTI5JTNBJTBBJTIwJTIwJTIwJTIwJTIzJTIwQ2hlY2slMjBpZiUyMHRoZSUyMGZvcm1hdCUyMHN1cHBvcnRzJTIwdGhlJTIwZ2l2ZW4lMjBwcm9wZXJ0eSUwQSUyMCUyMCUyMCUyMGlmJTIwY29udmVydGVyLmZvcm1hdC5pc1Byb3BlcnR5U3VwcG9ydGVkJTI4cHJvcGVydHklMjklM0ElMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBJZiUyMGElMjB2YWx1ZSUyMHdhcyUyMHNwZWNpZmllZCUyQyUyMHNldCUyMHRoZSUyMHByb3BlcnR5JTIwdG8lMjB0aGlzJTIwdmFsdWUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMHZhbHVlJTIwaXMlMjBub3QlMjBOb25lJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY29udmVydGVyLnNldFByb3BlcnR5JTI4cHJvcGVydHklMkMlMjB2YWx1ZSUyOSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMGdldCUyMHRoZSUyMHByb3BlcnR5JTI3cyUyMGRlZmF1bHQlMjB2YWx1ZSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGRlZmF1bHQlMjAlM0QlMjBjb252ZXJ0ZXIuZm9ybWF0LmdldFByb3BlcnR5RGVmYXVsdCUyOHByb3BlcnR5JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjglMjIlMjBQUk9QRVJUWV8lMjVzJTIwaXMlMjBzdXBwb3J0ZWQlMjAlMjhEZWZhdWx0JTNBJTIwJTI1cyUyOSUyMiUyMCUyNSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyOHByb3BlcnR5JTVCJTI3bmFtZSUyNyU1RCUyQyUyMGRlZmF1bHQlMjklMjklMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBnZXQlMjB0aGUlMjBwcm9wZXJ0eSUyN3MlMjBjdXJyZW50JTIwdmFsdWUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB2YWx1ZSUyMCUzRCUyMGNvbnZlcnRlci5nZXRQcm9wZXJ0eSUyOHByb3BlcnR5JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjglMjIlMDlDdXJyZW50JTIwdmFsdWUlM0ElMjAlMjVzJTIyJTIwJTI1JTIwdmFsdWUlMjklMEElMjAlMjAlMjAlMjBlbHNlJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjglMjIlMjBQUk9QRVJUWSUyMCUyNXMlMjBpcyUyMG5vdCUyMHN1cHBvcnRlZCUyMiUyMCUyNSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyOHByb3BlcnR5JTVCJTI3bmFtZSUyNyU1RCUyOSUyOSUwQSUwQSUwQWRlZiUyMGNvbnZlcnRFdmVudHMlMjhrYyUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMyUyMEdldCUyMGVzdGltYXRlZCUyMG51bWJlciUyMG9mJTIwcmVtYWluaW5nJTIwZXZlbnRzJTIwaW4lMjB0aGUlMjBpbnB1dCUyMGZpbGUuJTIwVGhpcyUyMGNhbiUyMGJlJTBBJTIwJTIwJTIwJTIwJTIzJTIwdXNlZnVsJTIwZm9yJTIwZGlzcGxheWluZyUyMHByb2dyZXNzJTIwZHVyaW5nJTIwY29udmVyc2lvbi4lMEElMjAlMjAlMjAlMjB0b3RhbCUyMCUzRCUyMGtjLmV2ZW50Q291bnQlMjglMjklMEElMjAlMjAlMjAlMjBwcmludCUyOCUyMkNvbnZlcnRpbmclMjBhYm91dCUyMCUyNWQlMjBldmVudHMuLi4lMjIlMjAlMjUlMjB0b3RhbCUyOSUwQSUyMCUyMCUyMCUyMHdoaWxlJTIwVHJ1ZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRyeSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMENvbnZlcnQlMjBldmVudHMlMjBmcm9tJTIwaW5wdXQlMjBmaWxlJTIwb25lJTIwYnklMjBvbmUlMjB1bnRpbCUyMEVPRiUyMGlzJTIwcmVhY2hlZCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGtjLmNvbnZlcnRFdmVudCUyOCUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwa2MuaXNPdXRwdXRGaWxlbmFtZU5ldyUyOCUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50JTI4JTIyTmV3JTIwb3V0cHV0JTIwZmlsZW5hbWUlM0ElMjAlMjVzJTIyJTIwJTI1JTIwa2MuZ2V0T3V0cHV0RmlsZW5hbWUlMjglMjklMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOCUyMkFib3V0JTIwJTI1ZCUyMGV2ZW50cyUyMGxlZnQlMjB0byUyMGNvbnZlcnQuLi4lMjIlMjAlMjUlMjBrYy5ldmVudENvdW50JTI4JTI5JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZXhjZXB0JTIwa3ZsY2xpYi5LdmxjRW5kT2ZGaWxlJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBrYy5pc092ZXJydW5BY3RpdmUlMjglMjklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOCUyMk5PVEUlMjElMjBUaGUlMjBleHRyYWN0ZWQlMjBkYXRhJTIwY29udGFpbmVkJTIwb3ZlcnJ1bi4lMjIlMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBrYy5yZXNldE92ZXJydW5BY3RpdmUlMjglMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMGtjLmlzRGF0YVRydW5jYXRlZCUyOCUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50JTI4JTIyTk9URSUyMSUyMFRoZSUyMGV4dHJhY3RlZCUyMGRhdGElMjB3YXMlMjB0cnVuY2F0ZWQuJTIyJTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwa2MucmVzZXRTdGF0dXNUcnVuY2F0ZWQlMjglMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBicmVhayUwQSUwQSUyMyUyMHNldCUyMG91dHB1dCUyMGZvcm1hdCUwQWZtdCUyMCUzRCUyMGt2bGNsaWIuV3JpdGVyRm9ybWF0JTI4a3ZsY2xpYi5GSUxFX0ZPUk1BVF9DU1ZfU0lHTkFMJTI5JTBBJTIzJTIwdGhlJTIwbmFtZSUyMG9mJTIwdGhlJTIwZm9ybWF0dGVyJTIwaXMlMjBmZXRjaGVkJTIwdXNpbmclMjBrdmxjR2V0V3JpdGVyTmFtZSUyOCUyOSUyMGludGVybmFsbHklMEFwcmludCUyOCUyMk91dHB1dCUyMGZvcm1hdCUyMGlzJTIwJTI3JTI1cyUyNyUyMiUyMCUyNSUyMGZtdC5uYW1lJTI5JTBBJTBBJTIzJTIwc2V0JTIwcmVzdWx0aW5nJTIwb3V0cHV0JTIwZmlsZW5hbWUlMjB0YWtpbmclMjBhZHZhbnRhZ2UlMjBvZiUyMHRoZSUyMGV4dGVuc2lvbiUyMGRlZmluZWQlMEElMjMlMjBpbiUyMHRoZSUyMGZvcm1hdC4lMjAlMjhVc2VzJTIwa3ZsY0dldFdyaXRlckV4dGVuc2lvbiUyOCUyOSUyMHVuZGVyJTIwdGhlJTIwaG9vZC4lMjklMEFvdXRmaWxlJTIwJTNEJTIwJTIybXlyZXN1bHQuJTIyJTIwJTJCJTIwZm10LmV4dGVuc2lvbiUwQXByaW50JTI4JTIyT3V0cHV0JTIwZmlsZW5hbWUlMjBpcyUyMCUyNyUyNXMlMjclMjIlMjAlMjUlMjBvdXRmaWxlJTI5JTBBJTBBJTIzJTIwY3JlYXRlJTIwY29udmVydGVyJTBBa2MlMjAlM0QlMjBrdmxjbGliLkNvbnZlcnRlciUyOG91dGZpbGUlMkMlMjBmbXQlMjklMEElMEElMjMlMjBhZGQlMjBkYXRhYmFzZSUyMGZpbGUlMEFjaGFubmVsX21hc2slMjAlM0QlMjBrdmxjbGliLkNoYW5uZWxNYXNrLk9ORSUyMCU3QyUyMGt2bGNsaWIuQ2hhbm5lbE1hc2suVFdPJTBBa2MuYWRkRGF0YWJhc2VGaWxlJTI4JTIyZW5naW5lX2V4YW1wbGUuZGJjJTIyJTJDJTIwY2hhbm5lbF9tYXNrJTI5JTBBJTBBJTIzJTIwU2V0JTIwaW5wdXQlMjBmaWxlbmFtZSUyMGFuZCUyMGZvcm1hdCUwQWlucHV0ZmlsZSUyMCUzRCUyMCUyMmVuZ2luZV9leGFtcGxlLmttZTUwJTIyJTBBcHJpbnQlMjglMjJJbnB1dCUyMGZpbGVuYW1lJTIwaXMlMjAlMjclMjVzJTI3JTIyJTIwJTI1JTIwaW5wdXRmaWxlJTI5JTBBa2Muc2V0SW5wdXRGaWxlJTI4aW5wdXRmaWxlJTJDJTIwZmlsZV9mb3JtYXQlM0RrdmxjbGliLkZJTEVfRk9STUFUX0tNRTUwJTI5JTBBJTBBJTIzJTIwYWxsb3clMjBvdXRwdXQlMjBmaWxlJTIwdG8lMjBvdmVyd3JpdGUlMjBleGlzdGluZyUyMGZpbGVzJTBBdHJ5U2V0UHJvcGVydHklMjhrYyUyQyUyMGt2bGNsaWIuUFJPUEVSVFlfT1ZFUldSSVRFJTJDJTIwMSUyOSUwQSUwQSUyMyUyMGFkZCUyMG5pY2UlMjBoZWFkZXIlMjB0byUyMHRoZSUyMG91dHB1dCUyMGZpbGUlMEF0cnlTZXRQcm9wZXJ0eSUyOGtjJTJDJTIwa3ZsY2xpYi5QUk9QRVJUWV9XUklURV9IRUFERVIlMkMlMjAxJTI5JTBBJTBBJTIzJTIwd2UlMjBhcmUlMjBjb252ZXJ0aW5nJTIwQ0FOJTIwdHJhZmZpYyUyMHdpdGglMjBtYXglMjA4JTIwYnl0ZXMlMkMlMjBzbyUyMHdlJTIwY2FuJTIwbWluaW1pemUlMjB0aGUlMEElMjMlMjB3aWR0aCUyMG9mJTIwdGhlJTIwZGF0YSUyMG91dHB1dCUyMHRvJTIwOCUyMGJ5dGVzJTBBdHJ5U2V0UHJvcGVydHklMjhrYyUyQyUyMGt2bGNsaWIuUFJPUEVSVFlfTElNSVRfREFUQV9CWVRFUyUyQyUyMDglMjklMEElMEElMjMlMjBjb252ZXJ0JTIwYWxsJTIwZXZlbnRzJTBBY29udmVydEV2ZW50cyUyOGtjJTI5"][vc_column_text]
Running the above program reveals that the property LIMIT_DATA_BYTES was obviously not available in the “CSV Signal” format we choose, but we were saved by our trySetProperty() function.
[/vc_column_text][vc_code_raket code="T3V0cHV0JTIwZm9ybWF0JTIwaXMlMjAlMjdDU1YlMjBTaWduYWwlMjclMEFPdXRwdXQlMjBmaWxlbmFtZSUyMGlzJTIwJTI3bXlyZXN1bHQuY3N2JTI3JTBBSW5wdXQlMjBmaWxlbmFtZSUyMGlzJTIwJTI3aGlzdG9ncmFtLmttZTUwJTI3JTBBJTIwUFJPUEVSVFlfT1ZFUldSSVRFJTIwaXMlMjBzdXBwb3J0ZWQlMjAlMjhEZWZhdWx0JTNBJTIwMCUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMEN1cnJlbnQlMjB2YWx1ZSUzQSUyMDElMEElMjBQUk9QRVJUWV9XUklURV9IRUFERVIlMjBpcyUyMHN1cHBvcnRlZCUyMCUyOERlZmF1bHQlM0ElMjAwJTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwQ3VycmVudCUyMHZhbHVlJTNBJTIwMSUwQSUyMFBST1BFUlRZJTIwTElNSVRfREFUQV9CWVRFUyUyMGlzJTIwbm90JTIwc3VwcG9ydGVkJTIwJTBBQ29udmVydGluZyUyMGFib3V0JTIwNDIlMjBldmVudHMuLi4lMEFOZXclMjBvdXRwdXQlMjBmaWxlbmFtZSUzQSUyMG15cmVzdWx0LmNzdiUwQUFib3V0JTIwNDElMjBldmVudHMlMjBsZWZ0JTIwdG8lMjBjb252ZXJ0Li4u"][vc_column_text]
Looking in the resulting file myresult.csv shown in Figure 2 we can see the signals as we expected.
[/vc_column_text][vc_single_image image="26414"][vc_column_text]Figure 2: Our resulting csv file reveals the now familiar signal values.[/vc_column_text][vc_column_text]
This ends the tour on how to use a DBC database to show signals and values from events and logged data. Hopefully you learned something, or at least found it interesting. If you have any questions please feel free to contact [email protected].
[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][vc_header_raket header_type="h3" header="Footnotes"][vc_column_text]1 We created a database in the blog entry Handling CAN databases in Python, and sent and received signals in Send and receive database signals. 2 If the signal is missing from the framebox, we get an exception. 3 We read logged messages when we started using kvmlib in https://www.kvaser.com/developer-blog/getting-started-with-kvmlib/. 4 This code was introduced in a blog series about the Converter Library (kvlclib) https://www.kvaser.com/developer-blog/converting-to-plain-ascii/.[/vc_column_text][/vc_column][/vc_row] [post_title] => Reading signals from log files [post_excerpt] => [post_status] => publish [comment_status] => closed [ping_status] => closed [post_password] => [post_name] => reading-signals-log-files [to_ping] => [pinged] => [post_modified] => 2022-10-04 11:43:04 [post_modified_gmt] => 2022-10-04 11:43:04 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?post_type=developer_blog&p=39853 [menu_order] => 0 [post_type] => developer_blog [post_mime_type] => [comment_count] => 0 [filter] => raw ) [6] => WP_Post Object ( [ID] => 39854 [post_author] => 14 [post_date] => 2018-02-15 12:11:26 [post_date_gmt] => 2018-02-15 12:11:26 [post_content] => [vc_row][vc_column][vc_single_image image="15487"][vc_column_text]This is the second post in a 2-part series about how to manage DBC databases using the Kvaser database library (kvadblib) and Python:
  1. Handling CAN databases in Python
  2. Send and receive database signals
  In the first post we created a DBC database and took a peek inside to verify that we got what we asked for. Now we will use the database to send signals with physical values set from Python.[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Send and receive CAN messages"][vc_column_text]Before sending signals using our database, let us first remind ourselves on how to write and receive a raw CAN message using Python.[/vc_column_text][vc_code_raket language="python" code="ZnJvbSUyMGNhbmxpYiUyMGltcG9ydCUyMGt2YWRibGliJTBBZnJvbSUyMGNhbmxpYiUyMGltcG9ydCUyMGNhbmxpYiUwQWZyb20lMjBjYW5saWIlMjBpbXBvcnQlMjBGcmFtZSUwQSUwQWRlZiUyMG9wZW5fY2hhbm5lbCUyOGNoYW5uZWwlMjklM0ElMEElMjAlMjAlMjAlMjAlRTIlODAlOUQlRTIlODAlOUQlRTIlODAlOURPcGVuJTIwYSUyMG5ldyUyMGNoYW5uZWwlMkMlMjBzZXQlMjBiaXRyYXRlJTIwMU1iaXQlMkZzJTIwYW5kJTIwZ28lMjBidXMlMjBvbi4lRTIlODAlOUQlRTIlODAlOUQlRTIlODAlOUQlMEElMjAlMjAlMjAlMjBjaCUyMCUzRCUyMGNhbmxpYi5vcGVuQ2hhbm5lbCUyOGNoYW5uZWwlMkMlMjBjYW5saWIuY2FuT1BFTl9BQ0NFUFRfVklSVFVBTCUyOSUwQSUyMCUyMCUyMCUyMGNoLnNldEJ1c091dHB1dENvbnRyb2wlMjhjYW5saWIuY2FuRFJJVkVSX05PUk1BTCUyOSUwQSUyMCUyMCUyMCUyMGNoLnNldEJ1c1BhcmFtcyUyOGNhbmxpYi5jYW5CSVRSQVRFXzFNJTI5JTBBJTIwJTIwJTIwJTIwY2guYnVzT24lMjglMjklMEElMjAlMjAlMjAlMjByZXR1cm4lMjBjaCUwQSUwQSUwQWRlZiUyMGNsb3NlX2NoYW5uZWwlMjhjaCUyOSUzQSUwQSUyMCUyMCUyMCUyMCVFMiU4MCU5RCVFMiU4MCU5RCVFMiU4MCU5REdvJTIwYnVzJTIwb2ZmJTIwYW5kJTIwY2xvc2UlMjBjaGFubmVsLiVFMiU4MCU5RCVFMiU4MCU5RCVFMiU4MCU5RCUwQSUyMCUyMCUyMCUyMGNoLmJ1c09mZiUyOCUyOSUwQSUyMCUyMCUyMCUyMGNoLmNsb3NlJTI4JTI5JTBBJTBBZGVmJTIwc2VuZF9yZWNlaXZlX3JhdyUyOGNoMCUyQyUyMGNoMSUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMyUyMHNlbmQlMjBhJTIwQ0FOJTIwZnJhbWUlMjB3aXRob3V0JTIwdXNpbmclMjBrdmFkYmxpYiUwQSUyMCUyMCUyMCUyMGZyYW1lJTIwJTNEJTIwRnJhbWUlMjhpZF8lM0Q0JTJDZGF0YSUzRGJ5dGVhcnJheSUyOGIlMjAlRTIlODAlOTklNUN4MDAlNUN4MDAlNUN4MDAlNUN4MDAlNUN4ZDglNUN4MDAlNUN4MWUlNUN4MDAlMjAlRTIlODAlOTklMjklMjklMEElMjAlMjAlMjAlMjBwcmludCUyOCVFMiU4MCU5RFNlbmRpbmclMjBmcmFtZSUyMCUzQSUyMCUyNXMlRTIlODAlOUQlMjAlMjUlMjBmcmFtZSUyOSUwQSUyMCUyMCUyMCUyMGNoMC53cml0ZSUyOGZyYW1lJTI5JTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwcmVhZCUyMG1lc3NhZ2UlMjBiYWNrJTBBJTIwJTIwJTIwJTIwcHJpbnQlMjglRTIlODAlOURSZWNlaXZpbmclMjBmcmFtZSUzQSUyMCUyNXMlRTIlODAlOUQlMjAlMjUlMjBzdHIlMjhjaDEucmVhZCUyOCUyOSUyOSUyOSUwQSUwQSUwQWNoMCUyMCUzRCUyMG9wZW5fY2hhbm5lbCUyODAlMjklMEFjaDElMjAlM0QlMjBvcGVuX2NoYW5uZWwlMjgxJTI5JTBBJTBBc2VuZF9yZWNlaXZlX3JhdyUyOGNoMCUyMCUyQyUyMGNoMSUyOSUwQSUwQWNsb3NlX2NoYW5uZWwlMjhjaDAlMjklMEFjbG9zZV9jaGFubmVsJTI4Y2gxJTI5"][vc_column_text]Listing 1: Code sample showing how to write and receive a CAN message. There should be no big surprises here1, sending the CAN message on channel zero is done with ch0.write(), receiving is done on channel one using ch1.read(). Running this small sample shows the following on standard out:[/vc_column_text][vc_code_raket code="U2VuZGluZyUyMGZyYW1lJTNBJTIwRnJhbWUlMjhpZCUzRDQlMkMlMjBkYXRhJTNEYnl0ZWFycmF5JTI4YiVFMiU4MCU5OSU1Q3gwMCU1Q3gwMCU1Q3gwMCU1Q3gwMCU1Q3hkOCU1Q3gwMCU1Q3gxZSU1Q3gwMCVFMiU4MCU5OSUyOSUyQyUyMGRsYyUzRDglMkMlMjBmbGFncyUzRDAlMkMlMjB0aW1lc3RhbXAlM0ROb25lJTI5JTBBUmVjZWl2aW5nJTIwZnJhbWUlM0ElMjBGcmFtZSUyOGlkJTNENCUyQyUyMGRhdGElM0RieXRlYXJyYXklMjhiJUUyJTgwJTk5JTVDeDAwJTVDeDAwJTVDeDAwJTVDeDAwJTVDeGQ4JTVDeDAwJTVDeDFlJTVDeDAwJUUyJTgwJTk5JTI5JTJDJTIwZGxjJTNEOCUyQyUyMGZsYWdzJTNEMiUyQyUyMHRpbWVzdGFtcCUzRDQlMjklMEE="][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Binding CAN messages"][vc_column_text]The first step when sending CAN signals is to open a database and associate a CAN frame with a message that is defined in the database.[/vc_column_text][vc_code_raket language="python" code="JTIzJTIwb3BlbiUyMHRoZSUyMGRhdGFiYXNlJTIwd2UlMjB3b3VsZCUyMGxpa2UlMjB0byUyMHVzZSUwQWRiJTIwJTNEJTIwa3ZhZGJsaWIuRGJjJTI4ZmlsZW5hbWUlM0QlRTIlODAlOTlkYl9oaXN0b2dyYW0uZGJjJUUyJTgwJTk5JTI5JTBBJTBBJTIzJTIwZmV0Y2glMjB0aGUlMjBtZXNzYWdlJTIwd2UlMjBhcmUlMjBnb2luZyUyMHRvJTIwdXNlJTIwZnJvbSUyMHRoZSUyMGRhdGFiYXNlJTBBbGltXzAwMiUyMCUzRCUyMGRiLmdldF9tZXNzYWdlX2J5X25hbWUlMjglRTIlODAlOTlMSU1fMDAyJUUyJTgwJTk5JTI5JTBBJTBBJTIzJTIwY3JlYXRlJTIwYSUyMEJvdW5kTWVzc2FnZSUyQyUyMGNvbnRhaW5pbmclMjBhbiUyMGVtcHR5JTIwZnJhbWUlMjB3aXRoJTIwdGhlJTIwY29ycmVjdCUwQSUyMyUyMGlkJTIwYW5kJTIwZGxjLiUwQWJtc2dfMCUyMCUzRCUyMGxpbV8wMDIuYmluZCUyOCUyOSUwQQ=="][vc_column_text]When we bind a database message, we get a new object with space allocated for ID, DLC and Data, and at the same time the ID and DLC has been set according to the message specification. Now we can use the newly created BoundSignal to access our signals as attributes.[/vc_column_text][vc_code_raket language="python" code="JTIzJTIwV2UlMjBzZXQlMjB0aGUlMjByYXclMjB2YWx1ZSUyMG9mJTIwb3VyJTIwc2lnbmFsJTIwJUUyJTgwJTk5TG9hZCUyMCVFMiU4MCU5OSUyMHVzaW5nJTIwYXR0cmlidXRlcyUwQWJtc2dfMC5Mb2FkLnJhdyUyMCUzRCUyMDB4ZmYlMEElMEFwcmludCUyOCVFMiU4MCU5RFRoZSUyMGJvdW5kJTIwbWVzc2FnZSUyMG5vdyUyMGxvb2tzJTIwbGlrZSUzQSU1Q24lMjVzJUUyJTgwJTlEJTIwJTI1JTIwYm1zZ18wJTI5JTBBJTBBcHJpbnQlMjglRTIlODAlOURMb2FkJTIwc2lnbmFsJTIwYXMlMjByYXclMjB2YWx1ZSUzQSUyMCUyNXMlRTIlODAlOUQlMjAlMjUlMjBibXNnXzAuTG9hZC5yYXclMjklMEFwcmludCUyOCVFMiU4MCU5RGFuZCUyMGFzJTIwcGh5c2ljYWwlMjB2YWx1ZSUzQSUyMCUyNXMlRTIlODAlOUQlMjAlMjUlMjBibXNnXzAuTG9hZC5waHlzJTI5JTBBJTBBJTIzJTIwTW9yZSUyMG9mdGVuJTIwd2UlMjBhcmUlMjBpbnRlcmVzdGVkJTIwaW4lMjBzZXR0aW5nJTIwdGhlJTIwcGh5c2ljYWwlMjB2YWx1ZSUyMG9mJTIwdGhlJTIwc2lnbmFsJTBBYm1zZ18wLkxvYWQucGh5cyUyMCUzRCUyMDc1JTBBJTBBcHJpbnQlMjglRTIlODAlOURMb2FkJTIwc2lnbmFsJTIwYXMlMjByYXclMjB2YWx1ZSUzQSUyMDB4JTI1eCVFMiU4MCU5RCUyMCUyNSUyMGJtc2dfMC5Mb2FkLnJhdyUyOSUwQXByaW50JTI4JUUyJTgwJTlEYW5kJTIwYXMlMjBwaHlzaWNhbCUyMHZhbHVlJTNBJTIwJTI1cyVFMiU4MCU5RCUyMCUyNSUyMGJtc2dfMC5Mb2FkLnBoeXMlMjk="][vc_column_text]Running the above code results in the following on standard output:[/vc_column_text][vc_code_raket code="VGhlJTIwYm91bmQlMjBtZXNzYWdlJTIwbm93JTIwbG9va3MlMjBsaWtlJTNBJTBBRnJhbWUlM0ElMjBtZXNzYWdlX25hbWUlM0FMSU1fMDAyJTJDJTIwZGF0YSUzQWJ5dGVhcnJheSUyOGIlRTIlODAlOTklNUN4ZmYlNUN4MDAlNUN4MDAlNUN4MDAlNUN4MDAlNUN4MDAlNUN4MDAlNUN4MDAlRTIlODAlOTklMjklMEFMb2FkJTIwc2lnbmFsJTIwYXMlMjByYXclMjB2YWx1ZSUzQSUyMDI1NSUwQWFuZCUyMGFzJTIwcGh5c2ljYWwlMjB2YWx1ZSUzQSUyMDMuNTczMzExMDg0MDI4MjgzNWUtNDMlMEFMb2FkJTIwc2lnbmFsJTIwYXMlMjByYXclMjB2YWx1ZSUzQSUyMDB4NDI5NjAwMDAlMEFhbmQlMjBhcyUyMHBoeXNpY2FsJTIwdmFsdWUlM0ElMjA3NS4w"][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Send and receive CAN frames"][vc_column_text]Now that we have our bound message with the correct content, we use ._frame to extract the frame in a format suitable for the call to write().[/vc_column_text][vc_code_raket language="python" code="JTIzJTIwc2VuZCUyMGElMjBDQU4lMjBmcmFtZSUyMHVzaW5nJTIwc3RhbmRhcmQlMjB3cml0ZSUyMCUyOCUyOSUyMG1ldGhvZCUwQWNoMC53cml0ZSUyOGJtc2dfMC5fZnJhbWUlMjklMEElMEElMjMlMjBjcmVhdGUlMjBhbm90aGVyJTIwQm91bmRTaWduYWwlMkMlMjB0aGlzJTIwdGltZSUyMGNvbnRhaW5pbmclMjBhJTIwZnJhbWUlMjByZWFkJTIwZnJvbSUwQSUyMyUyMGNoYW5uZWwlMjAxJTBBYm1zZ18xJTIwJTNEJTIwbGltXzAwMi5iaW5kJTI4Y2gxLnJlYWQlMjh0aW1lb3V0JTNEMTAwJTI5JTI5"][vc_column_text]Taking this new code and combining it with our first code sample, we end up with the following final result:[/vc_column_text][vc_code_raket language="python" code="ZnJvbSUyMGNhbmxpYiUyMGltcG9ydCUyMGNhbmxpYiUwQWZyb20lMjBjYW5saWIlMjBpbXBvcnQlMjBrdmFkYmxpYiUwQSUwQWRlZiUyMG9wZW5fY2hhbm5lbCUyOGNoYW5uZWwlMjklM0ElMEElMjAlMjAlMjAlMjAlRTIlODAlOUQlRTIlODAlOUQlRTIlODAlOURPcGVuJTIwYSUyMG5ldyUyMGNoYW5uZWwlMkMlMjBzZXQlMjBiaXRyYXRlJTIwMU1iaXQlMkZzJTIwYW5kJTIwZ28lMjBidXMlMjBvbi4lMjAlRTIlODAlOUQlRTIlODAlOUQlRTIlODAlOUQlMEElMjAlMjAlMjAlMjBjaCUyMCUzRCUyMGNhbmxpYi5vcGVuQ2hhbm5lbCUyOGNoYW5uZWwlMkMlMjBjYW5saWIuY2FuT1BFTl9BQ0NFUFRfVklSVFVBTCUyOSUwQSUyMCUyMCUyMCUyMGNoLnNldEJ1c091dHB1dENvbnRyb2wlMjglMjBjYW5saWIuY2FuRFJJVkVSX05PUk1BTCUyOSUwQSUyMCUyMCUyMCUyMGNoLnNldEJ1c1BhcmFtcyUyOCUyMGNhbmxpYi5jYW5CSVRSQVRFXzFNJTI5JTBBJTIwJTIwJTIwJTIwY2guYnVzT24lMjglMjklMEElMjAlMjAlMjAlMjByZXR1cm4lMjBjaCUwQSUwQWRlZiUyMGNsb3NlX2NoYW5uZWwlMjhjaCUyOSUzQSUwQSUyMCUyMCUyMCUyMCVFMiU4MCU5RCVFMiU4MCU5RCVFMiU4MCU5REdvJTIwYnVzJTIwb2ZmJTIwYW5kJTIwY2xvc2UlMjBjaGFubmVsLiVFMiU4MCU5RCVFMiU4MCU5RCVFMiU4MCU5RCUwQSUyMCUyMCUyMCUyMGNoLmJ1c09mZiUyOCUyOSUwQSUyMCUyMCUyMCUyMGNoLmNsb3NlJTI4JTI5JTBBJTBBZGVmJTIwc2VuZF9yZWNlaXZlX3NpZyUyOGNoMCUyQyUyMGNoMSUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMyUyMG9wZW4lMjB0aGUlMjBkYXRhYmFzZSUyMHdlJTIwd291bGQlMjBsaWtlJTIwdG8lMjB1c2UlMEElMjAlMjAlMjAlMjBkYiUyMCUzRCUyMGt2YWRibGliLkRiYyUyOGZpbGVuYW1lJTNEJUUyJTgwJTk5ZGJfaGlzdG9ncmFtLmRiYyVFMiU4MCU5OSUyOSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMGZldGNoJTIwdGhlJTIwbWVzc2FnZSUyMHdlJTIwYXJlJTIwZ29pbmclMjB0byUyMHVzZSUyMGZyb20lMjB0aGUlMjBkYXRhYmFzZSUwQSUyMCUyMCUyMCUyMGxpbV8wMDIlMjAlM0QlMjBkYi5nZXRfbWVzc2FnZV9ieV9uYW1lJTI4JUUyJTgwJTk5TElNXzAwMiVFMiU4MCU5OSUyOSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMGNyZWF0ZSUyMGElMjBCb3VuZE1lc3NhZ2UlMkMlMjBjb250YWluaW5nJTIwYW4lMjBlbXB0eSUyMGZyYW1lJTIwd2l0aCUyMHRoZSUyMGNvcnJlY3QlMEElMjAlMjAlMjAlMjAlMjMlMjBpZCUyMGFuZCUyMGRsYy4lMEElMjAlMjAlMjAlMjBibXNnXzAlMjAlM0QlMjBsaW1fMDAyLmJpbmQlMjglMjklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBTZXQlMjBzaWduYWwlMjB2YWx1ZSUwQSUyMCUyMCUyMCUyMGJtc2dfMC5Mb2FkLnBoeXMlMjAlM0QlMjA3NSUwQSUwQSUyMCUyMCUyMCUyMHByaW50JTI4JUUyJTgwJTk5U2VuZGluZyUzQSUyMCUyNXMlRTIlODAlOTklMjAlMjUlMjBibXNnXzAuTG9hZCUyOSUwQSUyMCUyMCUyMCUyMCUyMyUyMHNlbmQlMjBhJTIwQ0FOJTIwZnJhbWUlMjB1c2luZyUyMHN0YW5kYXJkJTIwd3JpdGUlMjglMjklMjBtZXRob2QlMEElMjAlMjAlMjAlMjBjaDAud3JpdGUlMjhibXNnXzAuX2ZyYW1lJTI5JTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwY3JlYXRlJTIwYW5vdGhlciUyMEJvdW5kU2lnbmFsJTJDJTIwdGhpcyUyMHRpbWUlMjBjb250YWluaW5nJTIwYSUyMGZyYW1lJTIwcmVhZCUyMGZyb20lMEElMjAlMjAlMjAlMjAlMjMlMjBjaGFubmVsJTIwMSUwQSUyMCUyMCUyMCUyMGJtc2dfMSUyMCUzRCUyMGxpbV8wMDIuYmluZCUyOGNoMS5yZWFkJTI4dGltZW91dCUzRDEwMCUyOSUyOSUwQSUwQSUyMCUyMCUyMCUyMHByaW50JTI4JUUyJTgwJTk5UmVjZWl2ZWQlMjBzaWduYWwlMjBMb2FkJTNBJTIwJTI1cyUyMCUyNXMlRTIlODAlOTklMjAlMjUlMjAlMjhibXNnXzEuTG9hZC5waHlzJTJDJTIwYm1zZ18xLkxvYWQudW5pdCUyOSUyOSUwQSUwQWNoMCUyMCUzRCUyMG9wZW5fY2hhbm5lbCUyODAlMjklMEFjaDElMjAlM0QlMjBvcGVuX2NoYW5uZWwlMjgxJTI5JTBBJTBBc2VuZF9yZWNlaXZlX3NpZyUyOGNoMCUyQyUyMGNoMSUyOSUwQSUwQWNsb3NlX2NoYW5uZWwlMjhjaDAlMjklMEFjbG9zZV9jaGFubmVsJTI4Y2gxJTI5"][vc_column_text]Running our last code sample gives the following result.[/vc_column_text][vc_code_raket code="U2VuZGluZyUzQSUyMCUzQ0JvdW5kU2lnbmFsJTNBJTIwbmFtZSUzRCVFMiU4MCU5OUxvYWQlRTIlODAlOTklMkMlMjBwaHlzJTNENzUuMCUzRSUyQyUyMHVuaXQlM0FtZXRyaWMlMjB0b24lMEFSZWNlaXZlZCUyMHNpZ25hbCUyMExvYWQlM0ElMjA3NS4wJTIwbWV0cmljJTIwdG9u"][vc_column_text]We have now scratched the surface on how to take advantage of the Kvaser database library (kvadblib) in order to use signals instead of creating and sending CAN messages manually.[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Footnotes"][vc_column_text]1 The usage of canlib.Frame is new in v1.5 so that could have been a small surprise… ;-)[/vc_column_text][/vc_column][/vc_row] [post_title] => Send and receive database signals [post_excerpt] => [post_status] => publish [comment_status] => closed [ping_status] => closed [post_password] => [post_name] => send-receive-database-signals [to_ping] => [pinged] => [post_modified] => 2022-10-04 12:31:38 [post_modified_gmt] => 2022-10-04 12:31:38 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?post_type=developer_blog&p=39854 [menu_order] => 0 [post_type] => developer_blog [post_mime_type] => [comment_count] => 0 [filter] => raw ) [7] => WP_Post Object ( [ID] => 19681 [post_author] => 5 [post_date] => 2018-02-08 21:32:24 [post_date_gmt] => 2018-02-08 21:32:24 [post_content] => [vc_row][vc_column][vc_header_raket][/vc_column][/vc_row][vc_row][vc_column width="1/2"][vc_column_text]The latest release of Embedded Systems Academy’s (EmSA) CANopen Magic software now supports both CANopen and CANopen FD. The network analysis and test software works with all Kvaser hardware platforms, but since an interface that supports CAN FD is a prerequisite for accessing the new CANopen FD functionality, Kvaser’s wide range of CAN FD compatible interfaces are ideally suited to the task.[/vc_column_text][/vc_column][vc_column width="1/2"][vc_single_image image="19683" onclick="custom_link" link="https://www.kvaser.com/associates/emsa/"][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]EmSA participated in the CANopen FD special interest group, which released a first version of CANopen FD (CiA 1301) in September. Benefits include up to 64 byte of data for TPDOs (the previous limit was 8 byte), plus an USDO mesh definition, whereby every node can send client requests to every other node.[/vc_column_text][vc_column_text] Explaining the challenges of moving from CANopen to CANopen FD, Andy Ayre, EmSA’s CAN bus expert said: “There are multiple protocol changes. The service data object (SDO) protocol has been completely replaced with Universal Service Data Object (USDO), a change that is not backwards compatible. Anyone familiar with CANopen will not understand the new USDOs unless there is high-level interpretation and the ability to generate the messages in order to test and access nodes. CANopen Magic provides all of that functionality.” [/vc_column_text][vc_column_text] For those considering whether a move to CANopen FD is worthwhile, Ayre advises: “SDOs are intended as point-to-point communication, however, there is a limit on the number of SDO channels available. In general, each node has one SDO channel which means it can only be accessed by one other node at a time. The traditional solution is to have a master that is the hub for all SDO communications, which is inefficient. With USDOs all of these problems are avoided. Any node can read from or write to another node without worrying about what other nodes are doing, making network design much more flexible. The other major advantage is that PDOs can now have up to 64 bytes of process data, resulting in more efficient transfer of real-time data on the network.” [/vc_column_text][vc_column_text]Find out more about CANopen Magic or any of EmSA’s other products or training classes here and read about CANopen FD here.[/vc_column_text][/vc_column][/vc_row] [post_title] => CANopen FD software at the ready [post_excerpt] => The latest release of Embedded Systems Academy’s (EmSA) CANopen Magic software now supports both CANopen and CANopen FD. [post_status] => publish [comment_status] => closed [ping_status] => closed [post_password] => [post_name] => canopen-fd-software-ready [to_ping] => [pinged] => [post_modified] => 2022-09-29 05:16:50 [post_modified_gmt] => 2022-09-29 05:16:50 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?p=19681 [menu_order] => 0 [post_type] => post [post_mime_type] => [comment_count] => 0 [filter] => raw ) [8] => WP_Post Object ( [ID] => 39855 [post_author] => 14 [post_date] => 2018-02-08 12:36:22 [post_date_gmt] => 2018-02-08 12:36:22 [post_content] => [vc_row][vc_column][vc_single_image image="15487"][vc_column_text]This is the first post in a 2-part series about how to manage DBC databases using the Kvaser database library (kvadblib) and Python:
  1. Handling CAN databases in Python
  2. Send and receive database signals
With the release of CANlib SDK v5.22, the database library (kvaDbLib) has been overhauled and the Python canlib wrapper package (v1.5) have added support for database handling through the kvadblib module. The kvaDbLib library is used for creating, writing, reading and modifying DBC databases.1 We will in this first post take a look at how to create and examine a DBC database using the Python canlib wrapper package. The Python canlib package is released as a Python Wheel for easy installing using pip install. If you don’t have it installed yet, take a look at the blog post Python samples are now bundled in a package2 for more information on the subject.[/vc_column_text][vc_raw_html]JTNDc3BhbiUyMGlkJTNEJTIyZm5yLjMlMjIlM0UlM0MlMkZzcGFuJTNFJTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Creating a database"][vc_column_text]A database is used to translate raw CAN data into human readable signals. In this example we’ll work with a hypothetical vehicle database. Let us get started right away by creating a database from scratch. We begin with importing kvadblib from the canlib python package and create a new database named “Histogram”3 , add a message with id “402”, dlc “8” and name the message “LIM_002”.[/vc_column_text][vc_code_raket language="python" code="ZnJvbSUyMGNhbmxpYiUyMGltcG9ydCUyMGt2YWRibGliJTBBJTBBJTIzJTIwQ3JlYXRlJTIwYSUyMG5ldyUyMGRhdGFiYXNlJTBBZGIlMjAlM0QlMjBrdmFkYmxpYiUyMC5EYmMlMjhuYW1lJTNEJUUyJTgwJTk5SGlzdG9ncmFtJTIwJUUyJTgwJTk5JTIwJTI5JTBBJTBBJTIzJTIwQWRkJTIwbWVzc2FnZXMlMEFtZXNzYWdlJTIwJTNEJTIwZGIubmV3X21lc3NhZ2UlMjhuYW1lJTNEJUUyJTgwJTk5TElNXzAwMiVFMiU4MCU5OSUyMCUyQyUwQSUwOSUwOSUwOSUyMGlkJTNENDAyJTJDJTBBJTA5JTA5JTA5JTIwZGxjJTNEOCUyOQ=="][vc_column_text]The next step is to add a signal to the message we just created. Let us add a float signal named “Load” with some unit and comment text.[/vc_column_text][vc_code_raket language="python" code="JTIwJTIwJTIwbWVzc2FnZSUyMC4lMjBuZXdfc2lnbmFsJTI4JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwbmFtZSUzRCVFMiU4MCU5OUxvYWQlMjAlRTIlODAlOTklMjAlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjB0eXBlJTNEa3ZhZGJsaWIlMjAuJTIwU2lnbmFsVHlwZSUyMC5GTE9BVCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMGJ5dGVfb3JkZXIlM0RrdmFkYmxpYiUyMC4lMjBTaWduYWxCeXRlT3JkZXIlMjAuSU5URUwlMkMlMjAlMjMlMjBkZWZhdWx0JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwbW9kZSUzRGt2YWRibGliJTIwLiUyMFNpZ25hbE11bHRpcGxleE1vZGUlMjAuTVVYX0lOREVQRU5ERU5UJTJDJTIwJTIzJTIwZGVmYXVsdCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMHNpemUlM0RrdmFkYmxpYiUyMC4lMjBWYWx1ZVNpemUlMjglMjBzdGFydGJpdCUzRDAlMkMlMjBsZW5ndGglM0QzMiUyOSUyMCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMHNjYWxpbmclM0RrdmFkYmxpYiUyMC4lMjBWYWx1ZVNjYWxpbmclMjglMjBmYWN0b3IlM0QxJTJDJTIwb2Zmc2V0JTNEMCUyOSUyMCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMGxpbWl0cyUzRGt2YWRibGliJTIwLiUyMFZhbHVlTGltaXRzJTI4bWluJTNEMCUyQyUyMG1heCUzRDEwMCUyOSUyMCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMHVuaXQlM0QlRTIlODAlOTklMjBtZXRyaWMlMjB0b24lMjAlRTIlODAlOTklMjAlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjBjb21tZW50JTNEJUUyJTgwJTk5TWVhc3VyZWQlMjBsb2FkJTIwaW4lMjBzeXN0ZW0lMjAuJTIwJUUyJTgwJTk5JTIwJTI5"][vc_raw_html]JTNDc3BhbiUyMGlkJTNEJTIyZm5yLjQlMjIlM0UlM0MlMkZzcGFuJTNFJTNDYnIlM0U=[/vc_raw_html][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][vc_column_text] There are a lot of information that is specified when creating a signal, so let us quickly go through those options: name A unique string identifying the signal. This name must be unique across all signals in the database. type A signal can be specified as SIGNEDUNSIGNED, (DOUBLE4 ), or FLOAT. The signal may also be an enumerated type, and in that case we set the type as ENUM_SIGNED or ENUM_UNSIGNED in the Python wrapper. byte_order The signal byte order can be either INTEL or MOTOROLA, defaults to INTEL. mode The default mode for a signal is MUX_INDEPENDENT, which means that this signal is a normal signal.5 In a CAN message a signal can be defined as a multiplexor by setting mode to MUX_SIGNAL. This multiplexor now selects which multiplexed signal is transmitted in the same frame. The multiplexed signals should set mode to the (positive integer) multiplexed value the multiplexor should have for the multiplexed signal to be used. Only simple multiplexing is currently supported in kvadblib. For simple multiplexing only one multiplexor signal can be defined in a message, and for each multiplexed signal only one multiplexor value can be defined. size The position of the signal’s first bit (aka as the startbit), and the length of the signal in number of bits. scaling The scaling consists of a factor and an offset. A raw CAN value will be multiplied by the factor and then incremented with the offset to be converted to a physical value. limits The minimum and maximum values of this signal’s physical value. unit A string representation of the signal’s unit. comment A string that can be used to document the signal. Let us finish up the database by defining three more messages and signals.[/vc_column_text][vc_code_raket language="python" code="bWVzc2FnZSUyMCUzRCUyMGRiLm5ld19tZXNzYWdlJTI4bmFtZSUzRCVFMiU4MCU5OUVDTV8wMDQlRTIlODAlOTklMjAlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZCUzRDUwNCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGRsYyUzRDglMjklMEElMEFtZXNzYWdlJTIwLiUyMG5ld19zaWduYWwlMjhuYW1lJTNEJUUyJTgwJTk5RnVlbCUyMCVFMiU4MCU5OSUyMCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHR5cGUlM0RrdmFkYmxpYiUyMC4lMjBTaWduYWxUeXBlJTIwLkZMT0FUJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc2l6ZSUzRGt2YWRibGliJTIwLiUyMFZhbHVlU2l6ZSUyOCUyMHN0YXJ0Yml0JTNEMCUyQyUyMGxlbmd0aCUzRDMyJTI5JTIwJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbGltaXRzJTNEa3ZhZGJsaWIlMjAuJTIwVmFsdWVMaW1pdHMlMjhtaW4lM0QwJTJDJTIwbWF4JTNEMzAwJTI5JTIwJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdW5pdCUzRCVFMiU4MCU5OSUyMGwlMjAlMkYxMDAlMjBrbSVFMiU4MCU5OSUyMCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNvbW1lbnQlM0QlRTIlODAlOTlDdXJyZW50JTIwZnVlbCUyMGNvbnN1bXB0aW9uJTIwLiUyMCVFMiU4MCU5OSUyMCUyOSUwQSUwQW1lc3NhZ2UlMjAlM0QlMjBkYi5uZXdfbWVzc2FnZSUyOG5hbWUlM0QlRTIlODAlOTlFQ01fMDAzJUUyJTgwJTk5JTIwJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWQlM0Q1MDMlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBkbGMlM0Q4JTI5JTBBJTBBbWVzc2FnZSUyMC4lMjBuZXdfc2lnbmFsJTI4bmFtZSUzRCVFMiU4MCU5OUVuZ2luZVRlbXAlMjAlRTIlODAlOTklMjAlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB0eXBlJTNEa3ZhZGJsaWIlMjAuJTIwU2lnbmFsVHlwZSUyMC5GTE9BVCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNpemUlM0RrdmFkYmxpYiUyMC4lMjBWYWx1ZVNpemUlMjglMjBzdGFydGJpdCUzRDAlMkMlMjBsZW5ndGglM0QzMiUyOSUyMCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxpbWl0cyUzRGt2YWRibGliJTIwLiUyMFZhbHVlTGltaXRzJTI4bWluJTNELTYwJTJDJTIwbWF4JTNEMjAwJTI5JTIwJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdW5pdCUzRCVFMiU4MCU5OSUyMENlbHNpdXMlMjAlRTIlODAlOTklMjAlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjb21tZW50JTNEJUUyJTgwJTk5U3lzdGVtJTIwdGVtcGVyYXR1cmUlMjBjb25zdW1wdGlvbiUyMC4lMjAlRTIlODAlOTklMjAlMjklMEElMEFtZXNzYWdlJTIwJTNEJTIwZGIubmV3X21lc3NhZ2UlMjhuYW1lJTNEJUUyJTgwJTk5RUNNXzAwMSVFMiU4MCU5OSUyMCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlkJTNENTAxJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZGxjJTNEOCUyOSUwQSUwQW1lc3NhZ2UlMjAuJTIwbmV3X3NpZ25hbCUyOG5hbWUlM0QlRTIlODAlOTlFbmdpbmVTcGVlZCUyMCVFMiU4MCU5OSUyMCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHR5cGUlM0RrdmFkYmxpYiUyMC4lMjBTaWduYWxUeXBlJTIwLlVOU0lHTkVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc2l6ZSUzRGt2YWRibGliJTIwLiUyMFZhbHVlU2l6ZSUyOCUyMHN0YXJ0Yml0JTNEMCUyQyUyMGxlbmd0aCUzRDMyJTI5JTIwJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbGltaXRzJTNEa3ZhZGJsaWIlMjAuJTIwVmFsdWVMaW1pdHMlMjhtaW4lM0QwJTJDJTIwbWF4JTNENjAwMCUyOSUyMCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHVuaXQlM0QlRTIlODAlOTlycG0lRTIlODAlOTklMjAlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjb21tZW50JTNEJUUyJTgwJTk5Q3VycmVudCUyMGVuZ2luZSUyMHNwZWVkJTIwLiUyMCVFMiU4MCU5OSUyMCUyOQ=="][vc_column_text]The last step is to save our new database to a file and close it.[/vc_column_text][vc_code_raket language="python" code="JTIzJTIwd3JpdGUlMjBkYXRhYmFzZSUyMGYlMjBpJTIwbCUyMGUlMEFkYi4lMjB3cml0ZV9maWxlJTIwJTI4JTIwJUUyJTgwJTk5ZGJfaGlzdG9ncmFtJTIwLiUyMGRiYyUyMCVFMiU4MCU5OSUyMCUyOSUwQWRiLiUyMGNsb3NlJTIwJTI4JTI5JTBB"][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Examining our database"][vc_column_text]Let us now take a look at the DBC database we just created. We start by just printing the contents from Python:[/vc_column_text][vc_code_raket language="python" code="aW1wb3J0JTIwdGV4dHdyYXAlMEFmcm9tJTIwY2FubGliJTIwaW1wb3J0JTIwa3ZhZGJsaWIlMEElMEF3aXRoJTIwa3ZhZGJsaWIlMjAuRGJjJTI4JTIwZmlsZW5hbWUlM0QlRTIlODAlOTlkYl9oaXN0b2dyYW0lMjAuJTIwZGJjJTIwJUUyJTgwJTk5JTIwJTI5JTIwYXMlMjBkYiUzQSUwQSUyMCUyMCUyMCUyMHByaW50JTIwJTI4ZGIlMjklMEElMjAlMjAlMjAlMjBmb3IlMjBtZXNzYWdlJTIwaW4lMjBkYiUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50JTIwJTI4JTIwJUUyJTgwJTk5JTVDbiUyMCU3QiU3RCUyMCVFMiU4MCU5OSUyMC4lMjBmb3JtYXQlMjhtZXNzYWdlJTI5JTIwJTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZm9yJTIwc2lnbmFsJTIwaW4lMjBtZXNzYWdlJTIwJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjAlMjh0ZXh0d3JhcCUyMC4lMjBmJTIwaSUyMGwlMjBsJTIwJTI4JTIwJUUyJTgwJTk5JTIwJTdCJTdEJTIwJUUyJTgwJTk5JTIwLiUyMGZvcm1hdCUyOCUyMHNpZ25hbCUyMCUyOSUyMCUyQyUyMDgwJTI5JTI5JTBB"][vc_column_text]The textwrap module is used here to get a nice width of 80 characters on the printout:[/vc_column_text][vc_code_raket code="RGJjJTIwZGJfaGlzdG9ncmFtJTNBJTIwZmxhZ3MlM0EwJTJDJTIwcHJvdG9jb2wlM0FDQU4lMkMlMjBtZXNzYWdlcyUzQTQlMEElMEElMjBNZXNzYWdlJTI4bmFtZSUzRCVFMiU4MCU5OUxJTV8wMDIlRTIlODAlOTklMkMlMjBpZCUzRDQwMiUyQyUyMGZsYWdzJTNEJTNDTWVzc2FnZUZsYWcuMCUzQSUyMDAlM0UlMkMlMjBkbGMlM0Q4JTJDJTIwY29tbWVudCUzRCVFMiU4MCU5OSVFMiU4MCU5OSUyOSUwQSUyMCUyMFNpZ25hbCUyOG5hbWUlM0QlRTIlODAlOTlMb2FkJUUyJTgwJTk5JTJDJTIwdHlwZSUzRCUzQ1NpZ25hbFR5cGUuRkxPQVQlM0ElMjAzJTNFJTJDJTBBYnl0ZV9vcmRlciUzRCUzQ1NpZ25hbEJ5dGVPcmRlci5JTlRFTCUzQSUyMDAlM0UlMkMlMjBtb2RlJTNELTElMkMlMjBzaXplJTNEVmFsdWVTaXplJTI4c3RhcnRiaXQlM0QwJTJDJTBBbGVuZ3RoJTNEMzIlMjklMkMlMjBzY2FsaW5nJTNEVmFsdWVTY2FsaW5nJTI4ZmFjdG9yJTNEMS4wJTJDJTIwb2Zmc2V0JTNEMC4wJTI5JTJDJTBBbGltaXRzJTNEVmFsdWVMaW1pdHMlMjhtaW4lM0QwLjAlMkMlMjBtYXglM0QxMDAuMCUyOSUyQyUyMHVuaXQlM0QlRTIlODAlOTltZXRyaWMlMjB0b24lRTIlODAlOTklMkMlMjBjb21tZW50JTNEJUUyJTgwJTk5TWVhc3VyZWQlMEFsb2FkJTIwaW4lMjBzeXN0ZW0uJUUyJTgwJTk5JTI5JTBBJTBBJTIwJTIwTWVzc2FnZSUyOG5hbWUlM0QlRTIlODAlOTlFQ01fMDA0JUUyJTgwJTk5JTJDJTIwaWQlM0Q1MDQlMkMlMjBmbGFncyUzRCUzQ01lc3NhZ2VGbGFnLjAlM0ElMjAwJTNFJTJDJTIwZGxjJTNEOCUyQyUyMGNvbW1lbnQlM0QlRTIlODAlOTklRTIlODAlOTklMjklMEElMjAlMjAlMjBTaWduYWwlMjhuYW1lJTNEJUUyJTgwJTk5RnVlbCVFMiU4MCU5OSUyQyUyMHR5cGUlM0QlM0NTaWduYWxUeXBlLkZMT0FUJTNBJTIwMyUzRSUyQyUwQWJ5dGVfb3JkZXIlM0QlM0NTaWduYWxCeXRlT3JkZXIuSU5URUwlM0ElMjAwJTNFJTJDJTIwbW9kZSUzRC0xJTJDJTIwc2l6ZSUzRFZhbHVlU2l6ZSUyOHN0YXJ0Yml0JTNEMCUyQyUwQWxlbmd0aCUzRDMyJTI5JTJDJTIwc2NhbGluZyUzRFZhbHVlU2NhbGluZyUyOGZhY3RvciUzRDEuMCUyQyUyMG9mZnNldCUzRDAuMCUyOSUyQyUwQWxpbWl0cyUzRFZhbHVlTGltaXRzJTI4bWluJTNEMC4wJTJDJTIwbWF4JTNEMzAwLjAlMjklMkMlMjB1bml0JTNEJUUyJTgwJTk5bCUyRjEwMCUyMGttJUUyJTgwJTk5JTJDJTIwY29tbWVudCUzRCVFMiU4MCU5OUN1cnJlbnQlMjBmdWVsJTBBY29uc3VtcHRpb24uJUUyJTgwJTk5JTI5JTBBJTBBJTIwJTIwTWVzc2FnZSUyOG5hbWUlM0QlRTIlODAlOTlFQ01fMDAzJUUyJTgwJTk5JTJDJTIwaWQlM0Q1MDMlMkMlMjBmbGFncyUzRCUzQ01lc3NhZ2VGbGFnLjAlM0ElMjAwJTNFJTJDJTIwZGxjJTNEOCUyQyUyMGNvbW1lbnQlM0QlRTIlODAlOTklRTIlODAlOTklMjklMEElMjAlMjAlMjBTaWduYWwlMjhuYW1lJTNEJUUyJTgwJTk5RW5naW5lVGVtcCVFMiU4MCU5OSUyQyUyMHR5cGUlM0QlM0NTaWduYWxUeXBlLkZMT0FUJTNBJTIwMyUzRSUyQyUwQWJ5dGVfb3JkZXIlM0QlM0NTaWduYWxCeXRlT3JkZXIuSU5URUwlM0ElMjAwJTNFJTJDJTIwbW9kZSUzRC0xJTJDJTIwc2l6ZSUzRFZhbHVlU2l6ZSUyOHN0YXJ0Yml0JTNEMCUyQyUwQWxlbmd0aCUzRDMyJTI5JTJDJTIwc2NhbGluZyUzRFZhbHVlU2NhbGluZyUyOGZhY3RvciUzRDEuMCUyQyUyMG9mZnNldCUzRDAuMCUyOSUyQyUwQWxpbWl0cyUzRFZhbHVlTGltaXRzJTI4bWluJTNELTYwLjAlMkMlMjBtYXglM0QyMDAuMCUyOSUyQyUyMHVuaXQlM0QlRTIlODAlOTlDZWxzaXVzJUUyJTgwJTk5JTJDJTIwY29tbWVudCUzRCVFMiU4MCU5OVN5c3RlbSUwQXRlbXBlcmF0dXJlJTIwY29uc3VtcHRpb24uJUUyJTgwJTk5JTI5JTBBJTBBJTIwJTIwTWVzc2FnZSUyOG5hbWUlM0QlRTIlODAlOTlFQ01fMDAxJUUyJTgwJTk5JTJDJTIwaWQlM0Q1MDElMkMlMjBmbGFncyUzRCUzQ01lc3NhZ2VGbGFnLjAlM0ElMjAwJTNFJTJDJTIwZGxjJTNEOCUyQyUyMGNvbW1lbnQlM0QlRTIlODAlOTklRTIlODAlOTklMjklMEElMjAlMjAlMjBTaWduYWwlMjhuYW1lJTNEJUUyJTgwJTk5RW5naW5lU3BlZWQlRTIlODAlOTklMkMlMjB0eXBlJTNEJTNDU2lnbmFsVHlwZS5VTlNJR05FRCUzQSUyMDIlM0UlMkMlMEFieXRlX29yZGVyJTNEJTNDU2lnbmFsQnl0ZU9yZGVyLklOVEVMJTNBJTIwMCUzRSUyQyUyMG1vZGUlM0QtMSUyQyUyMHNpemUlM0RWYWx1ZVNpemUlMjhzdGFydGJpdCUzRDAlMkMlMEFsZW5ndGglM0QzMiUyOSUyQyUyMHNjYWxpbmclM0RWYWx1ZVNjYWxpbmclMjhmYWN0b3IlM0QxLjAlMkMlMjBvZmZzZXQlM0QwLjAlMjklMkMlMEFsaW1pdHMlM0RWYWx1ZUxpbWl0cyUyOG1pbiUzRDAuMCUyQyUyMG1heCUzRDYwMDAuMCUyOSUyQyUyMHVuaXQlM0QlRTIlODAlOTlycG0lRTIlODAlOTklMkMlMjBjb21tZW50JTNEJUUyJTgwJTk5Q3VycmVudCUyMGVuZ2luZSUwQXNwZWVkLiVFMiU4MCU5OSUyOQ=="][vc_column_text]Hopefully there were no surprises there, so let us finish this part of this blog series by also see how our database looks in the Kvaser Database Editor.[/vc_column_text][vc_single_image image="19718"][vc_column_text]Figure 1: Looking at our newly created database in the Kvaser Database Editor.[/vc_column_text][vc_column_text]In the middle panel of Kvaser Database Editor, we can see our four defined messages. In Figure 1, the message “LIM_002” is selected and the content of the message is shown below the message. In our case we have a single signal named “Load” with e.g. unit set to “metric ton”. In the right pane, a layout (with shadowed cells) of the current messsage’s data bits is shown. In Figure 1, we can see that the selected signal spans from bit 0 in the first byte through bit 7 in the third byte, this corresponds to the start position 0 and length 32 that was given. Thus ends our first part which described how to create a database. In the next part we will take a look at how use the database while sending and receiving signals[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Footnotes"][vc_column_text]1 The DBC database describes the properties of the CAN network, the nodes connected, and the CAN messages and signals. 2 https://www.kvaser.com/ 3 If you have been browsing around the t samples in the CANlib SDK, you might have come across this particular database before since it can be found in the folder Samples\tScript\Learn more\Misc\histogram. 4 The signal type DOUBLE is currently not implemented in kvadblib. 5 We will only cover normal (non-multiplexed) signals in this article.[/vc_column_text][/vc_column][/vc_row] [post_title] => Handling CAN databases in Python [post_excerpt] => [post_status] => publish [comment_status] => closed [ping_status] => closed [post_password] => [post_name] => handling-can-databases-python [to_ping] => [pinged] => [post_modified] => 2022-11-18 22:46:40 [post_modified_gmt] => 2022-11-18 22:46:40 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?post_type=developer_blog&p=39855 [menu_order] => 0 [post_type] => developer_blog [post_mime_type] => [comment_count] => 0 [filter] => raw ) [9] => WP_Post Object ( [ID] => 19269 [post_author] => 5 [post_date] => 2017-12-12 03:35:31 [post_date_gmt] => 2017-12-12 03:35:31 [post_content] => [vc_row][vc_column css=".vc_custom_1512705386516{margin-top: -20px !important;margin-bottom: -30px !important;}"][/vc_column][/vc_row][vc_row][vc_column css=".vc_custom_1512705416496{margin-top: -60px !important;}"][vc_column_text]Automotive OEMs and Tier 1 Suppliers have a long history of collecting vehicle CAN data. Engineering analysis of the single data set is limited, creating opportunities for software that can perform the post-analysis automatically. As Advanced Driver Assistance Systems (ADAS) and Automated Driving Systems (ADS) evolve to meet the particular demands of autonomous driving, so there is a need to validate and train algorithms to increase safety, identify potential faults and upgrade vehicles throughout their life cycle. ADAS now rely on the collection of large amounts of real-world driving data to do this, but analyzing the thousands of log files involved is a potentially herculean task, particularly as those files come from a multitude of different sources both digital and analog. [/vc_column_text][vc_column_text]Zuragon’s long-established ViCANdo’s software suite captures and analyzes synchronous data from a variety of vehicle networks, including CAN, J1939, NMEA 2000, ISOBUS, LIN, MOST and proprietary data links. ADAS and ADS applications increase the complexity with the addition of sources such as LIDAR, LVTD, bio-sensors, acoustics, multiple high definition cameras, etc. Michael Doseck, President of daVinci Technology Group, Inc., Zuragon’s US distributor explains it best: ‘ViCANdo is capable of exposing, exploring and fusing synchronous data from vehicle networks, sensors, video and LIDAR’ He accepts that the software was a little before its time when it was first launched, but has gained traction with ADAS. He says: “ViCANdo was originally designed to handle ‘big data’ with its very powerful built-in post analysis engine that searches even big log files (>10GB) in seconds and a built-in scripting language that enables ADAS engineers to narrow the search criteria even further.”[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column width="1/2"][vc_column_text]Zuragon now offers car and truck OEMs data capture solutions that range from an Android tablet-based data logger that connects to the CAN bus via a Kvaser Leaf Light to a fully cloud-integrated / over-the-air analytics ADAS development suite. The latest development is a technical cooperation with HARMAN Connected Car Division, to integrate Zuragon’s software suites with HARMAN’s cloud analytics platform for ADAS. [/vc_column_text][/vc_column][vc_column width="1/2"][vc_single_image image="19330"][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]Ultimately HARMAN will integrate ViCANdroid, Zuragon’s Android software into its head units, which will enable ADAS and ADS events data to be collected and post-analyzed from millions of vehicles. “Automatically and unattended, custom complex triggers capture events and upload them to the cloud for analysis, machine learning and AI (artificial intelligence)” explains Doseck. “At the moment, learning and improvement in ADAS systems are based on a small number of OEM-driven miles. This development provides an opportunity to learn from billions of miles driven in diverse, real-world conditions,” he concludes. For more information, please visit Zuragon Technologies Ltd or email daVinci Technology Group at [email protected].[/vc_column_text][/vc_column][/vc_row] [post_title] => Zuragon is capturing and analyzing synchronous ADAS data [post_excerpt] => Zuragon now offers a wide range of car and truck OEM data capture solutions. [post_status] => publish [comment_status] => closed [ping_status] => closed [post_password] => [post_name] => zuragon-capturing-analyzing-synchronous-adas-data [to_ping] => [pinged] => [post_modified] => 2022-09-29 05:16:50 [post_modified_gmt] => 2022-09-29 05:16:50 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?p=19269 [menu_order] => 0 [post_type] => post [post_mime_type] => [comment_count] => 0 [filter] => raw ) ) [post_count] => 10 [current_post] => -1 [in_the_loop] => [post] => WP_Post Object ( [ID] => 39849 [post_author] => 14 [post_date] => 2018-03-27 11:06:25 [post_date_gmt] => 2018-03-27 11:06:25 [post_content] => [vc_row][vc_column][vc_column_text]In version 1.5 of the Python wrapper, a lot of improvements were made. Two new libraries were wrapped; LINlib, which holds the LIN bus API, and kvaDbLib which contains the Database API (and there will be some blog on how to use those in the future). The biggest change was however under the hood were the code has been restructured to make it more maintainable and easier to use. The ‘old’ way is still available but is deprecated and will be removed in the future. This is an example of how it used to look in v1.4:[/vc_column_text][vc_code_raket language="python" code="aW1wb3J0JTIwY2FubGliLmNhbmxpYiUyMGFzJTIwY2FubGliJTBBJTBBJTBBZGVmJTIwc2V0VXBDaGFubmVsJTI4Y2hhbm5lbCUzRDAlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvcGVuRmxhZ3MlM0RjYW5saWIuY2FuT1BFTl9BQ0NFUFRfVklSVFVBTCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJpdHJhdGUlM0RjYW5saWIuY2FuQklUUkFURV81MDBLJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYml0cmF0ZUZsYWdzJTNEY2FubGliLmNhbkRSSVZFUl9OT1JNQUwlMjklM0ElMEElMjAlMjAlMjAlMjBjbCUyMCUzRCUyMGNhbmxpYi5jYW5saWIlMjglMjklMjAlMjMlMjBkZXByZWNhdGVkJTIwaW4lMjB2MS41JTBBJTIwJTIwJTIwJTIwY2glMjAlM0QlMjBjbC5vcGVuQ2hhbm5lbCUyOGNoYW5uZWwlMkMlMjBvcGVuRmxhZ3MlMjklMEElMjAlMjAlMjAlMjBwcmludCUyOCUyMlVzaW5nJTIwY2hhbm5lbCUzQSUyMCUyNXMlMkMlMjBFQU4lM0ElMjAlMjVzJTIyJTIwJTI1JTIwJTI4Y2guZ2V0Q2hhbm5lbERhdGFfTmFtZSUyOCUyOSUyQyUyMCUyMyUyMGRlcHJlY2F0ZWQlMjBpbiUyMHYxLjUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjaC5nZXRDaGFubmVsRGF0YV9FQU4lMjglMjklMjklMjklMjAlMjMlMjBkZXByZWNhdGVkJTIwaW4lMjB2MS41JTBBJTIwJTIwJTIwJTIwY2guc2V0QnVzT3V0cHV0Q29udHJvbCUyOGJpdHJhdGVGbGFncyUyOSUwQSUyMCUyMCUyMCUyMGNoLnNldEJ1c1BhcmFtcyUyOGJpdHJhdGUlMjklMEElMjAlMjAlMjAlMjBjaC5idXNPbiUyOCUyOSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMGNoJTBBJTBBJTBBZGVmJTIwdGVhckRvd25DaGFubmVsJTI4Y2glMjklM0ElMEElMjAlMjAlMjAlMjBjaC5idXNPZmYlMjglMjklMEElMjAlMjAlMjAlMjBjaC5jbG9zZSUyOCUyOSUwQSUwQSUwQWNsJTIwJTNEJTIwY2FubGliLmNhbmxpYiUyOCUyOSUyMCUyMyUyMGRlcHJlY2F0ZWQlMjBpbiUyMHYxLjUlMEFwcmludCUyOCUyMmNhbmxpYiUyMHZlcnNpb24lM0ElMjAlMjVzJTIyJTIwJTI1JTIwY2wuZ2V0VmVyc2lvbiUyOCUyOSUyOSUwQSUwQWNoMCUyMCUzRCUyMHNldFVwQ2hhbm5lbCUyOGNoYW5uZWwlM0QwJTI5JTBBY2gxJTIwJTNEJTIwc2V0VXBDaGFubmVsJTI4Y2hhbm5lbCUzRDElMjklMEElMEFtc2dJZCUyMCUzRCUyMDEwMCUwQW1zZyUyMCUzRCUyMCU1QjElMkMlMjAyJTJDJTIwMyUyQyUyMDQlNUQlMEFmbGclMjAlM0QlMjBjYW5saWIuY2FuTVNHX0VYVCUwQWNoMS53cml0ZSUyOG1zZ0lkJTJDJTIwbXNnJTJDJTIwZmxnJTI5JTBBJTIzJTIwZGVwcmVjYXRlZCUyMGluJTIwdjEuNSUwQSUwQXdoaWxlJTIwVHJ1ZSUzQSUwQSUyMCUyMCUyMCUyMHRyeSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyOG1zZ0lkJTJDJTIwbXNnJTJDJTIwZGxjJTJDJTIwZmxnJTJDJTIwdGltZSUyOSUyMCUzRCUyMGNoMC5yZWFkJTI4JTI5JTIwJTIzJTIwZGVwcmVjYXRlZCUyMGluJTIwdjEuNSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGRhdGElMjAlM0QlMjAlMjclMjcuam9pbiUyOGZvcm1hdCUyOHglMkMlMjAlMjcwMnglMjclMjklMjBmb3IlMjB4JTIwaW4lMjBtc2clMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOCUyMnRpbWUlM0ElMjU5ZCUyMGlkJTNBJTI1OWQlMjBmbGFnJTNBMHglMjUwMnglMjBkbGMlM0ElMjVkJTIwZGF0YSUzQSUyNXMlMjIlMjAlMjUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjh0aW1lJTJDJTIwbXNnSWQlMkMlMjBmbGclMkMlMjBkbGMlMkMlMjBkYXRhJTI5JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYnJlYWslMEElMjAlMjAlMjAlMjBleGNlcHQlMjAlMjhjYW5saWIuY2FuTm9Nc2clMjklMjBhcyUyMGV4JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcGFzcyUwQSUyMCUyMCUyMCUyMGV4Y2VwdCUyMCUyOGNhbmxpYi5jYW5FcnJvciUyOSUyMGFzJTIwZXglM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOGV4JTI5JTBBJTBBdGVhckRvd25DaGFubmVsJTI4Y2gwJTI5JTBBdGVhckRvd25DaGFubmVsJTI4Y2gxJTI5"][vc_column_text]Listing 1: Code to send single frame[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][vc_column_text]Running the above now gives a note that we are using deprecated functions.[/vc_column_text][vc_code_raket code="Y2FubGliJTVDZGVwcmVjYXRpb24ucHklM0EyNDAlM0ElMjBLdkRlcHJlY2F0ZWRVc2FnZSUzQSUyMEElMjBkZXByZWNhdGVkJTIwZnVuY3Rpb24lMjB3YXMlMEElMjBjYWxsZWQlMjElMjBSdW4lMjBweXRob24lMjB3aXRoJTIwLVdkJTIwZmxhZyUyMGZvciUyMG1vcmUlMjBpbmZvcm1hdGlvbi4lMEElMjAlMjAlMjJSdW4lMjBweXRob24lMjB3aXRoJTIwLVdkJTIwZmxhZyUyMGZvciUyMG1vcmUlMjBpbmZvcm1hdGlvbi4lMjIlMjklMjklMEFjYW5saWIlMjB2ZXJzaW9uJTNBJTIwOC4yMiUwQVVzaW5nJTIwY2hhbm5lbCUzQSUyMEt2YXNlciUyMFVTQmNhbiUyMFBybyUyMDJ4SFMlMjB2MiUyMCUyOGNoYW5uZWwlMjAwJTI5JTJDJTIwRUFOJTNBJTIwNzMtMzAxMzAtMDA3NTItOSUwQVVzaW5nJTIwY2hhbm5lbCUzQSUyMEt2YXNlciUyMFVTQmNhbiUyMFBybyUyMDJ4SFMlMjB2MiUyMCUyOGNoYW5uZWwlMjAxJTI5JTJDJTIwRUFOJTNBJTIwNzMtMzAxMzAtMDA3NTItOSUwQXRpbWUlM0ElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjA5JTIwaWQlM0ElMjAlMjAlMjAlMjAlMjAlMjAxMDAlMjAlMjBmbGFnJTNBMHgwNCUyMCUyMGRsYyUzQTQlMjAlMjBkYXRhJTNBMDEwMjAzMDQ="][vc_column_text]Let us run the same code using the warning control flag -Wd as suggested:[/vc_column_text][vc_code_raket code="Y2FubGliJTVDZGVwcmVjYXRpb24ucHklM0EyMzglM0ElMjBLdkRlcHJlY2F0ZWRVc2FnZSUzQSUyMEElMjBkZXByZWNhdGVkJTIwZnVuY3Rpb24lMjB3YXMlMjBjYWxsZWQlMjElMjBSdW4lMEElMjAlMjAlMjAlMjAlMjBweXRob24lMjB3aXRoJTIwLVdkJTIwZmxhZyUyMGZvciUyMG1vcmUlMjBpbmZvcm1hdGlvbi4lMEElMjAlMjAlMjJSdW4lMjBweXRob24lMjB3aXRoJTIwLVdkJTIwZmxhZyUyMGZvciUyMG1vcmUlMjBpbmZvcm1hdGlvbi4lMjIlMjklMjklMEFzZW5kX3NpbmdsZV9mcmFtZV92MS40LnB5JTNBMjMlM0ElMjBLdkRlcHJlY2F0aW9uV2FybmluZyUzQSUyMENyZWF0aW5nJTIwQ0FOTGliJTIwb2JqZWN0cyUyMGlzJTBBJTIwJTIwJTIwJTIwJTIwZGVwcmVjYXRlZCUyQyUyMGFsbCUyMGZ1bmN0aW9uYWxpdHklMjBoYXMlMjBiZWVuJTIwbW92ZWQlMjB0byUyMHRoZSUyMGNhbmxpYiUyMG1vZHVsZSUyMGl0c2VsZi4lMEElMjAlMjBjbCUyMCUzRCUyMGNhbmxpYi5jYW5saWIlMjglMjklMjAlMjMlMjBkZXByZWNhdGVkJTIwaW4lMjB2MS41JTBBc2VuZF9zaW5nbGVfZnJhbWVfdjEuNC5weSUzQTI0JTNBJTIwS3ZEZXByZWNhdGlvbldhcm5pbmclM0ElMjBnZXRWZXJzaW9uJTIwaGFzJTIwYmVlbiUyMGRlcHJlY2F0ZWQlMkMlMEElMjAlMjAlMjAlMjAlMjB1c2UlMjBkbGx2ZXJzaW9uJTIwaW5zdGVhZCUyMSUwQSUyMCUyMHByaW50JTI4JTIyY2FubGliJTIwdmVyc2lvbiUzQSUyMCUyNXMlMjIlMjAlMjUlMjBjbC5nZXRWZXJzaW9uJTI4JTI5JTI5JTBBY2FubGliJTIwdmVyc2lvbiUzQSUyMDguMjElMEFzZW5kX3NpbmdsZV9mcmFtZV92MS40LnB5JTNBOCUzQSUyMEt2RGVwcmVjYXRpb25XYXJuaW5nJTNBJTIwQ3JlYXRpbmclMjBDQU5MaWIlMjBvYmplY3RzJTIwaXMlMEElMjAlMjAlMjAlMjAlMjBkZXByZWNhdGVkJTJDJTIwYWxsJTIwZnVuY3Rpb25hbGl0eSUyMGhhcyUyMGJlZW4lMjBtb3ZlZCUyMHRvJTIwdGhlJTIwY2FubGliJTIwbW9kdWxlJTIwaXRzZWxmLiUwQSUyMCUyMGNsJTIwJTNEJTIwY2FubGliLmNhbmxpYiUyOCUyOSUyMCUyMyUyMGRlcHJlY2F0ZWQlMjBpbiUyMHYxLjUlMEFzZW5kX3NpbmdsZV9mcmFtZV92MS40LnB5JTNBMTAlM0ElMjBLdkRlcHJlY2F0aW9uV2FybmluZyUzQSUyMGdldENoYW5uZWxEYXRhX05hbWUlMjBoYXMlMjBiZWVuJTBBJTIwJTIwJTIwJTIwJTIwZGVwcmVjYXRlZCUyQyUyMHVzZSUyMENoYW5uZWxEYXRhJTI4Q2hhbm5lbC5pbmRleCUyOS5kZXZpY2VfbmFtZSUyMGluc3RlYWQlMjElMEElMjAlMjBwcmludCUyOCUyMlVzaW5nJTIwY2hhbm5lbCUzQSUyMCUyNXMlMkMlMjBFQU4lM0ElMjAlMjVzJTIyJTIwJTI1JTIwJTI4Y2guZ2V0Q2hhbm5lbERhdGFfTmFtZSUyOCUyOSUyQyUyMCUyMyUyMGRlcHJlY2F0ZWQlMjBpbiUyMHYxJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwLjUlMEFjYW5saWIlNUNjYW5saWIlNUNjaGFubmVsLnB5JTNBNTM3JTNBJTIwS3ZEZXByZWNhdGlvbldhcm5pbmclM0ElMjBnZXRDaGFubmVsRGF0YV9OYW1lJTIwaGFzJTIwYmVlbiUwQSUyMCUyMCUyMCUyMCUyMGRlcHJlY2F0ZWQlMkMlMjB1c2UlMjBDaGFubmVsRGF0YSUyOGNoYW5uZWwlMjkuZGV2aWNlX25hbWUlMjBpbnN0ZWFkJTIxJTBBJTIwJTIwcmV0dXJuJTIwd3JhcHBlci5nZXRDaGFubmVsRGF0YV9OYW1lJTI4c2VsZi5pbmRleCUyOSUwQXNlbmRfc2luZ2xlX2ZyYW1lX3YxLjQucHklM0ExMSUzQSUyMEt2RGVwcmVjYXRpb25XYXJuaW5nJTNBJTIwZ2V0Q2hhbm5lbERhdGFfRUFOJTIwaGFzJTIwYmVlbiUwQSUyMCUyMCUyMCUyMCUyMGRlcHJlY2F0ZWQlMkMlMjB1c2UlMjBDaGFubmVsRGF0YSUyOENoYW5uZWwuaW5kZXglMjkuY2FyZF91cGNfbm8lMjBpbnN0ZWFkJTIxJTBBJTIwJTIwY2guZ2V0Q2hhbm5lbERhdGFfRUFOJTI4JTI5JTI5JTI5JTIwJTIzJTIwZGVwcmVjYXRlZCUyMGluJTIwdjEuNSUwQWNhbmxpYiU1Q2NhbmxpYiU1Q2NoYW5uZWwucHklM0E1NTglM0ElMjBLdkRlcHJlY2F0aW9uV2FybmluZyUzQSUyMGdldENoYW5uZWxEYXRhX0VBTiUyMGhhcyUyMGJlZW4lMEElMjAlMjAlMjAlMjAlMjBkZXByZWNhdGVkJTJDJTIwdXNlJTIwQ2hhbm5lbERhdGElMjhjaGFubmVsJTI5LmNhcmRfdXBjX25vJTIwaW5zdGVhZCUyMSUwQSUyMCUyMHJldHVybiUyMHdyYXBwZXIuZ2V0Q2hhbm5lbERhdGFfRUFOJTI4c2VsZi5pbmRleCUyOSUwQVVzaW5nJTIwY2hhbm5lbCUzQSUyMEt2YXNlciUyMFVTQmNhbiUyMFBybyUyMDJ4SFMlMjB2MiUyMCUyOGNoYW5uZWwlMjAwJTI5JTJDJTIwRUFOJTNBJTIwNzMtMzAxMzAtMDA3NTItOSUwQVVzaW5nJTIwY2hhbm5lbCUzQSUyMEt2YXNlciUyMFVTQmNhbiUyMFBybyUyMDJ4SFMlMjB2MiUyMCUyOGNoYW5uZWwlMjAxJTI5JTJDJTIwRUFOJTNBJTIwNzMtMzAxMzAtMDA3NTItOSUwQXNlbmRfc2luZ2xlX2ZyYW1lX3YxLjQucHklM0EzMiUzQSUyMEt2RGVwcmVjYXRpb25XYXJuaW5nJTNBJTIwQ2FsbGluZyUyMENoYW5uZWwud3JpdGUlMjglMjklMjB3aXRoJTBBJTIwJTIwJTIwJTIwJTIwaW5kaXZpZHVhbCUyMGFyZ3VtZW50cyUyMGlzJTIwZGVwcmVjYXRlZCUyQyUyMHBsZWFzZSUyMHVzZSUyMGElMjBGcmFtZSUyMG9iamVjdCUyMG9yJTIwQ2hhbm5lbC4lMEElMjAlMjAlMjAlMjAlMjB3cml0ZV9yYXclMjglMjklMEElMjAlMjBjaDEud3JpdGUlMjhtc2dJZCUyQyUyMG1zZyUyQyUyMGZsZyUyOSUyMCUyMyUyMGRlcHJlY2F0ZWQlMjBpbiUyMHYxLjUlMEF0aW1lJTNBJTIwJTIwJTIwJTIwJTIwJTIwJTIwMTQlMjBpZCUzQSUyMCUyMCUyMCUyMCUyMCUyMDEwMCUyMGZsYWclM0EweDA0JTIwJTIwZGxjJTNBNCUyMCUyMGRhdGElM0EwMTAyMDMwNA=="][vc_column_text]This time we get a detailed notification that creating CANlib objects on line 8 and line 23 is deprecated, and that all functionality has been moved to the canlib module. The getChannelData_EAN on line 11 is also deprecated and should be replaced by ChannelData(channel).card_upc_no . We should also use the Frame object instead of individual arguments in our call to write on line 32 and, even though we do not get a deprecation warning, the Frame object should also be used in our read function on line 36 as well. The Frame object can then be printed directly. Let us adjust our code accordingly:[/vc_column_text][vc_code_raket language="python" code="ZnJvbSUyMGNhbmxpYiUyMGltcG9ydCUyMGNhbmxpYiUyQyUyMEZyYW1lJTBBZnJvbSUyMGNhbmxpYi5jYW5saWIlMjBpbXBvcnQlMjBDaGFubmVsRGF0YSUwQSUwQSUwQWRlZiUyMHNldFVwQ2hhbm5lbCUyOGNoYW5uZWwlM0QwJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3BlbkZsYWdzJTNEY2FubGliLmNhbk9QRU5fQUNDRVBUX1ZJUlRVQUwlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBiaXRyYXRlJTNEY2FubGliLmNhbkJJVFJBVEVfNTAwSyUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJpdHJhdGVGbGFncyUzRGNhbmxpYi5jYW5EUklWRVJfTk9STUFMJTI5JTNBJTBBJTIwJTIwJTIwJTIwY2glMjAlM0QlMjBjYW5saWIub3BlbkNoYW5uZWwlMjhjaGFubmVsJTJDJTIwb3BlbkZsYWdzJTI5JTBBJTIwJTIwJTIwJTIwcHJpbnQlMjglMjJVc2luZyUyMGNoYW5uZWwlM0ElMjAlMjVzJTJDJTIwRUFOJTNBJTIwJTI1cyUyMiUyMCUyNSUyMCUyOENoYW5uZWxEYXRhJTI4Y2hhbm5lbCUyOS5kZXZpY2VfbmFtZSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMENoYW5uZWxEYXRhJTI4Y2hhbm5lbCUyOS5jYXJkX3VwY19ubyUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyOSUwQSUyMCUyMCUyMCUyMGNoLnNldEJ1c091dHB1dENvbnRyb2wlMjhiaXRyYXRlRmxhZ3MlMjklMEElMjAlMjAlMjAlMjBjaC5zZXRCdXNQYXJhbXMlMjhiaXRyYXRlJTI5JTBBJTIwJTIwJTIwJTIwY2guYnVzT24lMjglMjklMEElMjAlMjAlMjAlMjByZXR1cm4lMjBjaCUwQSUwQSUwQWRlZiUyMHRlYXJEb3duQ2hhbm5lbCUyOGNoJTI5JTNBJTBBJTIwJTIwJTIwJTIwY2guYnVzT2ZmJTI4JTI5JTBBJTIwJTIwJTIwJTIwY2guY2xvc2UlMjglMjklMEElMEElMEFwcmludCUyOCUyMmNhbmxpYiUyMHZlcnNpb24lM0ElMjIlMkMlMjBjYW5saWIuZGxsdmVyc2lvbiUyOCUyOSUyOSUwQSUwQWNoMCUyMCUzRCUyMHNldFVwQ2hhbm5lbCUyOGNoYW5uZWwlM0QwJTI5JTBBY2gxJTIwJTNEJTIwc2V0VXBDaGFubmVsJTI4Y2hhbm5lbCUzRDElMjklMEElMEFmcmFtZSUyMCUzRCUyMEZyYW1lJTI4aWRfJTNEMTAwJTJDJTIwZGF0YSUzRCU1QjElMkMlMjAyJTJDJTIwMyUyQyUyMDQlNUQlMkMlMjBmbGFncyUzRGNhbmxpYi5jYW5NU0dfRVhUJTI5JTBBY2gxLndyaXRlJTI4ZnJhbWUlMjklMEElMEF3aGlsZSUyMFRydWUlM0ElMEElMjAlMjAlMjAlMjB0cnklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmcmFtZSUyMCUzRCUyMGNoMC5yZWFkJTI4JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjhmcmFtZSUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJyZWFrJTBBJTIwJTIwJTIwJTIwZXhjZXB0JTIwJTI4Y2FubGliLmNhbk5vTXNnJTI5JTIwYXMlMjBleCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHBhc3MlMEElMjAlMjAlMjAlMjBleGNlcHQlMjAlMjhjYW5saWIuY2FuRXJyb3IlMjklMjBhcyUyMGV4JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjhleCUyOSUwQSUwQXRlYXJEb3duQ2hhbm5lbCUyOGNoMCUyOSUwQXRlYXJEb3duQ2hhbm5lbCUyOGNoMSUyOQ=="][vc_column_text]Listing 2: Code to send single frame using Python canlib v1.5[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][vc_column_text]When we added Frame and ChannelData to the import line, we also took the opportunity to transform the import statement into a slightly more readable format. Running the new code shows a clean output:[/vc_column_text][vc_code_raket code="Y2FubGliJTIwdmVyc2lvbiUzQSUyMDguMjIlMEFVc2luZyUyMGNoYW5uZWwlM0ElMjBLdmFzZXIlMjBVU0JjYW4lMjBQcm8lMjAyeEhTJTIwdjIlMjAlMjhjaGFubmVsJTIwMCUyOSUyQyUyMEVBTiUzQSUyMDczLTMwMTMwLTAwNzUyLTklMEFVc2luZyUyMGNoYW5uZWwlM0ElMjBLdmFzZXIlMjBVU0JjYW4lMjBQcm8lMjAyeEhTJTIwdjIlMjAlMjhjaGFubmVsJTIwMSUyOSUyQyUyMEVBTiUzQSUyMDczLTMwMTMwLTAwNzUyLTklMEFGcmFtZSUyOGlkJTNEMTAwJTJDJTIwZGF0YSUzRGJ5dGVhcnJheSUyOGIlMjclNUN4MDElNUN4MDIlNUN4MDMlNUN4MDQlMjclMjklMkMlMjBkbGMlM0Q0JTJDJTIwZmxhZ3MlM0Q0JTJDJTIwdGltZXN0YW1wJTNEMTAlMjk="][vc_column_text]Take a look through the release notes to get an overview of what has changed, and use the Python warning control flag -Wd to make sure that your code is up-to-date. This new way of doing things will really increase the maintainability of the library, and hopefully will also make it easier to get going with controlling Kvaser devices using Python.[/vc_column_text][/vc_column][/vc_row] [post_title] => Improved API in Python canlib v1.5 [post_excerpt] => [post_status] => publish [comment_status] => closed [ping_status] => closed [post_password] => [post_name] => improved-api-python-canlib-v1-5 [to_ping] => [pinged] => [post_modified] => 2022-10-04 11:08:15 [post_modified_gmt] => 2022-10-04 11:08:15 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?post_type=developer_blog&p=39849 [menu_order] => 0 [post_type] => developer_blog [post_mime_type] => [comment_count] => 0 [filter] => raw ) [comment_count] => 0 [current_comment] => -1 [found_posts] => 469 [max_num_pages] => 47 [max_num_comment_pages] => 0 [is_single] => [is_preview] => [is_page] => [is_archive] => [is_date] => [is_year] => [is_month] => [is_day] => [is_time] => [is_author] => [is_category] => [is_tag] => [is_tax] => [is_search] => [is_feed] => [is_comment_feed] => [is_trackback] => [is_home] => 1 [is_privacy_policy] => [is_404] => [is_embed] => [is_paged] => 1 [is_admin] => [is_attachment] => [is_singular] => [is_robots] => [is_favicon] => [is_posts_page] => 1 [is_post_type_archive] => [query_vars_hash:WP_Query:private] => 37e0cf67b1c66c7db7e41bce7bdb2e99 [query_vars_changed:WP_Query:private] => 1 [thumbnails_cached] => [stopwords:WP_Query:private] => [compat_fields:WP_Query:private] => Array ( [0] => query_vars_hash [1] => query_vars_changed ) [compat_methods:WP_Query:private] => Array ( [0] => init_query_flags [1] => parse_tax_query ) )

News and Events

Improved API in Python canlib v1.5

27/03/2018

In version 1.5 of the Python wrapper, a lot of improvements were made. Two new libraries were wrapped; LINlib, which… Read More

Read More

Introducing the Kvaser Wi-Fi Pairing Tool

20/03/2018

Kvaser’s new Wi-Fi Pairing Tool allows users to connect wirelessly, without a router. This one-button pairing tool circumvents customers having… Read More

Read More

The Use of CAN Bus Message Electrical Signatures for Automotive Reverse Engineering

12/03/2018

C Quigley, D Charles, R McLaughlin of Warwick Control Technologies present a method for reverse engineering the messages on a CAN… Read More

Read More

Kvaser SDK migration from CAN CLASSIC to CAN FD

06/03/2018

The purpose with this document is to show how to migrate from CAN CLASSIC to CAN FD. We will only… Read More

Read More

Database formatter in CanKing

01/03/2018

In the latest version of CanKing (v6.6), a new DBC Formatter has been included. We will here take a look… Read More

Read More

Reading signals from log files

22/02/2018

We have seen in earlier blog articles how to create a DBC database and how to use signals from the… Read More

Read More

Send and receive database signals

15/02/2018

This is the second post in a 2-part series about how to manage DBC databases using the Kvaser database library… Read More

Read More

CANopen FD software at the ready

08/02/2018

The latest release of Embedded Systems Academy’s (EmSA) CANopen Magic software now supports both CANopen and CANopen FD. The network analysis… Read More

Read More

Handling CAN databases in Python

08/02/2018

This is the first post in a 2-part series about how to manage DBC databases using the Kvaser database library… Read More

Read More
Zuragon is capturing and analyzing synchronous ADAS data

Zuragon is capturing and analyzing synchronous ADAS data

12/12/2017

Automotive OEMs and Tier 1 Suppliers have a long history of collecting vehicle CAN data. Engineering analysis of the single… Read More

Read More