diff --git a/apps/modbus/include/modbus_ast.hrl b/apps/modbus/include/modbus_ast.hrl index 412189f..2634501 100644 --- a/apps/modbus/include/modbus_ast.hrl +++ b/apps/modbus/include/modbus_ast.hrl @@ -113,7 +113,6 @@ -record(ast, { modbus, - device_ios = [], devices = [], processors = [], alarms = [] diff --git a/apps/modbus/src/modbus_parser.erl b/apps/modbus/src/modbus_parser.erl index 393dd98..f32d140 100644 --- a/apps/modbus/src/modbus_parser.erl +++ b/apps/modbus/src/modbus_parser.erl @@ -66,7 +66,8 @@ parse(Input) when is_binary(Input) -> case length(Modbus) == 1 of true -> - AST = #ast{modbus = hd(Modbus), device_ios = Templates, devices = Devices, processors = Processors, alarms = Alarms }, + NDevices = lists:map(fun(Device) -> merge_io(Device, Templates) end, Devices), + AST = #ast{modbus = hd(Modbus), devices = NDevices, processors = Processors, alarms = Alarms }, {ok, AST}; false -> {error, modbus_block_error} @@ -358,4 +359,21 @@ strip_quotes(Str) when is_list(Str) -> Str1 = string:trim(Str, leading, "\""), Str2 = string:trim(Str1, trailing, "\""), Str3 = string:trim(Str2, leading, "'"), - string:trim(Str3, trailing, "'"). \ No newline at end of file + string:trim(Str3, trailing, "'"). + +merge_io(Device = #modbus_device{device_io = undefined}, _Templates) -> + Device; +merge_io(Device = #modbus_device{device_io = IOName}, Templates) -> + case lists:search(fun(#modbus_device_io{name = T0}) -> IOName =:= T0 end, Templates) of + {value, #modbus_device_io{poll_interval = PollInterval, retries = Retries, retry_timeout = RetryTimeout, metrics = Metrics, controls = Controls}} -> + %% 合并配置项目 + Device#modbus_device{ + poll_interval = PollInterval, + retries = Retries, + retry_timeout = RetryTimeout, + metrics = Metrics, + controls = Controls + }; + false -> + Device + end. \ No newline at end of file diff --git a/apps/modbus/src/modbus_service.erl b/apps/modbus/src/modbus_service.erl index d0c4015..da3c1a6 100644 --- a/apps/modbus/src/modbus_service.erl +++ b/apps/modbus/src/modbus_service.erl @@ -88,10 +88,9 @@ start_link(AST = #ast{}) -> %% @doc Whenever a gen_statem is started using gen_statem:start/[3,4] or %% gen_statem:start_link/[3,4], this function is called by the new %% process to initialize. -init([AST = #ast{modbus = Modbus = #modbus{transport = Transport, error_log = ErrorLog, access_log = AccessLog}, device_ios = IOs, devices = Devices, alarms = Alarms}]) -> +init([AST = #ast{modbus = Modbus = #modbus{transport = Transport, error_log = ErrorLog, access_log = AccessLog}, devices = Devices, alarms = Alarms}]) -> %lager:debug("[modbus_service] ast is: ~p", [AST]), - lager:debug("[modbus_service] io is: ~p", [IOs]), - %lager:debug("[modbus_service] devices is: ~p", [Devices]), + lager:debug("[modbus_service] devices is: ~p", [Devices]), DevicesMap = start_devices(Devices), %% 建立连接 @@ -317,19 +316,3 @@ create_log_file(FileName) when is_binary(FileName) -> undefined end. -merge_io(Device = #modbus_device{device_io = undefined}, _Templates) -> - Device; -merge_io(Device = #modbus_device{device_io = IOName}, Templates) -> - case lists:search(fun(#modbus_device_io{name = T0}) -> IOName =:= T0 end, Templates) of - {value, #modbus_device_io{poll_interval = PollInterval, retries = Retries, retry_timeout = RetryTimeout, metrics = Metrics, controls = Controls}} -> - %% 合并配置项目 - Device#modbus_device{ - poll_interval = PollInterval, - retries = Retries, - retry_timeout = RetryTimeout, - metrics = Metrics, - controls = Controls - }; - false -> - Device - end. \ No newline at end of file