Advertisement
Guest User

Untitled

a guest
Jun 27th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 1.93 KB | None | 0 0
  1.  
  2. namespace Domain.ModBus
  3.  
  4. open EasyModbus
  5. open System.Threading.Tasks
  6.  
  7. module Modbus =
  8.     type Client =
  9.         | ConnectedClient of ModbusClient
  10.         | DisconnectedClient of ModbusClient
  11.    
  12.     type Commands = WriteHoldingRegisters of address : int * registers : int []
  13.    
  14.     type Queries = ReadHoldingRegisters of address : int * count : int
  15.    
  16.     let CreateClient (ip : string) (port : int) = DisconnectedClient(new ModbusClient(ip, port))
  17.    
  18.     let Connect client =
  19.         match client with
  20.         | ConnectedClient(client) as c -> Ok c
  21.         | DisconnectedClient(client) ->
  22.             try
  23.                 client.Connect()
  24.                 Ok <| ConnectedClient(client)
  25.             with :? System.Exception as ex -> Error ex.Message
  26.    
  27.     let private DisconectConnectedClient(ConnectedClient cl) =
  28.         cl.Disconnect()
  29.         cl
  30.    
  31.     let Disconnect client =
  32.         match client with
  33.         | ConnectedClient(client) as c ->
  34.             c
  35.             |> DisconectConnectedClient
  36.             |> DisconnectedClient
  37.         | DisconnectedClient(client) as c -> c
  38.    
  39.     let CommandHandler client command =
  40.         match client with
  41.         | ConnectedClient c ->
  42.             try
  43.                 match command with
  44.                 | WriteHoldingRegisters(adrs, rgs) ->
  45.                     c.WriteMultipleRegisters(adrs, rgs)
  46.                     |> Ok
  47.             with :? System.Exception as ex -> Error ex.Message
  48.         | DisconnectedClient c -> Error "Disconnected state"
  49.    
  50.     let QueryHandler client query =
  51.         match client with
  52.         | ConnectedClient c ->
  53.             try
  54.                 match query with
  55.                 | ReadHoldingRegisters(adrs, cnt) ->
  56.                     c.ReadHoldingRegisters(adrs, cnt)
  57.                     |> Ok
  58.             with :? System.Exception as ex -> Error ex.Message
  59.         | DisconnectedClient c -> Error "Disconnected state"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement