狠狠撸

狠狠撸Share a Scribd company logo
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 (9)

吴岷 视频Cdn分发、调度与服务的探讨
吴岷  视频Cdn分发、调度与服务的探讨吴岷  视频Cdn分发、调度与服务的探讨
吴岷 视频Cdn分发、调度与服务的探讨
drewz lin
?
Ceph intro
Ceph introCeph intro
Ceph intro
Yang Guanjun
?
Exchange server 2010规划与设计
Exchange server 2010规划与设计Exchange server 2010规划与设计
Exchange server 2010规划与设计
popskf
?
狈辞厂蚕尝-惭辞苍驳辞顿叠介绍
狈辞厂蚕尝-惭辞苍驳辞顿叠介绍狈辞厂蚕尝-惭辞苍驳辞顿叠介绍
狈辞厂蚕尝-惭辞苍驳辞顿叠介绍
國昭 張
?
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 Discuss
everestsun
?
豆瓣网技术架构变迁
豆瓣网技术架构变迁豆瓣网技术架构变迁
豆瓣网技术架构变迁
reinhardx
?
叠测辫补迟博客出品-服务器运维集群方法总结
叠测辫补迟博客出品-服务器运维集群方法总结叠测辫补迟博客出品-服务器运维集群方法总结
叠测辫补迟博客出品-服务器运维集群方法总结
redhat9
?
吴岷 视频Cdn分发、调度与服务的探讨
吴岷  视频Cdn分发、调度与服务的探讨吴岷  视频Cdn分发、调度与服务的探讨
吴岷 视频Cdn分发、调度与服务的探讨
drewz lin
?
Exchange server 2010规划与设计
Exchange server 2010规划与设计Exchange server 2010规划与设计
Exchange server 2010规划与设计
popskf
?
狈辞厂蚕尝-惭辞苍驳辞顿叠介绍
狈辞厂蚕尝-惭辞苍驳辞顿叠介绍狈辞厂蚕尝-惭辞苍驳辞顿叠介绍
狈辞厂蚕尝-惭辞苍驳辞顿叠介绍
國昭 張
?
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 Discuss
everestsun
?
豆瓣网技术架构变迁
豆瓣网技术架构变迁豆瓣网技术架构变迁
豆瓣网技术架构变迁
reinhardx
?
叠测辫补迟博客出品-服务器运维集群方法总结
叠测辫补迟博客出品-服务器运维集群方法总结叠测辫补迟博客出品-服务器运维集群方法总结
叠测辫补迟博客出品-服务器运维集群方法总结
redhat9
?

More from Jamie (Taka) Wang (20)

20200723_insight_release_plan
20200723_insight_release_plan20200723_insight_release_plan
20200723_insight_release_plan
Jamie (Taka) Wang
?
20200808自营电商平台策略讨论
20200808自营电商平台策略讨论20200808自营电商平台策略讨论
20200808自营电商平台策略讨论
Jamie (Taka) Wang
?
20200408_gen11_sequence_diagram20200408_gen11_sequence_diagram
20200408_gen11_sequence_diagram
Jamie (Taka) Wang
?
20190827_activity_diagram
20190827_activity_diagram20190827_activity_diagram
20190827_activity_diagram
Jamie (Taka) Wang
?
20150722 - AGV
20150722 - AGV20150722 - AGV
20150722 - AGV
Jamie (Taka) Wang
?
20161220 - microservice
20161220 - microservice20161220 - microservice
20161220 - microservice
Jamie (Taka) Wang
?
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
Jamie (Taka) Wang
?
20151207 - iot strategy
20151207 - iot strategy20151207 - iot strategy
20151207 - iot strategy
Jamie (Taka) Wang
?
20141210 - Microservice Container
20141210 - Microservice Container20141210 - Microservice Container
20141210 - Microservice Container
Jamie (Taka) Wang
?
201610817 - edge part1
201610817 - edge part1201610817 - edge part1
201610817 - edge part1
Jamie (Taka) Wang
?

20161027 - edge part2