Есть необходимость сделать реализацию протокола Modbus на языке Pascal для CPU188. Если кто-нибудь таким занимался - пожалуйста откликнитесь.
Почему именно Pascal ?
Потому что во-1, уже есть 2 проекта, написанные на Паскале, а этот проект является продолжением одного из них, а во-2, с Паскалем я знаком гораздо лучше, чем с Си. :) Но если вы делали что-то подобное на Си - это не помеха, Си я тоже знаю. Хотелось бы обсудить некоторые моменты в реализации этого протокола.
Первоначально опубликовано Phenix
.. Хотелось бы обсудить некоторые моменты в реализации этого протокола.
А какие именно? Немного писал, правда давненько...
Значит дело вобщем то в самом MODBUS-е, а не столько в языке ? А что, предыдущие проекты не работали с протоколом ?
Ну вобщем то, можно подогнать описание протокола. А какая у вас версия используется - MODBUS-ASCII или MODBUS-RTU ?
С уважением, SAN
Дело в самом протоколе. Предыдущим проектам он просто был не нужен, а теперь понадобился.
Первый вопрос: как передавать данные различных типов? Если принять за основу описание протокола, которое у меня есть, там говорится, что на каждый регистр отводится 2 байта. Но OPC-сервер, работающий у заказчика, поддерживает передачу по протоколу не только 2-байтовых целых величин. Возникает логичный вопрос: как передавать данные других типов? Если я правильно понял, то на значение в ответе может отводится не обязательно 2 байта, а столько, сколько занимает регистр (для длинных целых - 4, для вещественных - 8, для строковых - столько, сколько символов в строке). Или я не правильно представляю себе работу с другими типами данных?
Второй вопрос. Как передавать данные различных типов в одном запросе (функции группового чтения и записи)? Или устройство, которое получает ответ, само будет разбираться, сколько байт соответствует каждому регистру?
регистры всегда 2 байта. переменные могут занимать 1, 2, 4 регистров. просто вычитываете их как несколько регистров и разбираете, что же там есть. тоже самое с записью таких переменных - пишете нужные байты в несколько регистров.
регистры - это всего лишь типа координатной сетки для адресации и размера данных.
Уточните пожалуйста: обязательно 1,2,4 или может быть, скажем, 3 или 6? А также как быть, если захочется завести строку длиной 50 байт, например, под какое-нибудь имя устройства? Она займет 25 регистров?
Первоначально опубликовано Phenix
Уточните пожалуйста: обязательно 1,2,4 или может быть, скажем, 3 или 6? А также как быть, если захочется завести строку длиной 50 байт, например, под какое-нибудь имя устройства? Она займет 25 регистров?
Переменная может быть и 3 и 6 и байтов и регистров. Строка в 50 байт действительно займет 25 регистров. Читаете 25 регистров за один или за несколько приемов, из полученного содержимого регистров составляете строку. Ну или, наоборот, пишете.
Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме