简化逻辑

This commit is contained in:
anlicheng 2025-07-02 11:27:22 +08:00
parent f6cf564780
commit ec392e1795
3 changed files with 22 additions and 22 deletions

View File

@ -113,7 +113,6 @@
-record(ast, {
modbus,
device_ios = [],
devices = [],
processors = [],
alarms = []

View File

@ -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, "'").
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.

View File

@ -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.