Industry Online Support
Technical Forum
8/5/2011 8:39 AM | |
Posts: 139 Rating: (1) |
Thank you. |
8/11/2011 4:26 PM | |
Posts: 139 Rating: (1) |
Does somebody have other ideas? Will be glad for opinions. |
8/11/2011 4:34 PM | |
Joined: 1/28/2009 Last visit: 9/10/2024 Posts: 6849 Rating: (1365) |
Hi What about using a real Hardware setup? Regards |
8/12/2011 10:07 AM | |
Posts: 139 Rating: (1) |
Real hardware will be on my hands not earlier than some months later. So, it seems to me that I have to wait. |
9/9/2011 8:15 AM | |
Joined: 5/19/2010 Last visit: 3/3/2024 Posts: 6 Rating: (0) |
Please Use Simatic PDM with HART Modem |
Rizwan Tahir |
|
11/7/2011 11:38 AM | |
Posts: 139 Rating: (1) |
Hello, all. Now I have HART transmitter on my test bench. Unfortunately, my programm doesn't work. And I don't know why? I rewrite it with SFB52 and SFB53. It's whole listing I attache in archive and in my message below. After giving a command = 1 (READ PRIMARY VARIABLE) I have a reply that the answer is faulty without data (see "Faulty answer.jpg" in attached archive). Note that I use universal command for HART transmitter, so I think that it doesn't matter what kind of transmitter I use. Questions: 1. Does my code is right on the whole? 2. According to document "ET 200M distributed I/O device HART analog modules" part 8.3 code "70" in second status byte is meaning that "No error or no warning". But In the Reply Record (BufferIn) I see code meaning "faulty without data" (see "Faulty answer.jpg" in attached archive). 3. Where can I get examples for using SFB52/53 with hart modules? FUNCTION_BLOCK fbTestHartProt VAR Command : byte := B#16#FF; BusyOut : bool; BusyIn : bool; LADDR : dword; Index : int; Valid : bool; Done : bool; ErrorOut : bool; ErrorIn : bool; mStatusOut : array[1..4] of byte; StatusOut at mStatusOut : dword ; mStatusIn : array[1..4] of byte; StatusIn at mStatusIn : dword ; LenOut : int; LenIn : int; LenInRes : int; BufferOut : array[0..240] of byte; BufferIn : array[0..240] of byte; END_VAR // Forming a command according to document "ET 200M distributed I/O device // HART analog modules" part 7.2.4 BufferOut[0] := B#16#60; // in bits 0110_0000 BufferOut[1] := B#16#05; // Number of preamble butes BufferOut[2] := B#16#01; // Universal HART Command - READ PRIMARY VARIABLE // Calling SFB53 (WRREC) for writing a command WRREC.dbWRREC(REQ := (Command = 1) // Entered from VAR-table ,ID := 512 // Configurated adress of module ,INDEX := 80 // Command for Channel 0 ,LEN := 3 // Number of writing bytes ,RECORD := BufferOut // Pointer to command buffer ); Done := dbWRREC.DONE; // OUT: BOOL BusyOut := dbWRREC.BUSY; // OUT: BOOL ErrorOut := dbWRREC.ERROR; // OUT: BOOL StatusOut := dbWRREC.STATUS; // OUT: DWORD if not BusyOut and (Command = 1) then Command := B#16#02; end_if; // Calling SFB52 (RDREC) for reading a reply RDREC.dbRDREC(REQ := (Command = 2) // Setted after function WRREC is ended ,ID := 512 ,INDEX := 81 // Reply for Channel 0 ,MLEN := 7 // Number of reading bytes ,RECORD := BufferIn // Pointer to reply buffer ); Valid := DB52.VALID; // OUT: BOOL BusyIn := DB52.BUSY; // OUT: BOOL ErrorIn := DB52.ERROR; // OUT: BOOL StatusIn := DB52.STATUS; // OUT: DWORD LenInRes := DB52.LEN; // OUT: INT if not BusyIn and (Command = 2) then Command := B#16#FF; end_if; END_FUNCTION_BLOCK DATA_BLOCK dbTestHartProt fbTestHartProt BEGIN END_DATA_BLOCK DATA_BLOCK dbRDREC RDREC //DB of SFB52 BEGIN END_DATA_BLOCK DATA_BLOCK dbWRREC WRREC //DB of SFB53 BEGIN END_DATA_BLOCK ORGANIZATION_BLOCK OB1 VAR_TEMP info : ARRAY[0..19] OF BYTE; END_VAR ; END_ORGANIZATION_BLOCK ORGANIZATION_BLOCK OB35 VAR_TEMP info : ARRAY[0..19] OF BYTE; END_VAR fbTestHartProt.dbTestHartProt(); END_ORGANIZATION_BLOCK AttachmentHART.zip (204 Downloads) |
Follow us on