愛招飛幫助手冊 愛招飛幫助手冊
  • FastERP-1
  • Smart
  • PinToo
  • FastWeb
  • FastERP-2 企業管理系統 (opens new window)
  • 印染業ERP (opens new window)
  • 工廠終端機 (opens new window)
  • TARS
  • MARS
  • TaskRunner
  • Flying
  • FastDesk
  • HiDesk
  • HiNAT
  • FastBPM
  • 設備故障診斷 (opens new window)
  • 設備最佳運轉效益 (opens new window)
  • 企業智能助手SmeGPT (opens new window)
  • 燈號管理 (opens new window)
  • 戰情室 (opens new window)
  • 能源管理 (opens new window)
  • 人車定位 (opens new window)
  • 戰情指揮系統 (opens new window)
  • FastERP-1
  • FastWeb
  • Smart
  • PinToo
  • Flying
  • TARS
  • 通用功能

    • Report
    • Script
    • Echarts
    • Chart
    • DB Install
  • FastERP-1
  • Smart
  • PinToo
  • FastWeb
  • FastERP-2 企業管理系統 (opens new window)
  • 印染業ERP (opens new window)
  • 工廠終端機 (opens new window)
  • TARS
  • MARS
  • TaskRunner
  • Flying
  • FastDesk
  • HiDesk
  • HiNAT
  • FastBPM
  • 設備故障診斷 (opens new window)
  • 設備最佳運轉效益 (opens new window)
  • 企業智能助手SmeGPT (opens new window)
  • 燈號管理 (opens new window)
  • 戰情室 (opens new window)
  • 能源管理 (opens new window)
  • 人車定位 (opens new window)
  • 戰情指揮系統 (opens new window)
  • FastERP-1
  • FastWeb
  • Smart
  • PinToo
  • Flying
  • TARS
  • 通用功能

    • Report
    • Script
    • Echarts
    • Chart
    • DB Install
  • Smart幫助主頁
  • 學習手冊

    • 基本入門

    • 功能介紹

    • 控制元件說明

      • 公共屬性
      • 公共方法
      • 公共事件
      • 視窗控制元件
      • 系統控制元件
      • 標準控制元件
      • 對話方塊控制元件
      • 標準工控控制元件
      • 專業工控控制元件
      • 數據控制控制元件
      • 數據表格控制元件
      • 數據感知控制元件
      • 通訊控制控制元件
        • 1. TMQTTChannel 元件
          • 1.1. 屬性
          • 1.1.1. BrokerHostName屬性
          • 1.1.2. BrokerPort屬性
          • 1.1.3. ClientID屬性
          • 1.1.4. DataType屬性
          • 1.1.5. DataValue屬性
          • 1.1.6. DataControl屬性
          • 1.1.7. DataField屬性
          • 1.1.8. Enabled屬性
          • 1.1.9. Username屬性
          • 1.1.10. Password屬性
          • 1.1.11. Formula屬性
          • 1.1.12. Topic屬性
          • 1.1.13. LowerWarning屬性
          • 1.1.14. Machine屬性
          • 1.1.15. MeterType屬性
          • 1.1.16. MobusConnection屬性
          • 1.1.17. ModuleName屬性
          • 1.1.18. ModeuleNo屬性
          • 1.1.19. MonitorType屬性
          • 1.1.20. MsgScript屬性
          • 1.1.21. Offset屬性
          • 1.1.22. BeginTime屬性
          • 1.1.23. Site屬性
        • 2. TMQTTClient 元件
          • 2.1. 屬性
          • 2.1.1. BrokerHostName屬性
          • 2.1.2. BrokerPort屬性
          • 2.1.3. ClientID屬性
          • 2.1.4. DataType屬性
          • 2.1.5. DataValue屬性
          • 2.1.6. DataControl屬性
          • 2.1.7. DataField屬性
          • 2.1.8. Enabled屬性
          • 2.1.9. Username屬性
          • 2.1.10. Password屬性
          • 2.1.11. Formula屬性
          • 2.1.12. Topic屬性
          • 2.2. 事件
          • 2.2.1. OnPublishReceived事件
          • 2.3. 方法
          • 2.3.1. Subscribe函式
          • 2.3.2. UnSubscribe函式
          • 2.3.3. PublishStr函式
          • 2.3.4. PublishByte函式
        • 3. TModbusRTUReadChannel 元件
          • 3.1. 屬性(Properties)
          • 3.1.1. ConnectionMode屬性
          • 3.1.2. DataControl屬性
          • 3.1.3. DataFields屬性
          • 3.1.4. DataLower屬性
          • 3.1.5. DataType屬性
          • 3.1.6. DataUpper屬性
          • 3.1.7. DataValue屬性
          • 3.1.8. DBConnection屬性
          • 3.1.9. Enabled屬性
          • 3.1.10. Formula屬性
          • 3.1.11. FuntionCode屬性
          • 3.1.12. EndTime屬性
          • 3.1.13. Interval屬性
          • 3.1.14. LowerWarning屬性
          • 3.1.15. Machine屬性
          • 3.1.16. MeterType屬性
          • 3.1.17. MobusConnection屬性
          • 3.1.18. ModuleName屬性
          • 3.1.19. ModeuleNo屬性
          • 3.1.20. MonitorType屬性
          • 3.1.21. MsgScript屬性
          • 3.1.22. Offset屬性
          • 3.1.23. RegCount屬性
          • 3.1.24. SavaData屬性
          • 3.1.25. SavaInterval屬性
          • 3.1.26. ServerAddress屬性
          • 3.1.27. BeginTime屬性
          • 3.1.28. Site屬性
          • 3.1.29. StartReg屬性
          • 3.1.30. UpperWarning屬性
          • 3.2. 方法(Methods)
          • 3.2.1. GetRegValues方法
          • 3.2.2. GetBitValues方法
          • 3.2.3. SetPropValue方法
          • 3.2.4. GetPropValue方法
        • 4. TModbusRTUWriteChannel 元件
          • 4.1. 屬性(Properties)
          • 4.1.1. ConnectionMode屬性
          • 4.1.2. DataControl屬性
          • 4.1.3. DataField屬性
          • 4.1.4. DataLower屬性
          • 4.1.5. DataType屬性
          • 4.1.6. DataUpper屬性
          • 4.1.7. DataValue屬性
          • 4.1.8. DBConnection屬性
          • 4.1.9. Formula屬性
          • 4.1.10. FuntionCode屬性
          • 4.1.11. Host屬性
          • 4.1.12. LowerWarning屬性
          • 4.1.13. Machine屬性
          • 4.1.14. MeterType屬性
          • 4.1.15. MobusConnection屬性
          • 4.1.16. ModuleName屬性
          • 4.1.17. ModeuleNo屬性
          • 4.1.18. MonitorType屬性
          • 4.1.19. MsgScript屬性
          • 4.1.20. RegCount屬性
          • 4.1.21. Site屬性
          • 4.1.22. StartReg屬性
          • 4.1.23. UpperWarning屬性
          • 4.2. 方法(Methods)
          • 4.2.1. execute方法
          • 4.2.2. Write方法
        • 5. TModbusTCPReadChannel 元件
          • 5.1. 屬性(Properties)
          • 5.1.1. ConnectionMode屬性
          • 5.1.2. DataControl屬性
          • 5.1.3. DataFields屬性
          • 5.1.4. DataLower屬性
          • 5.1.5. DataType屬性
          • 5.1.6. DataUpper屬性
          • 5.1.7. DataValue屬性
          • 5.1.8. DBConnection屬性
          • 5.1.9. Enabled屬性
          • 5.1.10. Formula屬性
          • 5.1.11. FuntionCode屬性
          • 5.1.12. Host屬性
          • 5.1.13. EndTime屬性
          • 5.1.14. Interval屬性
          • 5.1.15. LowerWarning屬性
          • 5.1.16. Machine屬性
          • 5.1.17. MeterType屬性
          • 5.1.18. ModuleName屬性
          • 5.1.19. ModeuleNo屬性
          • 5.1.20. MonitorType屬性
          • 5.1.21. MsgScript屬性
          • 5.1.22. Offset屬性
          • 5.1.23. Port屬性
          • 5.1.24. RegCount屬性
          • 5.1.25. SavaData屬性
          • 5.1.26. SavaInterval屬性
          • 5.1.27. BeginTime屬性
          • 5.1.28. Site屬性
          • 5.1.29. StartReg屬性
          • 5.1.30. UpperWarning屬性
          • 5.2. 方法(Methods)
          • 5.2.1. GetRegValues方法
          • 5.2.2. GetBitValues方法
          • 5.2.3. SetPropValue方法
          • 5.2.4. GetPropValue方法
        • 6. TModbusTCPWriteChannel 元件
          • 6.1. 屬性(Properties)
          • 6.1.1. ConnectionMode屬性
          • 6.1.2. DataControl屬性
          • 6.1.3. DataField屬性
          • 6.1.4. DataLower屬性
          • 6.1.5. DataType屬性
          • 6.1.6. DataUpper屬性
          • 6.1.7. DataValue屬性
          • 6.1.8. DBConnection屬性
          • 6.1.9. Formula屬性
          • 6.1.10. FuntionCode屬性
          • 6.1.11. Host屬性
          • 6.1.12. LowerWarning屬性
          • 6.1.13. Machine屬性
          • 6.1.14. MeterType屬性
          • 6.1.15. ModuleName屬性
          • 6.1.16. ModeuleNo屬性
          • 6.1.17. MonitorType屬性
          • 6.1.18. MsgScript屬性
          • 6.1.19. Port屬性
          • 6.1.20. RegCount屬性
          • 6.1.21. Site屬性
          • 6.1.22. StartReg屬性
          • 6.1.23. UpperWarning屬性
          • 6.2. 方法(Methods)
          • 6.2.1. execute方法
          • 6.2.2. Write方法
        • 7. TModbusConnection 元件
        • 8. TModbusClient 元件
          • 8.1. 屬性(Properties)
          • 8.2. 方法(Methods)
          • 8.2.1. ReadCoils方法
          • 8.2.2. ReadDiscreteInputs方法
          • 8.2.3. ReadHoldingRegisters方法
          • 8.2.4. ReadInputRegisters方法
          • 8.2.5. WriteSingleCoil方法
          • 8.2.6. WriteMultipleCoils方法
          • 8.2.7. WritSingleRegister方法
          • 8.2.8. WriteMultipleRegisters方法
          • 8.3. 事件
          • 8.3.1. OnCoilsRead事件
          • 8.3.2. OnDiscreteInputsRead事件
          • 8.3.3. OnHoldingRegistersRead事件
          • 8.3.4. OnHoldingRegistersRead事件
        • 9. TModbusTCP 元件
          • 9.1. 屬性(Properties)
          • 9.1.1. AutoConnect
          • 9.1.2. Host屬性
          • 9.1.3. Port屬性
          • 9.1.4. UnitID屬性
          • 9.2. 事件(Events)
          • 9.3. 方法(Methods)
          • 9.3.1. Connect方法
          • 9.3.2. ReadCoil方法
          • 9.3.3. ReadCoils方法
          • 9.3.4. ReadHoldingRegister方法
          • 9.3.5. ReadHoldingRegisters方法
          • 9.3.6. ReadInputRegister方法
          • 9.3.7. WriteCoil方法
          • 9.3.8. WriteCoils方法
          • 9.3.9. WriteRegister方法
          • 9.3.10. WriteRegisters方法
        • 10. TOPCDAServer 元件
        • 11. TAMapView 元件
          • 11.1. 屬性
          • 11.2. 方法
          • 11.2.1. LoadMap方法
        • 12. TBaiduAPI 元件
          • 12.1. 屬性(Properties)
        • 13. TIdModbuClient 元件
          • 13.1. 屬性
          • 13.2. 方法
          • 13.2.1. Connected方法
          • 13.2.2. ReadCoil方法
          • 13.2.3. ReadCoils方法
          • 13.2.4. ReadHoldingRegister方法
          • 13.2.5. ReadHoldingRegisters方法
          • 13.2.6. ReadInputRegister方法
          • 13.2.7. WriteCoil方法
          • 13.2.8. WriteCoils方法
          • 13.2.9. WriteRegister方法
          • 13.2.10. WriteRegisters方法
        • 14. TIdModbusServer 元件
          • 14.1. 屬性
        • 15. TRestAPI 元件
          • 15.1. 屬性
          • 15.1.1. Body
          • 15.1.2. ContentType
          • 15.1.3. Headers
          • 15.1.4. Method
          • 15.1.5. Params
          • 15.1.6. Script
          • 15.1.7. Server
          • 15.1.8. Url
          • 15.2. 事件
          • 15.2.1. ResultData
          • 15.3. 方法
          • 15.3.1. Send
        • 16. TWebSocketClient 元件
          • 16.1. 屬性
          • 16.1.1. Active
          • 16.1.2. Authentication
          • 16.1.3. HeartBeat
          • 16.1.4. Host
          • 16.1.5. LoadBalancer
          • 16.1.6. LogFile
          • 16.1.7. NotifyEvents
          • 16.1.8. Options
          • 16.1.9. Port
          • 16.1.10. Proxy
          • 16.1.11. QueueOptions
          • 16.1.12. Throttle
          • 16.1.13. TLS
          • 16.1.14. TLSOptions
          • 16.1.15. WatchDog
          • 16.2. 事件
          • 16.3. 方法
          • 16.3.1. Connect
          • 16.3.2. DisConnect
          • 16.3.3. WriteString
          • 16.3.4. WriteStream
          • 16.3.5. Ping
          • 16.3.6. Start
          • 16.3.7. Stop
        • 17. TWebSocketSever 元件
          • 17.1. 屬性
          • 17.1.1. Active
          • 17.1.2. Authentication
          • 17.1.3. Bindings
          • 17.1.4. Extensions
          • 17.1.5. FallBack
          • 17.1.6. HeartBeat
          • 17.1.7. HTTP2Options
          • 17.1.8. IOHandlerOptions
          • 17.1.9. LoadBalancer
          • 17.1.10. LogFile
          • 17.1.11. MaxConnections
          • 17.1.12. NotifyEvents
          • 17.1.13. Options
          • 17.1.14. Port
          • 17.1.15. QueueOptions
          • 17.1.16. SecurityOptions
          • 17.1.17. SSL
          • 17.1.18. SSLOptions
          • 17.1.19. WatchDog
          • 17.2. 事件
          • 17.3. 方法
          • 17.3.1. WriteString
          • 17.3.2. WriteStream
      • 儀表採集控制元件
      • 監控視訊控制元件
      • 數據圖表控制元件
      • 流程圖表控制元件
      • 數據分析控制元件
      • 複合數控控制元件
      • 模擬數控控制元件
      • 調節數控控制元件
      • 數位數控控制元件
      • 數據數控控制元件
      • 地圖控制元件
      • 其他控制元件
      • SVG控制元件
      • IsoBean控制元件
      • 樣式控制元件
      • 樣式外觀控制元件
      • 樣式高級控制元件
      • 樣式工具控制元件
      • 樣式數據控制元件
      • 樣式控制元件GP
      • 樣式數據控制元件GP
    • 功能用法

    • 專用模板

    • 開發流程

    • 函式程式

  • 開發手冊

