SlideShare a Scribd company logo
1 of 58
Download to read offline
Design of Proactive
Modbus Services
2016/10/27
Taka Wang
Problem Domain
modbus slave modbus slave modbus slave
Node-Red Web portal Cloud PaaS
Problem Domain
• 由HMI觸發Modbus資料讀寫
• 主動回報Modbus資料的數值變化
•
支
援不同類型的數值解讀
•
支
援多個Slave的讀寫
• 紀錄Modbus資料的歷史紀錄
modbus slave modbus slave modbus slave
Node-Red Web portal Cloud PaaS
Modbus is a master-slave/
request-reply protocol
Modbus RTU Master
Modbus RTU Slave
Modbus TCP Client
Modbus TCP Server
Serial TCP
Modbus is a master-slave/
request-reply protocol
Modbus RTU Master
Modbus RTU Slave
Modbus TCP Client
Modbus TCP Server
request request
Serial TCP
Modbus is a master-slave/
request-reply protocol
Modbus RTU Master
Modbus RTU Slave
Modbus TCP Client
Modbus TCP Server
request request
response response
Serial TCP
Modbus Working Model
Master
Slave
Registers
1. 對哪個 Slave
2. 的哪些 Registers (從哪開始,多長)
3. 做什麼操作(R/W)
Protocol Stack - libmodbus
modbus_t *mb;
uint16_t tab_reg[32];
mb = modbus_new_tcp("127.0.0.1", 1502);
modbus_connect(mb);
/* Read 5 registers from the address 0 */
modbus_read_registers(mb, 0, 5, tab_reg);
modbus_close(mb);
modbus_free(mb);
Protocol Stack - libmodbus
modbus_t *mb;
uint16_t tab_reg[32];
mb = modbus_new_tcp("127.0.0.1", 1502);
modbus_connect(mb);
/* Read 5 registers from the address 0 */
modbus_read_registers(mb, 0, 5, tab_reg);
modbus_close(mb);
modbus_free(mb);
The modbus_t context is an opaque
structure containing all necessary
information to establish a connection
with others Modbus devices
according to the selected variant
Protocol Stack - libmodbus
modbus_t *mb;
uint16_t tab_reg[32];
mb = modbus_new_tcp("127.0.0.1", 1502);
modbus_connect(mb);
/* Read 5 registers from the address 0 */
modbus_read_registers(mb, 0, 5, tab_reg);
modbus_close(mb);
modbus_free(mb);
The modbus_t context is an opaque
structure containing all necessary
information to establish a connection
with others Modbus devices
according to the selected variant
以Modbus TCP為例,
實際的實作就是TCP Socket,
Modbus Master就是TCP Client,
Modbus Slave就是TCP Server
Toward a microservice
model
• 由HMI觸發Modbus資料讀寫
• 主動回報Modbus資料的數值變化
•
支
援不同類型的數值解讀
•
支
援多個Slave的讀寫
• 紀錄Modbus資料的歷史紀錄
modbus slave modbus slave modbus slave
Node-Red Web portal Cloud PaaS
Toward a microservice
model
• 由HMI觸發Modbus資料讀寫
• 主動回報Modbus資料的數值變化
•
支
援不同類型的數值解讀
•
支
援多個Slave的讀寫
• 紀錄Modbus資料的歷史紀錄
modbus slave modbus slave modbus slave
Node-Red Web portal Cloud PaaS
Loose Coupling
High Cohesion
Toward a microservice
model
• 由HMI觸發Modbus資料讀寫
• 主動回報Modbus資料的數值變化
•
支
援不同類型的數值解讀
•
支
援多個Slave的讀寫
• 紀錄Modbus資料的歷史紀錄
modbus slave modbus slave modbus slave
Node-Red Web portal Cloud PaaS
Loose Coupling
High Cohesion
De
fi
ne bounded
context (BC)
De
fi
ne boundary
• 由HMI觸發Modbus資料讀寫
• 主動回報Modbus資料的數值變化
•
支
援不同類型的數值解讀
•
支
援多個Slave的讀寫
• 紀錄Modbus資料的歷史紀錄
De
fi
ne boundary
Modbus
Master
• 由HMI觸發Modbus資料讀寫
• 主動回報Modbus資料的數值變化
•
支
援不同類型的數值解讀
•
支
援多個Slave的讀寫
• 紀錄Modbus資料的歷史紀錄
De
fi
ne boundary
Modbus
Master
Modbus
Master
• 由HMI觸發Modbus資料讀寫
• 主動回報Modbus資料的數值變化
•
支
援不同類型的數值解讀
•
支
援多個Slave的讀寫
• 紀錄Modbus資料的歷史紀錄
De
fi
ne boundary
Modbus
Master
Modbus
Master
Scheduler
• 由HMI觸發Modbus資料讀寫
• 主動回報Modbus資料的數值變化
•
支
援不同類型的數值解讀
•
支
援多個Slave的讀寫
• 紀錄Modbus資料的歷史紀錄
De
fi
ne boundary
Modbus
Master
Modbus
Master
Scheduler
• 由HMI觸發Modbus資料讀寫
• 主動回報Modbus資料的數值變化
•
支
援不同類型的數值解讀
•
支
援多個Slave的讀寫
• 紀錄Modbus資料的歷史紀錄
Database
De
fi
ne boundary
Modbus
Master
Modbus
Master
Scheduler
• 由HMI觸發Modbus資料讀寫
• 主動回報Modbus資料的數值變化
•
支
援不同類型的數值解讀
•
支
援多個Slave的讀寫
• 紀錄Modbus資料的歷史紀錄
Database
Data
Converter
De
fi
ne boundary
Modbus
Master
Modbus
Master
Scheduler
• 由HMI觸發Modbus資料讀寫
• 主動回報Modbus資料的數值變化
•
支
援不同類型的數值解讀
•
支
援多個Slave的讀寫
• 紀錄Modbus資料的歷史紀錄
Database
Data
Converter
Data Filter
De
fi
ne boundary
Modbus
Master
Modbus
Master
Scheduler
• 由HMI觸發Modbus資料讀寫
• 主動回報Modbus資料的數值變化
•
支
援不同類型的數值解讀
•
支
援多個Slave的讀寫
• 紀錄Modbus資料的歷史紀錄
Database
Data
Converter
Web Server Data Filter
De
fi
ne boundary
Modbus
Master
Modbus
Master
Scheduler
• 由HMI觸發Modbus資料讀寫
• 主動回報Modbus資料的數值變化
•
支
援不同類型的數值解讀
•
支
援多個Slave的讀寫
• 紀錄Modbus資料的歷史紀錄
Database
Data
Converter
Web Server
MQTT
Client
Data Filter
Proposal 2016.05
Proactive Server
Golang/C/Python
Restful Service
Node.js/Golang
MQTT Client
Golang/C
OPC-UA Server
Java/C
Node Red
Typescript
Web GUI
Typescript/
HTML5
Modbus TCP Master
Libmodbus/C
Websocket Service
Node.js/Golang
Persistence
MQTT
OPC-UA
mb-web psmb
modbusd
Services
Mgr.
Modbus
Master
Scheduler
Database
Adapter
Data
Converter
REST WEB
Server
Data Filter
IPC
IPC
IPC
mb-socket
MQTT
Client
IPC
c-modbus-slave
Modbus
Slave
https://github.com/taka-wang/modbusd
https://github.com/taka-wang/c-modbus-slave
https://github.com/taka-wang/psmb
https://github.com/taka-wang/mb-socket
https://github.com/taka-wang/mb-web
Different Model
Extract from MS IoT Expo 2016
Design of
Development Process
Docker & CI
• Docker container - single process service.
separate of concern.
• Public CI Server - Travis, CircleCI, Jenkins,
Drone, and so on.
• 重現性,
自
動化,持續改善。
drone server
drone agent
dockerhub
consul.cmwang.net
drone.cmwang.net
taka-wang git repository
SaaS
code push
trigger ci
poll task
push
pull
consul
Design Principles
• Pluggable package Design
• Object-oriented Design
• Contract-First Design
• API-First Design
• Test-Driven Design
• Microservice Design/ Container ready
• 12-Factor App Design
• Documentations
Implementations
Modbusd
Proactive Service
• IProactiveService: proactive service
• IReaderTaskDataStore: read/poll task data store
• IWriterTaskDataStore: write task data store
• IHistoryDataStore: history data store
• IFilterDataStore:
fi
lter data store
• ICon
fi
g: con
fi
g management
Interfaces
Plugin
Module
Generic Database adapter
Worker Pool
response
request
How to design
mb-web and mb-socket?
mb-web & mb-socket
router worker
con
fi
guration
con
fi
guration
dependency injection separate of concern
go channel
REST Testing
REST Testing
REST Testing
REST Testing
More details
Smart Con
fi
guration
• Setting defaults
• Reading from JSON, TOML, YAML
• Reading from remote con
fi
g server
• Setting explicit values
Consul Service
192.168.1.1
192.168.1.2
consul.cmwang.net
192.168.1.1
192.168.1.2
DNS
Consul
Server
Consul
Agent
Consul
Agent
Consul
Agent
Consul in action
Logger
• Structural logger
• To File, Color Console
• JSON format
• Singleton Pattern
log.Infof("uploading %q for %s", filename, user.ID)
log.Info(log.Fields{
"file": filename,
"user": user.ID,
}).Info("upload")
Some snapshots
CI in Action
Docker hub
Link
Circle CI
Travis CI
Drone for armhf
OpenAPI Document
Doxygen Document
Link
Go Document
Link
UML
Full Size
Try It
• git clone https://github.com/taka-wang/mb-
web.git
• cd mb-web
• docker-compose -f docker-compose.x86 up
• import node-red example (http://localhost:1880)
https://raw.githubusercontent.com/taka-wang/mb-web/master/docs/node-red.json
Thank you
Environment Variable
Environment Variable

More Related Content

Similar to 20161027 - edge part2

吴岷 视频Cdn分发、调度与服务的探讨
吴岷  视频Cdn分发、调度与服务的探讨吴岷  视频Cdn分发、调度与服务的探讨
吴岷 视频Cdn分发、调度与服务的探讨drewz lin
 
Exchange server 2010规划与设计
Exchange server 2010规划与设计Exchange server 2010规划与设计
Exchange server 2010规划与设计popskf
 
NoSQL-MongoDB介紹
NoSQL-MongoDB介紹NoSQL-MongoDB介紹
NoSQL-MongoDB介紹國昭 張
 
My sql 5.6新特性深入剖析——innodb引擎
My sql 5.6新特性深入剖析——innodb引擎My sql 5.6新特性深入剖析——innodb引擎
My sql 5.6新特性深入剖析——innodb引擎frogd
 
Ibm solid db overview v6.3 20090320
Ibm solid db overview v6.3 20090320Ibm solid db overview v6.3 20090320
Ibm solid db overview v6.3 20090320小新 制造
 
Google LevelDB Study Discuss
Google LevelDB Study DiscussGoogle LevelDB Study Discuss
Google LevelDB Study Discusseverestsun
 
豆瓣网技术架构变迁
豆瓣网技术架构变迁豆瓣网技术架构变迁
豆瓣网技术架构变迁reinhardx
 
Bypat博客出品-服务器运维集群方法总结
Bypat博客出品-服务器运维集群方法总结Bypat博客出品-服务器运维集群方法总结
Bypat博客出品-服务器运维集群方法总结redhat9
 

Similar to 20161027 - edge part2 (9)

吴岷 视频Cdn分发、调度与服务的探讨
吴岷  视频Cdn分发、调度与服务的探讨吴岷  视频Cdn分发、调度与服务的探讨
吴岷 视频Cdn分发、调度与服务的探讨
 
Ceph intro
Ceph introCeph intro
Ceph intro
 
Exchange server 2010规划与设计
Exchange server 2010规划与设计Exchange server 2010规划与设计
Exchange server 2010规划与设计
 
NoSQL-MongoDB介紹
NoSQL-MongoDB介紹NoSQL-MongoDB介紹
NoSQL-MongoDB介紹
 
My sql 5.6新特性深入剖析——innodb引擎
My sql 5.6新特性深入剖析——innodb引擎My sql 5.6新特性深入剖析——innodb引擎
My sql 5.6新特性深入剖析——innodb引擎
 
Ibm solid db overview v6.3 20090320
Ibm solid db overview v6.3 20090320Ibm solid db overview v6.3 20090320
Ibm solid db overview v6.3 20090320
 
Google LevelDB Study Discuss
Google LevelDB Study DiscussGoogle LevelDB Study Discuss
Google LevelDB Study Discuss
 
豆瓣网技术架构变迁
豆瓣网技术架构变迁豆瓣网技术架构变迁
豆瓣网技术架构变迁
 
Bypat博客出品-服务器运维集群方法总结
Bypat博客出品-服务器运维集群方法总结Bypat博客出品-服务器运维集群方法总结
Bypat博客出品-服务器运维集群方法总结
 

More from Jamie (Taka) Wang

More from Jamie (Taka) Wang (20)

20200606_insight_Ignition
20200606_insight_Ignition20200606_insight_Ignition
20200606_insight_Ignition
 
20200727_Insight workstation
20200727_Insight workstation20200727_Insight workstation
20200727_Insight workstation
 
20200723_insight_release_plan
20200723_insight_release_plan20200723_insight_release_plan
20200723_insight_release_plan
 
20210105_量產技轉
20210105_量產技轉20210105_量產技轉
20210105_量產技轉
 
20200808自營電商平台策略討論
20200808自營電商平台策略討論20200808自營電商平台策略討論
20200808自營電商平台策略討論
 
20200427_hardware
20200427_hardware20200427_hardware
20200427_hardware
 
20200429_ec
20200429_ec20200429_ec
20200429_ec
 
20200607_insight_sync
20200607_insight_sync20200607_insight_sync
20200607_insight_sync
 
20220113_product_day
20220113_product_day20220113_product_day
20220113_product_day
 
20200429_software
20200429_software20200429_software
20200429_software
 
20200602_insight_business
20200602_insight_business20200602_insight_business
20200602_insight_business
 
20200408_gen11_sequence_diagram
20200408_gen11_sequence_diagram20200408_gen11_sequence_diagram
20200408_gen11_sequence_diagram
 
20190827_activity_diagram
20190827_activity_diagram20190827_activity_diagram
20190827_activity_diagram
 
20150722 - AGV
20150722 - AGV20150722 - AGV
20150722 - AGV
 
20161220 - microservice
20161220 - microservice20161220 - microservice
20161220 - microservice
 
20160217 - Overview of Vortex Intelligent Data Sharing Platform
20160217 - Overview of Vortex Intelligent Data Sharing Platform20160217 - Overview of Vortex Intelligent Data Sharing Platform
20160217 - Overview of Vortex Intelligent Data Sharing Platform
 
20151111 - IoT Sync Up
20151111 - IoT Sync Up20151111 - IoT Sync Up
20151111 - IoT Sync Up
 
20151207 - iot strategy
20151207 - iot strategy20151207 - iot strategy
20151207 - iot strategy
 
20141210 - Microservice Container
20141210 - Microservice Container20141210 - Microservice Container
20141210 - Microservice Container
 
201610817 - edge part1
201610817 - edge part1201610817 - edge part1
201610817 - edge part1
 

20161027 - edge part2