2016年12月5日 星期一

[定義]Modbus

Modbus是一種串行通訊協定,是Modicon於1979年,

為使用可編程邏輯控制器(PLC)通訊而發表的。

Modbus是工業領域通訊協定的業界標準(De facto),

並且現在是工業電子裝置之間相當常用的連線方式。

 Modbus比其他通訊協定使用的更廣泛的主要原因有:

  1. 公開發表並且無版稅要求
  2. 相對容易的工業網路部署
  3. 對供應商來說,修改移動原生的位元或位元組沒有很多限制


----------------------------------------------------------------------------------------------------

Modbus協定目前存在用於串列埠、乙太網以及其他支援網際網路協定的網路的版本。

大多數Modbus裝置通訊通過串列埠EIA-485實體層進行。


Modbus允許多個 (大約240個) 裝置連線在同一個網路上進行通訊,

--------------------------------------------------------------------------------------------------------


舉個例子,一個由測量溫度和濕度的裝置,並且將結果傳送給電腦。


在資料採集與監視控制系統(SCADA)中,Modbus通常用來


連線監控電腦和遠端終端控制系統(RTU)。


一個ModBus命令包含了打算執行的裝置的Modbus位址。

所有裝置都會收到命令,但只有指定位置的裝置會執行及回應指令(

位址0例外,指定位址0的指令是廣播指令,所有收到指令的裝置都會執行,

不過不回應指令)。所有的Modbus命令包含了檢查碼,

以確定到達的命令沒有被破壞。基本的ModBus命令能指令一個RTU改變它的

暫存器的某個值,控制或者讀取一個I/O埠,以及指揮裝置回送一個或者多個其

暫存器中的資料。


資料來源:




[電路]PC817

PC817 是一個PhotoCoupler(光電耦合元件),



光耦合器一般由三部分組成:光的發射、光的接收及信號放大。

輸入的電信號驅動發光二極體,使之發出一定波長的光,被光探測器接收而產生光電流,

再經過進一步放大後輸出。這就完成了電—光—電的轉換,從而起到輸入、輸出、

隔離的作用。由於光耦合器輸入輸出間互相隔離,電信號傳輸具有單向性等特點,

因而具有良好的電絕緣能力和抗干擾能力。又由於光耦合器的輸入端屬於電流型工作

的低阻元件,因而具有很強的共模抑制能力。所以,它在長線傳輸資訊中作為終端

隔離元件可以大大提高信噪比。在電腦數位通信及即時控制中作為信號隔離的介面器件,

可以大大增加其工作之可靠性。


以下是架構示意圖,輸入的電被轉換成光發射,再由另一端的光接收後放大信號輸出。




























以上資料取自WiKi


外觀


2016年12月2日 星期五

[CORONA SDK] 第一個Corona 小程式


CORONA SDK是一個跨平台的開發工具,可以把寫好的程式編譯成Android或是iOS。



以下是Cornona

Corona SDK is a cross-platform framework that empowers developers to create 2D games and apps for mobile, TV, and desktop. It’s designed to enable super-fast development – up to 10x faster than other platforms. Adding sophisticated features is easy using our elegant Lua-based APIs. A streamlined workflow lets you see your changes instantly. Monetization is built in with Corona Ads. And you can publish to all major platforms from a single code base


首先你必須到官網下載SDK,必須申請一個帳號(不用綁任何信用卡資訊)



以帳號登入之後選擇Download Corona SDK ,MacOS版本大約100MB,

裡面包函SDK以及模擬器,它沒有內建任何的IDE,你可以直接使用現成的文字編輯器,

或是像Atom,Vistual  Studio Code之類的軟體來輔助開發。






























安裝完後,第一次需要輸入帳密,就用剛才下載時登入的那組即可。







































接著就會進到主畫面,按下New Project來動手做一個APP



























開啟SDK後,還會出現一個Console,暫時不用理它沒關係



先照預設建立一個MyAPP






























選擇一個地方放置專案的檔案,按下Create


























專案建立完成,可以選擇用編輯器開啟,我是用Atom














開啟編輯器的畫面是main.lua ,Corona SDK採用的是lua語言,Lua是一種輕量語言,

它的官方版本只包括一個精簡的核心和最基本的庫。這使得Lua體積小、啟動速度快。

有關Lua語言介紹,可以參考這篇WiKi  。

此時模擬器也己經準備好了











































我們來做一個按鈕,按下之後可以顯示按了多少下,程式碼如下

-----------------------------------------------------------------------------------------
--
-- main.lua
--
-----------------------------------------------------------------------------------------

-- 取用預設備景圖片
local background = display.newImage("Default-568h@2x.png")
-- 取得背景正中英的座標
background.x = display.contentCenterX

background.y = display.contentCenterY


-- 計數器歸零
x = 0
-- 定義一個widget
local widget = require("widget")
-- 定義一個物件txtTile 並設定要顯示的文字
local txtTitle = display.newText("My First Corona SDK APP", 0, 0, native.systemFont, 18)
-- 定義一個物件叫txtShow
local txtShow
-- 定義txtShow位置
txtTitle.x = display.contentCenterX

txtTitle.y = display.contentY
-- 定義txtTitle字體頻色
txtTitle:setFillColor(1, 110/255, 110/255)

-- 定義按鋌事件
local function handleButtonEvent(event)

 if ("began" == event.phase) then

  display.remove(txtShow)

  x = x + 1

  --print("你己經按了 ".. x .. " 次")

  txtShow = display.newText("你己經按了 ".. x .. " 次", display.contentCenterX, 400, native.systemFont, 18)

 end

end

-- 定義一個按鋌
local btnEnter = widget.newButton {

 x = display.contentCenterX,

 y = display.contentCenterY,

 labelColor = { default = {1, 1, 1}, over = {0, 0, 0, 0.5} },

 label = "按我",

 fontSize = "30",

 onEvent = handleButtonEvent,

}

儲存文字檔後,模擬器會跳出提示,選擇Relaunch Simulator


















此時會看到模擬器畫面顯示出東西了









































接下來我們點幾下按我看看,會出現計算按了幾下。










































參考來源:

高雄資訊程群學社團


https://coronalabs.com/corona-sdk/