目录

通訊控制控制元件

# Smart 控制元件使用(通訊控制)

  通訊控制控制元件組中包含特定通訊協定的連線方式的設定控制元件,用於實現物聯網的相關功能。

# 1. TMQTTChannel 元件

  MQTT是一個基於客戶端-伺服器的訊息發佈/訂閱傳輸協議。MQTT協議是輕量、簡單、開放和易於實現的,這些特點使它適用範圍非常廣泛。在很多情況下,包括受限的環境中,如:機器與機器(M2M)通訊和物聯網(IoT)。其在,通過衛星鏈路通訊感測器、偶爾撥號的醫療設備、智能家居、及一些小型化設備中已廣泛使用。

  TMQTTChannel 元件是基於MQTT擴充套件的,它整合了更豐富的功能,其整合的指令碼功能,可實現對獲取到的數據進行二次加工的能力。

# 1.1. 屬性

  • TMQTTChannel元件主要屬性
屬性 功能說明
BrokerHostName 指定MQTT代理伺服器地址
BrokerPort 指定MQTT代理伺服器端
ClientID 指定客戶端標識
Username 指定MQTTBroker 使用者名稱
Password 指定MQTTBroker 密碼
Topic 指定MQTT主題
DataControl 指定數據控制元件
DataFields 指定數據欄位
DataLower 指定數據下限
DataType 指定數據型別
DataUpper 指定數據上限
DataValue 指定數據值
DBConnection 指定數據連線元件
Enabled 表示MQTTClient是否連線
EndTime 指定數據採集結束時間
Formula 指定數據解析指令碼公
LowerWarning 指定數據下限報警等級
Machine 指定採集點所在的機器
MeterType 指定採集點儀表型別
ModuleName 指定設備名稱
ModeuleNo 指定設備編號
MonitorType 指定監測型別
MsgScript 指定訊息指令碼
Name 指定控制元件名稱
Offset 指定偏移量
PulseRatio 指定活動率%
ReadConfig 指定是否讀取配置
SavaData 指定是否儲存採集之數據
Site 指定站點名稱
BeginTime 指定數據採集開始時間
UpperWarning 指定數據上限報警等級

# 1.1.1. BrokerHostName屬性

property BrokerHostName: string read FHost write SetHost;
1

   指定MQTT代理伺服器地址

# 1.1.2. BrokerPort屬性

property BrokerPort: Integer read FPort write SetPort;
1

   指定MQTT代理伺服器端

# 1.1.3. ClientID屬性

property ClientID:string read FClientID write SetClientID;
1

   指定客戶端標識

# 1.1.4. DataType屬性

property DataType: TDataType read FDataType write FDataType;
1

   數據型別

# 1.1.5. DataValue屬性

property DataValue: Variant read FDataValue write FDataValue;
1

   獲取到的數據值

# 1.1.6. DataControl屬性

property DataControl: string read FDataControl write FDataControl;
1

   指定一個需要顯示數據的控制元件名

# 1.1.7. DataField屬性

property DataField: string read FDataField write FDataField;
1

   指定一個數據控制元件顯示數據的屬性名

# 1.1.8. Enabled屬性

property Enabled: boolean read FEnabled write SetEnabled;
1

   表示MQTTClient是否連線

# 1.1.9. Username屬性

property Username: string read FUsername write SetUsername;
1

   指定MQTTBroker 使用者名稱

# 1.1.10. Password屬性

property Password: string read FPassword write SetPassword;
1

   指定MQTTBroker 密碼

# 1.1.11. Formula屬性

property Formula: TStrings read FFormula write SetFormula;
1

   數據解析公式

# 1.1.12. Topic屬性

property Topic: string read FTopic write FTopic;
1

   指定MQTT主題

# 1.1.13. LowerWarning屬性

property LowerWarning: TLowerWarning read FLowerWarning write SetLowerWarning;
1

   UpperWarning屬性是指數據下限異常型別,目前有:lw1,lw2,lw3,lw4,lwNote。

# 1.1.14. Machine屬性

property Machine: string read FMachine write FMachine;
1

   Machine屬性指採集站點所屬哪個機臺設備。

# 1.1.15. MeterType屬性

property MonitorType: string read FMonitorType write FMonitorType;
1

   MeterType屬性指儀表型別

# 1.1.16. MobusConnection屬性

property ModbusConnection: TModbusConnection read FModbusConnection write SetModbusConnection;
1

   MobusConnection屬性指TModbusConnection元件,使用時必需繫結此元件。

# 1.1.17. ModuleName屬性

property ModuleName: string read FModuleName write FModuleName;
1

   ModuleName屬性指Modbus設備名稱,XX溫控器、XX電錶 等。

# 1.1.18. ModeuleNo屬性

property ModuleNo: string read FModuleNo write FModuleNo;
1

   ModuleNo屬性指Modbus設備的編號,如001、002等。

# 1.1.19. MonitorType屬性

property MonitorType: string read FMonitorType write FMonitorType;
1

   MonitorType屬性指站點的監測型別,如溫度、壓力等。

# 1.1.20. MsgScript屬性

property MsgScript: TStrings read FMsgScript write SetMsgScript;
1

   MsgScript屬性用作預警訊息觸發時,可在指令碼中進行其它的業務整合運用,指令碼採用純Pascal語言指令碼。

# 1.1.21. Offset屬性

property Offset: Double read FOffset write SetOffset;
1

   Offset屬性是指數據偏移量。

# 1.1.22. BeginTime屬性

property BeginTime: string read FStartDateTime write FStartDateTime;
1

   BeginTime屬性指採集數據的起始時間。

# 1.1.23. Site屬性

property Site: string read FSite write FSite;
1

  Site屬性是指MQTT設備的站點名稱,可以作為MQTT數據地址的說明之用。


# 2. TMQTTClient 元件

  MQTT是一個基於客戶端-伺服器的訊息發佈/訂閱傳輸協議。MQTT協議是輕量、簡單、開放和易於實現的,這些特點使它適用範圍非常廣泛。在很多情況下,包括受限的環境中,如:機器與機器(M2M)通訊和物聯網(IoT)。其在,通過衛星鏈路通訊感測器、偶爾撥號的醫療設備、智能家居、及一些小型化設備中已廣泛使用。

# 2.1. 屬性

  • TMQTTClient元件主要屬性
屬性 功能說明
BrokerHostName 指定MQTT代理伺服器地址
BrokerPort 指定MQTT代理伺服器端
ClientID 指定客戶端標識
DataType 數據型別
DataValue 獲取到的數據值
DataControl 指定一個需要顯示數據的控制元件名
DataField 指定一個數據控制元件顯示數據的屬性名
Enabled 表示MQTTClient是否連線
Username 指定MQTTBroker 使用者名稱
Password 指定MQTTBroker 密碼
Formula 數據解析公式
Topic 指定MQTT主題

# 2.1.1. BrokerHostName屬性

property BrokerHostName: string read FHost write SetHost;
1

   指定MQTT代理伺服器地址

# 2.1.2. BrokerPort屬性

property BrokerPort: Integer read FPort write SetPort;
1

   指定MQTT代理伺服器端

# 2.1.3. ClientID屬性

property ClientID:string read FClientID write SetClientID;
1

   指定客戶端標識

# 2.1.4. DataType屬性

property DataType: TDataType read FDataType write FDataType;
1

   數據型別

# 2.1.5. DataValue屬性

property DataValue: Variant read FDataValue write FDataValue;
1

   獲取到的數據值

# 2.1.6. DataControl屬性

property DataControl: string read FDataControl write FDataControl;
1

   指定一個需要顯示數據的控制元件名

# 2.1.7. DataField屬性

property DataField: string read FDataField write FDataField;
1

   指定一個數據控制元件顯示數據的屬性名

# 2.1.8. Enabled屬性

property Enabled: boolean read FEnabled write SetEnabled;
1

   表示MQTTClient是否連線

# 2.1.9. Username屬性

property Username: string read FUsername write SetUsername;
1

   指定MQTTBroker 使用者名稱

# 2.1.10. Password屬性

property Password: string read FPassword write SetPassword;
1

   指定MQTTBroker 密碼

# 2.1.11. Formula屬性

property Formula: TStrings read FFormula write SetFormula;
1

   數據解析公式

# 2.1.12. Topic屬性

property Topic: string read FTopic write FTopic;
1

   指定MQTT主題

# 2.2. 事件

  • TMQTTClient元件主要事件列表
事件 何時觸發
OnPublishRecerived 當發佈訊息返回時觸發該事件

# 2.2.1. OnPublishReceived事件

Procedure OnPublishReceived(ASender: TObject; APacketID: Word; ATopic: string; APayload: string);
1

# 2.3. 方法

方法 功能說明
Subscribe 主題訂閱
Unsubscribe 取消主題訂閱
PublishStr 推送主題訊息(字串)
PublishByte 推送主題訊息 (位元組)

# 2.3.1. Subscribe函式

function Subscribe(ATopic: string): Word;
1

說明: MQTT 訂閱主題 返回值: Word型別

  • Subscribe函式語法中各部分說明
部分 說明
ATopic 主題內容
  • 示例
 //訂閱LED主題
 FThis.MQTTClient1.MQTTSubscribe('LED');
1
2

# 2.3.2. UnSubscribe函式

function Unsubscribe(ATopic: string): Word;
1

說明: 註銷MQTT主題 返回值: Word型別

  • MQTTUnSubscribe函式語法中各部分說明
部分 說明
ATopic 主題內容
  • 示例
//註銷LED主題
FThis.MQTTClient1.UnSubscribe('LED');
1
2

# 2.3.3. PublishStr函式

function PublishStr(ATopic: string; APayload: string): Word;
1

說明: MQTT推送訊息 返回值: Word型別

  • MQTTPublishStr函式語法中各部分說明
部分 說明
ATopic 主題內容
APayload 推送的內容
  • 示例
//熄滅LED
FThis.MQTTClient1.PublishStr('LED','0');
1
2

# 2.3.4. PublishByte函式

function PublishByte(ATopic: string; APayload: TBytes): Word;
1

說明: MQTT推送訊息 返回值: Word型別

  • PublishByte函式語法中各部分說明
部分 說明
ATopic 主題內容
APayload 推送的內容
  • 示例
//熄滅LED
FThis.MQTTClient1.PublishByte('LED',0);
1
2

示例

  • MQTT 控制LED燈
type
  TMyHandler = class(TForm)
private 
  FThis:TBaseForm; 
Public 
  constructor Create(AOwner: TComponent); override;
{模組聲明  MODULE-DECLARE}
  procedure LEDOpenClick(Sender: TObject);
  procedure LEDCloseClick(Sender: TObject);
  procedure MQTTClientLEDPublishReceived(ASender: TObject; APacketID: Word; ATopic: string; APayload: string);
end;

constructor TMyHandler.Create(AOwner: TComponent);
begin
  FThis :=TBaseForm(AOwner);
  //MQTTClientLED 屬性賦值
  FThis.MQTTClientLED.BrokerHostName := FThis.edtBrokerHostName.Text;
  FThis.MQTTClientLED.BrokerPort := StrToInt(FThis.edtBrokerPort.Text);
  FThis.MQTTClientLED.Password := FThis.edtPassword.Text;
  FThis.MQTTClientLED.Username := FThis.edtUsername.Text;
  //MQTTClientLED 連線
  FThis.MQTTClientLED.Enabled := true;
end;

{方法實現  MODULE-REAL}

//LEDOpen 控制元件 Click 事件
procedure TMyHandler.LEDOpenClick;
begin
  //點亮LED
   FThis.MQTTClientLED.PublishStr('LED','1');
end;

//LEDClose 控制元件 Click 事件
procedure TMyHandler.LEDCloseClick;
begin
  //熄滅LED
   FThis.MQTTClientLED.PublishStr('LED','0');
end;

//MQTTClientLED 控制元件 OnPublishReceived 事件(發佈收到的內容)
procedure TMyHandler.MQTTClientLEDPublishReceived;
begin 
  if APayload='1' Then
    FThis.MemoMsg.Lines.Add(ATopic+'->開')
  else
    FThis.MemoMsg.Lines.Add(ATopic+'->關');
end;

var
  FMyHandler:TMyHandler;
begin
  FMyHandler := TMyHandler.Create(this);
{事件繫結  MODULE-BIND}
  this.LEDOpen.OnClick := FMyHandler.LEDOpenClick;
  this.LEDClose.OnClick := FMyHandler.LEDCloseClick;
  this.MQTTClientLED.OnPublishReceived := FMyHandler.MQTTClientLEDPublishReceived;
end.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

# 3. TModbusRTUReadChannel 元件

  ModbusRTU多功能數據讀取元件,可通過定義多個TModbusRTUReadItem子項實現對多個Modbus設備的數據採集。

  你可以簡單設定TModbusRTUReadItem元件屬性即可完成ModbusRTU設備的數據採集功能,無需使用指令碼。當然配合指令碼使用可以豐富系統業務功能。

  可通過右鍵點選控制元件,選擇 Import Excel... 選項打開匯入界面,選擇基礎資料表格檔案實現匯入的功能。製作的Excel表格表頭與表格內容的示例如下:

SlaveID StartReg RegCount FunctionCode ConnectionMode ModuleNo ModuleName Site Machine MeterType MonitorType DataType BeginTime EndTime DataUpper DataLower UpperWarning LowerWarning SaveData PulseRatio Offset Interval SaveInterval
1 1 1 fc03 cmClient 溫度 溫控器 溫濕度 dtfloat 08:00 20:00 100 -30 uw1 lw1 TRUE 0.5 1 1000 2000
1 2 1 fc03 cmClient 濕度 溫控器 溫濕度 dtfloat 08:01 20:01 101 -29 uw1 lw1 TRUE 0.5 1 1000 2000
1 3 1 fc03 cmClient 濕度 溫控器 溫濕度 dtfloat 08:02 20:02 102 -28 uw1 lw1 TRUE 0.5 1 1000 2000
2 1 1 fc03 cmClient 濕度 溫控器 溫濕度 dtfloat 08:03 20:03 103 -27 uw1 lw1 TRUE 0.5 1 1000 2000
2 2 1 fc03 cmClient 濕度 溫控器 溫濕度 dtfloat 08:04 20:04 104 -26 uw1 lw1 TRUE 0.5 1 1000 2000
2 3 1 fc03 cmClient 濕度 溫控器 溫濕度 dtfloat 08:05 20:05 105 -25 uw1 lw1 TRUE 0.5 1 1000 2000
3 1 1 fc03 cmClient 濕度 溫控器 溫濕度 dtfloat 08:06 20:06 106 -24 uw1 lw1 TRUE 0.5 1 1000 2000
3 2 1 fc03 cmClient 濕度 溫控器 溫濕度 dtfloat 08:07 20:07 107 -23 uw1 lw1 TRUE 0.5 1 1000 2000
3 3 1 fc03 cmClient 濕度 溫控器 溫濕度 dtfloat 08:08 20:08 108 -22 uw1 lw1 TRUE 0.5 1 1000 2000
4 1 2 fc03 cmClient 濕度 溫控器 溫濕度 dtfloat 08:09 20:09 109 -21 uw1 lw1 TRUE 0.5 1 1000 2000
4 3 2 fc03 cmClient 濕度 溫控器 溫濕度 dtfloat 08:10 20:10 110 -20 uw1 lw1 TRUE 0.5 1 1000 2000
4 5 2 fc03 cmClient 濕度 溫控器 溫濕度 dtfloat 08:11 20:11 111 -19 uw1 lw1 TRUE 0.5 1 1000 2000

