photo credit: PyCon TW
Peter, GitHub
活躍的開源專案貢獻者
也是一位講者
COSCUP、MOPCON......
也是一位工程師
DevOps
後端開發;PHP、Python與JavaScript
軟體工程、系統架構設計與分析
網頁應用程式安全
財團法人工業技術研究院
應用資通訊技術至研究智慧電網領域 (2017~2021)
財團法人資訊工業策進會
醫資、健康照護應用服務與碳排放等領域 (2021~迄今)
什麼是碳排放量?碳排放量是怎麼來的?
各類的製造業出口產品到歐洲遇到了什麼問題?
CBAM是什麼?為什麼歐盟想提出這個出來?
淺談ISO-14064與ISO-14067;和CBAM的關係以及各個標準目前與未來發展的情況
透過標準,碳排放量該如何進行計算與量化?
碳排放量計算管理系統架構介紹
應用案例#1~#3
結論
溫室效應
溫室效應是指行星的大氣層因為吸收輻射能量,使得行星表面升溫的效應
溫室氣體
水蒸氣(H2O)、臭氧(O3)、二氧化碳(CO2)、氧化亞氮(N2O)、甲烷(CH4)、氫氟氯碳化物類(CFCs,HFCs,HCFCs)、全氟碳化物(PFCs)及六氟化硫(SF6)
為了要量化碳排放,因此需要有公式進行二氧化碳當量之計算
使用特定溫室氣體質量乘以全球暖化潛勢計算而得
全球暖化潛勢值(IPCC)
是衡量溫室氣體對全球暖化影響的一種手段
是將特定氣體和相同質量二氧化碳比較之下,造成全球暖化的相對能力。
碳排放量如何計算?
例如:排放係數法,將能源使用量,乘上相對應的溫室氣體排放係數
歐盟國家在境內幾乎都沒有製造業
大部分製造產品都是從歐盟以外國家進口
歐盟國家努力推行減緩溫室效應,但發現會有「碳洩漏」的問題
為了要解決上述的問題,歐盟進而推行CBAM;即歐盟碳邊境調整機制
photo credit: 高雄市政府環保局
Carbon Border Adjustment Mechanism
歐盟碳邊境調整機制
歐盟碳邊境調整機制是種環保關稅
2023年5月17日生效,預備於2026年開始實施
但相關進口者自2023年8月即須開始報告與註冊
針對輸入歐盟的鋼鐵、水泥和某些電力等碳密集型產品予以徵收
附件一,將要徵收邊境碳稅的商品列出,包括水泥、電力、化學肥料(如硝酸、氨、鉀)、鋼鐵(包括罐、桶、貨櫃)、金屬製品和鋁等
附件三列出計算生產過程中的隱含溫室氣體排放量的方法
ISO-14064-1:2018
是一個國際標準,為目前最新版標準
對應到中華民國國家標準,CNS 14064-1:2021
要求組織進行溫室氣體清單的編制和審核,並進行溫室氣體排放的監測和報告
組織型盤查
邊、源、算、報、查
photo credit: TUV
ISO 14067:2018
是一個國際標準,為目前最新版標準
包括產品的原材料獲取、製造、使用和處理等階段
產品碳足跡盤查
搖籃到墳墓
搖籃到大門
photo credit: SGS
photo credit: 公視新聞網
標準名稱 | 類型 | 目前最新版本 |
---|---|---|
ISO-14064-1:2018 | 組織型 | 版本為2018最新 |
ISO-14067:2018 | 產品生命週期、產品碳足跡 | 版本為2018最新 |
CBAM | 產品在生產過程中所產生之隱含碳排放量 | 為一種機制,非標準 |
直接監測法
直接監測排氣濃度和流率量測溫室氣體排放量,準確度高但少見
質量平衡法
化學平衡法;質量守恆定律
舉例化學式:C+O2→CO2
燃燒1莫耳的碳會產生1莫耳之二氧化碳
燃燒1公斤的碳產生44/12 = 3.67 kg之二氧化碳(排放係數)
排放係數法
排放量 = 活動數據 * 排放係數 * GWP(全球排放潛勢)
同ISO 146064:2018標準提到的方法
但是是以產品為主的方式進行相關方法的計算出產品生命週期碳排放量
產品隱含碳排放量 = 生產過程排放 / 生產產品數量
非簡單產品,其餘都是複雜產品,e.g. 金屬製品
(生產過程排放 + 所使用原料之含量) / 生產產品數量
在市面上已經有不少以ISO 14064與ISO 14067發展的系統
在系統架構設計上,我們依照CBAM的要求
發展出以「以產線追溯」為基礎的碳排放量系統
將產品以製程為出發點,分成下列三類
產品製程所產生的碳排放量
可由MES製造執行系統取得而來
原料及其他碳排放量填入
可由ERP企業資源規劃系統取得材料清單而來
前端
React.js框架與Reactstrap進行樣板設計
後端
Python並搭配FastAPI框架
資料庫
PostgreSQL儲存帳號、產品製程、碳排放係數等相關資訊
ClickHouse儲存時序特性的感測器所產生的感測資料
進而發展出不同的方式進行所需要的感測資料進行收集
以合作的不同的三家廠商為例
金屬製品產業,水龍頭製造廠商
金屬製品產業,手工具製造廠商
紡織纖維廠,單絲纖維製造廠商
因與其他單位合作,合作的單位使用PLC進行感測器裝置資料收集
透過佈置在工廠內的閘道器進行資料之收集,以OPC UA通訊協定進行
收集的感測資料包含重力鑄造、機加工以及周遭設備之環境感測資料
例如,爐溫、電流、環境溫度、環境濕度與CO2濃度等
與工廠合作的資訊系統廠商合作,請資訊系統廠商將資料交換至資料庫
收集資料以用電度數為主
與工廠合作的資訊系統廠商合作,透過API將需要的感測資料從EMS取得
或是以工廠內的閘道器進行溝通進行資料之收集,以Modbus通訊協定進行
收集的資料以用電度數為主
OPC UA協定串接資料
使用的PLC裝置為:S7-1200 CPU 1215C
使用到的Pytnon函式庫
Modbus協定串接資料
使用Modbus TCP協定連接Modbus TCP Slave取得資料
使用到的Python函式庫
OPC UA協定串接資料範例
import asyncio
import logging
from asyncua import Client, Node, ua
type_maps = {
'0': 'Null', '1': 'Boolean', '2': 'SByte', '3': 'Byte', '4': 'Int16',
'5': 'UInt16', '6': 'Int32', '7': 'UInt32', '8': 'Int64', '9': 'UInt64',
'10': 'Float', '11': 'Double', '12': 'String', '13': 'DateTime', '14': 'Guid',
'15': 'ByteString', '16': 'XmlElement', '17': 'NodeId', '18': 'ExpandedNodeId',
'19': 'StatusCode', '20': 'QualifiedName', '21': 'LocalizedText',
'22': 'ExtensionObject', '23': 'DataValue', '24': 'Variant', '25': 'DiagnosticInfo',
}
client = Client(url=url, timeout=timeout)
machine_str = ''
machine_str = 'node_id,display_name,value,data_type,source_timestamp,status_code\n'
async with client:
for node_str in node_maps:
try:
node = client.get_node(node_str)
data_value_obj = await node.read_data_value()
var_type = (await node.read_data_type_as_variant_type()).value
display_name = (await node.read_display_name()).Text
re_pattern = re.compile(u'[^\u0000-\uD7FF\uE000-\uFFFF]', re.UNICODE)
display_name = re_pattern.sub(u'\uFFFD', display_name)
display_name = display_name.replace('\x00', '')
node_id = node.nodeid.to_string()
value = await node.read_value()
data_type = type_maps[str(var_type)]
source_timestamp = str(data_value_obj.SourceTimestamp)
status_code = data_value_obj.StatusCode_.value
csv_row = '%s,%s,%s,%s,%s,%s\n' % (
node_id,
display_name,
value,
data_type,
source_timestamp,
status_code,
)
csv_row = csv_row.replace('\x00', '')
machine_str += csv_row
except Exception as e:
print(e)
print('Reading the NodeId' + node_str + ' is failed.')
Modbus TCP協定串接資料範例
from pyModbusTCP.client import ModbusClient
import time
SERVER_HOST = "192.168.35.53"
SERVER_PORT = 502
c = ModbusClient()
# uncomment this line to see debug message
#c.debug(True)
# define modbus server host, port
c.host(SERVER_HOST)
c.port(SERVER_PORT)
while True:
# open or reconnect TCP to server
if not c.is_open():
if not c.open():
print("unable to connect to " + SERVER_HOST + ":" + str(SERVER_PORT))
# if open() is ok, read register (modbus function 0x03)
if c.is_open():
# read 10 registers at address 0, store result in regs list
regs = c.read_holding_registers(0, 10)
# if success display registers
if regs:
print("reg ad #0 to 9: " + str(regs))
# sleep 2s before next polling
time.sleep(2)
使用到的Python函式庫
requests與BeautifulSoup4
使用pdftotext進行PDF檔案解析
標的網站
能源署,電力碳排放係數
IPCC溫室氣體潛勢值
產品碳足跡資訊網
標的網站
能源署,電力碳排放係數PDF檔案內容
標的網站
在GitHub上有個專案定期會更新IPCC潛勢值
globalwarmingpotentials.csv
解析專案裡面的CSV檔即可取得所需要的潛勢值
標的網站
產品碳足跡資訊網,https://cfp-calculate.tw
登入資訊網站
有按鈕可以匯出所有目前收錄的係數PDF檔案
再使用pdftotext之Python函式庫進行上述檔案解析
水龍頭母體,只關注重力鑄造與機加工關鍵製程
資料收集與串接
感測資料收集
所需的ERP與MES資料收集
產線追溯系統開發
資料收集與串接
感測資料收集
所需的ERP與MES資料收集
產線追溯系統開發
感測資料收集
因為裝置佈置是由另外合作單位A負責
負責的單位對於網路概念也不是很熟...
我人不在工廠內,卻要我連工廠端的192.168.1.222?
兩台PLC之網路設定都一樣,但是一個可以通,一個不行?
工廠廠區防火牆等網路設定是工廠既有的系統整合廠商負責
這樣在接資料的時候,就需要進行三方溝通
資料收集與串接
感測資料收集
所需的ERP與MES資料收集
產線追溯系統開發
所需的ERP與MES資料收集
負責ERP與MES等系統是工廠既有委託的系統整合廠商
在進行資料串接上有一定的難度
工廠認為這些資料是機密,不想要提供與進行串接
因此相關的資料都是以CSV或是EXCEL檔案進行提供
資料收集與串接
感測資料收集
所需的ERP與MES資料收集
產線追溯系統開發
產線追溯系統開發
因應上述的議題,在自動化串接與收集上顯得綁手綁腳
耗費心力在有關於感測資料串接上,甚至是需要跳下去幫忙實作
在ERP與MES資料串接上,變成手動輸入與匯入檔案
產品是購買雛形再進行製造加工,加上製程僅有2個關鍵製程
導致在計算出的結果呈現上會與預期有所出入
為何在傳輸感測資料時不使用MQTT等協定進行?
現實面的考量
防火牆與網路設定的問題
PLC(OPC UA server)的設定議題
產品以鋼鍛造剝線鉗之製程為主
資料收集與串接
感測資料收集
所需的ERP與MES資料收集
產線追溯系統開發
資料收集與串接
感測資料收集
所需的ERP與MES資料收集
產線追溯系統開發
感測資料收集
雖然工廠有配合的資訊系統廠商配合布置各式機台感測裝置
資訊系統廠商只以資料庫形式進行資料交換
讓你的PostgreSQL吃不消,每次都有idle connection
最後讓你的PostgreSQL server掛點
所需的ERP與MES資料收集
負責ERP與MES等系統是工廠既有委託的系統整合廠商
在進行資料串接上有一定的難度
工廠認為這些資料是機密,不想要提供資料與進行串接
最後相關的資料都是以CSV或是EXCEL檔案進行提供進行手動匯入
資料收集與串接
感測資料收集
所需的ERP與MES資料收集
產線追溯系統開發
產線追溯系統開發
因應上述的議題,在自動化串接與收集上顯得綁手綁腳
在前端畫面呈現上顯得有需多的要求,例如:Dashboard之感覺
慶幸的是,提供的ERP與MES資料都是正確的
剛好該間手工具廠商是真的有銷往歐洲國家,未來會被列管
因此在計算出的結果與實際外部稽核與手動驗算結果沒差多少
針對產品為魔鬼氈與PET管套用線為主
資料收集與串接
感測資料收集
所需的ERP與MES資料收集
產線追溯系統開發
資料收集與串接
感測資料收集
所需的ERP與MES資料收集
產線追溯系統開發
感測資料收集
收集感測資料透過能源管理系統所提供的API進行取得
但是協助工廠佈置裝置的資訊系統廠商所使用的能源管理系統是技轉來的
能源管理系統之顧問窗口協助到一半就離職了.....
留下詭異的收集感測資料行為
感測資料是每分鐘的瞬時功率
感測資料會自動補值,機台沒有在動的時候,還有數值?
計算電力度數之議題,把隔天的00:00算進去
資料收集與串接
感測資料收集
所需的ERP與MES資料收集
產線追溯系統開發
所需的ERP與MES資料收集
工廠在發現使用能源管理系統之後,才發現廠區每個月用電度數都偏高
導入到工廠的能源管理系統功能有些還沒完備
變成工廠希望看到的資訊能夠在我們系統內呈現
至於ERP與MES資料,對工廠來說計算產線碳排不是當務之急
因此這部分因應交付,還是以模擬的ERP與MES資料進行設計與匯入
資料收集與串接
感測資料收集
所需的ERP與MES資料收集
產線追溯系統開發
產線追溯系統開發
因應上述的議題,在功能上只好加上能源管理系統缺少的功能
例如,某指定的機台裝置在某個時間區間下之用電度數與碳排
最後就是把產線追溯碳排系統變成機台裝置碳排系統
一開始系統在情境與流程的設計上想得很美好
不可抗力的因素比預期的多
導致實際在執行上是發現不是這麼回事
最後還是從自動化變成手動,有的甚至還要自己先模擬資料
因為執行計畫緣故,合作單位與對象無法自行選擇
要做好萬一合作對象不行的話,要有親自下去協助的準備
環境、社會和公司治理
環境保護;Environment
社會責任;Social
公司治理;Governance
CSR 是「永續經營」的概念、ESG 是實踐CSR 原則
企業社會責任,Corporate Social Responsibility
在ESG報告書中,有部分章節與ISO-14064等標準所產生的報告有關
ISO 14064
ISO 14064-2,專案層級溫室氣體排放減量或移除增量
ISO 14067
產品碳足跡主任查證員訓練課程
ClcikHouse資料庫整合參考資料
My journey of the time series database
My best practices for interacting between PostgreSQL and ClickHouse