寬溫型一體化微型RTU
1. 產(chǎn)品介紹
1.1. 產(chǎn)品設(shè)計說明
寬溫型一體化微型RTU STC-1 是我公司針對各種應(yīng)用場合,研發(fā)的通用型微型RTU,廣泛應(yīng)用于消防、供水、石化、環(huán)保、建筑、電力、交通等各個行業(yè),為眾多系統(tǒng)集成商、自動化公司和研究所采用,是一種具有高性格比、穩(wěn)定可靠的數(shù)據(jù)采集產(chǎn)品。
STC-1模塊可以單獨使用,也可以通過485總線進行擴展,建議同一總線內(nèi)STC-1數(shù)量低于32套。
1.2. 功能特點
l 8路開關(guān)量繼電器輸出,可以作為遙控、跳閘或者告警。
l 8路開關(guān)量光耦隔離輸入,也可以作為脈沖量輸入,帶SOE(事件順序記錄)。
l 8路直流模擬量輸入(0-20mA或0-5V),可以接各種變送器輸出。
l 1個485通信口,1個RS485/232接口,支持MODBUS ASCII方式和RTU方式,兩種方式可軟件設(shè)定。通訊波特率和奇偶校驗可軟件設(shè)定。
l 貼片安裝,無外部總線,高可靠性,較強抗干擾能力。
l 卡式導(dǎo)軌或螺絲固定,現(xiàn)場安裝更加便
1.3. 系統(tǒng)參數(shù)
1.3.1. 直流模擬量輸入
容量: 8路/模塊
輸入信號: 0-5V或0-20mA或4-20mA
轉(zhuǎn)換速度: 5 uS
分辨率: 12位 A/D
計算方法: 以電網(wǎng)頻率為參考,每周波采32點,計算平均值作為測量值
精度: 0.2% FS ± 1字
1.3.2. 開關(guān)量輸入
容量: 8路/模塊
額定輸入: 輸入直流12-48V
輸入方式: 光耦隔離
掃描方式: 中斷方式
SOE分辨率:1ms
1.3.3. 脈沖量輸入(與開關(guān)量輸入共用)
容量: 8路/模塊
額定輸入: 輸入直流12-48V
輸入方式: 光耦隔離
掃描方式: 中斷方式
計數(shù)頻率:1000Hz
最小脈沖寬度:0.2ms
計數(shù)器字長: 32位
1.3.4. 開關(guān)量輸出
容量: 8路/模塊,每路提供一個常開觸點,共用一個公共端
觸點容量: 250V/3A 交流
1.3.5. 通信接口
容量: 2路
接口方式: RS485接口 RS232接口
規(guī)約: MODBUS規(guī)約ASCII方式或RTU方式
1.3.6. 安裝使用環(huán)境
安裝方式: 卡式導(dǎo)軌安裝或者底部螺絲固定
溫度范圍: -20℃~ 70℃
存貯溫度: -20℃~70℃
相對濕度: <85%(20±5℃條件)
大氣壓力: 86~108Kpa
安裝尺寸: 143×90×40mm
電 源: 交流 85~265V 50HZ~60HZ
或者直流 5V ±10 % 或者直流 12V ±10 % 或者 直流 24V ±10 %(訂貨時確定)
功 耗: 小于1W
工作環(huán)境:無爆炸,無腐蝕性氣體及導(dǎo)電塵埃, 無嚴重霉菌存 在,無劇烈振動,無沖擊源;如果需要在此類環(huán)境下工作,請采取相應(yīng)的防護措施。
2. 原理說明
STC-1采用16位超低功耗單片機,單片機內(nèi)部集成了幾乎計算機所能外圍電路,設(shè)計該產(chǎn)品時沒有進行任何的擴展。提高了系統(tǒng)的可靠性和抗干擾能力,縮小了產(chǎn)品的體積。
2.1. 開關(guān)量輸入
系統(tǒng)的數(shù)字輸入采用光電隔離,原理圖如下:
![]() |
輸入信號為高時,光耦導(dǎo)通,DI2=0。
單片機監(jiān)測到信號的變化,產(chǎn)生中斷。單片機記下產(chǎn)生中斷的時間,并啟動一個軟定時器計數(shù)。如果沒有到達設(shè)定的時間信號又發(fā)生變換,則清除中斷時間和事件記錄。如果在設(shè)定的時間內(nèi)信號沒有發(fā)生變化,則作為輸入改變,并記錄改變的時間作為SOE記錄。
開關(guān)量的輸入是無源的,具有一個公共端子,使用時需要外接電源。每路輸入的輸入電流不超過5ma,功率消耗很小。
一般情況下,輸入的公共端子應(yīng)該接開關(guān)量輸入電源的負端,輸入電源的正端接待測開關(guān)量的一端,另外一端接單元的輸入端。
開關(guān)量輸入不允許交流電源作為開關(guān)量輸入電源,這有可能導(dǎo)致嚴重的錯誤。
2.2. 開關(guān)量輸出
開關(guān)量輸出為繼電器輸出,響應(yīng)的時間較慢,不適合需要輸出快速改變的場合。
繼電器的觸點是直接連接到輸出端子的,沒有經(jīng)過任何的防弧、防短路措施,使用時請多加注意,需要增加保險絲。繼電器的輸出觸點主要用于控制中間繼電器或者交流接觸器,一般不要用來直接控制功率負載,不適合控制有非常大沖擊電流的負載,如開關(guān)電源等。
8路開關(guān)量共用一個公共點,請在使用時注意。
2.3. 直流輸入
直流輸入一共是8路,可以作為電壓或者電流輸入。作為電壓輸入時,其輸入阻抗為170K;作為電流輸入時,其輸入阻抗為250歐姆。但是需要在訂貨是說明。
輸入的直流信號為了避免電網(wǎng)的干擾,在軟件設(shè)計時,系統(tǒng)跟蹤電網(wǎng)的頻率。每個電網(wǎng)周波也作32點采樣,對采樣值進行平均運算,運算結(jié)果作為輸入值。這樣大大提高了系統(tǒng)對電網(wǎng)干擾的抑制能力。
2.4. 溫度測量
溫度測量可以采用溫度變送器,把熱電阻或者熱電偶的信號變?yōu)橹绷髁克椭绷鬏斎霚y量。
環(huán)境溫度的測量是通過單片機內(nèi)部的溫度二極管進行測量的,精度可以達到±2度 。
3. 通信協(xié)議說明
通信協(xié)議采用MODBUS規(guī)約。該規(guī)約具有開放性,資料豐富易得,有眾多廠商的支持,本身也非常的簡單。
我們的接口采用RS485接口,比RS232具有更高的通信速率和更遠的通信距離。
根據(jù)我們設(shè)備的情況,我們僅僅實現(xiàn)了MODBUS的一個小型子集,沒有實現(xiàn)其所有內(nèi)容,已經(jīng)能夠滿足我們所有的需要。
3.1. MODBUS規(guī)約簡介
MODBUS規(guī)約是MODICOM公司開發(fā)的一個為很多廠商支持的開放規(guī)約
Modbus 協(xié)議是應(yīng)用于電子控制器上的一種通用語言。通過此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)(例如以太網(wǎng))和其它設(shè)備之間可以通信。它已經(jīng)成為一通用工業(yè)標準。有了它,不同廠商生產(chǎn)的控制設(shè)備可以連成工業(yè)網(wǎng)絡(luò),進行集中監(jiān)控。
此協(xié)議定義了一個控制器能認識使用的消息結(jié)構(gòu),而不管它們是經(jīng)過何種網(wǎng)絡(luò)進行通信的。它描述了控制器請求訪問其它設(shè)備的過程,如果回應(yīng)來自其它設(shè)備的請求,以及怎樣偵測錯誤并記錄。它制定了消息域格局和內(nèi)容的公共格式。
當在Modbus網(wǎng)絡(luò)上通信時,此協(xié)議決定了每個控制器須要知道它們的設(shè)備地址,識別按地址發(fā)來的消息,決定要產(chǎn)生何種行動。如果需要回應(yīng),控制器將生成反饋信息并用Modbus協(xié)議發(fā)出。在其它網(wǎng)絡(luò)上,包含了Modbus協(xié)議的消息轉(zhuǎn)換為在此網(wǎng)絡(luò)上使用的幀或包結(jié)構(gòu)。這種轉(zhuǎn)換也擴展了根據(jù)具體的網(wǎng)絡(luò)解決節(jié)地址、路由路徑及錯誤檢測的方法。
3.1.1. 在Modbus網(wǎng)絡(luò)上轉(zhuǎn)輸
標準的Modbus口是使用RS-232C兼容串行接口,它定義了連接口的針腳、電纜、信號位、傳輸波特率、奇偶校驗。控制器能直接或經(jīng)由Modem組網(wǎng)。
控制器通信使用主—從技術(shù),即僅設(shè)備(主設(shè)備)能初始化傳輸(查詢)。其它設(shè)備(從設(shè)備)根據(jù)主設(shè)備查詢提供的數(shù)據(jù)做出相應(yīng)反應(yīng)。典型的主設(shè)備:主機和可編程儀表。典型的從設(shè)備:可編程控制器。
主設(shè)備可單獨和從設(shè)備通信,也能以廣播方式和所有從設(shè)備通信。如果單獨通信,從設(shè)備返回消息作為回應(yīng),如果是以廣播方式查詢的,則不作任何回應(yīng)。Modbus協(xié)議建立了主設(shè)備查詢的格式:設(shè)備(或廣播)地址、功能代碼、所有要發(fā)送的數(shù)據(jù)、錯誤檢測域。
從設(shè)備回應(yīng)消息也由Modbus協(xié)議構(gòu)成,包括確認要行動的域、任何要返回的數(shù)據(jù)、和錯誤檢測域。如果在消息接收過程中發(fā)生錯誤,或從設(shè)備不能執(zhí)行其命令,從設(shè)備將建立錯誤消息并把它作為回應(yīng)發(fā)送出去。
3.1.2. 在其它類型網(wǎng)絡(luò)上轉(zhuǎn)輸
在其它網(wǎng)絡(luò)上,控制器使用對等技術(shù)通信,故任何控制都能初始和其它控制器的通信。這樣在單獨的通信過程中,控制器既可作為主設(shè)備也可作為從設(shè)備。提供的多個內(nèi)部通道可允許同時發(fā)生的傳輸進程。
在消息位,Modbus協(xié)議仍提供了主—從原則,盡管網(wǎng)絡(luò)通信方法是“對等”。如果控制器發(fā)送消息,它只是作為主設(shè)備,并期望從從設(shè)備得到回應(yīng)。同樣,當控制器接收到消息,它將建立一從設(shè)備回應(yīng)格式并返回給發(fā)送的控制器。
3.1.3. 查詢—回應(yīng)周期
.查詢
查詢消息中的功能代碼告之被選中的從設(shè)備要執(zhí)行何種功能。數(shù)據(jù)段包含了從設(shè)備要執(zhí)行功能的任何附加信息。例如功能代碼03是要求從設(shè)備讀保持寄存器并返回它們的內(nèi)容。數(shù)據(jù)段必須包含要告之從設(shè)備的信息:從何寄存器開始讀及要讀的寄存器數(shù)量。錯誤檢測域為從設(shè)備提供了一種驗證消息內(nèi)容是否正確的方法。
.回應(yīng)
如果從設(shè)備產(chǎn)生正常的回應(yīng),在回應(yīng)消息中的功能代碼是在查詢消息中的功能代碼的回應(yīng)。數(shù)據(jù)段包括了從設(shè)備收集的數(shù)據(jù):像寄存器值或狀態(tài)。如果有錯誤發(fā)生,功能代碼將被修改以用于指出回應(yīng)消息是錯誤的,同時數(shù)據(jù)段包含了描述此錯誤信息的代碼。錯誤檢測域允許主設(shè)備確認消息內(nèi)容是否可用。
3.2. 幀格式說明
控制器能設(shè)置為兩種傳輸模式(ASCII或RTU)中的任何一種在標準的Modbus網(wǎng)絡(luò)通信。用戶選擇想要的模式,包括串口通信參數(shù)(波特率、校驗方式等),在配置每個控制器的時候,在Modbus網(wǎng)絡(luò)上的所有設(shè)備都必須選擇相同的傳輸模式和串口參數(shù)。
ASCII模式
: | 地址 | 功能代碼 | 數(shù)據(jù)數(shù)量 | 數(shù)據(jù)1 | ... | 數(shù)據(jù)n | LRC高字節(jié) | LRC低字節(jié) | 回車 | 換行 |
RTU模式
地址 | 功能代碼 | 數(shù)據(jù)數(shù)量 | 數(shù)據(jù)1 | ... | 數(shù)據(jù)n | CRC高字節(jié) | CRC低字節(jié) |
所選的ASCII或RTU方式僅適用于標準的Modbus網(wǎng)絡(luò),它定義了在這些網(wǎng)絡(luò)上連續(xù)傳輸?shù)南⒍蔚拿恳晃?,以及決定怎樣將信息打包成消息域和如何解碼。
在我們的系統(tǒng)中,我們僅僅支持ASCII的幀格式。
當控制器設(shè)為在Modbus網(wǎng)絡(luò)上以ASCII(美國標準信息交換代碼)模式通信,在消息中的每個8Bit字節(jié)都作為兩個ASCII字符發(fā)送。這種方式的主要優(yōu)點是字符發(fā)送的時間間隔可達到1秒而不產(chǎn)生錯誤。
代碼系統(tǒng)
. 十六進制,ASCII字符0...9,A...F
. 消息中的每個ASCII字符都是一個十六進制字符組成
每個字節(jié)的位
. 1個起始位
. 8個數(shù)據(jù)位,最小的有效位先發(fā)送
. 1個奇偶校驗位,無校驗則無
. 1個停止位(有校驗時),2個Bit(無校驗時)
錯誤檢測域
. LRC(縱向冗長檢測)
地址域
消息幀的地址域包含兩個字符(ASCII)或8Bit(RTU)??赡艿?span style="text-decoration:underline;">從設(shè)備地址是0...247 (十進制)。單個設(shè)備的地址范圍是1...247。主設(shè)備通過將要聯(lián)絡(luò)的從設(shè)備的地址放入消息中的地址域來選通從設(shè)備。當從設(shè)備發(fā)送回應(yīng)消息時,它把自己的地址放入回應(yīng)的地址域中,以便主設(shè)備知道是哪一個設(shè)備做出回應(yīng)。
地址0是用作廣播地址,以使所有的從設(shè)備都能認識。當Modbus協(xié)議用于更高水準的網(wǎng)絡(luò),廣播可能不允許或以其它方式代替。
功能域
消息幀中的功能代碼域包含了兩個字符(ASCII)或8Bits(RTU)??赡艿拇a范圍是十進制的1...255。當然,有些代碼是適用于所有控制器,有此是應(yīng)用于某種控制器,還有些保留以備后用。
當消息從主設(shè)備發(fā)往從設(shè)備時,功能代碼域?qū)⒏嬷?span style="text-decoration:underline;">從設(shè)備需要執(zhí)行哪些行為。例如去讀取輸入的開關(guān)狀態(tài),讀一組寄存器的數(shù)據(jù)內(nèi)容,讀從設(shè)備的診斷狀態(tài),允許調(diào)入、記錄、校驗在從設(shè)備中的程序等。
當從設(shè)備回應(yīng)時,它使用功能代碼域來指示是正?;貞?yīng)(無誤)還是有某種錯誤發(fā)生(稱作異議回應(yīng))。對正?;貞?yīng),從設(shè)備僅回應(yīng)相應(yīng)的功能代碼。對異議回應(yīng),從設(shè)備返回一等同于正常代碼的代碼,但最重要的位置為邏輯1。
我們目前所支持的功能碼非常有限,主要包括:
01 READ COIL STATUS
02 READ INPUT STATUS
03 READ HOLDING REGISTERS
04 READ INPUT REGISTERS
05 FORCE SINGLE COIL
06 PRESET SINGLE REGISTERS
24 READ FIFO QUEUE
3.3. 數(shù)據(jù)定義
STC-1通信數(shù)據(jù)定義:
STC-1采用MODBUS規(guī)約的ASCII或RTU方式,出廠黙認設(shè)定為:RTU,波特率9600BPS,1位起始位,8位數(shù)據(jù)位,1位停止位,無校驗。
幀格式:
上位機發(fā)送:
ASCII方式 :單元地址 功能碼 起始地址 讀取點數(shù) LRC校驗 CR LF
RTU方式 單元地址 功能碼 起始地址 讀取點數(shù) CRC校驗
( : 為幀起始標志
單元地址占用兩個字節(jié)為ASCII字符 舉例:實際單元地址為1F 對應(yīng)的地址字符為 0X31,0X46
功能碼占用兩個字節(jié)為ASCII字符 舉例:功能碼為01 對應(yīng)的功能碼字符為 0X30,0X31
起始地址占用四個字節(jié)為ASCII字符 舉例:實際起始地址為0002 對應(yīng)的地址字符為 0X30,0X30,0X30,0X32 ,對應(yīng)的實際開關(guān)量或者模擬量為第三個輸入或者輸出。
讀取點數(shù)占用四個字節(jié)為ASCII字符 舉例:實際起始地址為0002 對應(yīng)的地址字符為 0X30,0X30,0X30,0X32
LRC校驗為和校驗,占用兩個字節(jié)。計算方法可以參考如下的C源程序,需要注意的是首先計算LRC的值,然后把 結(jié)果轉(zhuǎn)換成為相應(yīng)的ASCII字符串。比如LRC結(jié)果為0X5F,則在規(guī)約中LRC的值為 0X35,0X46
unsigned char lrc(unsigned char *str,int lenth)
{
unsigned char tmp;
tmp = 0;
while (lenth-- )
{
tmp+= *str++;
}
return ((unsigned char)(-((char)tmp)));
}
CR=0X0D LF=0X0A 為幀結(jié)束標志
CRC校驗計算:
const unsigned char auchCRCHi[] =
{
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81,0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,0x40
} ;
const unsigned char auchCRCLo[] =
{
0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4,0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD,0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7,0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE,0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2,0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB,0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91,0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88,0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80,0x40
} ;
unsigned short crc(unsigned char *puchMsg , unsigned short usDataLen)
{
unsigned char uchCRCHi = 0xFF ; /* high byte of CRC initialized */
unsigned char uchCRCLo = 0xFF ; /* low byte of CRC initialized */
unsigned uIndex ; /* will index into CRC lookup table */
while (usDataLen--)/* pass through message buffer */
{
uIndex = uchCRCHi ^ *puchMsg++ ; /* calculate the CRC */
uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex];
uchCRCLo = auchCRCLo[uIndex] ;
}
return (uchCRCHi << 8 | uchCRCLo) ;
}
在通信中,假設(shè)是各種不同類型的量的起始地址為0000,按照順序排列的,不同的功能碼實際讀取的是 不同類型的量。上位機按照程序可以順序讀取所有的量。
下位機響應(yīng):
ASCII方式 :單元地址 功能碼 字節(jié)數(shù) 數(shù)據(jù) LRC校驗 CR LF
RTU方式 單元地址 功能碼 字節(jié)數(shù) 數(shù)據(jù) CRC校驗
(除了字節(jié)數(shù),其他的量定義與上面的內(nèi)容相同。
字節(jié)數(shù)指的是數(shù)據(jù)的字節(jié)數(shù),不包括幀起始標志、單元地址、功能碼、LRC校驗、幀結(jié)束標志。字節(jié)數(shù)占用兩個字節(jié) 。比如:數(shù)據(jù)是兩個32位整數(shù),則字節(jié)數(shù)為0x30,0x38,不是實際通信數(shù)據(jù)占用的字節(jié)數(shù)16。
)
功能碼: 01
數(shù)據(jù)起始地址:00 (只能是00)
數(shù)據(jù)長度:不大于08 (因為只有8個輸出繼電器)
功能:讀取輸出繼電器的狀態(tài)。
說明:讀到的8位數(shù)據(jù)的為繼電器狀態(tài),第7位對應(yīng)繼電器的第八路,第1位對應(yīng)第二路,第0位對應(yīng)di 一路。位內(nèi)容 0 表示繼電器不吸合 1 表示繼電器吸合
功能碼: 02
數(shù)據(jù)起始地址:00 (只能是00)
數(shù)據(jù)長度:不大于08 (因為只有8路輸入)
功能:讀取入開關(guān)量的狀態(tài)。
說明:讀到的8位數(shù)據(jù)為輸入狀態(tài),第7位對應(yīng)輸入開關(guān)量的第8路,第4位對應(yīng)第5路,…….,第0位對應(yīng)第1路,位內(nèi)容 0 表示輸入沒有加上電源 1 表示輸入已加上電源,輸入的量改變狀態(tài)需要經(jīng)過0.1S濾波抗干擾后才會變化。如果用戶想知道改變的時刻,需要讀取系統(tǒng)的FIFO中的SOE事件記錄,輸入量的每次改變都會累積到該路對應(yīng)的32位計數(shù)器上,對于計數(shù),輸入的頻率可以是1KHz
功能碼: 03
數(shù)據(jù)起始地址:00-63
數(shù)據(jù)長度:不大于16 (因為通信緩沖區(qū)的限制)
功能: 讀取保持寄存器的值。
說明: 讀取的是16位整數(shù)或者無符號整數(shù)。
保持寄存器定義:
地址(十六進制) 數(shù)據(jù)描述
0000 系統(tǒng)實際時間的低16位 (0000-0020為無符號整數(shù))
0001 系統(tǒng)實際時間的高16位
0002 DI一路開關(guān)量32位計數(shù)器低16位
0003 DI 一路開關(guān)量32位計數(shù)器高16位
0004 第二路開關(guān)量32位計數(shù)器低16位
0005 第二路開關(guān)量32位計數(shù)器高16位
0006 第三路開關(guān)量32位計數(shù)器低16位
0007 第三路開關(guān)量32位計數(shù)器高16位
0008 第四路開關(guān)量32位計數(shù)器低16位
0009 第四路開關(guān)量32位計數(shù)器高16位
000A 第五路開關(guān)量32位計數(shù)器高16位
000B 第五路開關(guān)量32位計數(shù)器低16位
000C 第六路開關(guān)量32位計數(shù)器高16位
000D 第六路開關(guān)量32位計數(shù)器低16位
000E 第七路開關(guān)量32位計數(shù)器高16位
000F 第七路開關(guān)量32位計數(shù)器低16位
0010 第八路開關(guān)量32位計數(shù)器低16位
0011 第八路開關(guān)量32位計數(shù)器低16位
0012 為串口1收發(fā)延時設(shè)置,16位,以1ms為單位
0013 為串口2收發(fā)延時設(shè)置,16位,以1ms為單位
0014 串口1波特率設(shè)置
0015 串口2波特率設(shè)置
0014~0015 內(nèi)容用16進制表示為 0XPQRS R保留
P 高4位為奇偶校驗設(shè)置。P=D(13)為 1,8,E, P=1為 1,8,N
Q =1,通訊為ASCII方式;Q =0,通訊為RTU方式,
S=0 波特率 9600
1 波特率 300
2 波特率 600
3 波特率 1200
4 波特率 2400
5 波特率 4800
6 波特率 9600
7 波特率 19200
8 波特率 38400
9 波特率 57600
A 波特率 76800
B 波特率 115200
C ~F 波特率 9600
黙認通訊方式設(shè)定:
通電前把地址開關(guān)撥成地址0, 然后重新開電。這時通訊為黙認方式:模塊地址為1,通訊規(guī)約為RTU,波特率為 9600 1,8,N
0016~001F 保留
0020 DI一路模擬量系數(shù)
0021 第二路模擬量系數(shù)
0022 第三路模擬量系數(shù)
0023 第四路模擬量系數(shù)
0024 第五路模擬量系數(shù)
0025 第六路模擬量系數(shù)
0026 第七路模擬量系數(shù)
0027 第八路模擬量系數(shù)
0028 保留
0029 測頻閘門時間 1000 為1S
002A ---
002F 保留
0030 DI一路模擬量 2000 /5000為滿度 0-20ma或0-5V
設(shè)置該寄存器沒有意義
0031 第二路模擬量 2000 /5000為滿度 0-20ma或0-5V
設(shè)置該寄存器沒有意義
0032 第三路模擬量 2000 /5000為滿度 0-20ma或0-5V
設(shè)置該寄存器沒有意義
0033 第四路模擬量 2000 /5000為滿度 0-20ma或0-5V
設(shè)置該寄存器沒有意義
0034 第五路模擬量 2000 /5000為滿度 0-20ma或0-5V
設(shè)置該寄存器沒有意義
0035 第六路模擬量 2000 /5000為滿度 0-20ma或0-5V
設(shè)置該寄存器沒有意義
0036 第七路模擬量 2000 /5000為滿度 0-20ma或0-5V
設(shè)置該寄存器沒有意義
0037 第八路模擬量 2000 /5000為滿度 0-20ma或0-5V
設(shè)置該寄存器沒有意義
0038 機內(nèi)電源電壓 3300 代表3.3V
0039 機內(nèi)溫度 1000 代表100攝氏度
003A 開關(guān)量狀態(tài) 讀該寄存器可以讀取開關(guān)量輸入狀態(tài) ,設(shè)置該寄存器沒有意義
003B 開關(guān)量輸出 讀該寄存器可以讀取開關(guān)量輸出狀態(tài),設(shè)置該寄存器可以設(shè)置開關(guān)量輸出狀態(tài)對應(yīng)繼電器輸出1, 值為0 釋放,1吸合 第7位對應(yīng)繼電器輸出8
功能碼: 04
數(shù)據(jù)起始地址:0000--0009
數(shù)據(jù)長度:不大于12
功能: 讀取輸入數(shù)據(jù)。
說明: 讀出值為16位整數(shù)
輸入寄存器定義:
地址(十六進制) 數(shù)據(jù)描述
0000 DI一路模擬量 2000/5000 為滿度 0-20ma或0-5V
0001 第二路模擬量 2000/5000 為滿度 0-20ma或0-5V
0002 第三路模擬量 2000/5000 為滿度 0-20ma或0-5V
0003 第四路模擬量 2000/5000 為滿度 0-20ma或0-5V
0004 第五路模擬量 2000/5000 為滿度 0-20ma或0-5V
0005 第六路模擬量 2000/5000 為滿度 0-20ma或0-5V
0006 第七路模擬量 2000/5000 為滿度 0-20ma或0-5V
0007 第八路模擬量 2000/5000 為滿度 0-20ma或0-5V
0008 機內(nèi)電源電壓 3300 表示3.3V
0009 機內(nèi)溫度 1000 表示100攝氏度
000A DI一路開關(guān)量輸入頻率 為閘門時間內(nèi)所記下的脈沖個數(shù)
000B 第二路開關(guān)量輸入頻率 為閘門時間內(nèi)所記下的脈沖個數(shù)
000C 第三路開關(guān)量輸入頻率 為閘門時間內(nèi)所記下的脈沖個數(shù)
000D 第四路開關(guān)量輸入頻率 為閘門時間內(nèi)所記下的脈沖個數(shù)
000E 第五路開關(guān)量輸入頻率 為閘門時間內(nèi)所記下的脈沖個數(shù)
000F 第六路開關(guān)量輸入頻率 為閘門時間內(nèi)所記下的脈沖個數(shù)
0010 第七路開關(guān)量輸入頻率 為閘門時間內(nèi)所記下的脈沖個數(shù)
0011 第八路開關(guān)量輸入頻率 為閘門時間內(nèi)所記下的脈沖個數(shù)
功能碼: 05
數(shù)據(jù)起始地址:0000-0008
數(shù)據(jù)長度:
功能:控制單個繼電器吸合
說明:
繼電器吸合:
上位機發(fā)送:
ASCII方式 : 單元地址 05 起始地址 FF00 LRC CR LF
RTU方式 單元地址 05 起始地址 FF00 CRC
下位機響應(yīng):
ASCII方式 : 單元地址 05 起始地址 FF00 LRC CR LF
RTU方式 單元地址 05 起始地址 FF00 CRC
詳細說明參考MODBUS規(guī)約。
繼電器釋放:
上位機發(fā)送:
ASCII方式 : 單元地址 05 起始地址 0000 LRC CR LF
RTU方式 單元地址 05 起始地址 0000 CRC
下位機響應(yīng):
ASCII方式 : 單元地址 05 起始地址 0000 LRC CR LF
RTU方式 單元地址 05 起始地址 0000 CRC
詳細說明參考MODBUS規(guī)約。
功能碼: 06
數(shù)據(jù)起始地址:0000-0063
數(shù)據(jù)長度:
說明: 設(shè)置保持寄存器的值。
設(shè)置的是16位整數(shù)。
各個寄存器的說明參考上面讀取保持寄存器
上位機發(fā)送:
ASCII方式 : 單元地址 05 起始地址 數(shù)據(jù) LRC CR LF
RTU方式 單元地址 05 起始地址 數(shù)據(jù) CRC
下位機響應(yīng):
ASCII方式 : 單元地址 05 起始地址 數(shù)據(jù) LRC CR LF
RTU方式 單元地址 05 起始地址 數(shù)據(jù) CRC
數(shù)據(jù)為16位整數(shù)
詳細說明參考MODBUS規(guī)約。
4. 安裝和接線說明
STC-1安裝方法:如果是有IEC標準導(dǎo)軌,直接卡裝在導(dǎo)軌上即可。如果沒有導(dǎo)軌,需要用四個螺絲把STC-1安裝在機柜上。
參照下面說明接線端子定義和接線
如上圖所示,端子定義按序?qū)?yīng)關(guān)系如下:
AI1 DI一路模擬量輸入端
AI2 第二路模擬量輸入端
AI3 第三路模擬量輸入端
AI4 第四路模擬量輸入端
AI5 第五路模擬量輸入端
AI6 第六路模擬量輸入端
AI7 第七路模擬量輸入端
AI8 第八路模擬量輸入端
AGNG 模擬信號輸入公共地
DI1 DI一路開關(guān)量和脈沖量輸入
DI2 第二路開關(guān)量和脈沖量輸入
DI3 第三路開關(guān)量和脈沖量輸入
DI4 第四路開關(guān)量和脈沖量輸入
DI5 第五路開關(guān)量和脈沖量輸入
DI6 第六路開關(guān)量和脈沖量輸入
DI7 第七路開關(guān)量和脈沖量輸入
DI8 第八路開關(guān)量和脈沖量輸入
DICOM 開關(guān)量和脈沖量輸入公共端
DO1 DI一路繼電器輸出
DO2 第二路繼電器輸出
DO3 第三路繼電器輸出
DO4 第四路繼電器輸出
DO5 第五路繼電器輸出
DO6 第六路繼電器輸出
DO7 第七路繼電器輸出
DO8 第八路繼電器輸出
DOCOM 繼電器輸出公共端
1A/TXD STC1 DI一路485接口的A或232接口的TXD
1B/RXD STC1 DI一路485接口的B或232接口的RXD
2A STC1第二路485接口的A
2B STC1第二路485接口的B
GND STC1 DI一路232接口的GND
L/+5/12/24/48V 220V AC電源輸入或直流電源輸入正
N/- 220V AC電源輸入或直流電源輸入負
8位撥碼開關(guān)選擇本模塊的地址(也就是MODBUS規(guī)約中的單元地址)。撥碼開關(guān)標有數(shù)字‘1’的為低位,標有‘8’的為高位,ON的位置為‘0’,單元地址按照二進制表示。僅僅使用低的五位,高三位系統(tǒng)保留。
比如:1 ON 2ON 3 OFF 4 ON 5 ON 對應(yīng)的單元地址為04 。
0 0 1 0 0
單元地址:00或者FF是廣播地址,請不要使用,否則會引起系統(tǒng)故障。
l 安裝時需要一字起子
l 導(dǎo)線的線徑除了電流引線外,不要超過2.5平方毫米,否則不易安裝
l 如果工作場合干擾嚴重,請把STC-1放入鐵制的機箱內(nèi),并對電源加電源濾波器
l 如果需要IPC55的工作條件,可以把STC-1安裝在IPC55防護的機箱內(nèi)