Вход на форум 
В начало e-Mail

Форум

Ресурсы Rockwell

Product Directory

Essential Components

Literature Library

Knowledge Base

Electronic News&Magazines

Блог

Encompass Program

Product Certification

  


Предыдущие результаты



Предыдущие результаты



Предыдущие результаты

 Network Directory - localhost. Покапался я в Knowledgebase и вот что нашел: [quote:efee5c19a9] Question If a tag's description contains characters such as a single quote ' or double quote ", the tag label will not display correctly. For example, a tag description shown below: Sample "Tag Description" will display as " Answer One workaround would be to use memory string tags to hold a description. Using Tag1 as an example, create a Tag1Description memory string tag with an initial value that contains the desired text. To display this description, use a string display. [/quote:efee5c19a9] Я думаю это аналогичная ситуация и раз уж сам Rockwell по всей видимости не знает причины и предлагает использовать string display, то придется имено так и поступить. :(

 База знаний, возможно, уже обновилась, поэтому части топиков нет, но можно набрать поиск по фразе типа string data types и попытаться полистать. Вот, собственно, то, что у меня есть. Background: When using string data in the CL55xx processor with firmware version at 7 or earlier, integer storage must be allocated. Integer storage can be allocated as an SINT, INT, or DINT array. Additionally INT array data can be referenced in PLC5 emulation mode. Version 8 of the ControlLogix firmware introduced the string datatype. When the OPC node type is used, the following errors can be generated when the wrong address syntax is used. The DDE node type does not generate any errors when improperly configured, however the string data is not written correctly either. Requirements for the native string tag support: RSView32 6.30 previous versions of RSView32 should work as well, but were not tested. RSLinx 2.30 ControlLogix firmware rev 8 or higher The following paragraphs describe how the DDE/OPC implementation works, and how string data is stored in the CL55xx processor. String Tag Configuration: Traditionally RSView32 is looking for a string address equivalent to A10:0 or ST10:0. When the PLC5 ST datatype was introduced, 82 characters was the maximum supported. This 82 string length limit remains in the RSView32 product today. The CL55xx string data type stores the characters in a SINT array. String data can be stored in any type of integer array, SINT, INT, DINT when working with controllers at earlier versions of the firmware. Depending on the type of integer array selected the address syntax will vary. Even though the RSView32 tag is defined as string data, RSLinx queries the data type from the processor. To allow RSView32 and RSLinx to write string data to integer storage - add the ,SSxx (string space pad) or the ,SCxx (string C null pad) to the address line, where xx indicates the number of elements to pad. The number of elements to pad depends on how the data is stored, the following table gives some examples. If the SCxx or SSxx syntax is omitted, RSView32 will only be able to access the 1st element in the integer array, and will not represent the data as the string entered, since it is integer. There are some issues when writing to the new string datatype from RSView32. When working with variable length strings, RSView32 does not update the length field with the new string length. The improper initialization of the string length prevents ascii functions from working properly in the controller program. This issue is currently under investigation. A potential work around is to determine the length of the string in VBA code, and then manually write to the length element of the string data type. Тут, правда, ниже табличка! Надеюсь поймете CL5550 Datatype Description String Address Syntax Example1 String Address Syntax Example2 String 8 bit integer array String1.Data[0],SC82 String1.Data[0],m,SC82 SINT 8 bit integer SINTArray[0],SC82 SINTArray[0],m,SC82 INT 16 bit integer INTArray[0],SC41 INTArray[0],m,SC41 DINT 32 bit integer DINTArray[0],SC20 DINTArray[0],m,SC20 PLC5 emulation 16 bit integer N7:0,SC41 N7:0,m,SC41 PLC5 emulation mode may be required to read/write string data if the CL55xx firmware is at an earlier revision 4.x. Controller Memory: When using the string data type, the controller stores the string as a character in a element called .Data[x], where x is the character position. With the native string data type, there doesn't appear to be anyway to reference the entire string tag as was possible with the PLC5 string. Instead the RSView tag address references the first element of the SINT array that contains the string. The ,SC82 syntax tells RSLinx to get 82 bytes of string data. When using an integer array to store string data, the controller stores the data in the integer array as the HEX equivalent of the character. For example, if a 12 is entered into a string input field, the data is converted to the hex equivalent (in this case 3132h) and is stored the processor tag name INTArray[0]. Since INTArray[0] actually stores 2 characters, examination of the individual bytes will show the 1 (31h) is stored in the high order byte, and the 2 (32h) is stored in the low order byte. Consider the same example writing string data to the SINTArray, if a 12 is entered into a string input field, the SINTArray[0] = 2 (32h), SINTArray[1] = 1 (32h). Applying the ,m byte swap modifier to the address line does not alter the way the string data is written to the processor, it only swaps the way the data is viewed. A future release of RSLinx will correct this byte swapping for SINT arrays. When RSView32 is performing both the string read and write, use the syntax example1. When the CL5550 processor is storing the string data, the high and low order byte may need to be swapped, use the syntax example2 to accomplish this on the read only. It is more efficient to write null padded strings than space padded strings, therefore use the SCxx syntax when possible. Background: RSView32, RSView SE and RSSql can browse tag addresses from an on-line controller using OPC. However, string tags in a ControlLogix family controller (added in firmware version 8) and bit-level addresses in a PLC-5 or SLC-500 cannot be browsed directly. String tags are actually stored in the ControlLogix as numeric data. When the OPC browser tries to update the string tag's address field, the client correctly determines that a data type mismatch has occurred. It therefore does not allow the address field to be updated. For digital addresses in a PLC-5 or SLC-500, RSLinx does not allow browsing to the bit level. Examples: "B3:0" can be browsed, but "B3:0/3" cannot be browsed. However, a Boolean tag in a ControlLogix processor can be browsed. Solution: For String addresses in a ControlLogix processor: 1. Create a DIGITAL tag (if client is RSView32 or RSView SE) 2. Browse to the string tag in the ControlLogix (example: StringTag ) 3. Select the StringTag.DATA element and press OK 4. Remove the .DATA manually from the end of the item address 5. Change the tag data type to STRING. Example of correct item address syntax: [TopicName]StringTag Example of incorrect item address syntax: [TopicName]StringTag.DATA Note: This syntax is tested with firmware version 10 per tech note A27556111 (see references below). Important: In RSView32 and RSView SE - if step 5 is skipped and the tag is accepted, it will not be possible to change the tag data type. In this case it would be necessary to delete the tag and start again with step 1. For Digital addresses in a PLC-5 or SLC-500: 1. Browse to the word level (example: B3:0 ) 2. Select the word containing the desired bit and press OK 3. Add the bit delimiter manually to the end of the item address. Example of correct item address syntax: [TopicName]B3:0/2 For further reference, see the following tech notes: A5550 - How to address the different data types in the ControlLogix 5550 processor A7004 - Reading and writing string data from RSView32 to ControlLogix 55xx A27556111 - How to manage variable length string writes from a HMI to ControlLogix A4814 - How to configure RSView32 to communicate to a ControlLogix 5550 processor Успехов. Vitaliy D. Burtsev

 Сразу хочу оговориться, что данный метод применяется для активаций, установленных утилитой EvMove c floppy disks. Еще условие, что полетел только Windows и drive не пытались форматировать. Для Rockwell продуктов начиная с CPR9 и при механической поломке Hard Drive этот метод не поможет. Необходимое hardware/software: Desktop/Laptop with USB port and Windows XP предпочтительно, преобразователь-кабель USB 2.0/1.1 to IDE/SATA (примерная стоимость от 25$) и утилита EvMove. Простейшая процедура: отстыковать 2 кабеля от Hard Drive (IDE ribbon cable and +5V power) подсоеденить преобразователь и подключить к работающему компьютеру как обычный USB memory stick. ОС распознает drive как external и назначает букву, например Drive G:. Далее при помощи EvMove активации переносятся с Drive G на другой любой drive.

 Дорогие специалисты Покритикуйте мое видение в построении программ под pc совместимые контроллеры I-7000. В данном случае I-7188EX + некоторые модули DI,DO. Ниже буду описывать только те моменты которые правил руцями. [b:0fdb64b409]Задачка такая:[/b:0fdb64b409] - Написать программку управления очень примитивным технологическим процессом; - Выдавать информацию наверх через ModBus TCP/IP; [b:0fdb64b409]Мое решение[/b:0fdb64b409] [b:0fdb64b409]1. Раз ModBus TCP/IP, то я взял скелет xserver подобной прошивки (один из примеров с диска); 2. Объявил чего то:[/b:0fdb64b409] // Программа пользователя void UserProg(int IN0,int IN1,int* TBL0,int *TimerCounter); void UserSubProg1(int* TBL0); // ModBus Таблица unsigned char far iMemory_DI[100]; unsigned char far iMemory_DO[100]; int far iMemory_AI[100]; int far iMemory_AO[100]; int far iMemoryTemp[100]; int iCounter_Old; // Счетчик int iUser_Old; int iTimeSP_Old; int TC; int IN7063D_OLD = 0; // Определения фронта int TBL13_OLD = 0; // Определения фронта int iRet = 0; // и.т.д. [b:0fdb64b409]3. Реализовал программки:[/b:0fdb64b409] // Подпрограмма пользователя void UserSubProg1(int* TBL0) { // Тут логика какая-то } // Основная программа пользователя void UserProg(int IN0,int IN1,int* TBL0,int *TimerCounter) { // Тут всякие алгоритмы управления тех. процессом } [b:0fdb64b409]4. Инициализацию построил в функции UserInit():[/b:0fdb64b409] void UserInit(void) { int iRet; int TC = 0; //======= Begin of Modbus Kernel ======= iRet=InitModbus(iMemory_DI,iMemory_DO,iMemory_AI,iMemory_AO); // В программе у меня есть данные которые нужно хранить при снятии питания с контроллера iMemory_AO[9] = ReadNVRAM(0); // Читаем из 1-го байта энергонезависимой памяти iMemory_AO[11] = ReadNVRAM(1); // Читаем из 2-го байта энергонезависимой памяти iMemory_AO[13] = ReadNVRAM(2); // Читаем из 3-го байта энергонезависимой памяти if(iRet==0) { // Initial Modbus configuration success. } else { // Initial Modbus configuration failure. } //======= End of Modbus Kernel======= //Configure the COM port that links to the i-7000 modules. // Сдесь эта функция нужна для работы монитора printCom // При ее отсутствии в строку монитора ничего выводится не будет SetBaudrate(1,115200L); SetBaudrate(2,9600); SetDataFormat(2,8,0,1); Port9999=0; //Disable listening TCP port 9999 to speed up 7188E. // Добавления таймера, реализующего поток // Организовываю таймер, который будет вызывать мою програмку // управления тех. процессом раз в TIMER_USERPROG_SP милисек. AddUserTimerFunction(UserCount,TIMER_USERPROG_SP); } [b:0fdb64b409]5. В функции UserCount, организовал основной поток - то что называется циклом выполнения программы пользователя. В теле встречаются вызовы отдельных функций, которые я реализовал в других си файлах[/b:0fdb64b409] void UserCount(void) { int IN7063D = 0; // Образ всех входов модуля 7063D int IN7053_FG = 0; // Образ всех входов модуля 7053_FG //------------------------------------------------------------------- // Читаем входной образ //------------------------------------------------------------------- IN7063D = ReadDI(2, "02",6000L); IN7053_FG = ReadDI(2, "04",6000L); //------------------------------------------------------------------- // Программа пользователя //------------------------------------------------------------------- UserProg(IN7063D,IN7053_FG,iMemory_AO,&TC); // Чего то там передали //------------------------------------------------------------------- // Пишем входной образ в таблицу //------------------------------------------------------------------- if (IN7063D !=-1) iMemory_AI[0]=IN7063D; // В 0-й элемент массива _АI (по IEC стандарту адрес будет 30001) пишем образ входов if (IN7053_FG!=-1) iMemory_AI[2]=IN7053_FG; // В 2-й элемент массива _АO (по IEC стандарту адрес будет 30003) пишем образ входов //------------------------------------------------------------------- // Пишем выходы + пишем выходной образ в таблицу //------------------------------------------------------------------- iRet = WriteDO_6063(2,"02",iMemory_AO[0],6000); iRet = WriteDO70_4242D4343D(2,"06",iMemory_AO[2],6000); //------------------------------------------------------------------- // Сохраняем что-нибудь в энергонезависимую память //------------------------------------------------------------------- if(OnChange(iMemory_AO[9], &iCounter_Old)) WriteNVRAM(0,iMemory_AO[9]); if(OnChange(iMemory_AO[11],&iTimeSP_Old)) WriteNVRAM(1,iMemory_AO[11]); if(OnChange(iMemory_AO[13],&iUser_Old)) WriteNVRAM(2,iMemory_AO[13]); } Вроде бы работает, но только в Demo примерах - существуют разные концепции проектирования прошивох на основании xserver шаблонов. Прошу покритиковать вышеприведенный подход: особенно на вызов функции, реализующую алгоритм управления тех. процессом в теле функции UserCount. ОГРОМНОЕ СПАСИБО !

 В processor status-swithes стоит: eeprom - transfer on bad ram; ниже Memory protected - no . На другом аналогичном процессоре тоже самое, запись не производится из-за такой же ошибки.

 Была такая же ситуация на 1747-L532 5/03 CPU + RSView32 по DH-485 были провалы даже с 150 direct тэгами, тоже самое было и на 1747-L553 5/05 CPU делали к каждому direc тэгу такой же memory, который заполнялся через derived и всю анимацию и окошки строили уже на memory тэгах, а то оператор пугался. На Ethernet конечно таких проблем нет, так что это просто не справляется сеть DH-485 перейдите на Ethernet ведь у L553 есть такая возможность.

 [quote:78e07774a7="gregorian"] Самопроизвольно стирается программа в контроллере. Батарейка исправна, пропадания питания не было. P.S. Про "проблемы с питанием" ответы не предлагать. Все предыдущие посты по этой теме я видел.[/quote:78e07774a7] Как все знакомо... :( буквально сегодня ночью, точно такая как описано выше проблема. Контроллер ContriolLogix 1756-L55 M24, rev. 15.3 прогрузил энергонезависимую память , настроил Load: On Corrupt Memory, Run. Батарейка исправна, температура в шкафу 30 градусов. Настает время, контроллер перестает выполнять задачу. Через Linx его не видно, светятся индикаторы "OK" и "RS 232" проект из Nonvolatile Memory не загрузился... :( Извечные вопросы : Почему такое происходит? Что делать, чтобы предупредить такие случаи?

 Так может Memory Module таки Too Small?

 Не могу произвести запись на модуль памяти, выдаёт такое сообщение "Memory Module Too Small, not Programable, or Write Protected". Что делать не знаю.

 [quote:51cd4a8825="oldDad"]Если вы только добавили несколько тэгов, то функциональность сети от этого нарушиться не могла.[/quote:51cd4a8825] К сожалению изменения делал не я, мне последствия исправлять. Добавилось 20% тегов и 2 аналоговых модуля. [quote:51cd4a8825="oldDad"]Смотрели ли вы лог ошибок? Не нарушен ли кабель и.т.п.? Что за тэги Вы добавили? Direct? На что они показывают? Попробуйте вернуть прежнюю конфигурацию или восстановить базу из Backup - проблема остаётся или исчезает? Если изменить тип вновь добавленных тэгов на тип Memory - проблема остаётся или исчезает?[/quote:51cd4a8825] Direct - это прямое подключение тегов RSView32 к контроллерным тегам, не через DDE или OPC. Там еще у каждого тега задается Class обновления, а класс определяет время. Теги Memory не исчезают. Если отключить один из RSView32, то второй начинает работать на ура, сейчас так и работают. Лог ошибок не смотрел, это я конечно зря. :(



Предыдущие результаты


Ещё результаты



Предыдущие результаты



Предыдущие результаты



Предыдущие результаты



Предыдущие результаты




  
RA & VDT GmbH


Облако тэгов
Automation ControlLogix MVI56-MCM Allen-Bradley Logix Windows FactoryTalk PanelView VersaView ControlTower GuardLogix Compact Software Studio Designer 100-E 100-D SMC-50 Energy Saver 1756-RMS-SC Spectrum Encompass Level Ethernet Redundancy Stratix

Яндекс цитирования

Smart Solutions VDT GmbH | Friedrich-List-Allee 38, D-41844 Wegberg-Wildenrath, Germany
Tel.: +49 2432 933 57 83 | e-Mail: office@vdt-solutions.de
Все товарные знаки и торговые марки являются собственностью их владельцев.
При использовании материалов сайта ссылка на данный сайт обязательна.
Открытие страницы: 0.178 секунды