# 3.1. 屬性(Properties)

  • TModbusRTUReadItem元件主要屬性
屬性 功能說明
ConnectionMode 指定連線模式
DataControl 指定數據控制元件
DataFields 指定數據欄位
DataLower 指定數據下限
DataType 指定數據型別
DataUpper 指定數據上限
DataValue 指定數據值
DBConnection 指定數據連線元件
Enabled 指定是否啟用
EndTime 指定數據採集結束時間
Formula 指定數據解析指令碼公
FuntionCode 指定Modbus功能碼
Interval 指定數據採集間隔時間
LowerWarning 指定數據下限報警等級
Machine 指定採集點所在的機器
MeterType 指定採集點儀表型別
MobusConnection 指定Modbus連線元件
ModuleName 指定設備名稱
ModeuleNo 指定設備編號
MonitorType 指定監測型別
MsgScript 指定訊息指令碼
Name 指定控制元件名稱
Offset 指定偏移量
PulseRatio 指定活動率%
ReadConfig 指定是否讀取配置
RegCount 指定數據長度
SavaData 指定是否儲存採集之數據
SavaInterval 指定數據儲存間隔時間(毫秒)
ServerAddress 指定ModbusRUT設備地址
Site 指定站點名稱
BeginTime 指定數據採集開始時間
StartReg 指定起始地址
UpperWarning 指定數據上限報警等級

# 3.1.1. ConnectionMode屬性

property ConnectionMode: TConnMode read FConnectionMode write FConnectionMode;
1

   ConnectionMode屬性有兩個值:cmClient、cmServer。 cmClient模式下,是客戶端直接與Modbus設備進行通訊採集數據並顯示的,cmServer模式下,是讀取TARS物聯網之下的配置內容,僅顯示TARS採集的數據。

# 3.1.2. DataControl屬性

property DataControl: string read FDataControl write SetDataControl;
1

   DataControl屬性是指需要將採集之數據顯示在某個元件上時,這個元件的名稱。

# 3.1.3. DataFields屬性

property DataFields: string read FDataFields write SetDataFields;
1

   DataFields屬性是指需要將採集之數據顯示在某個元件上時,這個元件的屬性名稱。

# 3.1.4. DataLower屬性

property DataLower: Double read FDataLower write SetDataLower;
1

   DataLower屬性是指數據下限值,當採集之數據低於下限值時,啟動報警或異常。

# 3.1.5. DataType屬性

property DataType: TDataType read FDataType write SetDataType;
1

   DataType屬性是指採集之數據的數據型別。例如:* dtBoolean -- 布爾型別, dtInt --整數型別。

# 3.1.6. DataUpper屬性

property DataUpper: Double read FDataUpper write SetDataUpper;
1

   DataLower屬性是指數據上限值,當採集之數據超過上限值時,啟動報警或異常。

# 3.1.7. DataValue屬性

property DataValue: Double read FDataValue write FDataValue;
1

   DataValue屬性指採集之數據存放處。

# 3.1.8. DBConnection屬性

property DBConnection: TRFConnection read FOwerDBConnection write SetDBConnection;
1

   DBConnection屬性是用來指定TRFConnection元件的,通過TRFConnection元件,可與TARS雲端伺服器進行數據互動。

# 3.1.9. Enabled屬性

property Enabled: boolean read FEnabled write SetEnabled;
1

   當Enabled設定為True時,表示啟動定時採集執行緒,可設定Interval屬性值改變採集頻率。

# 3.1.10. Formula屬性

property Formula: TStrings read FFormula write SetFormula;
1

  Formula屬性是指可通過指令碼對採集之數據進行業務處理,經過業務處理后的值還是儲存于DataValue中。

示例

begin
 FThis.DataValue := FThis.GetRegValues(0) * 0.1;
end.
1
2
3

# 3.1.11. FuntionCode屬性

property FunctionCode: TFunReadCode read FFunctionCode write SetFunctionCode;
1

   FuntionCode屬性是指Modbus功能碼,根據不同的功能碼讀取Modbus設備不同區之地址的數據。

TModbusRTUReadItem支援的讀取功能碼:

  • fc01 讀取輸出數位訊號 Coils(code $01)
  • fc02 讀取輸入數位訊號 Discrete Inputs (code $02)
  • fc03 讀取輸出類比訊號 Holding Registers (code $03)
  • fc04讀取輸入類比訊號 Input Registers (code $04)

# 3.1.12. EndTime屬性

property EndTime: string read FEndDateTime write FEndDateTime;
1

   EndTime屬性是指採集數據的動作何時結束。

# 3.1.13. Interval屬性

property Interval: Integer read FInterval write SetInterval;
1

   Interval屬性是指採集執行緒的頻率,預設1000毫秒。

# 3.1.14. LowerWarning屬性

property LowerWarning: TLowerWarning read FLowerWarning write SetLowerWarning;
1

   UpperWarning屬性是指數據下限異常型別,目前有:lw1,lw2,lw3,lw4,lwNote。

# 3.1.15. Machine屬性

property Machine: string read FMachine write FMachine;
1

   Machine屬性指採集站點所屬哪個機臺設備。

# 3.1.16. MeterType屬性

property MonitorType: string read FMonitorType write FMonitorType;
1

   MeterType屬性指儀表型別

# 3.1.17. MobusConnection屬性

property ModbusConnection: TModbusConnection read FModbusConnection write SetModbusConnection;
1

   MobusConnection屬性指TModbusConnection元件,使用時必需繫結此元件。

# 3.1.18. ModuleName屬性

property ModuleName: string read FModuleName write FModuleName;
1

   ModuleName屬性指Modbus設備名稱,XX溫控器、XX電錶 等。

# 3.1.19. ModeuleNo屬性

property ModuleNo: string read FModuleNo write FModuleNo;
1

   ModuleNo屬性指Modbus設備的編號,如001、002等。

# 3.1.20. MonitorType屬性

property MonitorType: string read FMonitorType write FMonitorType;
1

   MonitorType屬性指站點的監測型別,如溫度、壓力等。

# 3.1.21. MsgScript屬性

property MsgScript: TStrings read FMsgScript write SetMsgScript;
1

   MsgScript屬性用作預警訊息觸發時,可在指令碼中進行其它的業務整合運用,指令碼採用純Pascal語言指令碼。

# 3.1.22. Offset屬性

property Offset: Double read FOffset write SetOffset;
1

   Offset屬性是指數據偏移量。

# 3.1.23. RegCount屬性

property RegCount: Integer read FRegCount write SetRegCount;
1

   RegCount屬性是指讀取ModbusTCP數據地址的數據長度。

# 3.1.24. SavaData屬性

property SaveData: boolean read FSaveData write FSaveData default false;
1

   SavaData屬性勾選後,會將監測到的數據上傳到TARS雲端伺服器,這裡必需要指定DBConnection屬性的控制元件。

# 3.1.25. SavaInterval屬性

property SaveInterval: Integer read FSaveInterval write SetSaveInterval;
1

   SavaInterval屬性是指採集數據儲存時的頻率。

# 3.1.26. ServerAddress屬性

property ServerAddress: Integer read FServerAddress write SetServerAddress;
1

   ServerAddress屬性是指ModbusRTU設備的地址(1~127)。

# 3.1.27. BeginTime屬性

property BeginTime: string read FStartDateTime write FStartDateTime;
1

   BeginTime屬性指採集數據的起始時間。

# 3.1.28. Site屬性

property Site: string read FSite write FSite;
1

   Site屬性是指ModbusTCP設備的站點名稱,可以作為ModbusTCP數據地址的說明之用。

# 3.1.29. StartReg屬性

property StartReg: Integer read FStartReg write SetStartReg;
1

   RegCount屬性是指讀取ModbusTCP數據起始地址。

# 3.1.30. UpperWarning屬性

property UpperWarning: TUpperWarning read FUpperWarning write SetUpperWarning;
1

   UpperWarning屬性是指數據上限異常型別,目前有:uw1,uw2,uw3,uw4,uwNote。

# 3.2. 方法(Methods)

  • TfxModbusRead元件主要方法
方法 功能說明
GetRegValues 根據索引號返回陣列中的數值
GetBitValues 根據索引號返回陣列中的數值
SetPropValue 設定元件屬性值
GetPropValue 讀取元件屬性值

# 3.2.1. GetRegValues方法

//儲存類比訊號數據
function GetRegValues(QIndex: Integer): Word;
1
2

  通過GetRegValues方法可獲取ModbusTCP設備返回的陣列中的數據。通過索引號獲取對應的數據。

var
 i:Word;
begin
  //獲取陣列中的第0個數據
  i := FThis.ModbusRTUWriteChannel1.ModbusList[0].GetRegValues(0);
  fxEdit2.Text := IntToStr(i);
end;
1
2
3
4
5
6
7

# 3.2.2. GetBitValues方法

//讀取數位訊號數據
function GetBitValues(QIndex: Integer): boolean;
1
2

  通過GetRegValues方法可獲取ModbusTCP設備返回的陣列中的數據。通過索引號獲取對應的數據。

var
 i:boolean;
begin
  //獲取陣列中的第0個數據
  i := FThis.ModbusRTUWriteChannel1.ModbusList[0].GetBitValues(0);
end;
1
2
3
4
5
6

# 3.2.3. SetPropValue方法

procedure SetPropValue(QControl, QControlProp: string; QValue: Variant);
1

  設定控制元件屬性值,通過SetPropValue方法可以將DataValue賦值給指定控制元件的屬性。

 FThis.ModbusRTUWriteChannel1.ModbusList[0].SetPropValue(fxEdit1,Text);
1

# 3.2.4. GetPropValue方法

function GetPropValue(QControl, QControlProp: string): Variant;
1

  設定控制元件屬性值,通過GetPropValue方法可以獲取指定控制元件屬性的值,並返回。

var
 v:String;
Begin
  v := FThis.ModbusRTUWriteChannel1.ModbusList[0].GetPropValue(fxEdit1,Text);
End;

1
2
3
4
5
6

# 4. TModbusRTUWriteChannel 元件

  ModbusRTU多功能數據寫入元件,可通過定義多個TModbusRTUWriteItem子項實現對多個Modbus設備的控制。

  你可以簡單設定ModbusRTUWriteChannel元件屬性即可完成ModbusRTU設備的數據寫入功能,無需使用指令碼。當然配合指令碼使用可以豐富系統業務功能。

# 4.1. 屬性(Properties)

  • TModbusRTUWriteChannel Item元件主要屬性
屬性 功能說明
ConnectionMode 指定連線模式
DataControl 指定數據控制元件
DataField 指定數據欄位
DataLower 指定數據下限
DataType 指定數據型別
DataUpper 指定數據上限
DataValue 指定數據值
DBConnection 指定數據連線元件
Formula 指定數據解析指令碼公式
FuntionCode 指定Modbus功能碼
LowerWarning 指定數據下限報警等級
Machine 指定採集點所在的機器
MeterType 指定採集點儀表型別
MobusConnection 指定Modbus連線元件
ModuleName 指定設備名稱
ModeuleNo 指定設備編號
MonitorType 指定監測型別
MsgScript 指定訊息指令碼
ReadConfig 指定是否讀取配置
RegCount 指定數據長度
Site 指定站點名稱
StartReg 指定起始地址
UpperWarning 指定數據上限報警等級

# 4.1.1. ConnectionMode屬性

property ConnectionMode: TConnMode read FConnectionMode write FConnectionMode;
1

   ConnectionMode屬性有兩個值:cmClient、cmServer。 cmClient模式下,是客戶端直接與Modbus設備進行通訊採集數據並顯示的,cmServer模式下,是讀取TARS物聯網之下的配置內容,僅顯示TARS採集的數據。

# 4.1.2. DataControl屬性

property DataControl: string read FDataControl write SetDataControl;
1

   DataControl屬性是指需要將寫入之數據顯示在某個元件上時,這個元件的名稱。

# 4.1.3. DataField屬性

property DataField: string read FDataField write SetDataField;
1

   DataField屬性是指需要將寫入之數據顯示在某個元件上時,這個元件的屬性名稱。

# 4.1.4. DataLower屬性

property DataLower: Double read FDataLower write SetDataLower;
1

   DataLower屬性是指數據下限值,當寫入之數據低於下限值時,啟動報警或異常。

# 4.1.5. DataType屬性

property DataType: TDataType read FDataType write SetDataType;
1

   DataType屬性是指寫入之數據的數據型別。例如:* dtBoolean -- 布爾型別, dtInt --整數型別。

# 4.1.6. DataUpper屬性

property DataUpper: Double read FDataUpper write SetDataUpper;
1

   DataLower屬性是指數據上限值,當寫入之數據超過上限值時,啟動報警或異常。

# 4.1.7. DataValue屬性

property DataValue: Double read FDataValue write FDataValue;
1

   DataValue屬性指採寫入數據存放處。

# 4.1.8. DBConnection屬性

property DBConnection: TRFConnection read FOwerDBConnection write SetDBConnection;
1

   DBConnection屬性是用來指定TRFConnection元件的,通過TRFConnection元件,可與TARS雲端伺服器進行數據互動。

# 4.1.9. Formula屬性

property Formula: TStrings read FFormula write SetFormula;
1

  Formula屬性是指可通過指令碼對採集之數據進行業務處理,經過業務處理后的值還是儲存于DataValue中。

示例

begin
 FThis.DataValue := FThis.GetRegValues(0) * 0.1;
end.
1
2
3

# 4.1.10. FuntionCode屬性

property FunctionCode: TFunReadCode read FFunctionCode write SetFunctionCode;
1

   FuntionCode屬性是指Modbus功能碼,根據不同的功能碼寫入Modbus設備不同區之地址的數據。

