Export translations
Перейти к:
навигация
,
поиск
Параметры
Группа
1-Wire
Allen Bradley DF1
API - Запись нового значения в регистр
API - Получение данных для графика
API - Получение данных для события
API - Получение данных о локальном времени
API - Получение лога регистров
API - Получение текущих значений регистров
API - Список блоков панелей
API - Список графиков
API - Список изображений
API - Список панелей
API - Список регистров
API - Список словарей
API - Список соединений
API - Список трендов
BACnet IP
Broadlink SP3S
Delta DVP
ModBus ASCII
ModBus RTU
Modbus RTU в виде custom protocol
ModBus TCP
Siemens PPI
Siemens S7 Communication
Test
Troubleshooting - Решение типовых проблем при работе в WebHMI
Аварии
Аннотация - функциональные возможности WebHMI
Битовые операции
Быстродействие при обмене данными
ВНИМАНИЕ! ДАННАЯ ВЕРСИЯ ВИКИ УСТАРЕЛА - см. docs.webhmi.com.ua
Внутренние регистры WebHMI
Демо-приложение для Android
Дополнительные СОМ порты
Доступ по ftp
Журнал регистров
Интеграция в другие системы
Использование MultiWan
Исторические графики
Как проверить уровень приема сигнала у 3G модема
Календарь
Назначение и применение
Настройка виртуального UART
Настройка связи с CDC-модемами на примере модема Huawei E3531
Настройка сетевых соединений
Обновление версии прошивки
Описание API
Описание внешних разъемов
Оптимизация производительности
Особенности работы с некоторыми модемами
Отладка сложных скриптов
Первое включение
Перевод на англ 2
Поддерживаемые протоколы
Подключение 3G модем ZTE K3806 Киевстар
Подключение WebHMI к Level2
Подключение внешних устройств
Подключение к Allen-Bradley MicroLogix 1200
Подключение к Kиевстар на примере модема ZTE MF100
Подключение к People.net
Подключение к S7-1200
Подключение к МТС Коннект
Подключение к ОВЕН160
Подключение к ПЛК с Codesys
Подключение к интернету через 3G модем
Полезные программы
Полезные советы
Пользовательские графики и тренды (Аналитика)
Пользовательские протоколы
Построение графиков в Level2
Пример доступа к данным из C/C++
Пример доступа к данным из Excel
Пример протокола ModBus ASCII
Пример протокола ModBus TCP
Примеры подключения к разным устройствам
Просмотр регистров по запросу
Работа с контроллером холодильного оборудования Danfoss AK-CC 550
Работа с регистрами
Рецепты
Сброс настроек
Синхронизация времени
Системные настройки и сервис
Скрипты
События
Соединения
Сравнение карт SD
Тренды
Удалённый сервисный доступ
Формирование отчетов
Функции управления соединениями
Функция Modbus/TCP сервер
Шаблоны дешбордов
Экраны
Язык
aa - Afar
ab - Abkhazian
ace - Achinese
ady - Adyghe
ady-cyrl - адыгабзэ
aeb - Tunisian Arabic
aeb-arab - تونسي
aeb-latn - Tûnsî
af - Afrikaans
ak - Akan
aln - Gheg Albanian
am - Amharic
an - Aragonese
ang - Old English
anp - Angika
ar - Arabic
arc - Aramaic
arn - Mapuche
arq - Algerian Arabic
ary - Moroccan Arabic
arz - Egyptian Arabic
as - Assamese
ase - American Sign Language
ast - Asturian
av - Avaric
avk - Kotava
awa - Awadhi
ay - Aymara
az - Azerbaijani
azb - تۆرکجه
ba - Bashkir
bar - Bavarian
bbc - Batak Toba
bbc-latn - Batak Toba
bcc - Southern Balochi
bcl - Bikol Central
be - Belarusian
be-tarask - Belarusian (Taraškievica orthography)
bg - Bulgarian
bgn - Western Balochi
bho - Bhojpuri
bi - Bislama
bjn - Banjar
bm - Bambara
bn - Bengali
bo - Tibetan
bpy - Bishnupriya
bqi - Bakhtiari
br - Breton
brh - Brahui
bs - Bosnian
bto - Iriga Bicolano
bug - Buginese
bxr - буряад
ca - Catalan
cbk-zam - Chavacano de Zamboanga
cdo - Min Dong Chinese
ce - Chechen
ceb - Cebuano
ch - Chamorro
cho - Choctaw
chr - Cherokee
chy - Cheyenne
ckb - Central Kurdish
co - Corsican
cps - Capiznon
cr - Cree
crh - Crimean Turkish
crh-cyrl - Crimean Turkish (Cyrillic script)
crh-latn - Crimean Turkish (Latin script)
cs - Czech
csb - Kashubian
cu - Church Slavic
cv - Chuvash
cy - Welsh
da - Danish
de - German
de-at - Austrian German
de-ch - Swiss High German
de-formal - German (formal address)
diq - Zazaki
dsb - Lower Sorbian
dtp - Central Dusun
dty - डोटेली
dv - Divehi
dz - Dzongkha
ee - Ewe
egl - Emilian
el - Greek
eml - Emiliano-Romagnolo
en - English
en-ca - Canadian English
en-gb - British English
eo - Esperanto
es - Spanish
et - Estonian
eu - Basque
ext - Extremaduran
fa - Persian
ff - Fulah
fi - Finnish
fit - Tornedalen Finnish
fj - Fijian
fo - Faroese
fr - French
frc - Cajun French
frp - Arpitan
frr - Northern Frisian
fur - Friulian
fy - Western Frisian
ga - Irish
gag - Gagauz
gan - Gan Chinese
gan-hans - Simplified Gan script
gan-hant - Traditional Gan script
gd - Scottish Gaelic
gl - Galician
glk - Gilaki
gn - Guarani
gom - Goan Konkani
gom-deva - Goan Konkani (Devanagari script)
gom-latn - Goan Konkani (Latin script)
got - Gothic
grc - Ancient Greek
gsw - Swiss German
gu - Gujarati
gv - Manx
ha - Hausa
hak - Hakka Chinese
haw - Hawaiian
he - Hebrew
hi - Hindi
hif - Fiji Hindi
hif-latn - Fiji Hindi (Latin script)
hil - Hiligaynon
ho - Hiri Motu
hr - Croatian
hrx - Hunsrik
hsb - Upper Sorbian
ht - Haitian Creole
hu - Hungarian
hy - Armenian
hz - Herero
ia - Interlingua
id - Indonesian
ie - Interlingue
ig - Igbo
ii - Sichuan Yi
ik - Inupiaq
ike-cans - Eastern Canadian (Aboriginal syllabics)
ike-latn - Eastern Canadian (Latin script)
ilo - Iloko
inh - Ingush
io - Ido
is - Icelandic
it - Italian
iu - Inuktitut
ja - Japanese
jam - Jamaican Creole English
jbo - Lojban
jut - Jutish
jv - Javanese
ka - Georgian
kaa - Kara-Kalpak
kab - Kabyle
kbd - Kabardian
kbd-cyrl - Адыгэбзэ
kg - Kongo
khw - Khowar
ki - Kikuyu
kiu - Kirmanjki
kj - Kuanyama
kk - Kazakh
kk-arab - Kazakh (Arabic script)
kk-cn - Kazakh (China)
kk-cyrl - Kazakh (Cyrillic script)
kk-kz - Kazakh (Kazakhstan)
kk-latn - Kazakh (Latin script)
kk-tr - Kazakh (Turkey)
kl - Kalaallisut
km - Khmer
kn - Kannada
ko - Korean
ko-kp - 한국어 (조선)
koi - Komi-Permyak
kr - Kanuri
krc - Karachay-Balkar
kri - Krio
krj - Kinaray-a
ks - Kashmiri
ks-arab - Kashmiri (Arabic script)
ks-deva - Kashmiri (Devanagari script)
ksh - Colognian
ku - Kurdish
ku-arab - كوردي (عەرەبی)
ku-latn - Kurdish (Latin script)
kv - Komi
kw - Cornish
ky - Kyrgyz
la - Latin
lad - Ladino
lb - Luxembourgish
lbe - лакку
lez - Lezghian
lfn - Lingua Franca Nova
lg - Ganda
li - Limburgish
lij - Ligurian
liv - Livonian
lmo - Lombard
ln - Lingala
lo - Lao
loz - Lozi
lrc - Northern Luri
lt - Lithuanian
ltg - Latgalian
lus - Mizo
luz - Southern Luri
lv - Latvian
lzh - Literary Chinese
lzz - Laz
mai - Maithili
map-bms - Basa Banyumasan
mdf - Moksha
mg - Malagasy
mh - Marshallese
mhr - Eastern Mari
mi - Maori
min - Minangkabau
mk - Macedonian
ml - Malayalam
mn - Mongolian
mo - молдовеняскэ
mr - Marathi
mrj - Western Mari
ms - Malay
mt - Maltese
mus - Creek
mwl - Mirandese
my - Burmese
myv - Erzya
mzn - Mazanderani
na - Nauru
nah - Nāhuatl
nan - Min Nan Chinese
nap - Neapolitan
nb - Norwegian Bokmål
nds - Low German
nds-nl - Low Saxon
ne - Nepali
new - Newari
ng - Ndonga
niu - Niuean
nl - Dutch
nl-informal - Nederlands (informeel)
nn - Norwegian Nynorsk
nov - Novial
nrm - Nouormand
nso - Northern Sotho
nv - Navajo
ny - Nyanja
oc - Occitan
olo - Livvi-Karelian
om - Oromo
or - Oriya
os - Ossetic
pa - Punjabi
pag - Pangasinan
pam - Pampanga
pap - Papiamento
pcd - Picard
pdc - Pennsylvania German
pdt - Plautdietsch
pfl - Palatine German
pi - Pali
pih - Norfuk / Pitkern
pl - Polish
pms - Piedmontese
pnb - Western Punjabi
pnt - Pontic
prg - Prussian
ps - Pashto
pt - Portuguese
pt-br - Brazilian Portuguese
qu - Quechua
qug - Chimborazo Highland Quichua
rgn - Romagnol
rif - Riffian
rm - Romansh
rmy - Romani
rn - Rundi
ro - Romanian
roa-tara - tarandíne
ru - Russian
rue - Rusyn
rup - Aromanian
ruq - Megleno-Romanian
ruq-cyrl - Megleno-Romanian (Cyrillic script)
ruq-latn - Megleno-Romanian (Latin script)
rw - Kinyarwanda
sa - Sanskrit
sah - Sakha
sat - Santali
sc - Sardinian
scn - Sicilian
sco - Scots
sd - Sindhi
sdc - Sassarese Sardinian
sdh - Southern Kurdish
se - Northern Sami
sei - Seri
ses - Koyraboro Senni
sg - Sango
sgs - Samogitian
sh - Serbo-Croatian
shi - Tachelhit
shi-latn - Tašlḥiyt
shi-tfng - ⵜⴰⵛⵍⵃⵉⵜ
si - Sinhala
sk - Slovak
sl - Slovenian
sli - Lower Silesian
sm - Samoan
sma - Southern Sami
sn - Shona
so - Somali
sq - Albanian
sr - Serbian
sr-ec - Serbian (Cyrillic script)
sr-el - Serbian (Latin script)
srn - Sranan Tongo
ss - Swati
st - Southern Sotho
stq - Saterland Frisian
su - Sundanese
sv - Swedish
sw - Swahili
szl - Silesian
ta - Tamil
tcy - Tulu
te - Telugu
tet - Tetum
tg - Tajik
tg-cyrl - Tajik (Cyrillic script)
tg-latn - Tajik (Latin script)
th - Thai
ti - Tigrinya
tk - Turkmen
tl - Tagalog
tly - Talysh
tn - Tswana
to - Tongan
tokipona - Toki Pona
tpi - Tok Pisin
tr - Turkish
tru - Turoyo
ts - Tsonga
tt - Tatar
tt-cyrl - Tatar (Cyrillic script)
tt-latn - Tatar (Latin script)
tum - Tumbuka
tw - Twi
ty - Tahitian
tyv - Tuvinian
tzm - Central Atlas Tamazight
udm - Udmurt
ug - Uyghur
ug-arab - Uyghur (Arabic script)
ug-latn - Uyghur (Latin script)
uk - Ukrainian
ur - Urdu
uz - Uzbek
uz-cyrl - ўзбекча
uz-latn - oʻzbekcha
ve - Venda
vec - Venetian
vep - Veps
vi - Vietnamese
vls - West Flemish
vmf - Main-Franconian
vo - Volapük
vot - Votic
vro - Võro
wa - Walloon
war - Waray
wo - Wolof
wuu - Wu Chinese
xal - Kalmyk
xh - Xhosa
xmf - Mingrelian
yi - Yiddish
yo - Yoruba
yue - Cantonese
za - Zhuang
zea - Zeelandic
zh - Chinese
zh-cn - Chinese (China)
zh-hans - Simplified Chinese
zh-hant - Traditional Chinese
zh-hk - Chinese (Hong Kong)
zh-mo - 中文(澳門)
zh-my - 中文(马来西亚)
zh-sg - Chinese (Singapore)
zh-tw - Chinese (Taiwan)
zu - Zulu
qqq - Message documentation
Format
Экспорт для оффлайнового перевод
Экспорт в родном формате
{{DISPLAYTITLE:An example of custom protocol for Modbus ASCII}}<languages/> '''Type:''' Serial port<br/> '''Address validation:''' ^(C[0-9]+)$|^(DI[0-9]+)$|^(HR[0-9]+)$|^(IR[0-9]+)$<br/> '''Validation error message:''' Invalid register address. Valid ModBus addresses are Cxxx, DIxxx, IRxxx, HRxxx.<br/> Code: <syntaxhighlight lang="lua"> -- MODBUS ASCII Demo Driver function parseAddress () -- do something here end function createDevices () addDevice({name = "C", shift = 0, base = 10, xtraFields = {1, 5}}); addDevice({name = "DI", shift = 0, base = 10, xtraFields = {2, 0}}); addDevice({name = "HR", shift = 0, base = 10, xtraFields = {3, 6, 16}}); addDevice({name = "IR", shift = 0, base = 10, xtraFields = {4, 0}}); end local errorCount = 0; function intToPair(val, count) local str = string.upper(string.format("%0" .. count .. "x", val)); local res = {}; for i = 1, count do res[i] = string.byte(string.sub(str, i, i)); end return res; end function pairToInt(a, b) local str = string.char(a) .. string.char(b); local n = tonumber(str, 16); return n; end function LRC(table, start, count) local lrc = 0; local i = start; while (i < (start+count)) do local str = string.char(table[i]) .. string.char(table[i + 1]); local n = tonumber(str, 16); lrc = lrc + n; i = i + 2; end lrc = bit.band(lrc, 255); return 256 - lrc; end function readRegister (reg, device, unitId) local request = {}; -- ASCII header request[1] = 58; -- slave address local addr = intToPair(unitId, 2); request[2] = addr[1]; request[3] = addr[2]; -- function code local fnCode = intToPair(device.xtraFields[1], 2); request[4] = fnCode[1]; request[5] = fnCode[2]; -- address of register local intAddr = intToPair(reg.internalAddr, 4); request[6] = intAddr[1]; request[7] = intAddr[2]; request[8] = intAddr[3]; request[9] = intAddr[4]; -- count of registers local count = 1; if (reg.dataType == 3) then -- double word count = 2; end count = intToPair(count, 4); request[10] = count[1]; request[11] = count[2]; request[12] = count[3]; request[13] = count[4]; -- LRC local lrc = LRC(request, 2, 12); lrc = intToPair(lrc, 2); request[14] = lrc[1]; request[15] = lrc[2]; -- CR LF request[16] = 13; request[17] = 10; local res = sendBytes(request); if (res == false) then DEBUG("Can't send bytes"); return false; end local response = {}; -- read Header response = readBytes(7); if (response == false) then DEBUG("Can't read response"); return false; end res = #response; if (res ~= 7) then errorCount = errorCount + 1; if (errorCount > 3) then closeConnection(); errorCount = 0; end DEBUG("Can't read header"); return false; end if (response[1] ~= request[1]) then ERROR("Wrong protocol"); return false; end if (response[2] ~= request[2] or response[3] ~= request[3]) then ERROR("Wrong UnitID in response"); return false; end if (response[4] ~= request[4] or response[5] ~= request[5]) then ERROR("Wrong function code in response"); return false; end local length = pairToInt(response[6], response[7]); if (length < 1) then ERROR("Wrong length in response"); return false; end local response2 = {}; response2 = readBytes(length * 2 + 4); if (response2 == false) then DEBUG("Can't read response2"); return false; end res = #response2; local result = {}; local resp = {}; for i=1,#response do resp[i] = response[i]; end local c = #response; for i=1,#response2 do resp[c+i] = response2[i]; end local lrc_resp = LRC(resp, 2, 6 + length * 2); local lrc_actual = pairToInt(response2[length*2 + 1], response2[length*2 + 2]); if (lrc_resp ~= lrc_actual) then ERROR("Wrong LRC in response"); return false; end if (length >= 1) then for i = 1, length do result[i] = pairToInt(response2[i*2 - 1], response2[i*2]); end end return result; end function writeRegister (reg, device, unitId, newValue) local request = {}; -- ASCII header request[1] = 58; -- slave address local addr = intToPair(unitId, 2); request[2] = addr[1]; request[3] = addr[2]; if (reg.dataType == 3) then -- double word should be handled in a special way if (device.xtraFields[3] == 0) then ERROR("Can't write these type of registers (" .. device.name .. ")"); return false; end -- function code local fnCode = intToPair(device.xtraFields[3], 2); request[4] = fnCode[1]; request[5] = fnCode[2]; -- address of register local intAddr = intToPair(reg.internalAddr, 4); request[6] = intAddr[1]; request[7] = intAddr[2]; request[8] = intAddr[3]; request[9] = intAddr[4]; local count = intToPair(2, 4); request[10] = count[1]; request[11] = count[2]; request[12] = count[3]; request[13] = count[4]; -- message length local dataLen = intToPair(4, 2); request[14] = dataLen[1]; request[15] = dataLen[2]; local valpairs = intToPair(newValue, 8); for i=1,8 do request[15+i] = valpairs[i]; end -- LRC local lrc = LRC(request, 2, 22); lrc = intToPair(lrc, 2); request[24] = lrc[1]; request[25] = lrc[2]; -- CR LF request[26] = 13; request[27] = 10; local res = sendBytes(request); if (res == false) then DEBUG("Can't send request"); return false; end local response = {}; response = readBytes(17); if (response == false) then DEBUG("Can't read response"); return false; end res = #response; if (res ~= 17) then DEBUG("Wrong response length"); return false; end if (response[1] ~= request[1]) then ERROR("Wrong protocol"); return false; end local lrc_resp = LRC(response, 2, 12); local lrc_actual = pairToInt(response[14], response[15]); if (lrc_resp ~= lrc_actual) then ERROR("Wrong LRC in response"); return false; end if (response[2] ~= request[2] or response[3] ~= request[3]) then ERROR("Wrong UnitID in response"); return false; end if (response[4] ~= request[4] or response[5] ~= request[5]) then ERROR("Wrong function in response"); return false; end if (response[6] ~= request[6] or response[7] ~= request[7] or response[8] ~= request[8] or response[9] ~= request[9]) then ERROR("Wrong register address in response"); return false; end if (response[10] ~= request[10] or response[11] ~= request[11] or response[12] ~= request[12] or response[13] ~= request[13]) then ERROR("Wrong register count"); return false; end if (response[16] ~= request[16] or response[17] ~= request[17]) then ERROR("Wrong footer in response"); return false; end else if (device.xtraFields[2] == 0) then ERROR("Can't write these type of registers (" .. device.name .. ")"); return false; end -- function code local fnCode = intToPair(device.xtraFields[2], 2); request[4] = fnCode[1]; request[5] = fnCode[2]; -- address of register local intAddr = intToPair(reg.internalAddr, 4); request[6] = intAddr[1]; request[7] = intAddr[2]; request[8] = intAddr[3]; request[9] = intAddr[4]; -- data local val = newValue; if (reg.dataType == 0) then if (val > 0) then val = 255*256; else val = 0; end end local valpairs = intToPair(val, 4); request[10] = valpairs[1]; request[11] = valpairs[2]; request[12] = valpairs[3]; request[13] = valpairs[4]; -- LRC local lrc = LRC(request, 2, 12); lrc = intToPair(lrc, 2); request[14] = lrc[1]; request[15] = lrc[2]; -- CR LF request[16] = 13; request[17] = 10; local res = sendBytes(request); if (res == false) then DEBUG("Can't send bytes"); return false; end local response = {}; local requestLen = #request; response = readBytes(requestLen); if (response == false) then DEBUG("Can't read response"); return false; end res = #response; if (res ~= requestLen) then DEBUG("Wrong response length"); return false; end for i = 1,res do if (response[i] ~= request[i]) then DEBUG("Wrong response"); return false; end end end return true; end </syntaxhighlight>
Навигация
Персональные инструменты
русский
127.0.0.1
Обсуждение для этого IP-адреса
Войти
Пространства имён
Служебная страница
Варианты
Просмотры
Ещё
Поиск
Навигация
Заглавная страница
Свежие правки
Случайная статья
Справка
Инструменты
Спецстраницы
Версия для печати