Вверх ↑
Этот топик читают: Гость
Этот топик был перемещен из раздела "Делаем компоненты"
Ответов: 102
Рейтинг: 5
#46: 2018-12-27 15:38:18 ЛС | профиль | цитата
Привет всем, привет флинт, скачал несколько ранее, но, пока не удосужился ответить.
спасибо всем кто читает.
карма: 1

0
Ответов: 1287
Рейтинг: 85
#47: 2018-12-29 01:02:03 ЛС | профиль | цитата
Привет flash1103.
скачал несколько ранее, но, пока не удосужился ответить.

Пока мне не удаётся понять, может быть со временем пойму...

У меня была борьба с железом и как на него поставить Windows. Три раза
Пока ещё дышит, поздравлю
С наступающем новым годом!
Пусть будет всё хорошо и всё ненужное отпадёт, а нужное прирастёт!

Редактировалось 2 раз(а), последний 2018-12-29 01:15:10
карма: 6

0
Ответов: 102
Рейтинг: 5
#48: 2018-12-29 12:44:09 ЛС | профиль | цитата
Спасибо, взаимно
Пока мне не удаётся понять, может быть со временем пойму...

это я про твои трансляторы С->Delphi
карма: 1

0
Ответов: 1287
Рейтинг: 85
#49: 2018-12-29 23:36:04 ЛС | профиль | цитата
...
Хотя теперь я не читаю сказки,
зато я нюхаю и слышу хорошо!

С наступающем!

Будет всё хорошо - Буть уверен!

Редактировалось 1 раз(а), последний 2018-12-30 01:03:41
карма: 6

0
Ответов: 102
Рейтинг: 5
#50: 2019-01-22 14:34:11 ЛС | профиль | цитата
по просьбе трудящихся скоро v0.0.3
карма: 1

0
Ответов: 102
Рейтинг: 5
#51: 2019-02-03 22:33:10 ЛС | профиль | цитата
костыль гОтов v0.0.3
-теперь работает нижняя точка легитимность,данных нет=0,когда то читались=1,ошибка=8х,х-расшифровка ошибки по стандарту модбас.
-тайминги переехали в списки,теперь можно по разному ждать быстрые и медленные слейва.
-добавлен родной режим адресации,теперь по выбору абсолют/модбас.
-добавлено чтение строки с произвольной области переменных.
-добавлен пинг перед коннектом, что исключает коннект на дохлый IP слейва(потеря питания)
с пропуском и спасением драгоценных ~18сек.
карма: 1

1
файлы: 1ModbusRTU_TCP_v003.rar [167.5KB] [47]
Голосовали:flint2
Ответов: 102
Рейтинг: 5
#52: 2019-02-04 10:40:21 ЛС | профиль | цитата
Кстати в модиконах, основоположником которых является сей протокол, адресация на порядок больше чем на остальных девайсах, т.е дискретные входы например 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

0
Ответов: 102
Рейтинг: 5
#53: 2019-02-04 14:45:58 ЛС | профиль | цитата
Кто попробовал отпишитель тута,7 челов качнули
до среды есть времени поплевать в потолок, потом некогда будет
товарищу нравится а мне облегчение.
карма: 1

0
Ответов: 102
Рейтинг: 5
#54: 2019-02-24 11:56:05 ЛС | профиль | цитата
Наконец приехал модикон для теста,как раз под праздник.
Связывается четко, но данных нет, хотя легитимность выставляется.
При передергивании шнурка связь то-же не восстанавливается,-видимо сервер ждет связь по старому сокету, а новый не создает, вообщем костыль на перекуйку.
карма: 1

0
Ответов: 102
Рейтинг: 5
#55: 2019-02-27 13:18:04 ЛС | профиль | цитата
Костыль гОтов v0.0.4
все исправил на tcp
-при чтении переменной верность данных выдается событием,так удобнее
-добавлен режим заморозка списка.В этом режиме можно подрихтовать таймаут в динамике,при этом оживают нижние точки переданных/принятых пакетов.
ну и по мелочам.

--- Добавлено в 2019-02-27 13:22:55

Предлагаю перенести в тему типа "любителям самопальных скада", а то скачивают и нифига не пишут
мож боятся что деньгу надо платить.
Ничего платить не надо все абсолютно бесплатно.

--- Добавлено в 2019-02-27 13:32:20


Редактировалось 2 раз(а), последний 2019-02-27 13:32:20
карма: 1

0
файлы: 1ModbusRTU_TCP_v004.rar [181.4KB] [161]
Ответов: 687
Рейтинг: 7
#56: 2019-03-11 15:50:47 ЛС | профиль | цитата
flash1103, компонент необходим, скачиваю и складирую до часу Х. Пока "очень интересно, но ничего не понятно" без железа, но час Х приближается. Спасибо за такую полезность!
карма: 0

0
Ответов: 102
Рейтинг: 5
#57: 2019-03-11 19:05:47 ЛС | профиль | цитата
Пожалста,до часа Х мож еще версии выйдут. Например добавить udp,многопоточность сейчас пока откатываю на chain-cole, это протокол из поднебесной для ихних экранов. После обкатки добавлю сюда.
Кстати флинт спасибо-единственный человек который жмакнул кнопку,и то вероятно из вежливости.
карма: 1

0
Ответов: 102
Рейтинг: 5
#58: 2019-04-26 12:54:39 ЛС | профиль | цитата
по просьбе трудящихся описание списка
цикл опроса асинхронный в отдельном потоке поэтому при старте 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й список итд...
------------------------------
забыл добавочно для функций 7,17

Slave_status=000000 (чтение индикаторов устройства не все поддерживают 0-откл)
Slave_string=000000 (чтение идентификатора уст-ва не проверено 0-откл)
схема по 232/485
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

0
Ответов: 102
Рейтинг: 5
#59: 2019-04-26 15:01:01 ЛС | профиль | цитата
Придется дорабатывать списочную часть
разбросанные данные читать все равно не удобно
по свободе надо подумать
карма: 1

0
Ответов: 102
Рейтинг: 5
#60: 2019-05-04 19:52:48 ЛС | профиль | цитата
выявились некоторые засады типа
- 0я строка не должна содержать в себе значащую строку(напиши любой бутор)

-для боле ясногo понимания,предложение заменить строки списка c/на:
Slave_addr_offset -->Slave_func3_offset
Slave_addr_length -->Slave_func3_length
входы аналогично
-Slave_di_offset -->Slave_func0_offset
Slave_di_length -->Slave_func0_length
выходы то-же
-Slave_do_offset -->Slave_func1_offset
Slave_do_length -->Slave_func1_length
так будет понятнее,-что к чему соотносится.
-добавить связанный список на один контроллер /прибор.
Какие еще предвидятся дополнения?
карма: 1

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)