Страница 1 из 1

Ещё один вопрос про COM порт

СообщениеДобавлено: 24.12.2007 19:55:47
Alexander
Вот и у меня вопрос по ком порту возник. Даже переведённая дока
на synaser пока не вполне помогает. И тк вижу, что есть знатоки
вопроса всё же задам его.

Есть хитрый могучий мультиметр (не мой), который имеет rs232
интерфейс. У него есть программа под Вин с кнопочками и стрелками.
В общем интерфейс ужасный, для конвеера непригодный. И
требования к этой с(т)ранной проге в районе PIII.

Хочу создать минимальную консольную прогу под Линукс, которая
будет просто выдавать его показания на стд вывод.

Ситуация осложнена: прибор не мой и доступ к нему ограничен
по времени. А себе такой покупать пока ни к чему и дорого.

Добрый человек поделился протоколом, вот он:

Код: Выделить всё
The RS-232 protocol :
1. Communication Type      : RS-232C
2. Communication protocol :
             A : Baud Rate          :  9600 bps
             B : Data length        :   8 bits
             C : Parity check       :   None
             D : Stop bit              :   1 bit
3.   Data format : The data format is ASCII code.
A. PC sends a command to DMM for requesting to read as follow :

|1    |2    |3                      |4    |5    |     |     |     |
|                 |     |     |     |     |     |     |           |
|     |                                   |                       |
|     |     |                                   |                 |
|        |        |        |        |        |        |        |
|00H     |4V      |4V      |4V      |40mV    |400mV   |400mV   |
|(auto)  |        |        |        |        |        |        |
|01H     |40V     |40V     |40V     |400mV   |        |        |
|(auto)  |        |        |        |        |        |        |
|02H     |400V    |400V    |400V    |        |        |        |
|(auto)  |        |        |        |        |        |        |
|03H     |1000V   |750V    |750V    |        |        |        |
|(auto)  |        |        |        |        |        |        |
|80H     |4V      |4V      |4V      |40mV    |400mV   |400mV   |
|(manual)|        |        |        |        |        |        |
|81H     |40V     |40V     |40V     |400mV   |        |        |
|(manual)|        |        |        |        |        |        |
|82H     |400V    |400V    |400V    |        |        |        |
|(manual)|        |        |        |        |        |        |
|83H     |1000V   |750V    |750V    |        |        |        |
|(manual)|        |        |        |        |        |        |



|        |  DC mA |   AC mA| (AC+DC)|    DC A|    AC A| (AC+DC)|
|        |        |        |        |        |        |        |
|        |        |        |mA      |        |        |A       |
|00H     |40mA    |40mA    |40mA    |4A      |4A      |4A      |
|(auto)  |        |        |        |        |        |        |
|01H     |400mA   |400mA   |400mA   |10A     |10A     |10A     |
|(auto)  |        |        |        |        |        |        |
|80H     |40mA    |40mA    |40mA    |4A      |4A      |4A      |
|(manual)|        |        |        |        |        |        |
|81H     |400mA   |400mA   |400mA   |10A     |10A     |10A     |
|(manual)|        |        |        |        |        |        |