TfxModbusRead支援的讀取功能碼:

  • fc05 寫入單筆輸出數位訊號 Single Coil(code $05)
  • fc06 寫入單筆輸出類比訊號 Single Register (code $06)
  • fc15 寫入多筆輸出數位訊號 Multiple Coils(code $0F)
  • fc16 寫入多筆輸出類比訊號 Multiple Registers (code $10)

# 4.1.11. Host屬性

property Host: string read FHost write SetHost;
1

   Host屬性是指ModbusTCP設備的地址,如:192.168.1.100。

# 4.1.12. LowerWarning屬性

property LowerWarning: TLowerWarning read FLowerWarning write SetLowerWarning;
1

   UpperWarning屬性是指數據下限異常型別,目前有:lw1,lw2,lw3,lw4,lwNote。

# 4.1.13. Machine屬性

property Machine: string read FMachine write FMachine;
1

   Machine屬性指採集站點所屬哪個機臺設備。

# 4.1.14. MeterType屬性

property MonitorType: string read FMonitorType write FMonitorType;
1

   MeterType屬性指儀表型別

# 4.1.15. MobusConnection屬性

property ModbusConnection: TModbusConnection read FModbusConnection write SetModbusConnection;
1

   MobusConnection屬性指TModbusConnection元件,使用時必需繫結此元件。

# 4.1.16. ModuleName屬性

property ModuleName: string read FModuleName write FModuleName;
1

   ModuleName屬性指Modbus設備名稱,XX溫控器、XX電錶 等。

# 4.1.17. ModeuleNo屬性

property ModuleNo: string read FModuleNo write FModuleNo;
1

   ModuleNo屬性指Modbus設備的編號,如001、002等。

# 4.1.18. MonitorType屬性

property MonitorType: string read FMonitorType write FMonitorType;
1

   MonitorType屬性指站點的監測型別,如溫度、壓力等。

# 4.1.19. MsgScript屬性

property MsgScript: TStrings read FMsgScript write SetMsgScript;
1

   MsgScript屬性用作預警訊息觸發時,可在指令碼中進行其它的業務整合運用,指令碼採用純Pascal語言指令碼。

# 4.1.20. RegCount屬性

property RegCount: Integer read FRegCount write SetRegCount;
1

   RegCount屬性是指寫入ModbusTCP數據地址的數據長度。

# 4.1.21. Site屬性

property Site: string read FSite write FSite;
1

   Site屬性是指ModbusTCP設備的站點名稱,可以作為ModbusTCP數據地址的說明之用。

# 4.1.22. StartReg屬性

property StartReg: Integer read FStartReg write SetStartReg;
1

   RegCount屬性是指寫入ModbusTCP數據起始地址。

# 4.1.23. UpperWarning屬性

property UpperWarning: TUpperWarning read FUpperWarning write SetUpperWarning;
1

   UpperWarning屬性是指數據上限異常型別,目前有:uw1,uw2,uw3,uw4,uwNote。

# 4.2. 方法(Methods)

  • TModbusRTUWriteChannel 元件主要方法
方法 功能說明
Write 執行Modbus寫入操作
  • TModbusRTUWriteItem元件主要方法
方法 功能說明
execute 執行Modbus寫入操作

# 4.2.1. execute方法

procedure execute;
1

  執行TModbusRTUWriteItem的寫入事件。

# 4.2.2. Write方法

procedure Write(QIndex: Integer; QValue: Variant);
1

示例

 //以下兩種方法執行的結果是一樣的。
 FThis.ModbusRTUWriteChannel.ModbusList[0].DataValue := 1;
 FThis.ModbusRTUWriteChannel.ModbusList[0].execute;
 
 FThis.ModbusRTUWriteChannel.Write(0,1);
1
2
3
4
5

# 5. TModbusTCPReadChannel 元件

  ModbusRTU多功能數據讀取元件,可通過定義多個TModbusTCPReadItem子項實現對多個Modbus設備的數據採集。

  你可以簡單設定 TModbusRTUReadItem元件屬性即可完成ModbusRTU設備的數據採集功能,無需使用指令碼。當然配合指令碼使用可以豐富系統業務功能。

# 5.1. 屬性(Properties)

  • TModbusRTUReadChannel Item元件主要屬性
屬性 功能說明
ConnectionMode 指定連線模式
DataControl 指定數據控制元件
DataFields 指定數據欄位
DataLower 指定數據下限
DataType 指定數據型別
DataUpper 指定數據上限
DataValue 指定數據值
DBConnection 指定數據連線元件
Enabled 指定是否啟用
EndTime 指定數據採集結束時間
Formula 指定數據解析指令碼公
FuntionCode 指定Modbus功能碼
Host 指定ModbusTCP設備IP地址
Interval 指定數據採集間隔時間
LowerWarning 指定數據下限報警等級
Machine 指定採集點所在的機器
MeterType 指定採集點儀表型別
ModuleName 指定設備名稱
ModeuleNo 指定設備編號
MonitorType 指定監測型別
MsgScript 指定訊息指令碼
Name 指定控制元件名稱
Offset 指定偏移量
PulseRatio 指定活動率%
Port 指定ModbusTCP設備埠號
ReadConfig 指定是否讀取配置
RegCount 指定數據長度
SavaData 指定是否儲存採集之數據
SavaInterval 指定數據儲存間隔時間(毫秒)
Site 指定站點名稱
BeginTime 指定數據採集開始時間
StartReg 指定起始地址
UpperWarning 指定數據上限報警等級

# 5.1.1. ConnectionMode屬性

property ConnectionMode: TConnMode read FConnectionMode write FConnectionMode;
1

   ConnectionMode屬性有兩個值:cmClient、cmServer。 cmClient模式下,是客戶端直接與Modbus設備進行通訊採集數據並顯示的,cmServer模式下,是讀取TARS物聯網之下的配置內容,僅顯示TARS採集的數據。

# 5.1.2. DataControl屬性

property DataControl: string read FDataControl write SetDataControl;
1

   DataControl屬性是指需要將採集之數據顯示在某個元件上時,這個元件的名稱。

# 5.1.3. DataFields屬性

property DataFields: string read FDataFields write SetDataFields;
1

   DataFields屬性是指需要將採集之數據顯示在某個元件上時,這個元件的屬性名稱。

# 5.1.4. DataLower屬性

property DataLower: Double read FDataLower write SetDataLower;
1

   DataLower屬性是指數據下限值,當採集之數據低於下限值時,啟動報警或異常。

# 5.1.5. DataType屬性

property DataType: TDataType read FDataType write SetDataType;
1

   DataType屬性是指採集之數據的數據型別。例如:* dtBoolean -- 布爾型別, dtInt --整數型別。

# 5.1.6. DataUpper屬性

property DataUpper: Double read FDataUpper write SetDataUpper;
1

   DataLower屬性是指數據上限值,當採集之數據超過上限值時,啟動報警或異常。

# 5.1.7. DataValue屬性

property DataValue: Double read FDataValue write FDataValue;
1

   DataValue屬性指採集之數據存放處。

# 5.1.8. DBConnection屬性

property DBConnection: TRFConnection read FOwerDBConnection write SetDBConnection;
1

   DBConnection屬性是用來指定TRFConnection元件的,通過TRFConnection元件,可與TARS雲端伺服器進行數據互動。

# 5.1.9. Enabled屬性

property Enabled: boolean read FEnabled write SetEnabled;
1

   當Enabled設定為True時,表示啟動定時採集執行緒,可設定Interval屬性值改變採集頻率。

# 5.1.10. Formula屬性

property Formula: TStrings read FFormula write SetFormula;
1

  Formula屬性是指可通過指令碼對採集之數據進行業務處理,經過業務處理后的值還是儲存于DataValue中。

示例

begin
 FThis.DataValue := FThis.GetRegValues(0) * 0.1;
end.
1
2
3

# 5.1.11. FuntionCode屬性

property FunctionCode: TFunReadCode read FFunctionCode write SetFunctionCode;
1

   FuntionCode屬性是指Modbus功能碼,根據不同的功能碼讀取Modbus設備不同區之地址的數據。

TModbusRTUReadItem支援的讀取功能碼:

  • fc01 讀取輸出數位訊號 Coils(code $01)
  • fc02 讀取輸入數位訊號 Discrete Inputs (code $02)
  • fc03 讀取輸出類比訊號 Holding Registers (code $03)
  • fc04 讀取輸入類比訊號 Input Registers (code $04)

# 5.1.12. Host屬性

property Host: string read FHost write SetHost;
1

   Host屬性是指ModbusTCP設備的地址,如:192.168.1.100。

# 5.1.13. EndTime屬性

property EndTime: string read FEndDateTime write FEndDateTime;
1

   EndTime屬性是指採集數據的動作何時結束。

# 5.1.14. Interval屬性

property Interval: Integer read FInterval write SetInterval;
1

   Interval屬性是指採集執行緒的頻率,預設1000毫秒。

# 5.1.15. LowerWarning屬性

property LowerWarning: TLowerWarning read FLowerWarning write SetLowerWarning;
1

   UpperWarning屬性是指數據下限異常型別,目前有:lw1,lw2,lw3,lw4,lwNote。

# 5.1.16. Machine屬性

property Machine: string read FMachine write FMachine;
1

   Machine屬性指採集站點所屬哪個機臺設備。

# 5.1.17. MeterType屬性

property MonitorType: string read FMonitorType write FMonitorType;
1

   MeterType屬性指儀表型別

# 5.1.18. ModuleName屬性

property ModuleName: string read FModuleName write FModuleName;
1

   ModuleName屬性指Modbus設備名稱,XX溫控器、XX電錶 等。

# 5.1.19. ModeuleNo屬性

property ModuleNo: string read FModuleNo write FModuleNo;
1

   ModuleNo屬性指Modbus設備的編號,如001、002等。

# 5.1.20. MonitorType屬性

property MonitorType: string read FMonitorType write FMonitorType;
1

   MonitorType屬性指站點的監測型別,如溫度、壓力等。

# 5.1.21. MsgScript屬性

property MsgScript: TStrings read FMsgScript write SetMsgScript;
1

   MsgScript屬性用作預警訊息觸發時,可在指令碼中進行其它的業務整合運用,指令碼採用純Pascal語言指令碼。

# 5.1.22. Offset屬性

property Offset: Double read FOffset write SetOffset;
1

   UpperWarning屬性是指數據偏移量。

# 5.1.23. Port屬性

property Port: Integer read FPort write SetPort;
1

   Host屬性是指ModbusTCP設備的埠號,預設502。

# 5.1.24. RegCount屬性

property RegCount: Integer read FRegCount write SetRegCount;
1

   RegCount屬性是指讀取ModbusTCP數據地址的數據長度。

# 5.1.25. SavaData屬性

property SaveData: boolean read FSaveData write FSaveData default false;
1

   SavaData屬性勾選後,會將監測到的數據上傳到TARS雲端伺服器,這裡必需要指定DBConnection屬性的控制元件。

# 5.1.26. SavaInterval屬性

property SaveInterval: Integer read FSaveInterval write SetSaveInterval;
1

   SavaInterval屬性是指採集數據儲存時的頻率。

# 5.1.27. BeginTime屬性

property BeginTime: string read FStartDateTime write FStartDateTime;
1

   BeginTime屬性指採集數據的起始時間。

# 5.1.28. Site屬性

property Site: string read FSite write FSite;
1

   Site屬性是指ModbusTCP設備的站點名稱,可以作為ModbusTCP數據地址的說明之用。

# 5.1.29. StartReg屬性

property StartReg: Integer read FStartReg write SetStartReg;
1

   RegCount屬性是指讀取ModbusTCP數據起始地址。

# 5.1.30. UpperWarning屬性

property UpperWarning: TUpperWarning read FUpperWarning write SetUpperWarning;
1

   UpperWarning屬性是指數據上限異常型別,目前有:uw1,uw2,uw3,uw4,uwNote。

# 5.2. 方法(Methods)

  • TModbusTCPReadItem 元件主要方法
方法 功能說明
GetRegValues 根據索引號返回陣列中的數值
GetBitValues 根據索引號返回陣列中的數值
SetPropValue 設定元件屬性值
GetPropValue 讀取元件屬性值

# 5.2.1. GetRegValues方法

//儲存類比訊號數據
function GetRegValues(QIndex: Integer): Word;
1
2

  通過GetRegValues方法可獲取ModbusTCP設備返回的陣列中的數據。通過索引號獲取對應的數據。

var
 i:Word;
begin
  //獲取陣列中的第0個數據
  i := FThis.ModbusTCPReadChannel1.ModbusList[0].GetRegValues(0);
  fxEdit2.Text := IntToStr(i);
end;
1
2
3
4
5
6
7

# 5.2.2. GetBitValues方法

//讀取數位訊號數據
function GetBitValues(QIndex: Integer): boolean;
1
2

  通過GetRegValues方法可獲取ModbusTCP設備返回的陣列中的數據。通過索引號獲取對應的數據。

var
 i:boolean;
begin
  //獲取陣列中的第0個數據
  i := FThis.ModbusTCPReadChannel1.ModbusList[0].GetBitValues(0);
end;
1
2
3
4
5
6

# 5.2.3. SetPropValue方法

procedure SetPropValue(QControl, QControlProp: string; QValue: Variant);
1

  設定控制元件屬性值,通過SetPropValue方法可以將DataValue賦值給指定控制元件的屬性。

 FThis.ModbusTCPReadChannel1.ModbusList[0].SetPropValue(fxEdit1,Text);
1

# 5.2.4. GetPropValue方法

function GetPropValue(QControl, QControlProp: string): Variant;
1

  設定控制元件屬性值,通過GetPropValue方法可以獲取指定控制元件屬性的值,並返回。

var
 v:String;
Begin
  v := FThis.ModbusTCPReadChannel1.ModbusList[0].GetPropValue(fxEdit1,Text);
End;

1
2
3
4
5
6

# 6. TModbusTCPWriteChannel 元件

  ModbusTCP多功能數據寫入元件,可通過定義多個TModbusTCPWriteItem子項實現對多個Modbus設備的控制。

  你可以簡單設定ModbusTCPWriteChannel元件屬性即可完成ModbusTCP設備的數據寫入功能,無需使用指令碼。當然配合指令碼使用可以豐富系統業務功能。

# 6.1. 屬性(Properties)

  • TModbusTCPWriteChannel Item元件主要屬性
屬性 功能說明
ConnectionMode 指定連線模式
DataControl 指定數據控制元件
DataField 指定數據欄位
DataLower 指定數據下限
DataType 指定數據型別
DataUpper 指定數據上限
DataValue 指定數據值
DBConnection 指定數據連線元件
Formula 指定數據解析指令碼公式
FuntionCode 指定Modbus功能碼
Host 指定ModbusTCP設備IP地址
LowerWarning 指定數據下限報警等級
Machine 指定採集點所在的機器
MeterType 指定採集點儀表型別
ModuleName 指定設備名稱
ModeuleNo 指定設備編號
MonitorType 指定監測型別
MsgScript 指定訊息指令碼
Port 指定ModbusTCP設備埠號
ReadConfig 指定是否讀取配置
RegCount 指定數據長度
Site 指定站點名稱
StartReg 指定起始地址
UpperWarning 指定數據上限報警等級

