Packages

Elixir wrapper for Libplctag, for communication with Allen-Bradley PLC's.

Current section

3 Versions

Jump to

Compare versions

5 files changed
+201 additions
-132 deletions
  @@ -1,4 +1,4 @@
1 - cmake_minimum_required (VERSION 2.8)
1 + cmake_minimum_required (VERSION 2.8...3.19)
2 2
3 3 # prevent expansion of quoted things that could be variables in if()
4 4 if(${CMAKE_VERSION} VERSION_GREATER 3.1)
  @@ -90,6 +90,10 @@ endif()
90 90
91 91 set(BASE_CXX_FLAGS "${BASE_FLAGS}")
92 92
93 + # clear incompatible flags
94 + string(REPLACE "-fPIE" "-fPIC" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
95 + string(REPLACE "-fPIE" "-fPIC" BASE_C_FLAGS "${BASE_C_FLAGS}")
96 +
93 97 # generate version file from CMake info.
94 98 CONFIGURE_FILE("${lib_SRC_PATH}/version.c.in" "${lib_SRC_PATH}/version.c" @ONLY)
95 99
  @@ -268,6 +272,7 @@ install(TARGETS plctag_static DESTINATION lib${LIB_SUFFIX})
268 272 install(FILES "${lib_SRC_PATH}/libplctag.h" DESTINATION include)
269 273 install(FILES "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libplctag.pc" DESTINATION "lib${LIB_SUFFIX}/pkgconfig")
270 274
275 + message(STATUS "Debug CMAKE_C_FLAGS=${CMAKE_C_FLAGS}; BASE_C_FLAGS=${BASE_C_FLAGS}")
271 276
272 277 macro(print_all_variables)
273 278 message(STATUS "print_all_variables------------------------------------------{")
  @@ -1,6 +1,62 @@
1 - # Abex
1 + <div align="center">
2 + <img src="https://raw.githubusercontent.com/valiot/abex/master/assets/images/abex-logo.png" alt="abex Logo" width="512" height="151" />
3 + </div>
2 4
3 - **TODO: Add description**
5 + ***
6 + <br>
7 + <div align="center">
8 + <img src="https://raw.githubusercontent.com/valiot/abex/master/assets/images/valiot-logo-blue.png" alt="Valiot Logo" width="384" height="80" />
9 + </div>
10 + <br>
11 +
12 + ## Usage
13 +
14 + ABex is a GenServer-based implementation to expose tags and can be summarized by:
15 +
16 + 1. Start a Tag process use `start_link/1`.
17 +
18 + The following options are available:
19 + - `ip` - IP PLC address (string).
20 + - `path` - The path to the device containing the named data (string).
21 + - `cpu` - AB CPU models (string): plc,plc5,slc,slc500,micrologix,mlgx,compactlogix,clgx,lgx,controllogix,contrologix,flexlogix,flgx.
22 +
23 + 1. Send requests `get_all_tags/1`, `read/2`, `write/2`.
24 +
25 + ### Get Tags paths.
26 +
27 + To get all available tags use `get_all_tags/1`.
28 +
29 + ```elixir
30 + iex> {:ok, tag_pid} = ABex.Tag.start_link(ip: "20.0.0.70", cpu: "lgx", path: "1,0")
31 + iex> {:ok, tag_list} = ABex.Tag.get_all_tags(tag_pid)
32 + ```
33 +
34 + ### Read tag data
35 +
36 + Use `read/2`. The following options are available:
37 + - `data_type` - Expected data type (string).
38 + - `elem_size` - Expected data type size in bytes (integer).
39 + - `elem_count` - Number of items to request (integer).
40 + - `name` - Tag's name (string).
41 +
42 + ```elixir
43 + iex> {:ok, tag_pid} = ABex.Tag.start_link(ip: "20.0.0.70", cpu: "lgx", path: "1,0")
44 + iex> {:ok, values} = ABex.Tag.read(tag_pid, name: "Some_tag", elem_size: 8, elem_count: 1, data_type: "uint8")
45 + ```
46 +
47 + ### Write a value to a tag
48 +
49 + Use `write/2`. The following options are available:
50 + - `data_type` - Expected data type (string).
51 + - `elem_size` - Expected data type size in bytes (integer).
52 + - `elem_count` - Number of items to request (integer).
53 + - `name` - Tag's name (string).
54 + - `value` - Value to be written on the tag.
55 +
56 + ```elixir
57 + iex> {:ok, tag_pid} = ABex.Tag.start_link(ip: "20.0.0.70", cpu: "lgx", path: "1,0")
58 + iex> :ok = ABex.Tag.read(tag_pid, name: "Some_tag", elem_size: 8, elem_count: 1, data_type: "uint8", value: 103)
59 + ```
4 60
5 61 ## Installation
  @@ -4,135 +4,135 @@
4 4 <<"Elixir wrapper for Libplctag, for communication with Allen-Bradley PLC's.">>}.
5 5 {<<"elixir">>,<<"~> 1.9">>}.
6 6 {<<"files">>,
7 - [<<"lib">>,<<"lib/api.ex">>,<<"lib/tag.ex">>,<<"src/rw_tag.c">>,
7 + [<<"lib">>,<<"lib/tag.ex">>,<<"lib/api.ex">>,<<"src/rw_tag.c">>,
8 8 <<"src/tag_list.c">>,<<"src/libplctag/libplctag.pc.in">>,
9 - <<"src/libplctag/src">>,<<"src/libplctag/src/examples">>,
10 - <<"src/libplctag/src/examples/multithread_cached_read.c">>,
11 - <<"src/libplctag/src/examples/utils_posix.c">>,
12 - <<"src/libplctag/src/examples/stress_test.c">>,
13 - <<"src/libplctag/src/examples/toggle_bool.c">>,
14 - <<"src/libplctag/src/examples/slc500.c">>,
15 - <<"src/libplctag/src/examples/simple.c">>,
16 - <<"src/libplctag/src/examples/stress_api_lock.c">>,
17 - <<"src/libplctag/src/examples/write_string.c">>,
18 - <<"src/libplctag/src/examples/multithread_plc5_dhp.c">>,
19 - <<"src/libplctag/src/examples/simple_dual.c">>,
20 - <<"src/libplctag/src/examples/README.txt">>,
21 - <<"src/libplctag/src/examples/async.c">>,
22 - <<"src/libplctag/src/examples/plc5.c">>,
23 - <<"src/libplctag/src/examples/string.c">>,
24 - <<"src/libplctag/src/examples/multithread.c">>,
25 - <<"src/libplctag/src/examples/data_dumper.conf">>,
26 - <<"src/libplctag/src/examples/tag_rw.c">>,
27 - <<"src/libplctag/src/examples/utils.h">>,
28 - <<"src/libplctag/src/examples/simple_cpp.cpp">>,
29 - <<"src/libplctag/src/examples/data_dumper.c">>,
30 - <<"src/libplctag/src/examples/test_reconnect.c">>,
31 - <<"src/libplctag/src/examples/multithread_plc5.c">>,
32 - <<"src/libplctag/src/examples/test_special.c">>,
33 - <<"src/libplctag/src/examples/list_tags.c">>,
34 - <<"src/libplctag/src/examples/utils_windows.c">>,
35 - <<"src/libplctag/src/scripts">>,<<"src/libplctag/src/scripts/match_alloc">>,
36 - <<"src/libplctag/src/scripts/error_translate.pl">>,
37 - <<"src/libplctag/src/tests">>,<<"src/libplctag/src/tests/hashtable">>,
38 - <<"src/libplctag/src/tests/hashtable/test_hashtable.c">>,
39 - <<"src/libplctag/src/tests/lgx_sim">>,
40 - <<"src/libplctag/src/tests/lgx_sim/tags.h">>,
41 - <<"src/libplctag/src/tests/lgx_sim/session.c">>,
42 - <<"src/libplctag/src/tests/lgx_sim/log.h">>,
43 - <<"src/libplctag/src/tests/lgx_sim/packet.h">>,
44 - <<"src/libplctag/src/tests/lgx_sim/tags.c">>,
45 - <<"src/libplctag/src/tests/lgx_sim/session.h">>,
46 - <<"src/libplctag/src/tests/lgx_sim/main.c">>,
47 - <<"src/libplctag/src/protocols">>,<<"src/libplctag/src/protocols/ab">>,
48 - <<"src/libplctag/src/protocols/ab/eip_slc_pccc.c">>,
49 - <<"src/libplctag/src/protocols/ab/cip.c">>,
50 - <<"src/libplctag/src/protocols/ab/session.c">>,
51 - <<"src/libplctag/src/protocols/ab/eip_lgx_pccc.h">>,
52 - <<"src/libplctag/src/protocols/ab/error_codes.c">>,
53 - <<"src/libplctag/src/protocols/ab/pccc.h">>,
54 - <<"src/libplctag/src/protocols/ab/tag.h">>,
55 - <<"src/libplctag/src/protocols/ab/eip_dhp_pccc.h">>,
56 - <<"src/libplctag/src/protocols/ab/ab_common.h">>,
57 - <<"src/libplctag/src/protocols/ab/eip_cip.c">>,
58 - <<"src/libplctag/src/protocols/ab/error_codes.h">>,
59 - <<"src/libplctag/src/protocols/ab/ab_common.c">>,
60 - <<"src/libplctag/src/protocols/ab/cip.h">>,
61 - <<"src/libplctag/src/protocols/ab/eip_dhp_pccc.c">>,
62 - <<"src/libplctag/src/protocols/ab/session.h">>,
63 - <<"src/libplctag/src/protocols/ab/pccc.c">>,
64 - <<"src/libplctag/src/protocols/ab/ab.h">>,
65 - <<"src/libplctag/src/protocols/ab/eip_lgx_pccc.c">>,
66 - <<"src/libplctag/src/protocols/ab/eip_plc5_pccc.c">>,
67 - <<"src/libplctag/src/protocols/ab/eip_cip.h">>,
68 - <<"src/libplctag/src/protocols/ab/eip_slc_pccc.h">>,
69 - <<"src/libplctag/src/protocols/ab/defs.h">>,
70 - <<"src/libplctag/src/protocols/ab/eip_plc5_pccc.h">>,
71 - <<"src/libplctag/src/protocols/system">>,
72 - <<"src/libplctag/src/protocols/system/tag.h">>,
73 - <<"src/libplctag/src/protocols/system/system.c">>,
74 - <<"src/libplctag/src/protocols/system/system.h">>,
75 - <<"src/libplctag/src/platform">>,<<"src/libplctag/src/platform/linux">>,
76 - <<"src/libplctag/src/platform/linux/platform.h">>,
77 - <<"src/libplctag/src/platform/linux/platform.c">>,
78 - <<"src/libplctag/src/platform/windows">>,
79 - <<"src/libplctag/src/platform/windows/platform.h">>,
80 - <<"src/libplctag/src/platform/windows/platform.c">>,
81 - <<"src/libplctag/src/lib">>,<<"src/libplctag/src/lib/lib.c">>,
82 - <<"src/libplctag/src/lib/version.c">>,<<"src/libplctag/src/lib/version.h">>,
83 - <<"src/libplctag/src/lib/tag.h">>,<<"src/libplctag/src/lib/init.c">>,
84 - <<"src/libplctag/src/lib/version.c.in">>,<<"src/libplctag/src/lib/init.h">>,
85 - <<"src/libplctag/src/lib/libplctag.h">>,<<"src/libplctag/src/unported">>,
9 + <<"src/libplctag/src">>,<<"src/libplctag/src/unported">>,
86 10 <<"src/libplctag/src/unported/README">>,
87 11 <<"src/libplctag/src/unported/contrib">>,
88 12 <<"src/libplctag/src/unported/contrib/cpp">>,
89 13 <<"src/libplctag/src/unported/contrib/cpp/valdes">>,
14 + <<"src/libplctag/src/unported/contrib/cpp/valdes/cip.cpp">>,
90 15 <<"src/libplctag/src/unported/contrib/cpp/valdes/README">>,
91 16 <<"src/libplctag/src/unported/contrib/cpp/valdes/cip_main.cpp">>,
92 17 <<"src/libplctag/src/unported/contrib/cpp/valdes/cip.h">>,
93 - <<"src/libplctag/src/unported/contrib/cpp/valdes/cip.cpp">>,
94 - <<"src/libplctag/src/wrappers">>,<<"src/libplctag/src/wrappers/go">>,
18 + <<"src/libplctag/src/util">>,<<"src/libplctag/src/util/hash.c">>,
19 + <<"src/libplctag/src/util/attr.c">>,<<"src/libplctag/src/util/vector.h">>,
20 + <<"src/libplctag/src/util/hashtable.c">>,
21 + <<"src/libplctag/src/util/atomic_int.c">>,
22 + <<"src/libplctag/src/util/debug.c">>,<<"src/libplctag/src/util/vector.c">>,
23 + <<"src/libplctag/src/util/byteorder.h">>,<<"src/libplctag/src/util/rc.h">>,
24 + <<"src/libplctag/src/util/rc.c">>,<<"src/libplctag/src/util/hashtable.h">>,
25 + <<"src/libplctag/src/util/hash.h">>,<<"src/libplctag/src/util/attr.h">>,
26 + <<"src/libplctag/src/util/macros.h">>,
27 + <<"src/libplctag/src/util/atomic_int.h">>,
28 + <<"src/libplctag/src/util/debug.h">>,<<"src/libplctag/src/examples">>,
29 + <<"src/libplctag/src/examples/utils_posix.c">>,
30 + <<"src/libplctag/src/examples/stress_test.c">>,
31 + <<"src/libplctag/src/examples/list_tags.c">>,
32 + <<"src/libplctag/src/examples/utils_windows.c">>,
33 + <<"src/libplctag/src/examples/tag_rw.c">>,
34 + <<"src/libplctag/src/examples/README.txt">>,
35 + <<"src/libplctag/src/examples/multithread.c">>,
36 + <<"src/libplctag/src/examples/data_dumper.c">>,
37 + <<"src/libplctag/src/examples/simple.c">>,
38 + <<"src/libplctag/src/examples/test_special.c">>,
39 + <<"src/libplctag/src/examples/multithread_plc5.c">>,
40 + <<"src/libplctag/src/examples/stress_api_lock.c">>,
41 + <<"src/libplctag/src/examples/utils.h">>,
42 + <<"src/libplctag/src/examples/simple_cpp.cpp">>,
43 + <<"src/libplctag/src/examples/multithread_plc5_dhp.c">>,
44 + <<"src/libplctag/src/examples/simple_dual.c">>,
45 + <<"src/libplctag/src/examples/toggle_bool.c">>,
46 + <<"src/libplctag/src/examples/multithread_cached_read.c">>,
47 + <<"src/libplctag/src/examples/plc5.c">>,
48 + <<"src/libplctag/src/examples/async.c">>,
49 + <<"src/libplctag/src/examples/data_dumper.conf">>,
50 + <<"src/libplctag/src/examples/test_reconnect.c">>,
51 + <<"src/libplctag/src/examples/write_string.c">>,
52 + <<"src/libplctag/src/examples/slc500.c">>,
53 + <<"src/libplctag/src/examples/string.c">>,<<"src/libplctag/src/protocols">>,
54 + <<"src/libplctag/src/protocols/system">>,
55 + <<"src/libplctag/src/protocols/system/system.h">>,
56 + <<"src/libplctag/src/protocols/system/system.c">>,
57 + <<"src/libplctag/src/protocols/system/tag.h">>,
58 + <<"src/libplctag/src/protocols/ab">>,
59 + <<"src/libplctag/src/protocols/ab/error_codes.c">>,
60 + <<"src/libplctag/src/protocols/ab/ab_common.h">>,
61 + <<"src/libplctag/src/protocols/ab/pccc.c">>,
62 + <<"src/libplctag/src/protocols/ab/pccc.h">>,
63 + <<"src/libplctag/src/protocols/ab/eip_dhp_pccc.c">>,
64 + <<"src/libplctag/src/protocols/ab/eip_slc_pccc.c">>,
65 + <<"src/libplctag/src/protocols/ab/session.c">>,
66 + <<"src/libplctag/src/protocols/ab/ab_common.c">>,
67 + <<"src/libplctag/src/protocols/ab/eip_plc5_pccc.h">>,
68 + <<"src/libplctag/src/protocols/ab/eip_dhp_pccc.h">>,
69 + <<"src/libplctag/src/protocols/ab/error_codes.h">>,
70 + <<"src/libplctag/src/protocols/ab/eip_plc5_pccc.c">>,
71 + <<"src/libplctag/src/protocols/ab/cip.c">>,
72 + <<"src/libplctag/src/protocols/ab/tag.h">>,
73 + <<"src/libplctag/src/protocols/ab/defs.h">>,
74 + <<"src/libplctag/src/protocols/ab/eip_slc_pccc.h">>,
75 + <<"src/libplctag/src/protocols/ab/eip_lgx_pccc.h">>,
76 + <<"src/libplctag/src/protocols/ab/session.h">>,
77 + <<"src/libplctag/src/protocols/ab/eip_cip.c">>,
78 + <<"src/libplctag/src/protocols/ab/eip_cip.h">>,
79 + <<"src/libplctag/src/protocols/ab/ab.h">>,
80 + <<"src/libplctag/src/protocols/ab/eip_lgx_pccc.c">>,
81 + <<"src/libplctag/src/protocols/ab/cip.h">>,<<"src/libplctag/src/scripts">>,
82 + <<"src/libplctag/src/scripts/match_alloc">>,
83 + <<"src/libplctag/src/scripts/error_translate.pl">>,
84 + <<"src/libplctag/src/platform">>,<<"src/libplctag/src/platform/windows">>,
85 + <<"src/libplctag/src/platform/windows/platform.c">>,
86 + <<"src/libplctag/src/platform/windows/platform.h">>,
87 + <<"src/libplctag/src/platform/linux">>,
88 + <<"src/libplctag/src/platform/linux/platform.c">>,
89 + <<"src/libplctag/src/platform/linux/platform.h">>,
90 + <<"src/libplctag/src/tests">>,<<"src/libplctag/src/tests/hashtable">>,
91 + <<"src/libplctag/src/tests/hashtable/test_hashtable.c">>,
92 + <<"src/libplctag/src/tests/lgx_sim">>,
93 + <<"src/libplctag/src/tests/lgx_sim/tags.c">>,
94 + <<"src/libplctag/src/tests/lgx_sim/tags.h">>,
95 + <<"src/libplctag/src/tests/lgx_sim/session.c">>,
96 + <<"src/libplctag/src/tests/lgx_sim/main.c">>,
97 + <<"src/libplctag/src/tests/lgx_sim/log.h">>,
98 + <<"src/libplctag/src/tests/lgx_sim/session.h">>,
99 + <<"src/libplctag/src/tests/lgx_sim/packet.h">>,
100 + <<"src/libplctag/src/wrappers">>,<<"src/libplctag/src/wrappers/pascal">>,
101 + <<"src/libplctag/src/wrappers/pascal/libplctagv2.pas">>,
102 + <<"src/libplctag/src/wrappers/python">>,
103 + <<"src/libplctag/src/wrappers/python/plctag">>,
104 + <<"src/libplctag/src/wrappers/python/plctag/__init__.py">>,
105 + <<"src/libplctag/src/wrappers/python/plctag/libplctag.py">>,
106 + <<"src/libplctag/src/wrappers/python/README">>,
107 + <<"src/libplctag/src/wrappers/python/tag_rw.py">>,
108 + <<"src/libplctag/src/wrappers/python/run.sh">>,
109 + <<"src/libplctag/src/wrappers/go">>,
110 + <<"src/libplctag/src/wrappers/go/README">>,
95 111 <<"src/libplctag/src/wrappers/go/examples">>,
96 112 <<"src/libplctag/src/wrappers/go/examples/toogle_bool.go">>,
97 - <<"src/libplctag/src/wrappers/go/README">>,
98 113 <<"src/libplctag/src/wrappers/go/src">>,
99 114 <<"src/libplctag/src/wrappers/go/src/plctag">>,
100 115 <<"src/libplctag/src/wrappers/go/src/plctag/plctag.go">>,
101 116 <<"src/libplctag/src/wrappers/java">>,
102 - <<"src/libplctag/src/wrappers/java/TagRW.java">>,
103 117 <<"src/libplctag/src/wrappers/java/libplctag">>,
104 118 <<"src/libplctag/src/wrappers/java/libplctag/Tag.java">>,
119 + <<"src/libplctag/src/wrappers/java/TagRW.java">>,
105 120 <<"src/libplctag/src/wrappers/cpp">>,
106 - <<"src/libplctag/src/wrappers/cpp/include">>,
107 - <<"src/libplctag/src/wrappers/cpp/include/plctag.hpp">>,
108 - <<"src/libplctag/src/wrappers/cpp/include/logging.hpp">>,
109 - <<"src/libplctag/src/wrappers/cpp/include/ping.hpp">>,
110 121 <<"src/libplctag/src/wrappers/cpp/Makefile">>,
111 122 <<"src/libplctag/src/wrappers/cpp/src">>,
112 123 <<"src/libplctag/src/wrappers/cpp/src/main.cpp">>,
113 - <<"src/libplctag/src/wrappers/cpp/src/logging.cpp">>,
114 124 <<"src/libplctag/src/wrappers/cpp/src/ping.cpp">>,
125 + <<"src/libplctag/src/wrappers/cpp/src/logging.cpp">>,
115 126 <<"src/libplctag/src/wrappers/cpp/src/plctag.cpp">>,
116 - <<"src/libplctag/src/wrappers/python">>,
117 - <<"src/libplctag/src/wrappers/python/README">>,
118 - <<"src/libplctag/src/wrappers/python/run.sh">>,
119 - <<"src/libplctag/src/wrappers/python/tag_rw.py">>,
120 - <<"src/libplctag/src/wrappers/python/plctag">>,
121 - <<"src/libplctag/src/wrappers/python/plctag/libplctag.py">>,
122 - <<"src/libplctag/src/wrappers/python/plctag/__init__.py">>,
123 - <<"src/libplctag/src/wrappers/pascal">>,
124 - <<"src/libplctag/src/wrappers/pascal/libplctagv2.pas">>,
125 - <<"src/libplctag/src/util">>,<<"src/libplctag/src/util/debug.c">>,
126 - <<"src/libplctag/src/util/debug.h">>,<<"src/libplctag/src/util/hash.h">>,
127 - <<"src/libplctag/src/util/hash.c">>,<<"src/libplctag/src/util/vector.c">>,
128 - <<"src/libplctag/src/util/atomic_int.h">>,
129 - <<"src/libplctag/src/util/macros.h">>,<<"src/libplctag/src/util/vector.h">>,
130 - <<"src/libplctag/src/util/attr.c">>,
131 - <<"src/libplctag/src/util/hashtable.h">>,
132 - <<"src/libplctag/src/util/atomic_int.c">>,<<"src/libplctag/src/util/rc.h">>,
133 - <<"src/libplctag/src/util/attr.h">>,
134 - <<"src/libplctag/src/util/byteorder.h">>,<<"src/libplctag/src/util/rc.c">>,
135 - <<"src/libplctag/src/util/hashtable.c">>,<<"CMakeLists.txt">>,<<"test">>,
127 + <<"src/libplctag/src/wrappers/cpp/include">>,
128 + <<"src/libplctag/src/wrappers/cpp/include/ping.hpp">>,
129 + <<"src/libplctag/src/wrappers/cpp/include/plctag.hpp">>,
130 + <<"src/libplctag/src/wrappers/cpp/include/logging.hpp">>,
131 + <<"src/libplctag/src/lib">>,<<"src/libplctag/src/lib/version.c">>,
132 + <<"src/libplctag/src/lib/init.h">>,<<"src/libplctag/src/lib/version.h">>,
133 + <<"src/libplctag/src/lib/lib.c">>,<<"src/libplctag/src/lib/tag.h">>,
134 + <<"src/libplctag/src/lib/version.c.in">>,<<"src/libplctag/src/lib/init.c">>,
135 + <<"src/libplctag/src/lib/libplctag.h">>,<<"CMakeLists.txt">>,<<"test">>,
136 136 <<"test/abex_test.exs">>,<<"test/test_helper.exs">>,<<"mix.exs">>,
137 137 <<"README.md">>,<<"LICENSE">>]}.
138 138 {<<"licenses">>,[<<"MIT">>]}.
  @@ -143,10 +143,10 @@
143 143 {<<"name">>,<<"elixir_cmake">>},
144 144 {<<"optional">>,false},
145 145 {<<"repository">>,<<"hexpm">>},
146 - {<<"requirement">>,<<"~> 0.1.0">>}],
146 + {<<"requirement">>,<<"~> 0.8">>}],
147 147 [{<<"app">>,<<"muontrap">>},
148 148 {<<"name">>,<<"muontrap">>},
149 149 {<<"optional">>,false},
150 150 {<<"repository">>,<<"hexpm">>},
151 - {<<"requirement">>,<<"~> 0.5.0">>}]]}.
152 - {<<"version">>,<<"0.1.1">>}.
151 + {<<"requirement">>,<<"~> 1.2">>}]]}.
152 + {<<"version">>,<<"0.1.2">>}.
  @@ -1,6 +1,6 @@
1 1 defmodule Abex.Tag do
2 2 @moduledoc """
3 - Handles gathering the .
3 + Handles Tag interactions with an Allen-Bradley PLC.
4 4 """
5 5 use GenServer
6 6 require Logger
  @@ -14,13 +14,11 @@ defmodule Abex.Tag do
14 14 end
15 15
16 16 def init(args) do
17 - ld_dirs =
18 - System.get_env("LD_LIBRARY_PATH")
19 - |> assemble_current_ld_dir()
20 - |> Path.join(":")
21 - |> Path.join(:code.priv_dir(:abex) |> to_string())
22 -
23 - System.put_env("LD_LIBRARY_PATH", ld_dirs)
17 + _lib_dir =
18 + :abex
19 + |> :code.priv_dir()
20 + |> to_string()
21 + |> set_ld_library_path()
24 22
25 23 state = %__MODULE__{
26 24 ip: Keyword.fetch!(args, :ip),
  @@ -89,9 +87,6 @@ defmodule Abex.Tag do
89 87 {:reply, response, state}
90 88 end
91 89
92 - defp assemble_current_ld_dir(nil), do: ""
93 - defp assemble_current_ld_dir(current_dir), do: current_dir
94 -
95 90 defp assemble_response({reason, 1}, _task), do: {:error, reason}
96 91 defp assemble_response({_data, 0}, :write), do: :ok
97 92 defp assemble_response({data, 0}, :read) do
  @@ -155,8 +150,24 @@ defmodule Abex.Tag do
155 150 defp encapsulate_response(response) when is_tuple(response), do: response
156 151 defp encapsulate_response(response), do: {:ok, response}
157 152
158 -
159 153 defp data_type_parser(raw_data, _any_data_type) when is_tuple(raw_data), do: raw_data
160 154 defp data_type_parser(raw_data, "real32"), do: Enum.map(raw_data, fn(x) -> String.to_float(x) end)
161 155 defp data_type_parser(raw_data, _any_data_type), do: Enum.map(raw_data, fn(x) -> String.to_integer(x) end)
156 +
157 + defp set_ld_library_path(priv_dir) do
158 + System.get_env("LD_LIBRARY_PATH", "")
159 + |> String.contains?(priv_dir)
160 + |> write_ld_library_path(priv_dir)
161 + end
162 +
163 + defp write_ld_library_path(false, priv_dir) do
164 + ld_dirs =
165 + System.get_env("LD_LIBRARY_PATH", "")
166 + |> Path.join(":")
167 + |> Path.join(priv_dir)
168 + System.put_env("LD_LIBRARY_PATH", ld_dirs)
169 + priv_dir
170 + end
171 +
172 + defp write_ld_library_path(true, priv_dir), do: priv_dir
162 173 end
  @@ -4,7 +4,7 @@ defmodule Abex.MixProject do
4 4 def project do
5 5 [
6 6 app: :abex,
7 - version: "0.1.1",
7 + version: "0.1.2",
8 8 elixir: "~> 1.9",
9 9 name: "ABex",
10 10 description: description(),
  @@ -52,12 +52,9 @@ defmodule Abex.MixProject do
52 52 defp deps do
53 53 [
54 54 # it requires an update to elixir_cmake hex dependency
55 - #{:elixir_cmake, github: "valiot/elixir-cmake"},
56 - {:elixir_cmake, "~> 0.1.0"},
57 - {:ex_doc, "~> 0.19", only: :dev},
58 - {:muontrap, "~> 0.5.0"}
59 - # {:dep_from_hexpm, "~> 0.3.0"},
60 - # {:dep_from_git, git: "https://github.com/elixir-lang/my_dep.git", tag: "0.1.0"}
55 + {:elixir_cmake, "~> 0.8"},
56 + {:ex_doc, "~> 0.28", only: :dev},
57 + {:muontrap, "~> 1.2"},
61 58 ]
62 59 end
63 60 end