У меня небыло опыта работы СПК по RS-232. Но вот, появилась необходимость чтения регистров из теплосчетчика Взлет, по этому интерфейсу.
У меня уже была работающая программа опроса этого счетчика, использующая библиотеку ModulsOwenLib, но для RS-485-го порта.
Решил пойти простым путем:
1. Переключить 2-й порт СПК в режим работы RS-232 через его меню. Применил, перезагрузился.
2. Заменил переменные ComConn.Port_Mode:=2->0 и ComConn.Port_ModeOn:=false->true
3. Блоки UniRead не трогал. Вроде все должно остаться как есть.
Вроде ничего не изменил, кроме типа интерфейса, а не работает. Индикатор порта 2 мигает. Может я что-то упустил?
И еще. Вроде как можно подключиться через гипертерминал и послушать порт СПК. Подключался, вводил настройки частоты, а в окне пусто... Может снова что-то не так делаю?
Ниже привожу кусок кода опроса. Надеюсь все будет понятно.
Код:// Открытие порта 1 Opn_port_1: ComConn; // режим работы порта 1 mode_com1: BYTE; // Блок чтения расхода со взлета 1 Read_Vzlet_1: UniRead_Input_Regs; // UniRead_Input_Regs это то же UniRead, только использует команду чтения входных регистров (0x04 вместо 0x03) (особенности размещения данных в вычислителе Взлет) //!!! Для теста, в самом деле, я использовал порт 2 !!! //Работаем с портом 1 //открываем порт 1 IF NOT Opn_port_1.Done THEN Opn_port_1( enable:=TRUE , PortNum:=3 , PortBaudrate:=9600 , PortParity:=0 , PortStopBits:=1 , PortByteSize:=8 , Port_Mode:=0 , Port_ModeOn:=TRUE , Port_CloseOn:= , Handle=> , Done=> , ErrCode=> ); END_IF CASE mode_com1 OF 0: IF Opn_port_1.Done THEN mode_com1:=mode_com1+1; Read_Vzlet_1.Enabl:=TRUE; END_IF 1: IF Read_Vzlet_1.done THEN Read_Vzlet_1.Enabl:=FALSE; Read_Vzlet_2.Enabl:=TRUE; mode_com1:=mode_com1+1; END_IF 2: IF Read_Vzlet_2.done THEN Read_Vzlet_2.Enabl:=FALSE; Read_Sum_Vzlet_1.Enabl:=TRUE; mode_com1:=mode_com1+1; END_IF 3: IF Read_Sum_Vzlet_1.done THEN Read_Sum_Vzlet_1.Enabl:=FALSE; Read_Sum_Vzlet_2.Enabl:=TRUE; mode_com1:=mode_com1+1; END_IF 4: IF Read_Sum_Vzlet_2.done THEN Read_Sum_Vzlet_2.Enabl:=FALSE; mode_com1:=mode_com1+1; END_IF ELSE mode_com1:=0; END_CASE Read_Vzlet_1( Handle:=Opn_port_1.Handle , Enabl:= , Modd:= , Addr:=33(**) , RegAddr:=49242 , TimeOut:=T#300MS , ErCL:= , VarAdr:=ADR(Tube_Discharge[1].Value) , VarType:=2 , //если не пойдет - поставить тип 2 wErrCode=>Tube_Discharge[1].Error , done=> ); Read_Vzlet_2( Handle:=Opn_port_1.Handle , Enabl:= , Modd:= , Addr:=33(**) , RegAddr:=49244 , TimeOut:=T#300MS , ErCL:= , VarAdr:=ADR(Tube_Discharge[2].Value) , VarType:=2 , wErrCode=>Tube_Discharge[2].Error , done=> ); //и т.д




Ответить с цитированием