-
Филоненко Владислав
А куда запихивать всякие @,{,',x,p?
Я знаю что Integer это целое число, почему в книженции написано что байт
Текущее НЕТТО - передается типом Integer
А например
Биты состояния передаются типом Byte
Код АЦП передается типом word.
На что это влияет?
-
Пользователь
Найдите в строке где конкретно передается вес. Из байтов в 2-х и 4-х Можно преобразовать с помощью функций byte_TO_WORD,byte_TO_DWROD, shr,shl
-
Итак, в очередной раз мучая прибор дошел до такого этапа:
Подключил прибор напрямую к компу по rs232.
Параллельно прибор связан с контроллером по Rs 485.
Запускаю программу которую я выкладывал выше, где можно состовлять пакеты на компьютере и отправлять в прибор получая ответ.
Выяснил, что при отправке такого запроса:
FF 21 20 2E 32 E2 03
Я получаю ответ с нужным весом:
+FF 20 21 2E 32 10 00 00 2E 00 10 FC 04 00 00 00 34 03
2E - в данном ответе и есть вес в 16ричном виде без точки. Тоесть вес на весах 4.6 кг.
FF Это у нас SOH, ибо в мурзилке SOH - 255=> ff
FC это у нас ETX,(Получается 255-3)
Что после FC - я не знаю)
Итак, в Кодесисе я составляю запрос :
SetByte(0,'$ff$21$20$2E$32$e2$03',7);
И замечаю странную особенность:
При запуске программы в контроллере, программа проверки test485l начинает сама отвечать на этот запрос)
Тоесть начинают отображаться нужный вес.
Получается что запрос правильный и прибор на него отвечат.
Теперь самое интересное, программа отправлять то отправляет запрос, а вот командой GetByte получается одну ересь вида
'яяяяяяяя$01яяяяяяяяя$01p'
Почему программа виндовыми способами нормально может получить данные на запрос, а я в кодесисе немогу?((
-
1. FC 04 00 00 00 34 03 Очень напоминает ModBus - пачку, ничего лишнего не подключали?
2. В UNM правильно настроены частота и число битов посылки? Очень похоже, что частота в UNM сильно завышена.
3. 485 не мешает приёму - он точно в режим приёма переводится?
-
1. Даже при подключении только лишь ВЕСОВ к компьютеру - выводится эта строчка.
Тоесть отключая контроллер вообще, проверяя свзяь с ВЕСАМИ через rs232 + PC я получаю такой ответ.
2. Вроде все правильно
9600
No parity
8 bits
One stop bit
RS485
ASCII
0
No
3. Получается что у могу отправить через контроллер запрос по rs485 в ВЕСЫ, а получить на компьютере но уже по rs232. Осталось получить по rs485 обратно в контроллер.
-
Выложите проектик, может очепятка где?
-
PLC 100 R.M.
Target-файлы 2.05
Binary VERSION 2.02.8
Последний раз редактировалось приборист; 04.01.2010 в 13:45.
-
1. LockDevice(0); надо делать 1 раз, а не каждый цикл ПЛК.
2. А вот считывать ответ - как можно чаще, а не раз в 10 мс. А то посылаете раз в 30 мс, читаете по 1 символу раз в 10 мс. Что тут можно получить с порта?
3.
Процедура считывания должна происходить до исчерпания символов в буфере или до нахождения ликв. пачки
p:=GetByte(0);
while (p<>0) do
p:=GetByte(0);
Вот тут должна быть проверка на наличие символа
IF p<>0 then
c:=RBDATA_TO_STRING(p);
А вот тут должна находится машина состояний для поиска символа начала, складывания символов в буфер до прихода символа конца или
превышения размера буфера, а после проверка CRC и только потом считывание значения (на забываем проверить код команды, вдруг не та команда!)
all_str:=CONCAT(all_str,c);
END_IF
END_WHILE
Надеюсь поможет
-
1. LockDevice убрал, он пока что ненужен. Подхватывает и так пока один.
2. Поставил отсылку раз 50 мс, прием раз в 3 мс.
3. Сделал так как описали. Пока не делал машину для поиска символов, так как не знаю что искать)) ДУмаю надо расшифровать данные приходящие из прибора - тогда и будем клепать поисковик)
Итак, кажется что-то уже получается, ибо ответы приходят стандартизированные, и строка повторяется.
При весе 0 кг:
all_str='!.2$10$10ь$1C$02$03!.2$10$10ь$1C$02$03!.2 $10'....Ну и далее также.
Я так понимаю
!.2$10$10ь$1C$02$03 - и есть сам ответ
При весе 4.6 кг:
all_str='!.2$10.$10ь$044$03!.2$10.$10ь$044$03!.2$1 0.$10ь'.....
!.2$10.$10ь$044$03 - это ответ.
При весе 9.6 кг:
all_str='!.2$10'$10ь$04z$03!.2$10'$10ь$04z$03!.2$1 0'$10ь'.......
!.2$10'$10ь$04z$03 - это ответ.
А теперь непонятное мне:
Что за мягкий знак всегда выскакивает? $10ь
Какой таблицой пользоваться для рассшифровки всего этого?
-
Просто анализируйте код в 16-ти ричной форме. И вместо string используте Array of BYTE - сразу всё станет понятно.
Ваши права
- Вы не можете создавать новые темы
- Вы не можете отвечать в темах
- Вы не можете прикреплять вложения
- Вы не можете редактировать свои сообщения
-
Правила форума