# 6.1.1. ConnectionMode屬性

property ConnectionMode: TConnMode read FConnectionMode write FConnectionMode;
1

   ConnectionMode屬性有兩個值:cmClient、cmServer。 cmClient模式下,是客戶端直接與Modbus設備進行通訊採集數據並顯示的,cmServer模式下,是讀取TARS物聯網之下的配置內容,僅顯示TARS採集的數據。

# 6.1.2. DataControl屬性

property DataControl: string read FDataControl write SetDataControl;
1

   DataControl屬性是指需要將寫入之數據顯示在某個元件上時,這個元件的名稱。

# 6.1.3. DataField屬性

property DataField: string read FDataField write SetDataField;
1

   DataField屬性是指需要將寫入之數據顯示在某個元件上時,這個元件的屬性名稱。

# 6.1.4. DataLower屬性

property DataLower: Double read FDataLower write SetDataLower;
1

   DataLower屬性是指數據下限值,當寫入之數據低於下限值時,啟動報警或異常。

# 6.1.5. DataType屬性

property DataType: TDataType read FDataType write SetDataType;
1

   DataType屬性是指寫入之數據的數據型別。例如:* dtBoolean -- 布爾型別, dtInt --整數型別。

# 6.1.6. DataUpper屬性

property DataUpper: Double read FDataUpper write SetDataUpper;
1

   DataLower屬性是指數據上限值,當寫入之數據超過上限值時,啟動報警或異常。

# 6.1.7. DataValue屬性

property DataValue: Double read FDataValue write FDataValue;
1

   DataValue屬性指採寫入數據存放處。

# 6.1.8. DBConnection屬性

property DBConnection: TRFConnection read FOwerDBConnection write SetDBConnection;
1

   DBConnection屬性是用來指定TRFConnection元件的,通過TRFConnection元件,可與TARS雲端伺服器進行數據互動。

# 6.1.9. Formula屬性

property Formula: TStrings read FFormula write SetFormula;
1

  Formula屬性是指可通過指令碼對採集之數據進行業務處理,經過業務處理后的值還是儲存于DataValue中。

示例

begin
 FThis.DataValue := FThis.GetRegValues(0) * 0.1;
end.
1
2
3

# 6.1.10. FuntionCode屬性

property FunctionCode: TFunReadCode read FFunctionCode write SetFunctionCode;
1

   FuntionCode屬性是指Modbus功能碼,根據不同的功能碼寫入Modbus設備不同區之地址的數據。

TfxModbusRead支援的讀取功能碼:

  • fc05 寫入單筆輸出數位訊號 Single Coil(code $05)
  • fc06 寫入單筆輸出類比訊號 Single Register (code $06)
  • fc15 寫入多筆輸出數位訊號 Multiple Coils(code $0F)
  • fc16 寫入多筆輸出類比訊號 Multiple Registers (code $10)

# 6.1.11. Host屬性

property Host: string read FHost write SetHost;
1

   Host屬性是指ModbusTCP設備的地址,如:192.168.1.100。

# 6.1.12. LowerWarning屬性

property LowerWarning: TLowerWarning read FLowerWarning write SetLowerWarning;
1

   UpperWarning屬性是指數據下限異常型別,目前有:lw1,lw2,lw3,lw4,lwNote。

# 6.1.13. Machine屬性

property Machine: string read FMachine write FMachine;
1

   Machine屬性指採集站點所屬哪個機臺設備。

# 6.1.14. MeterType屬性

property MonitorType: string read FMonitorType write FMonitorType;
1

   MeterType屬性指儀表型別

# 6.1.15. ModuleName屬性

property ModuleName: string read FModuleName write FModuleName;
1

   ModuleName屬性指Modbus設備名稱,XX溫控器、XX電錶 等。

# 6.1.16. ModeuleNo屬性

property ModuleNo: string read FModuleNo write FModuleNo;
1

   ModuleNo屬性指Modbus設備的編號,如001、002等。

# 6.1.17. MonitorType屬性

property MonitorType: string read FMonitorType write FMonitorType;
1

   MonitorType屬性指站點的監測型別,如溫度、壓力等。

# 6.1.18. MsgScript屬性

property MsgScript: TStrings read FMsgScript write SetMsgScript;
1

   MsgScript屬性用作預警訊息觸發時,可在指令碼中進行其它的業務整合運用,指令碼採用純Pascal語言指令碼。

# 6.1.19. Port屬性

property Port: Integer read FPort write SetPort;
1

   Host屬性是指ModbusTCP設備的埠號,預設502。

# 6.1.20. RegCount屬性

property RegCount: Integer read FRegCount write SetRegCount;
1

   RegCount屬性是指寫入ModbusTCP數據地址的數據長度。

# 6.1.21. Site屬性

property Site: string read FSite write FSite;
1

   Site屬性是指ModbusTCP設備的站點名稱,可以作為ModbusTCP數據地址的說明之用。

# 6.1.22. StartReg屬性

property StartReg: Integer read FStartReg write SetStartReg;
1

   RegCount屬性是指寫入ModbusTCP數據起始地址。

# 6.1.23. UpperWarning屬性

property UpperWarning: TUpperWarning read FUpperWarning write SetUpperWarning;
1

   UpperWarning屬性是指數據上限異常型別,目前有:uw1,uw2,uw3,uw4,uwNote。

# 6.2. 方法(Methods)

  • TModbusTCPWriteChannel 元件主要方法
方法 功能說明
Write 執行Modbus寫入操作
  • TModbusTCPWriteItem元件主要方法
方法 功能說明
execute 執行Modbus寫入操作

# 6.2.1. execute方法

procedure execute;
1

  執行TModbusTCPWriteItem的寫入事件。

# 6.2.2. Write方法

procedure Write(QIndex: Integer; QValue: Variant);
1

示例

 //以下兩種方法執行的結果是一樣的。
 FThis.ModbusTCPWriteChannel.ModbusList[0].DataValue := 1;
 FThis.ModbusTCPWriteChannel.ModbusList[0].execute;
 
 FThis.ModbusTCPWriteChannel.Write(0,1);
1
2
3
4
5

# 7. TModbusConnection 元件

  ModbusRTU 網路通訊協議的連線元件。   TModbusConnection配合TModbusClient 、TModbusRTUReadChannel 、TModbusRTUWriteChannel 元件使用,不可單獨使用。

配置界面

TModbusConnection 主要屬性說明

  • Serial Port:通訊埠。
  • Baud Rate:波特率。
  • Echo Query Before Reply:查詢前先回復。
  • Data Bits:數據位。
  • Paritty:校驗位。
  • Stop Bits:停止位。
  • Transmission Mode:傳輸方式。
  • Flow Control:流控制。
  • Enabled Lines:可控制線。
  • Silent Interval [character times]:間歇時間間隔。

# 8. TModbusClient 元件

  ModbusRTU多功能數據採集與控制組件。

# 8.1. 屬性(Properties)

  • TModbusClient元件主要屬性
屬性 功能說明
Connection 指定TModbusConnection通訊連線元件
MaxConsecutiveTimeouts 指定最長連續超時時間
ServerAddress 指定Modbus設備地址

# 8.2. 方法(Methods)

  • TModbusClient組主要方法
方法 功能說明
ReadCoils 讀取多個DO數位訊號輸出
ReadHoldingRegisters 讀取多個AO類比訊號輸出
ReadInputRegister 讀取單個AO類比訊號輸入
ReadDiscreteInputs 讀取單個DO類比訊號輸入
WriteSingleCoil 寫入單個AO數位訊號輸出
WriteCoils 寫入多個AO數位訊號輸出
WriteSingleRegister 寫入單個DO類比訊號輸出
WriteMultipleRegisters 寫入多個DO類比訊號輸出

# 8.2.1. ReadCoils方法

  讀取多個線圈狀態(01)

function ReadCoils(StartBit: Word; BitCount: Word; UserData: Pointer = nil): Cardinal;
1
  • 示列
  FThis.ModbusClient1.ReadCoils(1,3,nil);
1

# 8.2.2. ReadDiscreteInputs方法

  讀取離散輸入狀態(02)

function ReadDiscreteInputs(StartBit: Word; BitCount: Word; UserData: Pointer = nil): Cardinal;
1
  • 示列
  FThis.ModbusClient1.ReadDiscreteInputs(1,3,nil);
1

# 8.2.3. ReadHoldingRegisters方法

  讀取多個保持型暫存器(03)

function ReadHoldingRegisters(StartReg: Word; RegCount: Word; UserData: Pointer = nil): Cardinal;
1
  • 示列
  FThis.ModbusClient1.ReadHoldingRegisters(1,3,nil);
1

# 8.2.4. ReadInputRegisters方法

  讀取多個輸入暫存器(04)

function ReadInputRegisters(StartReg: Word; RegCount: Word; UserData: Pointer = nil): Cardinal;
1
  • 示列
  FThis.ModbusClient1.ReadInputRegisters(1,3,nil);
1

# 8.2.5. WriteSingleCoil方法

  寫入單個線圈狀態(05)

function WriteSingleCoil(BitAddr: Word; BitValue: Boolean; UserData: Pointer = nil): Cardinal;
1
  • 示列
  FThis.ModbusClient1.WriteSingleCoil(1,True,nil);
1

# 8.2.6. WriteMultipleCoils方法

  寫入多個線圈狀態(15)

function WriteMultipleCoils(StartBit: Word; const BitValues: TBitValues;UserData: Pointer = nil): Cardinal;
1
  • 示列
var
 v:TBitValues;
begin
  Setlength(v,3);
  v[0] := true;
  v[1] := true;
  v[2] := false;
  FThis.ModbusClient1.WriteMultipleCoils(1,v,nil);
end;
1
2
3
4
5
6
7
8
9

# 8.2.7. WritSingleRegister方法

  寫入單個保持型暫存器(06)

function WriteSingleRegister(RegAddr: Word; RegValue: Word; UserData: Pointer = nil): Cardinal;
1
  • 示例
  FThis.ModbusClient1.ReadInputRegisters(1,3,nil);
1

# 8.2.8. WriteMultipleRegisters方法

  寫入多個保持型暫存器(16)

function WriteMultipleRegisters(StartReg: Word; const RegValues: TRegValues;UserData: Pointer = nil): Cardinal;
1
  • 示例
var
 v:TRegValues;
begin
  Setlength(v,3);
  v[0] := 11;
  v[1] := 22;
  v[2] := 33;
  FThis.ModbusClient1.WriteMultipleRegisters(1,v,nil);
end;
1
2
3
4
5
6
7
8
9

# 8.3. 事件

  • TModbusClient主要事件
事件 何時觸發
OnReadCoilsRead 在執行ReadCoils方法時觸發該事件
OnReadDiscreteInputsRead 在執行ReadDiscreteInputs方法時觸發該事件
OnReadHoldingRegistersRead 在執行ReadHoldingRegisters方法時觸發該事件
OnInputRegistersRead 在執行ReadInputRegisters方法時觸發該事件

# 8.3.1. OnCoilsRead事件

  在執行ReadCoils方法時觸發該事件

  procedure OnCoilsRead(Sender: TModbusClient; const Info: TTransactionInfo; StartBit: Word; BitCount: Word; const BitValues: TBitValues);
1
  • 示例
var
 i:Integer;
begin
 for i := Low(BitValues) to High(BitValues) do
 begin
  if BitValues[i] then
   FThis.Memo1.Lines.Add('True')
  else
   FThis.Memo1.Lines.Add('False') 
 end;
end;
1
2
3
4
5
6
7
8
9
10
11

# 8.3.2. OnDiscreteInputsRead事件

  在執行ReadDiscreteInputs方法時觸發該事件

  procedure OnDiscreteInputsRead(Sender: TModbusClient; const Info: TTransactionInfo; StartBit: Word; BitCount: Word; const BitValues: TBitValues);
1
  • 示例
var
 i:Integer;
begin
 for i := Low(BitValues) to High(BitValues) do
 begin
  if BitValues[i] then
   FThis.Memo1.Lines.Add('True')
  else
   FThis.Memo1.Lines.Add('False') 
 end;
end;
1
2
3
4
5
6
7
8
9
10
11

# 8.3.3. OnHoldingRegistersRead事件

  在執行ReadHoldingRegisters方法時觸發該事件

  procedure OnHoldingRegistersRead(Sender: TModbusClient; const Info: TTransactionInfo; StartReg: Word; RegCount: Word; const RegValues: TRegValues);
1
  • 示例
var
 i:Integer;
begin
 for i := Low(RegValues) to High(RegValues) do
 begin
   FThis.Memo1.Lines.Add(IntToStr(RegValues[i]));
 end;
end;
1
2
3
4
5
6
7
8

# 8.3.4. OnHoldingRegistersRead事件

  在執行ReadInputRegisters方法時觸發該事件

  procedure OnInputRegistersRead(Sender: TModbusClient; const Info: TTransactionInfo; StartReg: Word; RegCount: Word; const RegValues: TRegValues);
1
  • 示例
var
 i:Integer;
begin
 for i := Low(RegValues) to High(RegValues) do
 begin
   FThis.Memo1.Lines.Add(IntToStr(RegValues[i]));
 end;
end;
1
2
3
4
5
6
7
8

# 9. TModbusTCP 元件

  一個ModbusTCP客戶端元件。

  您可以用TModbusTCP元件實現支援ModbusTCP協議的設備的控制和數據採集。

# 9.1. 屬性(Properties)

  • TModbusTCP元件主要屬性
屬性 功能說明
AutoConnect 是否自動連線
Host 指定一個Modbus設備的IP地址
Port 指定一個Modbus設備的埠號
UnitID 制定Modbus設備的Slave ID

# 9.1.1. AutoConnect

property AutoConnect: Boolean read FAutoConnect write SetAutoConnect default True;
1

# 9.1.2. Host屬性

property Host: string;
1

  Host是指ModbusTCP設備的IP地址。如:192.168.1.100。

FThis.ModbusTCP1.Host := '192.168.1.100';
1

# 9.1.3. Port屬性

property Port: Word;
1

  Port是指ModbusTCP設備的埠號。預設502。

FThis.ModbusTCP1.Port := 502;
1

# 9.1.4. UnitID屬性

property UnitID: Integer;
1

  制定ModbusTCP 設備的SlaveID 對於需要使用SlaveID 的ModbusTCP設備有作用。

# 9.2. 事件(Events)

  無

# 9.3. 方法(Methods)

  • TModbusTCP元件主要方法
方法 功能說明
Connected 判斷連線狀態
ReadCoil 讀取單個DO數位訊號輸出
ReadCoils 讀取多個DO數位訊號輸出
ReadHoldingRegister 讀取單個AO類比訊號輸出
ReadHoldingRegisters 讀取多個AO類比訊號輸出
ReadInputRegister 讀取單個AI類比訊號輸入
WriteCoil 寫入單個AO數位訊號輸出
WriteCoils 寫入多個AO數位訊號輸出
WriteRegister 寫入單個DO類比訊號輸出
WriteRegisters 寫入多個DO類比訊號輸出

# 9.3.1. Connect方法

function Connected:Boolean;
1

  連線設備。

 if FThis.ModbusTCP1.Connected then
    Showmessage('連線成功!');
1
2

# 9.3.2. ReadCoil方法

function ReadCoil(const RegNo: Word; out Value: Boolean): Boolean;
1

  讀取單個數位訊號輸出。

//讀取DO數位訊號輸出
Procedure btnReadCoilOnClick(Sender: TObject);
var
 v:boolean;
Begin
  if .ReadCoil(1,v) then
  begin
    if v Then
       FThis.Memo1.Lines.Add('ReadCoil Value->>> 1')
    else
       FThis.Memo1.Lines.Add('ReadCoil Value->>> 0');
  End
  else
    FThis.Memo1.Lines.Add('ReadCoil->>> error!');
End;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 9.3.3. ReadCoils方法

function ReadCoils(const RegNo: Word; const Blocks: Word; out RegisterData: string): Boolean;
1

  讀取多個DO數位訊號輸出。

var
  v:string;
begin
    FThis.ModbusTCP1.ReadCoils(1,2,v);
end;
1
2
3
4
5

# 9.3.4. ReadHoldingRegister方法

function ReadHoldingRegister(const RegNo: Word; out Value: Word): Boolean;
1

  讀取單個AO類比訊號輸出。

//讀取AO類比訊號輸出
Procedure btnReadHoldingRegisterOnClick(Sender: TObject);
var
 v:word;
Begin
  if FThis.ModbusTCP1.ReadHoldingRegister(1,v) then
  begin
    if v Then
       FThis.Memo1.Lines.Add('ReadHoldingRegister Value->>> '+floattostr(v))
    else
       FThis.Memo1.Lines.Add('ReadHoldingRegister Value->>> '+floattostr(v));
  End
  else
    FThis.Memo1.Lines.Add('ReadHoldingRegister->>> error!');
End;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 9.3.5. ReadHoldingRegisters方法

function ReadHoldingRegisters(const RegNo: Word; const Blocks: Word; out RegisterData: string): Boolean;
1

  讀取多個AO類比訊號輸出。

var
    v:String;
Begin
   FThis.ModbusTCP1.ReadHoldingRegisters(1,4,v);
End;
1
2
3
4
5

# 9.3.6. ReadInputRegister方法

function ReadInputRegister(const RegNo: Word; out Value: Word): Boolean;
1

  讀取單個AI類比訊號輸入。

//讀取AI數位訊號輸入
Procedure btnReadInputRegisterOnClick(Sender: TObject);
var
 v:word;
Begin
  if FThis.ModbusTCP1.ReadInputRegister(1,v) then
  begin
    if v Then
       fxMemo1.Lines.Add('ReadInputRegister Value->>> '+floattostr(v))
    else
       fxMemo1.Lines.Add('ReadInputRegister Value->>> '+floattostr(v));
  End
  else
    fxMemo1.Lines.Add('ReadInputRegister->>> error!');
End;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 9.3.7. WriteCoil方法

function WriteCoil(const RegNo: Word; const Value: Boolean): Boolean;
1

  控制單個DO數位訊號輸出。

//控制DO數位訊號輸出
Procedure btnWriteCoilOnClick(Sender: TObject);
var
 v:boolean;
Begin
  v := false;
  if FThis.ModbusTCP1.WriteCoil(1,v) then
  begin
    if v Then
       fxMemo1.Lines.Add('WriteCoil Value->>> 1')
    else
       fxMemo1.Lines.Add('WriteCoil Value->>> 0');
  End
  else
    fxMemo1.Lines.Add('WriteCoil->>> error!');
End;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 9.3.8. WriteCoils方法

function WriteCoils(const RegNo: Word; const Blocks: Word; const RegisterData: string): Boolean;
1

  控制多個DO數位訊號輸出。

var
  v:boolean;
  RegisterData:string;
begin
    RegisterData := '1,0';1代表True,0代表False
    v := FThis.ModbusTCP1.WriteCoils(1,2,'1,0');
end;
1
2
3
4
5
6
7

# 9.3.9. WriteRegister方法

function WriteRegister(const RegNo: Word; const Value: Word): Boolean;
1

  寫入單個DO類比訊號輸出

var
 v:word;
Begin
  v := 123;
  if FThis.ModbusTCP1.WriteRegister(1,v) then
  begin
    if v Then
       FThis.Memo1.Lines.Add('WriteRegister Value->>> '+floattostr(v))
    else
       FThis.Memo1.Lines.Add('WriteRegister Value->>> '+floattostr(v));
  End
  else
    FThis.Memo1.Lines.Add('WriteRegister->>> error!');
end;
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 9.3.10. WriteRegisters方法

function WriteRegisters(const RegNo: Word; const RegisterData: string; Modbus: TfxModbusTCP): Boolean;
1

  寫入多個DO類比訊號輸出。

var
  v:boolean;
  RegisterData:string;
begin
    RegisterData := '1,0'
    v := FThis.ModbusTCP1.WriteRegisters(1,2,'1,0');
end;
1
2
3
4
5
6
7

# 10. TOPCDAServer 元件

  該元件用於配置OPCDA伺服器與客戶端的連線。將OPCDAServer拖動至窗體界面后,配置方式如下(此處以OPCDA控制LED燈範例中的OPC客戶端為例):

  • 雙擊OPCDAServer1,打開OPC Inspector對話方塊。
  • 選擇Server-Select,打開Select OPC Server對話方塊。
  • 點選右側的Find按鈕,列表中會出現可選的OPC伺服器,選擇該伺服器,點選[ok]。
  • 回到OPC Inspector界面,選擇Server-Connect,連線成功。接下來在該界面下新建Groups與Items。選擇Groups-Add,填寫組名稱,點選OK儲存。
  • 選擇Items-Add,在Select OPC Item對話方塊中選擇專案,此處的專案是在Arduino程式中進行定義的。選擇對應選項,點選Open按鈕。
  • 至此 OPCDAServer1配置完畢。

# 11. TAMapView 元件

  該元件顯示為高德地圖的展示,可用於定位資訊的標註。

# 11.1. 屬性

  • TAMapView元件主要屬性
屬性 功能說明
Options.Center 指定地圖預設顯示的位置經緯度資訊
Options.lang 指定地圖顯示的預設語言
Satellite.Visible 指定是否顯示衛星地圖

# 11.2. 方法

# 11.2.1. LoadMap方法

procedure LoadMap;
1

  該方法可用於啟用元件的載入地圖功能。


# 12. TBaiduAPI 元件

  TBaiduAPI是一個基於BaiduOCR的OCR識別元件。使用時需要到百度官方網站進行註冊申請Key。

# 12.1. 屬性(Properties)

  • TBaiduAPI元件SdkConfig主要屬性
屬性 功能說明
APIKey 百度OCR APIKey
Secret 百度OCR金鑰
  • 示例

基礎文字識別

  //基礎文字識別
 var
  v:string;
 begin
  //可指定檔案或指定圖片的Bitmap
  v := fxBaiduAPI1.doFileToGeneralBasic(PicturePath)//PicturePath是指圖片路徑
  v := fxBaiduAPI1.doBitmapToGeneralBasic(Image1.Bitmap)//指定圖片的Bitmap
 end;
1
2
3
4
5
6
7
8
//基礎文字識別時觸發OnGeneralBasic事件,可在事件中定義其它配合的業務邏輯
Procedure fxBaiduAPI1OnGeneralBasic(Sender: TObject; Info: string);
Begin
  Showmessage(Info);
End;
1
2
3
4
5

車牌識別

  //車牌識別
 var
  v:string;
 begin
  //可指定檔案或指定圖片的Bitmap
  v := fxBaiduAPI1.doFileToLicensePlate(PicturePath)//PicturePath是指圖片路徑
  v := fxBaiduAPI1.doBitmapToLicensePlate(Image1.Bitmap)//指定圖片的Bitmap
 end;
1
2
3
4
5
6
7
8
//車牌識別時觸發DolicensePlate事件,可在事件中定義其它配合的業務邏輯
Procedure fxBaiduAPI1OnlicensePlate(Sender: TObject; Color: string; Number: string);
Begin
  Showmessage('顏色:'+Color+',車牌號:'+Number);
End;
1
2
3
4
5

車型識別

  //車型識別
 var
  v:string;
 begin
  //可指定檔案或指定圖片的Bitmap
  v := fxBaiduAPI1.doFileToCarInfo(PicturePath)//PicturePath是指圖片路徑
  v := fxBaiduAPI1.doBitmapToCarInfo(Image1.Bitmap)//指定圖片的Bitmap
 end;
1
2
3
4
5
6
7
8
//車型識別時觸發OnCarInfo事件,可在事件中定義其它配合的業務邏輯
Procedure fxBaiduAPI1OnCarInfo(Sender: TObject; Info: string);
Begin
  Showmessage(Info);
End;
1
2
3
4
5

# 13. TIdModbuClient 元件

  此控制元件可產生一個Modbus控制元件,用於讀取ModbusTCP協議連線的設備數據。

# 13.1. 屬性

屬性 功能說明
AutoConnect 是否允許自動連線
Host ModbusTCP服務端的地址
Port ModbusTCP服務端連線的埠號

# 13.2. 方法

  • TIdModbusClient元件主要方法
方法 功能說明
Connected 判斷連線狀態
ReadCoil 讀取單個DO數位訊號輸出
ReadCoils 讀取多個DO數位訊號輸出
ReadHoldingRegister 讀取單個AO類比訊號輸出
ReadHoldingRegisters 讀取多個AO類比訊號輸出
ReadInputRegister 讀取單個AI類比訊號輸入
WriteCoil 寫入單個AO數位訊號輸出
WriteCoils 寫入多個AO數位訊號輸出
WriteRegister 寫入單個DO類比訊號輸出
WriteRegisters 寫入多個DO類比訊號輸出

# 13.2.1. Connected方法

procedure Connect;
function Connected:Boolean;
1
2

  連線設備。

 FThis.IdModbusClient1.Connect;
 if FThis.IdModbusClient1.Connected then
    Showmessage('連線成功!');
1
2
3

# 13.2.2. ReadCoil方法

function ReadCoil(const RegNo: Word; out Value: Boolean): Boolean;
1

  讀取單個數位訊號輸出。

//讀取DO數位訊號輸出
Procedure btnReadCoilOnClick(Sender: TObject);
var
 v:boolean;
Begin
  if FThis.IdModbusClient1.ReadCoil(1,v) then
  begin
    if v Then
       FThis.Memo1.Lines.Add('ReadCoil Value->>> 1')
    else
       FThis.Memo1.Lines.Add('ReadCoil Value->>> 0');
  End
  else
    FThis.Memo1.Lines.Add('ReadCoil->>> error!');
End;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 13.2.3. ReadCoils方法

function ReadCoils(const RegNo: Word; const Blocks: Word; out RegisterData: string): Boolean;
1

  讀取多個DO數位訊號輸出。

var
  v:string;
begin
    FThis.IdModbusClient1.ReadCoils(1,2,v);
end;
1
2
3
4
5

# 13.2.4. ReadHoldingRegister方法

function ReadHoldingRegister(const RegNo: Word; out Value: Word): Boolean;
1

  讀取單個AO類比訊號輸出。

//讀取AO類比訊號輸出
Procedure btnReadHoldingRegisterOnClick(Sender: TObject);
var
 v:word;
Begin
  if FThis.IdModbusClient1.ReadHoldingRegister(1,v) then
  begin
    if v Then
       FThis.Memo1.Lines.Add('ReadHoldingRegister Value->>> '+floattostr(v))
    else
       FThis.Memo1.Lines.Add('ReadHoldingRegister Value->>> '+floattostr(v));
  End
  else
    FThis.Memo1.Lines.Add('ReadHoldingRegister->>> error!');
End;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 13.2.5. ReadHoldingRegisters方法

function ReadHoldingRegisters(const RegNo: Word; const Blocks: Word; out RegisterData: string): Boolean;
1

  讀取多個AO類比訊號輸出。

var
    v:String;
Begin
   FThis.IdModbusClient1.ReadHoldingRegisters(1,4,v);
End;
1
2
3
4
5

# 13.2.6. ReadInputRegister方法

function ReadInputRegister(const RegNo: Word; out Value: Word): Boolean;
1

  讀取單個AI類比訊號輸入。

//讀取AI數位訊號輸入
Procedure btnReadInputRegisterOnClick(Sender: TObject);
var
 v:word;
Begin
  if FThis.IdModbusClient1.ReadInputRegister(1,v) then
  begin
    if v Then
       fxMemo1.Lines.Add('ReadInputRegister Value->>> '+floattostr(v))
    else
       fxMemo1.Lines.Add('ReadInputRegister Value->>> '+floattostr(v));
  End
  else
    fxMemo1.Lines.Add('ReadInputRegister->>> error!');
End;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 13.2.7. WriteCoil方法

function WriteCoil(const RegNo: Word; const Value: Boolean): Boolean;
1

  控制單個DO數位訊號輸出。

//控制DO數位訊號輸出
Procedure btnWriteCoilOnClick(Sender: TObject);
var
 v:boolean;
Begin
  v := false;
  if FThis.IdModbusClient1.WriteCoil(1,v) then
  begin
    if v Then
       fxMemo1.Lines.Add('WriteCoil Value->>> 1')
    else
       fxMemo1.Lines.Add('WriteCoil Value->>> 0');
  End
  else
    fxMemo1.Lines.Add('WriteCoil->>> error!');
End;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 13.2.8. WriteCoils方法

function WriteCoils(const RegNo: Word; const Blocks: Word; const RegisterData: string): Boolean;
1

  控制多個DO數位訊號輸出。

var
  v:boolean;
  RegisterData:string;
begin
    RegisterData := '1,0';1代表True,0代表False
    v := FThis.IdModbusClient1.WriteCoils(1,2,'1,0');
end;
1
2
3
4
5
6
7

# 13.2.9. WriteRegister方法

function WriteRegister(const RegNo: Word; const Value: Word): Boolean;
1

  寫入單個DO類比訊號輸出。

var
 v:word;
Begin
  v := 123;
  if FThis.IdModbusClient1.WriteRegister(1,v) then
  begin
    if v Then
       FThis.Memo1.Lines.Add('WriteRegister Value->>> '+floattostr(v))
    else
       FThis.Memo1.Lines.Add('WriteRegister Value->>> '+floattostr(v));
  End
  else
    FThis.Memo1.Lines.Add('WriteRegister->>> error!');
end;
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 13.2.10. WriteRegisters方法

function WriteRegisters(const RegNo: Word; const RegisterData: string; Modbus: TfxModbusTCP): Boolean;
1

  寫入多個DO類比訊號輸出。

var
  v:boolean;
  RegisterData:string;
begin
    RegisterData := '1,0'
    v := FThis.IdModbusClient1.WriteRegisters(1,2,'1,0');
end;
1
2
3
4
5
6
7

# 14. TIdModbusServer 元件

  該元件作為服務端用於作為可供連線的ModbusTCP伺服器使用。

# 14.1. 屬性

屬性 功能說明
Active 功能是否處於啟用狀態
BaseRegister 暫存器的起始地址
DefaultPort ModbusTCP連線的埠號資訊
MaxConnections 設定允許的最大連線
MaxRegister 設定最大的暫存器數量
MinRegister 設定最小的暫存器數量

# 15. TRestAPI 元件

  該元件是RestAPI客戶端,用於向第三方的Rest伺服器發送請求,並獲取反饋的資訊。關於REST的表述可參考 REST (opens new window)。

  在控制元件上使用滑鼠右鍵單擊,選擇 Properties 選項,可使用嚮導界面的方式設定Rest請求資訊,設定完成後,點選 Send 按鈕檢視反饋的結果資訊。點選 OK 按鈕將設定的內容儲存至RestAPI控制元件的屬性中。

# 15.1. 屬性

屬性 功能說明
APIName API的名稱,作為標記描述資訊使用
Body 請求主體的內容
ContentType 請求的內容型別
Headers 請求頭的值的型別
Method 請求的型別
Params 請求的參數內容
Script 請求的指令碼內容
Server 請求的伺服器的地址資訊
Url 請求的除伺服器以外的地址的資訊

# 15.1.1. Body

property Body: TStringList;
1

  設定請求體中的內容,點選屬性右側的按鈕以打開文字編輯框,向其中輸入資訊,通常可在其中輸入格式化的JSON文字或者key=value型別的文字或者純文字資訊,根據API的需求進行填寫。

  當ContentType設定為application/json時,Body處填寫的是格式化的JSON文字;當ContentType設定為application/x-www-form-urlencoded時,Body處填寫的是key=value鍵值對。

# 15.1.2. ContentType

property ContentType: string;
1

  設定請求內容的型別。通常有以下幾種型別:

  • text/html:帶有html標記的文字型別。
  • application/json:格式化的json文字型別。
  • application/xml:格式化的xml文字型別。
  • application/octet-stream:未知型別,預設表示為二進制的數據流型別。
  • application/x-www-form-urlencoded:key=value型別的文字編碼方式。

# 15.1.3. Headers

property Headers: TStringList;
1

  設定發送請求的請求頭的資訊。

# 15.1.4. Method

property Method: TRequestMethod;
1

  設定請求的發送方式。

  • rmGET:以GET的方式發送請求。
  • rmPOST:以POST的方式發送請求。
  • rmDELETE:以DELETE的方式發送請求。
  • rmPUT:以PUT的方式發送請求。

# 15.1.5. Params

property Params: TStringList;
1

  設定發送的請求中帶有的參數資訊。以key=value的方式設定,每行設定一個。此部分的參數在發送中會使用URL編碼的方式附加在URL後進行發送。

  比如在Params中設定的參數為:

key1=value1
key2= value2
1
2

  請求的地址為http://192.168.1.1/,則在經過URL編碼后請求的地址形式如下:

http://192.168.1.1/?key1=value1&key2=value2
1

  在請求的Rest地址與第一個參數中間使用?分隔,其餘的參數與參數之間使用&進行分隔。

# 15.1.6. Script

property Script: TStringList;
1

  用於設定API返回的JSON資訊中將會使用的提取特定數值的指令碼資訊。可使用的有以下幾項內容。

  • GetJSONString:獲取JSON中特定值的文字。
  • GetJSONNumber:獲取JSON中特定值的數值。
  • GETJSONInteger:獲取JSON中特定值的整數值資訊。
  • GETJSONObject:獲取JSON中特定的對象
  • GETJSONBool:獲取JSON中特定值的布林值資訊。
  • GETJSONObject:獲取JSON中指定名稱的對象資訊。
  • GETJSONArray:獲取JSON中指定名稱的對象陣列資訊。
  • GETJSONPair:獲取JSON中指定名稱的鍵值對的資訊。

  具體的使用方式如下:

{
    "$user":{
        "auth_token": "ABDEDEEDEDEED",
        "number": 1,
        "float": 3.2,
        "bool": true
    },
    "status":[
        {"ok": true},
        {"ok": false}
    ]
}
1
2
3
4
5
6
7
8
9
10
11
12

  如果我們要從中取出auth_token的值,在指令碼資訊中可以使用下述方式獲取:

方式一:寫路徑獲取

GETJSONString=$user.auth_token
1

方式二:分層單步獲取

GETJSONString=$user
GETJSONString=auth_token
1
2

  如果是取特定陣列中的對象,使用以下方式來獲取:

陣列有名稱

GETJSONBool=status[0].ok
1

陣列無名稱:陣列無名稱通常使用在起始的位置。表示方式如下:

[
    {"bad": "AA"},
    {"bad": "BB"}
]
1
2
3
4

  上述寫法如下:

GETJSONString=[0].bad
1

  如果要取JSON中表示的各種數據型別的數值或者對象,使用下述方式:

文字型別

GETJSONString=$user.auth_token
1

數值型別(返回型別為文字)

GETJSONNumber=$user.number
1

整數

GETJSONInteger=$user.number
1

浮點數

GETJSONFloat=$user.float
1

布林值

GETJSONBool=$user.bool
1

對像

GETJSONObject=$user
1

陣列

GETJSONArray=status
1

值對

GETJSONPair=$user
1

# 15.1.7. Server

property Server: string;
1

  設定API廠商的服務地址,此服務地址可從API服務管理界面進行設定。

# 15.1.8. Url

property Url: string;
1

  設定處服務地址外的具體Url路徑資訊。首位不需要帶地址分隔符號。

# 15.2. 事件

# 15.2.1. ResultData

procedure UgRestApiResultData(sender: tobject;aresult: string);
1

  設定當接收到RestAPI返回的訊息時觸發事件,在aresult中顯示返回的文字。

示例:假設從返回的結果中獲取auth_token,可使用下述的方式來獲取。

//PasScript
procedure TMyHandler.RestAPI1ResultData;
Var
  vValue: TJSONValue;
begin
  FThis.Memo1.Lines.Add(aresult);
  vValue := paxfunc.ParseJSONValue(aresult);
  vValue := TJSONObject(vValue).GetValue('$user');
  vToken := TJSONObject(vValue).GetValue('auth_token').Value;
end;
1
2
3
4
5
6
7
8
9
10

# 15.3. 方法

# 15.3.1. Send

procedure Send;
1

  設定發送請求。

# 16. TWebSocketClient 元件

  此元件為WebSocket客戶端元件,可用於與WebSocket伺服器連線實現通訊。

# 16.1. 屬性

# 16.1.1. Active

property Active: Boolean;
1

  是否啟用WebSocket客戶端,為 True時表示啟用客戶端功能。

# 16.1.2. Authentication

  用於認證相關的選項,包含四種認證方式。如不需要使用認證,將其中的 Enabled 屬性設定為 False。以下是認證方式對應的屬性說明。

  • Session:客戶端將使用者名稱 User 與 Password 通過HTTP GET的方式發送給伺服器,如果WebSocket認證成功,伺服器會給客戶端反饋一個會話ID,客戶端使用會話ID作為參數可發起WebSocket連線。當 Session 中的 Enabled 設定為 True 時使用此認證方式。

  • URL:客戶端將使用者名稱User 與密碼 Password 作為參數傳遞給伺服器來打開WebSocket連線。當 URL 中的 Enabled 設定為 True 時使用此認證方式。

  • Basic:客戶端將使用者名稱User 與密碼 Password 置於HTTP請求頭中,使用基本認證的方式實現認證。當 Basic 中的 Enabled 設定為 True 時使用此認證方式。

  • Token: 使用令牌的方式進行認證,在發送時將令牌置於請求頭中進行發送。當 Token 中的 Enabled 設定為 True 時使用此認證方式。

# 16.1.3. HeartBeat

  用於設定心跳連線的相關選項,當其中的 Enabled 屬性設定為 True 時,系統會每隔固定時向伺服器發送心跳包以保持客戶端的連線。

  • Interval:設定心跳包發送的間隔時長。
  • Timeout:設定發送心跳包的反饋的超時時間。

# 16.1.4. Host

  設定WebSocket伺服器的IP地址或域名。

# 16.1.5. LoadBalancer

  設定負載均衡的相關選項。當 Enabled 選項設定為 True 時,表示目前客戶端連線至一個負載均衡伺服器用以廣播訊息並獲取伺服器相關的資訊。

  • Host:負載均衡伺服器的主機地址。
  • Port:負載均衡伺服器的埠號。
  • Servers:手動設定WebSocket Servers進行連線(如果不使用Load Balancer Server獲取伺服器連線方式)。

# 16.1.6. LogFile

  在Debug模式下使用,用於輸出除錯日誌。

  • Enabled:設定是否啟用日誌檔案。
  • FileName:設定顯示的日誌文字名稱。

# 16.1.7. NotifyEvents

  設定WebSocket事件的通知方式。

  • neAsynchronous:這是預設模式,在非同步模式下通知執行緒事件,將事件新增到與主執行緒非同步同步的佇列中。
  • neSynchronous:如果選擇該模式,在同步模式下通知執行緒事件,需要與主執行緒同步來通知這些事件。
  • nwNoSync:不與主執行緒同步,如果需要訪問非執行緒安全的控制元件,則需要實現自己的同步方法。

# 16.1.8. Options

  設定在連線階段使用自定義的請求頭。

  • CleanDisconnect:如果啟用,每次客戶端與伺服器斷開連線時,首先發送訊息通知伺服器連線將被關閉。

  • FragmentedMessages:允許處理碎片訊息

    • frgOnlyBuffer:訊息被緩衝,直到收到所有數據,它引發 OnBinary 或 OnMessage 事件(預設選項)
    • frgOnlyFragmented:每次收到新的分片時,都會引發 OnFragmented 事件。
    • frgAll:每次接收到一個新的分片時,它會引發 OnFragmented 事件,其中包含從第一個數據包收到的所有數據。 當收到所有數據時,它會引發 OnBinary 或 OnMessage 事件。
  • Origin:自定義連線原點。

  • Parameters:定義 GET 上使用的參數。

  • RaiseDisconnectExceptions:預設啟用,每次因協議錯誤斷開連線時引發異常。

  • ValidateUTF8:如果啟用,則驗證訊息是否包含 UTF8 有效字元,預設情況下禁用。

# 16.1.9. Port

  設定連線的埠。

# 16.1.10. Proxy

  設定是否使用代理伺服器,如需要使用,設定 Enabled 為 True,填寫代理伺服器的地址,埠號,使用者名稱與密碼,並設定代理伺服器的連線型別 proxyType。

  • pxyHTTP:HTTP的代理伺服器。
  • pxySocks4:Socks4的代理伺服器。
  • pxySocks4A:Socks4A的代理伺服器。
  • pxySocks5:Socks5的代理伺服器。

# 16.1.11. QueueOptions

  該屬性允許在內部佇列中排隊訊息(而不是直接發送)並在連線執行緒的上下文中發送訊息,這可以防止多個執行緒嘗試發送訊息時發生鎖定。 對於每種訊息型別:可以配置文字(Text)、二進制(Binary)或 Ping 佇列,預設情況下設定的值是 qmNone,這意味著訊息不排隊。 其他型別,表示不同的佇列級別,它們之間的區別只是處理的順序(首先處理 qmLevel1,然後是 qmLevel2,最後是 qmLevel3)。

示例:如果Text和Binary訊息的屬性設定為 qmLevel2 並且 Ping 設定為 qmLevel1。 客戶端將首先處理 Ping 訊息(因此,如果它們同時排隊,則 Ping 訊息比 Text 或 Binary 先發送),然後在同一佇列中處理 Text 和 Binary 訊息。

# 16.1.12. Throttle

  用於限制每秒接收發送的數據速率。設定 Enabled 表示為啟用功能,在 BitsPerSec 中設定速率。

# 16.1.13. TLS

  是否啟用安全連線。

# 16.1.14. TLSOptions

  如果TLS選項啟用,以下可進行TLS選項的自定義設定。

  • ALPNProtocols:將發送到伺服器的 ALPN 協議列表。
  • CertFile:證書檔案的路徑。
  • IOHandler:選擇使用哪個庫來使用 TLS 進行連線。
    • iohOpenSSL:使用 OpenSSL 庫,是 Indy 元件的預設設定。需要部署openssl庫(可以從註冊客戶的私人帳戶下載)。
    • iohSChannel:使用 Microsoft 為 Windows 實現的安全協議 Secure Channel,不需要部署 openssl 庫。僅適用於 Windows 32/64 位。
  • KeyFile:證書金鑰檔案的路徑。
  • RootCertFile:根證書檔案的路徑。
  • Password:如果證書使用密碼保護,請在此處設定。
  • VerifyCertificate:如果必須驗證證書,則啟用此屬性。
  • VerifyDepth:是一個整數屬性,表示對 X.509 證書執行驗證時允許的最大鏈接數。
  • Version:預設情況下協商所有可能的 TLS 版本,從新到低。可以選擇特定的 TLS 版本。
    • tlsUndefined:這是預設值,客戶端將嘗試協商所有可能的 TLS 版本(從最新到最舊),直到連線成功。
    • tls1_0:實現 TLS 1.0
    • tls1_1:實現 TLS 1.1
    • tls1_2:實現 TLS 1.2
    • tls1_3:實現 TLS 1.3
  • OpenSSL_Options:openSSL 庫的配置。
    • APIVersion:允許定義將使用哪個 OpenSSL API。
      • oslAPI_1_0:使用 API 1.0 OpenSSL,Indy 最新支援
      • oslAPI_1_1:使用 API 1.1 OpenSSL,需要我們的自定義 Indy 庫並允許使用 OpenSSL 1.1.1 庫(支援 TLS 1.3)。
      • oslAPI_3_0:使用 API 3.0 OpenSSL,需要我們的自定義 Indy 庫並允許使用 OpenSSL 3.0.0 庫(支援 TLS 1.3)。

# 16.1.15. WatchDog

  當此項啟用時,如果檢測到連線意外斷開,則會自動嘗試進行重新連線。

  • Interval:檢測的時間間隔。
  • Attempt:嘗試的最大次數,如果設定為0,表示會進行無限次數的連線。

