一、硬件設置
儀表設定:
在P8100 的組態級(Configuration Mode)中
設置好以下幾個參數:
1.通訊協議(Prot):
請改為ASC I (ASC II 通訊協議)
2.通訊速率(bAud):
1.2/2.4/4.8/9.6/19.2kbps 可選,
此處設為19.2kbps
3.設備地址(Addr):
1 – 99 可選,默認為1
4.通訊寫入功能(CoEn):
r_o(只讀)或r_W(可讀可寫),默認為r_W
PLC設定:
在CoDeSys軟件中的硬件配置頁面中將AC500 PLC的COM1端口設置為“ASCII”自由口模式,並設定好以下參數:
1.RTS control: telegram
2.baudrate: 19200
3.parity: even
4.Date bits: 7
5.Stop bits: 1
通訊接線采用485模式接線方式。
二、通訊程序
儀表ASCII方式指令格式:
ASCII通訊協議采用半雙工通訊,所有的通訊動作都由上位機開始。上位機給指定地址的控制器發出一命令或要求,控制器對上位機的命令作出應答或發回上位機要求的信息,所有的通訊信息包括以下內容:
A)1 位信息起始字符;
B)1 位或2 位地址字符;
C)1 個命令或數據字符串;
D)1 位信息停止字符。
從上位機發出的信息可以是下列4 種形式之一:
一類指令:L{N}??*
確認從站狀態正常返回信息: L{N}?A 表示可用
二類指令:L {N} {P} {C}*
查詢/修改從站的某參數正常返回信息: L{N}{P}{DATA}A*
三類指令:L {N} {P} #{DATA}*
設置從站的某參數正常返回信息: L{N}{P}{DATA}I*表示:數據和參數有效
四類指令:L {N} {P}I *
在指令3 之后發送給同一從站, 如果指令3 中的數據和參數有效, 從站收到此指令后執行參數設置。正常返回信息: L{N}{P}{DATA}A*
所有字符皆為ASCII 碼,且:
L: 信息開始位;
{N}: 為控制器地址(1—99),1~9 可以用一位或兩位(如:7 和07 皆 可);
{P}: 為參數代碼
{C}: 指令
#: 表示接下來為{DATA}
{DATA}:是ASCII 碼組成字符串
* : 信息截止字位
{DATA}內容格式如下:
{DATA}內容 |
小數點及正負 |
abcd0 |
+abcd |
abcd1 |
+abc.d |
abcd2 |
+ab.cd |
abcd3 |
+a.bcd |
abcd5 |
-abcd |
abcd6 |
-abc.d |
abcd7 |
-ab.cd |
abcd8 |
-a.bcd |
AC500 PLC ASCII指令的收發:
AC500 PLC在 ASCII 方式下的指令收發是通過ABB ASCII通訊庫中的功能塊來完成的,功能塊具體介紹如下:
- COM_REC
通過一個"自由模式"的串行接口接收數據,高電平觸發。
功能塊參數:
- COM_SEND
通過一個"自由模式"的串行接口發送數據,上升沿觸發。
功能塊參數:
DATA通過ADR模塊可直接連接雙字類型的地址(如:%MD0.100),也可以連接STRING類型的內部字符串變量(如后面例子中用到的“send_ascii”)。連接字符串變量時,儀表指令將直接以字符形式輸入及顯示;連接雙子類型的地址時,輸入和顯示的將是組成儀表指令的字符的16進制代碼。
程序實例:
根據儀表命令格式,我們來做一個通過ASCII功能塊實現儀表設定值的查詢及修改的例子。
首先,通過一個COM_SENG模塊來發送設定值查詢指令:“L1S?*”。其中“S”為儀表設定值的參數代碼,其它各參數設置如下圖所示,其中“send_ascii”為string類型的內部字符串變量,將指令“L1S?*” 賦予變量后,將“%MX1.0.1”置一,指令發出。
同時,接收模塊“COM_REC”(參數設置如下)將收到儀表應答指令“L1S02771A*”,表示當前設定值為27.7,1位小數。
然后通過發送指令“L1S#02341*”修改設定值為23.4。
儀表返回指令“L1S02341I*”表示參數和數據沒有問題。
再次發送確認指令“L1SI*”確認修改設置。
儀表返回指令“L1S02341A*”表示儀表設定值修改成功。
至此,ABB AC500系列PLC 與WEST 8100+系列儀表的通訊成功實現。
附件
WEST 8100系列儀表的參數代碼表
參數 |
代碼 |
說明 |
輸入參數: |
||
過程值 |
M |
只讀參數(二類指令),命令為:L{N}M?* 超量程時{DATA}為<??>0, 欠量程時{DATA}為<??>5。 |
過程值偏置 |
V |
可以查詢(二類指令)、修改(三類/四類指令串); 命令為:L{N}V?*,L{N}V#{DATA}*/L{N}VI*; 修正輸入值,修正的過程值=實際值+過程值偏差,修正的過程值要在量程范圍內,可供顯示、報警、記錄儀輸出使用。此參數應小心選擇,否則會造成顯示的過程值和測量過程值的不一致。 |
量程上限 |
G |
僅適用於直流線性輸入,可用二類指令查詢或三/四類指令串修改,小數點位置同輸入范圍。 命令為:L{N}G?*,L{N}G#{DATA}*/L{N}GI*。 |
量程下限 |
H |
僅適用於直流線性輸入,可用二類指令查詢或三/四類指令串修改,小數點位置同輸入范圍。 命令為:L{N}H?*,L{N}H#{DATA}*/L{N}HI*; |
輸入小數點位置 |
Q |
僅適用於直流線性輸入,可用二類指令查詢或三/四類指令串修改,確定小數點位置:0=abcd 1=abc.d 2=ab.cd 3=a.bcd。 命令為:L{N}H?*,L{N}H#{DATA}*/L{N}HI*。 |
數字濾波時間 |
m |
用二類指令查詢或三/四類指令串修改。 命令為:L{N}m?*,L{N}m#{DATA}*/L{N}mI* |
輸出參數: |
||
輸出功率 |
W |
自動狀態時,用二類指令查詢;手動狀態時,用二類指令查詢或三/四類指令串修改。 命令為:L{N}W?*,L{N}W#{DATA}*/L{N}WI |
輸出1 功率限幅 |
B |
用二類指令查詢或三/四類指令串修改。 命令為:L{N}B?*,L{N}B#{DATA}*/L{N}BI* |
輸出1 控制周期 |
N |
用二類指令查詢或三/四類指令串修改。 命令為:L{N}N?*,L{N}N#{DATA}*/L{N}NI* |
輸出2 控制周期 |
O |
用二類指令查詢或三/四類指令串修改。 命令為:L{N}O?*,L{N}O#{DATA}*/L{N}OI* |
變送輸出上限 |
[ |
用二類指令查詢或三/四類指令串修改,小數點位置與輸入一致。 命令為:L{N}[?*,L{N}[#{DATA}*/L{N}[I* |
變送輸出下限 |
\ |
用二類指令查詢或三/四類指令串修改,小數點位置與輸入一致。 命令為:L{N}\?*,L{N}\#{DATA}*/L{N}\I* |
設定值參數: |
||
設定值 |
S |
用二類指令查詢或三/四類指令串修改,在設定范圍內任意取值。 命令為:L{N}S?*,L{N}S#{DATA}*/L{N}SI* |
設定值斜率 |
^ |
用二類指令查詢或三/四類指令串修改,設置范圍為1~9999/小時,{DATA}=00000 時為OFF,小數點位置和輸入相同。 命令為:L{N}^?*,L{N}^#{DATA}*/L{N}^I* |
設定值上限 |
A |
用二類指令查詢或三/四類指令串修改。出廠值為量程上限。 命令為:L{N}A?*,L{N}A#{DATA}*/L{N}AI* |
設定值下限 |
T |
用二類指令查詢或三/四類指令串修改。出廠值為量程下限。 命令為:L{N}T?*,L{N}T#{DATA}*/L{N}TI* |
報警值參數: |
||
報警1 值 |
C |
用二類指令查詢或三/四類指令串修改,小數點位置與輸入一致。 命令為:L{N}C?*,L{N}C#{DATA}*/L{N}CI* |
報警2 值 |
E |
用二類指令查詢或三/四類指令串修改,小數點位置與輸入一致。 命令為:L{N}E?*,L{N}E#{DATA}*/L{N}EI* |
控制參數: |
||
微分時間常數 |
D |
用二類指令查詢或三/四類指令串修改,格式為:mm.ss。單位為分鍾.秒 命令為:L{N}D?*,L{N}D#{DATA}*/L{N}DI* |
積分時間常數 |
I |
用二類指令查詢或三/四類指令串修改,格式為:mm.ss。單位為分鍾.秒 命令為:L{N}I?*,L{N}I#{DATA}*/L{N}II* |
手動積分 |
J |
用二類指令查詢或三/四類指令串修改,小數點位置與輸入 一致。 |
ON/OFF 動作回差 |
F |
用二類指令查詢或三/四類指令串修改,1 位小數點。 命令為:L{N}F?*,L{N}F#{DATA}*/L{N}FI* |
死區 |
K |
用二類指令查詢或三/四類指令串修改,無小數點。 命令為:L{N}K?*,L{N}K#{DATA}*/L{N}KI* |
比例帶1 |
P |
用二類指令查詢或三/四類指令串修改,設置范圍0.5%~~999.9%或0.0(ON/OFF 動作),1 位小數點。 命令為:L{N}P?*,L{N}P#{DATA}*/L{N}PI* |
比例帶2 |
U |
用二類指令查詢或三/四類指令串修改,設置范圍0.5%~~999.9%或0.0(ON/OFF 動作),1 位小數點。 命令為:L{N}U?*,L{N}U#{DATA}*/L{N}UI* |