|         |  Ohm   | Low Ohm|   Cap  |    Hz  |   Diode|   Temp |
|00H      |400Ohm  |4kOhm   |4nF     |400Hz   |   Diode|    Temp|
|(auto)   |        |        |        |        |        |        |
|01H      |4kOhm   |40kOhm  |40nF    |4kHz    |        |        |
|(auto)   |        |        |        |        |        |        |
|02H      |40kOhm  |400kOhm |400nF   |40kHz   |        |        |
|(auto)   |        |        |        |        |        |        |
|03H      |400kOhm |4MOhm   |4(F     |400kHz  |        |        |
|(auto)   |        |        |        |        |        |        |
|04H      |4Mohm   |40MOhm  |40(F    |4MHz    |        |        |
|(auto)   |        |        |        |        |        |        |
|05H      |40Mohm  |        |400(F   |        |        |        |
|(auto)   |        |        |        |        |        |        |
|06H      |        |        |4mF     |        |        |        |
|(auto)   |        |        |        |        |        |        |
|07H      |        |        |10mF    |        |        |        |
|(auto)   |        |        |        |        |        |        |
|80H      |400Ohm  |4kOhm   |4nF     |400Hz   |   Diode|   Temp |
|(manual) |        |        |        |        |        |        |
|81H      |4kOhm   |40kOhm  |40nF    |4kHz    |        |        |
|(manual) |        |        |        |        |        |        |
|82H      |40kOhm  |400kOhm |400nF   |40kHz   |        |        |
|(manual) |        |        |        |        |        |        |
|83H      |400kOhm |4MOhm   |4(F     |400kHz  |        |        |
|(manual) |        |        |        |        |        |        |
|84H      |4Mohm   |40MOhm  |40(F    |4MHz    |        |        |
|(manual) |        |        |        |        |        |        |
|85H      |40Mohm  |        |400(F   |        |        |        |
|(manual) |        |        |        |        |        |        |
|86H      |        |        |4mF     |        |        |        |
|(manual) |        |        |        |        |        |        |
|87H      |        |        |10mF    |        |        |        |
|(manual) |        |        |        |        |        |        |




h. Reading of A/D Convert
|         |                       |
|00H      |NONE                   |
|01H      |POINT 1                |
|02H      |POINT 2                |
|04H      |POINT 3                |
|08H      |POINT 4                |

Remark : 4 . 0 . 0 . 0 . 0
                                            POINT 1
                                  POINT 2
                             POINT 3
                        POINT 4



2.UNIT CODE :

|CODE    |UNIT                  |CODE    |UNIT                    |
|00H     |NONE                  |0EH     |Delta                   |
|01H     |V                     |0FH     |Hz                      |
|02H     |                      |10H     |                        |
|        |mV                    |        |kHz                     |
|03H     |A                     |11H     |MHz                     |
|04H     |                    mA|12H     |                        |
|        |                      |        |deg.C                   |
|05H     |                    dB|13H     |                        |
|        |                      |        |deg.F                   |
|06H     |                   dBm|14H     |                        |
|        |                      |        |s                       |
|07H     |nF                    |15H     |ns                      |
|08H     |(F                    |16H     |(s                      |
|09H     |                      |17H     |ms                      |
|        |mF                    |        |                        |
|0AH     |Ohm                   |        |                        |
|0BH     |kOhm                  |        |                        |
|0CH     |MOhm                  |        |                        |
|0DH     |%                     |        |                        |




3.SUBFUNCTION CODE :

|CODE        |DATA                       |
|00H         |   NONE                    |
|01H         |   Input Reading           |
|02H         |   Freq.                   |
|03H         |   Period                  |
|04H         |   Duty Factor             |
|05H         |   Ambient Temperature     |
|06H         |   Time Stamp              |
|07H         |   Load                    |
|08H         |   Number (Store, Recall)  |
|09H         |   Store                   |
|0AH         |   Recall                  |
|0BH         |   Reset                   |
|0CH         |   Auto Hold               |
|0DH         |   Max                     |
|0EH         |   Min                     |
|0FH         |   Max-Min                 |
|10H         |   Peak Hold Max           |
|11H         |   Peak Hold Min           |
|12H         |   Peak Hold Max-Min       |
|13H         |   Set High �Indication�   |
|14H         |   Set Low �Indication�    |
|15H         |   High                    |
|16H         |   Low                     |
|17H         |   Delta                   |
|18H         |   %                       |
|19H         |   Ref                     |
|1AH         |   dBm                     |
|1BH         |   dB                      |
|1CH         |   Send                    |
|1DH         |   Setup �Indication�      |
|1EH         |   Set Beeper �Indication� |






|CODE        |DATA                       |
|1FH         |   Set Auto Power off      |
|            |�Indication�               |
|20H         |   Set Back Light          |
|            |�Indication�               |
|21H         |   Set Hazard �Indication� |
|22H         |   Set Line Frequency      |
|            |�Indication�               |
|23H         |   Set dBm Load            |
|            |�Indication�               |
|24H         |   Set Reset �Indication�  |
|25H         |                           |
|26H         |   Probe �Indication�      |
|27H         |   Error �Indication�      |
|28H         |   Fuse �Indication�       |


Checksum:
    The last  byte is the SUM of every byte  in  the  received  data  format
    except
    Checksum itself, you can use the Checksum (using the  last  tow  digits)
    to check
    the data receiving from DMM is correctly or not.

Example for Checksum :
55+55+0+36+41+50+50+41+33+30+35+20+53+61+6E+64+72+61+20+20+30+2E+30+30+2E+3
    0+36+1+0+0+0+1+0+80+1+0+0+8+1+1+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0    =
    732

   Checksum = 32

СообщениеДобавлено: 24.12.2007 20:02:03
Alexander
Протокол есть в более приличном виде в док файле.

СообщениеДобавлено: 24.12.2007 20:03:12
ev
а в чем вопрос то?

СообщениеДобавлено: 24.12.2007 20:30:30
Alexander
Пример в синасере показан для модема. А этот, как я понял
из описания протокола блоками передаёт. Плюс всякие задержки.
То есть я раньше вообще не работал с ком портами. Не знаю с чего
начать и чем кончить. Разве что команду инициализации для
порта

Alexander писал(а):2. Communication protocol :
             A : Baud Rate          :  9600 bps
             B : Data length        :   8 bits
             C : Parity check       :   None
             D : Stop bit              :   1 bit


понял как писать.

Свой модем синасером немножко мучал, но это же не модем.
Вопрос к сожалению широкий.

СообщениеДобавлено: 24.12.2007 20:37:00
Alexander
В общем, какая должна быть последовательность действий ?

СообщениеДобавлено: 25.12.2007 11:42:26
swa1
Посмотри для общего развития еще пример с использованием synaser
http://freepascal.ru/article//raznoe/20070808002100/
B вот еще по портам:
http://www.pcports.ru/
Ну и естественно книга:
Сопряжение ПК с внешними устройствами (Пей Ан)
http://www.filehoster.ru/files/k2471

СообщениеДобавлено: 25.12.2007 11:44:01
Attid
нихера не понял если честно =)
по доке видно что он отвечать должен, а что ему говорить, я не понял
в общем русским хацкерам дока не писанна, я бы его монитором проверил (есть мониторы ком-портов шароварные, работают неделю) ну и дальше

Код: Выделить всё
  ser:=TBlockSerial.Create;
  ser.Connect('COM3');
  // потом по идеии надо послать опрос, но какой чет не понял
  ser.SendString(char(26H))
  // or
  ser.SendByte(26H)
  //иногда труется потверждать посылку командой перевода строки
  ser.SendByte(13)
  ser.SendByte(10)
  // после это считываем, можно попробывать сразу считать
  str :=   ser.Recvstring(100)
//  соотвественно по примеру получишь
//#55#55#0#36#41#50#50#41#33#30#35#20#53#61#6E#64#72#61#20#20#30#2E#30#30#2E#3
// или получаешь по байтику
for i := 0 to 27
  byte :=    str :=   ser.Recvbyte(100)
//проверяешь чексум и пробуешь по таблице понять что у тебя пришло  //разбирая по байтику =)
  case ord(str[vNum]) of  . . . .

СообщениеДобавлено: 25.12.2007 19:34:14
ev
да, дока какая-то непонятная
по идее должно быть все просто - посылаешь команду и ждешь ответа

SendString - по идее кокраз завершает 10+13
хотя могу ошибаться, надо смотреть исходники

в идеале тебе бы приборчик этот на часик взять - и тогда довольно быстро подберешь что именно посылать и что именно отправлять

СообщениеДобавлено: 26.12.2007 18:41:01
swa1
ev писал(а): что именно посылать и что именно отправлять

Запускаешь этот прибор и программу под него.
Запускаешь Advanced Serial Port Monitor
http://aggsoft.ru/serial-port-monitor.htm
Программа, которая, пригодится Вам как для наблюдения за передачей данных другими приложениями, так и непосредственно, для отправки и приема данных через последовательный порт (RS232) Вашего компьютера.

СообщениеДобавлено: 26.12.2007 19:00:46
Alexander
Спасибо за ваши советы ! Действительно лучше было бы
делать всё при наличии прибора.

Вот .doc файл с протоколом. Извиняюсь что не сделал это сразу.
Там сильно нагляднее.

http://www.aralni.narod.ru/Protocol.doc

Основные идеи понял.

СообщениеДобавлено: 27.12.2007 13:43:16
Attid
в доке все вроде понятно, мы в тебя верим, ты разбершься =)