I'm doing an application that uses the Modbus ASCII protocol (RS485).
A client will communicate with a PLC service that will talk to the PLC through the serial port.
I'm not sure whether there is any limitation about sending one command each time or if I need to wait for the response to come back from the PLC before sending the next command.
That will affect the architecture of the PLC service because if only one instruction can be processed at a time the design of my class will support one async method call and will expose IsBusy property. Otherwise I'll have to support concurrent method calls and pass in the stateId for each call (I'll be using EAP: Event-based Asynchronous pattern)
Thanks in advance.
The protocol is synchr. like comli so yes you can only send one command and must wait for a reply - I also doubled checked some old code just to be sure, been ages...
You can also read more about the protocol here
The Modbus protocol handles one command at a time, so wait until you have a response and then send the next command.
Related
How do I get a caller identity from sim900 using pic16f877A microcontroller meanwhile, I can make call, send SMS and answer calls but I want to be able to compare an incoming call identity with a predefined on in my program. My compiler if Mikroc. Thanks
You need to give AT+CLIP=1\r command to enable additional caller information.
Once you issue this command, any incoming call will be notified in the following format,
RING
+CLIP:+911234567890
Now just extract the number after +CLIP: to compare against pre-stored numbers.
I found an interesting documeent about realisation of eCall (Emergency Call) in EU: http://www.heero-pilot.eu/ressource/static/files/heero_wp3_d3-3_final-operational-results_v2.3_final.pdf
Germany somehow did it on Asterisk. Whatever, I don't understand how they process MSD (minimal set of data) using Asterisk. In the call session for the first step caller sends DTMF signals to send MSD packet. As I understood, Asterisk must redirect this call to In-band modem on COM port or to another machine with such modem. After PSAP successfully received MSD for the second step caller switches to voice channel that must be redirected to some sip-client of PSAP operator. How they do it? Is there a way to receive DTMF signals w/o modem by using internal capabilities of Asterisk? How the same call to redirect to another SIP on the same time?
I suspect that you are referring to emergency services, rendered by emergency dialers - eg. for senior citizens. These are fairly common where I live, and I've created in the past a solution to handle the calls from these, based on Asterisk. The solution involved a way to intercept the various DTMF signals that the device generates, then making Asterisk do stuff with it. Back then, I used Asterisk 1.6 and it is pain staking, because I had to do everything from within a MeetMe bridge, and interact with Manager alot. Today, doing the same with Asterisk 12/13 and ARI is a breeze. Just remember one thing, most of these dialers will utilize the A,B,C,D DTMF signals, which are somewhat unknown to most people - they exist and Asterisk is very much capable of handling those.
The only snag is - make sure you are connected via a PRI, as most SIP carriers aren't aware of these signals, and their SIP trunks won't support this type of signalling.
Asterisk can send dtmf(natively,via command SendDTMF in dialplan or D option in Dial command) or any other sound(custom c/c++ app needed)
No, you not need special modem.
However there are no realisation acordinly to that document, you need do that yourself or hire someone
I was wondering if it is possible to send via GSM protocol and appropriate AT commands, few data through a simple GSM call (witout using data traffic).
For example my system is a PIC + GSM Module and it monitors and processes a string of data.
When the user wishes, he makes a voice call in order to interacts with the GSM module via DTMF commands for example via an APP.
My dubt is if the GSM module is able to send the data to thesmartphone in order to monitor the status of the system. The module is a Quectel M95.
During some investigation, I saw that the module can send USSD codes but I don't know if it's possible to customize the USSD and read it from the smartphone as I wish.
Or maybe is it possible to use the FAX for data exchange?
Thanks everybody in advance
Marco
There are a couple of alternatives if you want to avoid using data traffic. But they all require either a connection to a service that is capable of receiving SMS's for example Twilio. Or you can of course have a GSM Module connected to your server which could do the receiving.
You could then send your data and requests for data within an standard SMS body. Or alternatively you could send binary SMS's where you are not limited to the 7 bit character set.
USSD would only work if you have a USSD service provider (I think Twilio has this now). Because the USSD service must initiate a USSD session for your target GSM Module to respond to. USSD code sending for GSM Modules is operator specific and therefore you are limited to what they have implemented (usually for prepaid users and the topping up of accounts).
I have a GSM ModeM connected to a serial port, and I use it so send SMS upon certain events.
Since it is not Plug-and-Play, I am confused as to how I'll detect its connection status. Win APIs like GetCommState will obviously not work.
I could periodically send packets of data and check whether the data is being consumed or not, but I'm wary about the risks of polling over performance and clogging up the buffers which might be in use.
So, is there any other method, or some interrupt based thing, which I could use to check whether is still connected, via a serial port, to my system?
I'd be grateful for any help on this.
Thanks.
From Windows 7 onwards, use Windows Mobile Broadband API to get information about a GSM modem.
Serial ports are very primitive communication devices, they date from the very early days of computing. It is what you plugged your ASR-33 teletype into to start banging in your Fortran program. The only reason they are still around is because they are simple, hardware vendors like them because they don't have to spend money developing and supporting a custom api to use their device.
Still, even back in the sixties did a computer have a need to find out if a teletype was attached. Which is done through the hardware handshake signals. The DSR signal, Data Set Ready, is turned on by the device when it is powered up. If you use the .NET SerialPort class then you can check that signal with the SerialPort.DsrHolding property. If you use the winapi then use GetCommModemStatus(), MS_DSR_ON flag.
That still only tells you that some device is attached. If you want to find out that it is the modem that you wrote your program for then you can interrogate it with AT commands, a protocol that's specific to modems. No vendor implements this exactly the same way but you can usually count on an identification from the modem with the ATI command. Check the programming manual for the modem for details.
I have an SMS Appliaction, which receives the messages through GPS Modem and revert back through GPS Modem. The Modem is using COM1.
Now, i need two more appliactions which can send messages through the same GPS Modem. I tried making a webservice which can access the COM1 to send data, but when i try to connect through webService, it throw an error saying, 'COM1 is already occupied, Access denied.'.
Can anybody help me to connect through the modem in above scenario.
Khushi
You have to make sure only 1 connection is made.
Easiest (and most low-tech, but probably most flexible) is having a script checking a directory for files regularly and sending the messages in the file to the modem. The webservice then just writes a file for every SMS it received. (this can be trivially extended to accept emails, web requests, etc, ...)
A bit more sophistacated is to start a thread to do the communication and push the messages on a FIFO like datastructure provided by your favorite programming platform. A BlockinQueue would be perfect. The thread reads the messages from the queue and sends them to the GSM modem.
If you want to have confirmation the SMS is sent (which in my experience does not mean anything and certainly not that the recipient actually received it) you'll need to find a way to return feedback to the caller. This can be as simple a setting a boolean flag in the message to sending another message or performing a callback. But I would not bother. I had situations where 30% of messages dissapeared even when we had confirmation of the message central.