# 16.2. 事件

事件名稱 觸發條件
OnBeforeHeartBeat 如果啟用了 HeartBeat,則允許實現自定義 HeartBeat 設定 Handled 參數為 True(這意味著不會發送標準 websocket ping)
OnBinaryExt 當伺服器向客戶端發送二進制訊息時,會觸發此事件
OnConnect 當建立 WebSocket 連線時,會觸發此事件
OnDisConnect 當 WebSocket 連線斷開時,會觸發此事件
OnError 每次出現 WebSocket 錯誤(如格式錯誤的握手)時,都會觸發此事件
OnException 每次發生異常時,都會觸發此事件
OnFragmented 當接收到來自訊息的片段時(僅在 Options.FragmentedMessages = frgAll 或 frgOnlyFragmented 時觸發)
OnHandShake 在客戶端評估握手時觸發此事件
OnMessage 每次伺服器發送訊息時,觸發該事件
OnSSLVerifyPeer 如果啟用了驗證證書,在這種情況下您可以驗證伺服器證書是否有效並接受與否

# 16.3. 方法

# 16.3.1. Connect

function Connect(aTimeout:Integer): Boolean;
1

  向伺服器發起連線。

# 16.3.2. DisConnect

function Disconnect(aTimeout:Integer): Boolean;
1

  從伺服器斷開連線。

# 16.3.3. WriteString

procedure WriteString(aText: String);
1

  向伺服器發送文字訊息。

FThis.WebSocketClient1.WriteString('{"action":"login","sid":"smart"}');
1

# 16.3.4. WriteStream

procedure WriteString(aStream: TStream);
1

  向伺服器發送二進制內容訊息。

# 16.3.5. Ping

procedure ping(aText:String);
1

  向伺服器發送一個測試包,如果出現連線超時而沒有接收到訊息,則會關閉連線。

# 16.3.6. Start

procedure Start;
1

  使用第二執行緒來連線伺服器,這樣可以避免連線過程中的應用凍結。

# 16.3.7. Stop

procedure Stop;
1

  使用第二執行緒來斷開伺服器連線,這樣可以避免斷開連線過程中的應用凍結。

# 17. TWebSocketSever 元件

  此元件將作為WebSocket伺服器控制元件,用於轉發WebSocket訊息。

# 17.1. 屬性

# 17.1.1. Active

  設定是否啟用伺服器。

# 17.1.2. Authentication

  如果此項的 Enabled 設定為 True,則啟用連線認證。

  • Authusers:設定認證的使用者列表,每行的使用者認證資訊請按照以下方式進行填寫:user=password。
  • AllowNonAuth:設定是否運行不使用認證。
  • Basic:設定是否使用為Basic認證。僅適用於伺服器與客戶端的 Websockets 和 HTTP 請求(客戶端 Web 瀏覽器不支援此類身份驗證)。
  • Session:客戶端需要做一個 HTTP GET 傳遞使用者名稱和密碼,如果經過身份驗證,伺服器響應一個會話 ID。 使用此會話 ID,客戶端打開作為參數傳遞的 WebSocket 連線。
  • URL:客戶端打開 Websocket 連線,將使用者名稱和密碼作為參數傳遞。

# 17.1.3. Bindings

  用於配置管理服務繫結的IP地址與埠號。可使用此方式來管理繫結用於外部或內部訪問的埠資訊。

# 17.1.4. Extensions

  您可以對發送的訊息啟用壓縮(如果客戶端不支援壓縮,則訊息將自動交換而無需壓縮)。

# 17.1.5. FallBack

  如果瀏覽器本身不支援 WebSockets 協議,您可以啟用以下回退:

  • Flash:如果啟用,如果瀏覽器沒有原生 WebSocket 實現並且啟用了 Flash,它使用 Flash 作為傳輸。
  • ServerSentEvents:如果啟用,則允許從伺服器向瀏覽器客戶端發送推送通知。
    • Retry:嘗試重新連線到伺服器的時間間隔(以秒為單位)(預設為 3)。

# 17.1.6. HeartBeat

  用於設定心跳連線的相關選項,當其中的 Enabled 屬性設定為 True 時,系統會每隔固定時向客戶端發送心跳包以保持客戶端的連線。

  • Interval:設定心跳包發送的間隔時長。
  • Timeout:設定發送心跳包的反饋的超時時間。

# 17.1.7. HTTP2Options

  預設情況下未啟用 HTTP/2 協議,它使用 HTTP 1.1 來處理 HTTP 請求。如果您想在客戶端支援的情況下使用 HTTP/2 協議,則啟用此屬性。

  • Enabled:如果設定為 true,則支援 HTTP/2 協議。如果客戶端不支援 HTTP/2,將使用 HTTP 1.1 作為後備。
  • Settings:指定要發送至HTTP/2 伺服器的頭值。
    • EnablePush:預設選項為 True,設定此項可用於避免伺服器向客戶端推送內容。
    • HeaderTableSize:允許發送方通知遠端端點用於解碼頭塊的頭壓縮表的最大大小,以八位位元組為單位。編碼器可以通過使用特定於標頭塊內的標頭壓縮格式的信令來選擇等於或小於此值的任何大小。初始值為 4,096 個八位位元組。
    • InitialWindowSize:設定發送者的初始視窗大小(以八位位元組為單位),用於流級流量控制。初始值為 65,535 個位元組。此設定影響所有流的視窗大小。
    • MaxConcurrentStreams:設定發送方允許的最大併發流數。這個限制是有方向的:它適用於發送者允許接收者建立的流的數量。預設未設定限制。
    • MaxFrameSize:表示發送方願意接收的最大幀有效載荷的大小,以八位位元組為單位。初始值為 16,384 個八位位元組。
    • MaxHeaderListSize:設定通知對等方發送方準備接受的標頭列表的最大大小(以八位位元組為單位)。該值基於頭欄位的未壓縮大小,包括以八位位元組為單位的名稱和值的長度以及每個標頭欄位的 32 個八位位元組的開銷。

# 17.1.8. IOHandlerOptions

  預設使用普通的 Indy Handler(每個連線都運行在自己的執行緒中)。

  • iohDefault:預設indy IOHandler,每個新連線建立一個新執行緒。
  • iohIOCP:僅適用於 windows 並且需要自定義 indy 版本,執行緒池處理所有連線。

# 17.1.9. LoadBalancer

  連線到負載均衡伺服器以廣播訊息併發送有關伺服器的資訊。

  • AutoRegisterBindings:如果啟用,則自動將伺服器繫結發送到負載平衡器伺服器。
  • AutoRestart:負載平衡器伺服器連線斷開並嘗試重新連線后等待的時間(以秒為單位); 零表示不重新啟動(預設情況下);
  • Bindings:可以設定發送到負載均衡伺服器的手動繫結,例如:WS://127.0.0.1:80或者 WSS://127.0.0.2:8888。
  • Enabled:如果啟用,它將連線到負載均衡伺服器。
  • Guid:用於對負載平衡伺服器進行標識。
  • Host:負載均衡伺服器主機的地址。
  • Port:負載均衡伺服器的埠。

# 17.1.10. LogFile

  在Debug模式下使用,用於輸出除錯日誌。

  • Enabled:設定是否啟用日誌檔案。
  • FileName:設定顯示的日誌文字名稱。

# 17.1.11. MaxConnections

  設定允許的最大連線數(如果設定為零,則表示為無限制)。

# 17.1.12. NotifyEvents

  設定WebSocket事件的通知方式。

  • neAsynchronous:這是預設模式,在非同步模式下通知執行緒事件,將事件新增到與主執行緒非同步同步的佇列中。
  • neSynchronous:如果選擇該模式,在同步模式下通知執行緒事件,需要與主執行緒同步來通知這些事件。
  • nwNoSync:不與主執行緒同步,如果需要訪問非執行緒安全的控制元件,則需要實現自己的同步方法。

# 17.1.13. Options

  設定在連線階段使用自定義的請求頭。

  • CleanDisconnect:如果啟用,每次客戶端與伺服器斷開連線時,首先發送訊息通知伺服器連線將被關閉。

  • FragmentedMessages:允許處理碎片訊息

    • frgOnlyBuffer:訊息被緩衝,直到收到所有數據,它引發 OnBinary 或 OnMessage 事件(預設選項)
    • frgOnlyFragmented:每次收到新的分片時,都會引發 OnFragmented 事件。
    • frgAll:每次接收到一個新的分片時,它會引發 OnFragmented 事件,其中包含從第一個數據包收到的所有數據。 當收到所有數據時,它會引發 OnBinary 或 OnMessage 事件。
  • HTMLFiles:如果此項啟用,可允許請求瀏覽器測試功能。地址格式為 http://host:port/sgcWebSockets.html (opens new window)。

  • JavaScriptFiles:如果此項啟用,可允許呼叫內建的JavaScript庫。

  • RaiseDisconnectExceptions:預設啟用,每次因協議錯誤斷開連線時引發異常。

  • ReadTimeOut:檢查socket連線是否有數據的時間,預設10毫秒。

  • ValidateUTF8:如果啟用,則驗證訊息是否包含 UTF8 有效字元,預設情況下禁用。

  • WriteTimeOut:向其他對等方發送數據的最大時間(以毫秒為單位),預設為 0(僅適用於 Windows 操作系統)。

# 17.1.14. Port

  設定監聽的埠號。

# 17.1.15. QueueOptions

  該屬性允許在內部佇列中排隊訊息(而不是直接發送)並在連線執行緒的上下文中發送訊息,這可以防止多個執行緒嘗試發送訊息時發生鎖定。 對於每種訊息型別:可以配置文字(Text)、二進制(Binary)或 Ping 佇列,預設情況下設定的值是 qmNone,這意味著訊息不排隊。 其他型別,表示不同的佇列級別,它們之間的區別只是處理的順序(首先處理 qmLevel1,然後是 qmLevel2,最後是 qmLevel3)。

示例:如果Text和Binary訊息的屬性設定為 qmLevel2 並且 Ping 設定為 qmLevel1。 客戶端將首先處理 Ping 訊息(因此,如果它們同時排隊,則 Ping 訊息比 Text 或 Binary 先發送),然後在同一佇列中處理 Text 和 Binary 訊息。

# 17.1.16. SecurityOptions

  設定安全相關的選項。

  • OriginsAllowed:在此處定義允許哪些來源(預設情況下接受來自所有來源的連線),如果來源不在列表中,則關閉連線。比如:
    • 允許IP 127.0.0.1 和埠 5555 的所有連線。OriginsAllowed = "http://127.0.0.1:5555"
    • 允IP 127.0.0.1 和所有埠的所有連線。 OriginsAllowed = "http://127.0.0.1:*"
    • 允許來自任何 IP 的所有連線。 OriginsAllowed = ""

# 17.1.17. SSL

  是否啟用SSL安全連線。

# 17.1.18. SSLOptions

  用於設定SSL的屬性:證書,檔名稱,密碼等。

  • CertFile:證書檔案的路徑。
  • KeyFile:證書金鑰檔案的路徑。
  • RootCertFile:根證書檔案的路徑。
  • Password:如果證書使用密碼保護,請在此處設定。
  • VerifyCertificate:如果必須驗證證書,則啟用此屬性。
  • VerifyDepth:是一個整數屬性,表示對 X.509 證書執行驗證時允許的最大鏈接數。
  • Version:預設情況下協商所有可能的 TLS 版本,從新到低。可以選擇特定的 TLS 版本。
    • tlsUndefined:這是預設值,客戶端將嘗試協商所有可能的 TLS 版本(從最新到最舊),直到連線成功。
    • tls1_0:實現 TLS 1.0
    • tls1_1:實現 TLS 1.1
    • tls1_2:實現 TLS 1.2
    • tls1_3:實現 TLS 1.3
  • OpenSSL_Options:openSSL 庫的配置。
    • APIVersion:允許定義將使用哪個 OpenSSL API。
      • oslAPI_1_0:使用 API 1.0 OpenSSL,Indy 最新支援
      • oslAPI_1_1:使用 API 1.1 OpenSSL,需要我們的自定義 Indy 庫並允許使用 OpenSSL 1.1.1 庫(支援 TLS 1.3)。
      • oslAPI_3_0:使用 API 3.0 OpenSSL,需要我們的自定義 Indy 庫並允許使用 OpenSSL 3.0.0 庫(支援 TLS 1.3)。
  • ECDHE:如果啟用,則使用 ECDHE 而不是 RSA 作為金鑰交換。 如果您使用 OpenSSL 1.0.2,建議啟用 ECDHE。

# 17.1.19. WatchDog

  當此項啟用時,如果檢測到連線意外斷開,則會自動嘗試進行重新連線。

  • Interval:檢測的時間間隔。
  • Attempt:嘗試的最大次數,如果設定為0,表示會進行無限次數的連線。

# 17.2. 事件

事件名稱 觸發條件
OnConnect 每次建立 WebSocket 連線時,都會觸發此事件
OnDisConnect 每次斷開 WebSocket 連線時,都會觸發此事件
OnError 每次出現 WebSocket 錯誤(如格式錯誤的握手)時,都會觸發此事件
OnMessage 每次客戶端發送文字訊息並被伺服器接收時,都會觸發此事件
OnBinaryExt 每次客戶端發送二進制訊息並被伺服器接收時,都會觸發此事件
OnHandShake 在伺服器端評估握手后觸發此事件
OnException 每次發生異常時,都會觸發此事件
OnAuthentication 如果啟用了身份驗證,則觸發此事件。您可以檢查客戶端傳遞的使用者和密碼,並啟用/禁用 Authenticated Variable
OnUnknownProtocol 如果未檢測到 WebSocket 協議(例如,因為客戶端使用純 TCP 協議),在這種情況下可以接受或拒絕連線
OnStartup 在伺服器啟動后觸發事件
OnShutdown 在伺服器停止后觸發
OnTCPConnect 公共事件,在 TCP 連線之後和 Websocket 握手之前呼叫。當您的伺服器接受純 TCP 連線時很有用(因為 OnConnect 事件僅在客戶端發送第一條訊息后觸發)
OnBeforeHeartBeat 如果啟用了 HeartBeat,則允許實現自定義 HeartBeat 設定 Handled 參數為 True(這意味著不會發送標準 websocket ping)

# 17.3. 方法

# 17.3.1. WriteString

procedure WriteString(aGuid,aText: String);
1

  向客戶端發送文字訊息。

FThis.WebSocketServer1.WriteString(Guid,'{"action":"login","sid":"smart"}');
1

# 17.3.2. WriteStream

procedure WriteString(aGuid: String; aStream: TStream);
1

  向伺服器發送二進制內容訊息。

數據感知控制元件
儀表採集控制元件

← 數據感知控制元件 儀表採集控制元件→

Copyright © 2021-2025 愛招飛IsoFace | ALL Rights Reserved
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式