Привет всем, привет флинт, скачал несколько ранее, но, пока не удосужился ответить.
спасибо всем кто читает.
Этот топик читают: Гость
Этот топик был перемещен из раздела "Делаем компоненты"
Ответов: 168
Рейтинг: 7
|
|||
карма: 1 |
|
Ответов: 2059
Рейтинг: 132
|
|||
Привет flash1103.
скачал несколько ранее, но, пока не удосужился ответить. Пока мне не удаётся понять, может быть со временем пойму... У меня была борьба с железом и как на него поставить Windows. Три раза Пока ещё дышит, поздравлю Пусть будет всё хорошо и всё ненужное отпадёт, а нужное прирастёт! Редактировалось 2 раз(а), последний 2018-12-29 01:15:10 |
|||
карма: 6 |
|
Ответов: 168
Рейтинг: 7
|
|||
Спасибо, взаимно
Пока мне не удаётся понять, может быть со временем пойму...
это я про твои трансляторы С->Delphi |
|||
карма: 1 |
|
Ответов: 2059
Рейтинг: 132
|
|||
...
Хотя теперь я не читаю сказки, зато я нюхаю и слышу хорошо! С наступающем! Будет всё хорошо - Буть уверен! Редактировалось 1 раз(а), последний 2018-12-30 01:03:41 |
|||
карма: 6 |
|
Ответов: 168
Рейтинг: 7
|
|||
по просьбе трудящихся скоро v0.0.3
|
|||
карма: 1 |
|
Ответов: 168
Рейтинг: 7
|
|||
костыль гОтов v0.0.3
-теперь работает нижняя точка легитимность,данных нет=0,когда то читались=1,ошибка=8х,х-расшифровка ошибки по стандарту модбас. -тайминги переехали в списки,теперь можно по разному ждать быстрые и медленные слейва. -добавлен родной режим адресации,теперь по выбору абсолют/модбас. -добавлено чтение строки с произвольной области переменных. -добавлен пинг перед коннектом, что исключает коннект на дохлый IP слейва(потеря питания) с пропуском и спасением драгоценных ~18сек. |
|||
карма: 1 |
| ||
файлы: 1 | ModbusRTU_TCP_v003.rar [167.5KB] [522] | ||
Голосовали: | flint2 |
Ответов: 168
Рейтинг: 7
|
|||
Кстати в модиконах, основоположником которых является сей протокол, адресация на порядок больше чем на остальных девайсах, т.е дискретные входы например 10001 адресуются как 100001, соответственно
30001=300001 40001=400001 Кстати вопрос по поводу дискретных входов на премиумах,квантумах от того-же модикона шнайдера - как их адресовать? Обычно входы адресуются так: I2.7 - 2й байт, 7й бит. На модиконах так: I1.2.63 !? где 1 - номер шасси 2 - номер канала в блоке 63 - номер бита Мои догадки Абс.№бита=(шасси*кол-во каналов)*(канал*4)*(№бита/4)+остаток деления Кто нить сталкивался? --- Добавлено в 2019-02-04 10:50:05 Поправка, не абсолют.номер бита а приведение к обычному виду Ix.y Редактировалось 2 раз(а), последний 2019-02-04 11:06:11 |
|||
карма: 1 |
|
Ответов: 168
Рейтинг: 7
|
|||
Кто попробовал отпишитель тута,7 челов качнули
до среды есть времени поплевать в потолок, потом некогда будет товарищу нравится а мне облегчение. |
|||
карма: 1 |
|
Ответов: 168
Рейтинг: 7
|
|||
Наконец приехал модикон для теста,как раз под праздник.
Связывается четко, но данных нет, хотя легитимность выставляется. При передергивании шнурка связь то-же не восстанавливается,-видимо сервер ждет связь по старому сокету, а новый не создает, вообщем костыль на перекуйку. |
|||
карма: 1 |
|
Ответов: 168
Рейтинг: 7
|
|||
Костыль гОтов v0.0.4
все исправил на tcp -при чтении переменной верность данных выдается событием,так удобнее -добавлен режим заморозка списка.В этом режиме можно подрихтовать таймаут в динамике,при этом оживают нижние точки переданных/принятых пакетов. ну и по мелочам. --- Добавлено в 2019-02-27 13:22:55 Предлагаю перенести в тему типа "любителям самопальных скада", а то скачивают и нифига не пишут мож боятся что деньгу надо платить. Ничего платить не надо все абсолютно бесплатно. --- Добавлено в 2019-02-27 13:32:20 Редактировалось 2 раз(а), последний 2019-02-27 13:32:20 |
|||
карма: 1 |
| ||
файлы: 1 | ModbusRTU_TCP_v004.rar [181.4KB] [1100] |
Ответов: 704
Рейтинг: 7
|
|||
flash1103, компонент необходим, скачиваю и складирую до часу Х. Пока "очень интересно, но ничего не понятно" без железа, но час Х приближается. Спасибо за такую полезность!
|
|||
карма: 0 |
|
Ответов: 168
Рейтинг: 7
|
|||
Пожалста,до часа Х мож еще версии выйдут. Например добавить udp,многопоточность сейчас пока откатываю на chain-cole, это протокол из поднебесной для ихних экранов. После обкатки добавлю сюда.
Кстати флинт спасибо-единственный человек который жмакнул кнопку,и то вероятно из вежливости. |
|||
карма: 1 |
|
Ответов: 168
Рейтинг: 7
|
|||
по просьбе трудящихся описание списка
цикл опроса асинхронный в отдельном потоке поэтому при старте Openxxx нужны готовые параметры сети, которые он будет крутить бесконечно,складывая полученные данные в соответствующие массивы. Модули ReadMod,WriteMod общие для обоих типов обмена rs-485/tcp. ReadMod читает нужный параметр просто из соответствующих массивов без остановки цикла обмена. WriteMod передает запрос в соотв. структуру отложенной записи и уходит.Цикл чтения наткнувшись на флаг записи-прерывает чтение и переходит па п/п отработки записи,после отработки возвращается на цикличное чтение. По Спискам. -параметр определяется парой строк смещение/длина,причем если длина=0 то этот параметр отключен.Смещение введено для того чтоб не читать переменные которые не нужны В одном списке обьявлены параметры 4х типов,охватывающие все типы данных по любым устройствам: -переменные или параметры v,vb,vw,vd,real32 где v-бит vb-байт vw-слово vd,real32-двойное слово -дискретные входы DI -дискретные выходы DO -аналоговые входы AIW ------------------------------------------------------------------------------------- ну вот пример var.sha списка //глобальный счетчик устройств(списков) Count_slave=000001 (количество контроллеров для перебора в цикле опроса) //1й список--------------------------------------- Slave_addr=000001 (адрес контроллера для первого списка) //ограничитель кол-ва в одном запросе 0=все Slave_limiter=000008 (ограничитель группирования запросов в одном пакете,начни с одного) //переменные кодируются в словах (16бит) Slave_addr_offset=000100 (смещение начала для переменных типа v(m),vw(mw),vd(md),real32) Slave_addr_length=000004 (длина(кол-во) переменных(параметров) 0-выключено) //входы\выходы кодируются в байтах, т.е. 8 входов= 1байт Slave_di_offset=000000 (смещение дискретных входов) Slave_di_length=000002 (длина(кол-во) дискретных входов 2=16входов, 0-выключено) Slave_do_offset=000000 (смещение дискретных выходов) Slave_do_length=000002 (длина(кол-во) дискретных выходов 2=16выходов, 0-выключено) // аналоговые входы кодируются в словах (16 бит) Slave_aiw_offset=000000 (смещение аналоговых входов) Slave_aiw_length=000000 (длина(кол-во) аналоговых входов , 0-выключено) Timeout_sl=000050 (макс время ожидания по этому списку если строки нет,используется таймаут максимальный из Open) //2й список итд... ------------------------------ Slave_status=000000 (чтение индикаторов устройства не все поддерживают 0-откл) Slave_string=000000 (чтение идентификатора уст-ва не проверено 0-откл) Add(MainForm,2953706,21,105) { Width=734 Height=417 Point(onShow) } Add(Message,123658,273,157) { Caption="ошибка" } Add(Timer,7017340,295,87) { Interval=100 Enable=1 Point(Enabled) link(onTimer,11580707:doNext,[]) } Add(Button,8763931,84,150) { Left=42 Top=67 Caption="стоп" link(onClick,16171650:doClose,[(123,156)(123,121)]) } Add(Label,4925358,470,59) { Left=138 Top=29 Alignment=2 } Add(VisualStrings,12635098,700,7) { Lines=#23:-убрать верхние точки +|28:-вывести ошибку на onerror +|19: желательно строкой|28:- убрать свойство ordercrc +|35:- задействовать свойство orderdata+|40: -при чтении установка флага ошибки 8х +|45:-критическая секция по чтению и точка внизу +|28:- запись функций по маркеру+|45:-вход для записи нижняя точка с крит секцией+|30:-добавить точку debug,ondebug+|0 Width=256 Height=158 } Add(Button,15947241,84,94) { Left=43 Top=27 Caption="пуск" link(onClick,16171650:doOpen,[(165,100)(165,114)]) } Add(CounterEx2,11580707,379,87) { Reverse=1 Point(doMin) link(onNext,12232797:doEvent1,[]) } Add(OpenMod2,16171650,175,108) { Port=2 StopBits=2 DTR=0 Point(doOpenDebug) Point(doNextDebug) link(onInit,7017340:doTimer,[(214,114)(214,93)]) link(onErr,123658:doMessage,[(240,121)(240,163)]) link(onClose,12767862:doEvent1,[(221,128)(221,100)]) link(Array,13238656:Array,[(185,60)]) } Add(StrList,13238656,165,6) { Strings=#52://характеристики сети, кол-во контроллеров,параметры|25://наименование параметров|39://глобальный счетчик устройств(списков)|18:Count_slave=000001|50://1й список---------------------------------------|17:Slave_addr=000001|44://ограничитель кол-ва в одном запросе 0=все|20:Slave_limiter=000008|32://переменные кодируются в словах|24:Slave_addr_offset=000100|24:Slave_addr_length=000004|56://входы\выходы кодируются в байтах, т.е. 8 входов= 1байт|22:Slave_di_offset=000000|22:Slave_di_length=000002|22:Slave_do_offset=000000|22:Slave_do_length=000002|23:Slave_aiw_offset=000000|23:Slave_aiw_length=000000|18://2й список итд...|000 } Add(Hub,12767862,247,94) { link(onEvent1,7017340:doStop,[]) link(onEvent2,11580707:doMin,[(284,107)(284,131)(346,131)(346,100)]) } Add(Button,7260898,494,167) { Left=79 Top=145 Caption="писать" Data=Integer(1) link(onClick,6738729:doEvent1,[]) } Add(Hub,15727507,77,301) { OutCount=8 link(onEvent1,4818046:doRead,[(102,307)(102,300)]) link(onEvent2,1231721:doRead,[(277,314)(277,370)]) link(onEvent3,7461444:doRead,[(270,321)(270,433)]) link(onEvent4,7573981:doRead,[(179,328)(179,496)]) link(onEvent5,13563447:doRead,[(172,335)(172,572)]) } Add(WriteMod2,5405032,714,210) { Nbit=7 Slave=1 Point(doType) Point(doAddress) link(Data,11637820:Var3,[(720,152)]) link(Var,5438751:Text,[(727,201)(790,201)(790,215)(804,215)]) } Add(Hub,12232797,420,84) { link(onEvent1,4925358:doText,[(452,90)(452,65)]) link(onEvent2,15727507:doEvent1,[(445,97)(445,209)(67,209)(67,307)]) } Add(Label,53433,601,8) { Left=139 Top=169 Width=89 Height=17 Caption="данные записи" Alignment=2 } Add(DoData,3725637,638,224) { link(onEventData,5405032:doType,[(683,230)(683,223)]) link(Data,8530664:String,[(644,110)(664,110)]) } Add(Hub,6738729,567,168) { OutCount=4 link(onEvent2,14795064:doData,[(592,181)(592,335)]) link(onEvent3,5405032:doWrite,[(704,188)(704,216)]) } Add(Label,5910856,548,6) { Left=82 Top=169 Width=44 Height=17 Caption="адрес" Alignment=2 } Add(Label,9906240,652,9) { Left=238 Top=169 Width=60 Height=17 Caption="тип записи" Alignment=2 } Add(ComboBox,8530664,651,56) { Left=247 Top=194 Height=21 Strings=#1:0|1:1|1:2|1:3|1:4| Text="тип переменной" link(onClick,3725637:doData,[(690,69)(690,48)(627,48)(627,230)]) } Add(Edit,358232,637,273) { Left=81 Top=192 Text="0" } Add(DoData,14795064,637,329) { link(onEventData,237120:doEvent1,[]) link(Data,358232:Text,[]) } Add(Edit,5438751,798,175) { Left=143 Top=193 Width=82 Text="857870592" } Add(Label,13118771,190,240) { Left=375 Top=152 Width=140 Height=17 Caption="чтение разных типов" Alignment=2 } Add(ReadMod2,4818046,287,294) { Slave=1 Address=101 Point(doAddress) link(onRead,14106347:doText,[]) link(Data,13468401:Var1,[(293,215)]) } Add(ReadMod2,1231721,287,364) { Type=1 Slave=1 Address=101 Point(doAddress) link(onRead,7390483:doText,[]) link(Data,4246543:Var1,[(293,334)]) } Add(ReadMod2,7461444,287,427) { Type=2 Slave=1 Address=100 Point(doAddress) link(onRead,10520124:doText,[(375,433)(375,437)]) link(Data,15705995:Var1,[(293,404)]) } Add(ReadMod2,7573981,287,490) { Type=3 Slave=1 Address=100 Point(doAddress) link(onRead,5998591:doText,[(375,496)(375,501)]) link(Data,222502:Var2,[(293,467)(482,467)]) } Add(Button,1938151,18,167) { Left=231 Top=26 Width=76 Caption="старт debug" Data=Integer(1) link(onClick,16171650:doOpenDebug,[(60,173)(60,128)]) } Add(Button,3906177,19,226) { Left=231 Top=67 Width=76 Caption="next debug" Data=Integer(1) link(onClick,16171650:doNextDebug,[(130,232)(130,135)]) } Add(Edit,14106347,375,294) { Left=398 Top=194 Width=102 Text="0" DataType=3 } Add(Edit,7390483,379,364) { Left=398 Top=232 Width=102 Text="0" DataType=3 } Add(Edit,10520124,383,431) { Left=398 Top=271 Width=102 Text="0" DataType=3 } Add(Edit,5998591,380,495) { Left=398 Top=311 Width=102 Text="0" DataType=3 } Add(Hub,237120,682,329) { link(onEvent1,5405032:doAddress,[(702,335)(702,230)]) } Add(Hub,4140236,193,356) { OutCount=5 link(onEvent1,4818046:doAddress,[(214,362)(214,307)]) link(onEvent2,1231721:doAddress,[(256,369)(256,377)]) link(onEvent3,7461444:doAddress,[(249,376)(249,440)]) link(onEvent4,7573981:doAddress,[(242,383)(242,503)]) } Add(GetDataEx,11637820,476,147) { Angle=3 link(Data,16171650:VarX,[(181,152)]) } Add(GetDataEx,13468401,476,210) { link(Data,11637820:Var2,[]) } Add(GetDataEx,4246543,476,329) { link(Data,13468401:Var2,[]) } Add(GetDataEx,15705995,476,399) { link(Data,4246543:Var2,[]) } Add(Button,15804590,77,466) { Left=74 Top=318 Width=76 Caption="читать" Data=Integer(1) } Add(Label,11359703,433,295) { Left=324 Top=196 Width=60 Height=17 Caption="bit" Alignment=2 } Add(Label,8356358,436,363) { Left=324 Top=234 Width=60 Height=17 Caption="byte" Alignment=2 } Add(Label,6359732,435,429) { Left=325 Top=273 Width=60 Height=17 Caption="word" Alignment=2 } Add(Label,5972207,433,491) { Left=325 Top=313 Width=60 Height=17 Caption="dword" Alignment=2 } Add(ReadMod2,13563447,287,566) { Type=4 Slave=1 Address=104 Point(doAddress) link(onRead,11775827:doText,[]) link(Data,222502:Var1,[(293,544)(475,544)(475,460)]) } Add(Edit,11775827,377,567) { Left=398 Top=347 Width=102 Text="0" DataType=4 } Add(Label,8906340,436,566) { Left=332 Top=347 Width=33 Height=17 Caption="real32" Alignment=2 } Add(GetDataEx,222502,476,455) { link(Data,15705995:Var2,[]) } Редактировалось 4 раз(а), последний 2019-04-26 13:49:36 |
|||
карма: 1 |
|
Ответов: 168
Рейтинг: 7
|
|||
Придется дорабатывать списочную часть
разбросанные данные читать все равно не удобно по свободе надо подумать |
|||
карма: 1 |
|
Ответов: 168
Рейтинг: 7
|
|||
выявились некоторые засады типа
- 0я строка не должна содержать в себе значащую строку(напиши любой бутор) -для боле ясногo понимания,предложение заменить строки списка c/на: Slave_addr_offset -->Slave_func3_offset Slave_addr_length -->Slave_func3_length входы аналогично -Slave_di_offset -->Slave_func1_offset Slave_di_length -->Slave_func1_length выходы то-же -Slave_do_offset -->Slave_func0_offset Slave_do_length -->Slave_func0_length так будет понятнее,-что к чему соотносится. -добавить связанный список на один контроллер /прибор. Какие еще предвидятся дополнения? Редактировалось 1 раз(а), последний 2019-05-21 08:06:31 |
|||
карма: 1 |
|