petera, супер!!! Большое спасибо за подсказку и отдельное спасибо - за реализацию. Разобрался.
petera, супер!!! Большое спасибо за подсказку и отдельное спасибо - за реализацию. Разобрался.
Не знаю нужно ли это писать, но имхо это очевидный недостаток ПО, требующий рассмотрения.
Чертим трубопроводы. Казалось бы, ерунда, а не вопрос.
Все начертили, красота. Загружаем в панель - разрывы.
Это нормально?
То есть, чтоб линии по факту соединялись, то в редакторе вынуждены их делать в нахлест
WhatsApp Image 2021-08-03 at 14.17.08.jpeg
+79104444236
С уважением,
Лапшин Вячеслав
Уважаемые сотрудники техподдержки!
Столкнулся с какой-то мистикой, поэтому прошу объяснить, не является ли ошибкой в документации на СП307 следующее
Код макроса: WORD ArrValue[2];
Reads(PLC, 2, MODBUS_RTU_REGS_4X, 4, 2, &ArrValue);
Разве не правильно будет записать
Reads(PLC, 2, MODBUS_RTU_REGS_4X, 4, 2, ArrValue);
или
Reads(PLC, 2, MODBUS_RTU_REGS_4X, 4, 2, &ArrValue[0]);
Насколько помню, адрес первого элемента массива в языке Си можно получить так, как я написал в своих двух примерах, а не как в справке.
Что это - какой-то особый Си или ошибка в документации?
При чтении в макросе двух массивов творилась мистика, когда начал читать все одним массивом стало нормально, но вот вопрос - а я вообще с памятью правильно ли работаю, не порчу ли что-либо системное и т.п.?
Уважаемые сотрудники техподдержки!
Столкнулся с какой-то мистикой, поэтому прошу объяснить, не является ли ошибкой в документации на СП307 следующее
Код макроса: WORD ArrValue[2];
Reads(PLC, 2, MODBUS_RTU_REGS_4X, 4, 2, &ArrValue);
Разве не правильно будет записать
Reads(PLC, 2, MODBUS_RTU_REGS_4X, 4, 2, ArrValue);
или
Reads(PLC, 2, MODBUS_RTU_REGS_4X, 4, 2, &ArrValue[0]);
Насколько помню, адрес первого элемента массива в языке Си можно получить так, как я написал в своих двух примерах, а не как в справке.
Что это - какой-то особый Си или ошибка в документации?
При чтении в макросе двух массивов творилась мистика, когда начал читать все одним массивом стало нормально, но вот вопрос - а я вообще с памятью правильно ли работаю, не порчу ли что-либо системное и т.п.?
Это обычный С.
http://www.open-std.org/jtc1/sc22/wg...onaleV5.10.pdf
см. п. 6.5.3.2
Чтобы ответить на этот вопрос - нужен ваш проект и подробное пошаговое описание, как в нем воспроизвести "мистику".
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
Основная суть вопроса - не мистика, а получение адреса в Си. Проект Ведь, как понимаете, не только с СП307, поэтому достоверную причину "мистики" было бы бессовестно предлагать искать Вам.
Давайте вернемся к сути вопроса - это получение адреса массива. В документах, которые Вы предлагаете, писать могут что угодно, суть в другом, возможно, в моем заблуждении, или неправильной памяти?
Когда я делаю
int Var
а затем
&Var
я получаю адрес переменной Var
когда я делаю
int Var[10], то в силу своих, возможно, заблуждений, считаю, что для получения адреса первого элемента массива я должен в Си либо написать просто "Var", либо
что-то типа "&(Var[0])"
В реализации Си89 не так - просто да или нет?
Вы разработчики, Ваше слово - при использовании Вашей техники - закон. Вы говорите - делаем так, это работает - значит делаем так !
PS СП307 используется в проекте с ПЛК110, когда в объявленных модбас-переменных шли 8-битовые элементы (несколько пар), затем 2 байтовые, зачем одна 4-байтовая, затем снова двухбайтовые - с последними двухбайтовыми шла мистика. Просто выкинул 4- байтовую переменную, потом, возможно, вставлю ее в самый конец регистр Модбаса - когда она была в конце, все работало нормально. Для Вас это просто информация, я могу быть где-то неправ, где-то заблуждаться.
Последний раз редактировалось konst_smn; 08.08.2021 в 12:17.
В макросах для панелей СП3хх (и согласно стандарту ANSI C - хоть и, по вашему мнению, в нем могут "писать что угодно") - все 3 варианта (вариант из документации и два варианта, упомянутых вами) - корректны и будут работать одинаково.В реализации Си89 не так - просто да или нет?
Вы, вероятно, не учли выравнивание памяти.PS СП307 используется в проекте с ПЛК110, когда в объявленных модбас-переменных шли 8-битовые элементы (несколько пар), затем 2 байтовые, зачем одна 4-байтовая, затем снова двухбайтовые - с последними двухбайтовыми шла мистика.
https://ftp.owen.ru/CoDeSys23/06_Doc...ation_v2.0.pdf
см. п. 3.1.3.1
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
Спасибо за совет. Выравнивание памяти учел . Простые правила без руководства - 8 битные регистры парами, 4-байтовая переменная - 2 регистра. Впрочем, не суть важно, пока что "обошел".
Огромное спасибо за работу и в воскресенье , вместе в Вашими единомышленниками, считающими что надо максимально внедрять отечественные приборы !!!!!
И все же, проблема есть.
Читаю макросом данные из ПЛК110 - регистры 0 - 16 в регистры PSW панели СП307.
Вывожу регистр 4 на экран в виде шестнадцатеричного числа - в нем ноль, как и положено. В регистре PSW260 при этом находится значение 255 (0xFF, которое фактически записано в регистр 13 (счет, номера регистра, естественно, с нуля)
Что не так в этом макросе, вызываемом либо раз в секунду, либо непрерывно при помощи глобальной функциональной области?
В нем всего лишь читаются 17 регистров в массив, если нет ошибки обмена с ПЛК110.
Почему вдруг в регистре PSW260 вместо регистра 4 регистр 13?
Ставил при реализации проекта задачу оптимизации быстродействия, привязал к PSW сотни экранных элементов.
В чем причина-то? Моя ошибка - в упор не вижу? ограничения длины буфера или длины сообщения панели, не указанные в документации?
На ПЛК110 грешить трудно - он что - в длинном сообщении передает не то, что в коротком, когда я привязываю регистр к цифровому индикатору?
WORD RdBuf[100];
// Read from PLC110 - DI to PSW256, PSW257, PSW258 DO to PSW259, 260
Reads(PLC, 1, MODBUS_RTU_REGS_4X, 0, 17, &RdBuf);
if (GetPSBStatus(51))
{
;
}
else
{
PSW[256] = RdBuf[0];
PSW[257] = RdBuf[1];
PSW[258] = RdBuf[2];
PSW[259] = RdBuf[3];
PSW[260] = RdBuf[4];
PSW[261] = RdBuf[5];
PSW[262] = RdBuf[6];
PSW[263] = RdBuf[7];
PSW[264] = RdBuf[8];
PSW[265] = RdBuf[9];
PSW[266] = RdBuf[10];
PSW[267] = RdBuf[11];
PSW[268] = RdBuf[12];
PSW[260] = RdBuf[13];
PSW[270] = RdBuf[14];
PSW[271] = RdBuf[15];
PSW[272] = RdBuf[16];
}
Последний раз редактировалось konst_smn; 09.08.2021 в 09:21.
Выложите проекты для ПЛК и панели - мы посмотрим, в чем может быть дело.В чем причина-то?
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk